Rubyist Magazine 第 3 号をお届けする。
今号では新たな連載も増え、本誌もそれなりに雑誌らしい体裁を とりつつあるように感じられる。もっとも、先日の関西オープンソース 2004 (こちらのレポートも、Ruby の会 Wiki での記事をベースに今号に 掲載されている) でも触れたとおり、編集体制の方は 残念ながら十分に安定して作業できる余裕がなく、 一部の人間にしわ寄せが来ているのが正直なところである。
ところで、最近気になっている言葉がある。 「Ruby らしさ」という言葉だ。この言葉について、 いくつかの角度から考えてみたい。
「Ruby らしさ」ということが気になったのは、 Ruby 1.8.0 のリリース前のころだろうか。 Ruby は 1.8 系から、 まつもとさん以外の方が作られたライブラリを 積極的に標準添付するようになった。 このため、多くのライブラリが別途インストールする必要なく 使えるようになり、利便性は非常に高まったのだが、 いくつかのライブラリに関しては「Ruby らしくない」 という評価を聞いた。具体的には、メソッドの名前付けや挙動が Ruby の標準的なクラスのそれとずれがある、といった指摘である。 こうなると、Ruby を使う上での直感が効きにくくなるため、 プログラミングにも影響を及ぼす。 しかし、このような「Ruby らしさ」は明文化されていないため、 共有がしづらい。そのため、新規で作られるライブラリが Ruby らしくなることはあまり期待できない。しかし、 Ruby の標準になるライブラリはこのように Ruby のほかのライブラリとは 独立した作者によって独立に作られることが多いので、 これでは「Ruby らしさ」が徐々に失われていく危険性がある。
これとは少し異なるが、 「Ruby らしさ」という言葉は、最近出版された ‘「プログラミングのための線形代数」’でも使われていた。 こちらの方は、 「Ruby らしくない」という言葉が、 他の言語(特に非オブジェクト指向言語)で書くのと同じような書き方をする、 といった意味で使われていた。
しかし、よくよく考えてみると、このような目的で「Ruby らしい」 プログラムを書くことは、どの程度問題があるのだろうか。 そして、「Ruby らしくない」 Ruby のプログラムは、 どれくらい分かりやすくなるのだろうか。 そして、こういった「Ruby らしい」書き方は、 どういった内容が失われたり、捻じ曲げられたり してしまうのだろうか。
Ruby を目標としていない目的で Ruby で書く際、 「Ruby らしく」書けない、ということは、 「Ruby らしさ」に何かしらの問題があることを暗示しているような気がしてならない。 それとも、Ruby らしく書かないというのは、 数日ないし数回の授業分の講義期間といった短期的にはともかく、 中・長期的には特に効果がない戦略であり、 通常は Ruby らしく書いたとしても 何ら問題がないのだろうか。
似たような話題で、先日まつもとさんの日記上で行われた議論では、 Ruby と HSP との比較において、 Ruby よりも HSP の方が文法要素がシンプルであるため、 習得しやすいのではないか、という意見があった。 これは要するに「Scheme は構文は S 式しかなく、仕様自体も 数十ページでおさまる程度しかないので習得しやすい」 といった意見と同型のものかと思われる。 ここでは HSP の「シンプル」な文法要素についてと Scheme の それを比較することはしないが、 「Ruby らしさ」の追求が何かしらの敷居をもたらすのは あまり歓迎できる事態ではない。この敷居は本質的なものであり、 「Ruby らしさ」は習得にコストがかかるものなのだろうか。 それとも、習得のコストは何かしらの形で軽減が可能であり、 そのような道を模索するべきなのだろうか。
さらに、Ruby Conference 2004 での Nathaniel さんの 発表も思い出してしまう。彼は発表の中で、現在の Test::Unit が 「Ruby らしくない」といって批判し、より「Ruby らしく」した test/unit2 を開発中だそうだ。そのサンプルの一部は 発表の中で公表されていたが、クラスではなくブロックを多用する 形に大きく変わっていた。これはつまり、Ruby での プログラミングは、挙動によって多数のクラスを使い分ける ようなものではなく、挙動の違いをブロックで指定できるように なる、ということかもしれない。これは OOP としては 若干特殊な戦略かもしれない。 とはいえ、これはこれで 「Ruby でできる (Ruby 以外の言語ではできないか、しづらい) こと」と 「Ruby らしいこと」を混同しかねないのではないか、という懸念もある。 実際、サンプルコードには違和感があった。 この問題は上に書いた標準添付の問題に結びつくものでもありそうだ。
あなたの書いている Ruby のプログラムは「Ruby らしい」プログラムだろうか。 それとも「Ruby らしくない」プログラムだろうか。 その「Ruby らしさ」あるいは「Ruby らしくなさ」は、 あなたのプログラムにどのような影響をもたらしているのだろうか。 あなたのプログラミングの何を促進し、何を阻害しているのだろうか。 そしてあなたのプログラムは、 「Ruby らしさ」の何を享受し、何を排斥しているのだろうか。 「Ruby らしさ」、そして Ruby にどのような影響をもたらしているのだろうか。
(るびま編集長 高橋征義)