Rubyに魔法は要らない
2010年からRuby on Railsのコアチームに加わった、若手ホープの1人、Jose Valimさんが新著「Crafting Rails Applications: Expert Practices for Everyday Rails Development」のベータ版を出しました。電子書籍らしい話ですが、オライリーなど米国で電子書籍販売をしているサイトは、未完成の本も読める状態で売ったりすることが増えましたね。Crafting Rails Applicationsは、ePub、mobi、PDFの電子版(DRMなし)のみなら21ドル、紙の本とセットで41ドルです。
新著のリリースにあたって、ブログ上でこの本に込めた思いを語っています。Joseさんの問題意識は「今やわれわれは、(Ruby on Railsにまつわる)“魔法”神話を打ち破るべきときが来たのではないか?」というものです。
Railsはコンベンションに従えば、魔法のように(magicallyと、automaticallyを混ぜた造語として、automagicallyと言いますね)、データベースのカラムが追加されたり、1対N、N対Nなどのリレーションを扱うためのメソッドが生成されたりして、とても簡単に扱うことができます。ある種の魔法のように感じられるメタプログラミングを多様したテクニックは、一方で物事の本当のところを理解しないと気が済まないプログラマという人々の多くを、むずむずした気にさせている面があるのかもしれません。Joseさん自身はそうだったと言います。そして、Railsコミュニティ外部の人々にRailsは「魔法が多く使われすぎている」と言われたことに、驚いたといいます。
「魔法」は神話に過ぎない。ちょうど、「Railsは大規模にスケールしない」というのが神話で、それを否定するためにコミュニティが戦ったように、今や「Railsは魔法がいっぱい」という神話についても、これを覆す時が来たというのです。
Railsの魔法という神話は、元はといえばRailsコミュニティが広げてしまったものです。だから、Rails3が登場した今こそ魔法と思われているRailsの中身をより深く理解して、そのことによって、より明快で効率が良いコードが書けるようになり、生産性を上げるべきだというのがJoseの主張です。Railsのレンダリングのスタックがどう動いているのかが分かれば、DBからテンプレートを読み込んで適用するというカスタマイズを行ったり、どうやればSinatraアプリをRailsアプリに混ぜることができるのかも分かる、ということです。ジェネレータやレスポンダ、国際化、ルーティングの仕組みを理解して改変することで、複雑なプロジェクトでの生産性を上げることができるといいます。
Rails3はモジュラリティを高めて書き直したもので、Rails2に比べて構造が綺麗に整理されているという話です。あまり汚いことをやらなくてもカスタマイズができるようになったのだし、ちゃんと中身も理解して使いこなしましょう、ということですよね。
Joseさんのブログから一節を引用しましょう。
「私のゴールは、Crafting Rails ApplicationsによってRailsコミュニティの知識欲が刺激されること、“魔法”という言葉が、Railsや、Railsのエコシステムのいかなる部分を説明するにも十分でなくなることです」
ところで魔法といえば、先日「Rubyの魔術」というレポート記事を書きました。Rails内部でも多様されているメタプログラミングの話ですね。で、この講演を行ったPaolo Perrotta氏の著書の一節に「メタプログラミングなどというものは存在しない。すべてはただのプログラミングじゃ」というのがあります。魔法のように思えるのはただ分かってないだけ。なのかもしれませんよね。