Ruby界にとって大きなマイルストーン

秒読み段階の「Ruby on Rails 3」登場の意味

2010/08/26

 Rubyと、それを取り巻く世界が、まもなく1つの節目を迎えようとしている。

 2010年8月末現在、Rubyの処理系(CRubyやMRI=Matz's Ruby Interpreterと呼ばれるもの)、Rubyを一躍有名にしたWebフレームワーク「Ruby on Rails」、そしてRailsを始めとするフレームワークでのライブラリ管理を簡易化する「Bundler」などが、それぞれ一斉にマイルストーン・バージョンアップをしようとしている。Ruby 1.9.2、Ruby on Rails 3、Bundler 1.0の3つが、足並みを揃えて新時代の扉を開こうとしているのだ。

railsweb.png Ruby on Rails 3は8月24日にリリース候補の第2版が出ている
rubyweb.png 本家Rubyは8月18日に1.9系のバージョン1.9.2がリリース

 Rubyのバージョンは1.8系と1.9系に大きく分かれている。Ruby 1.9は、実際には2.0と名付けるべきだったとの声もあるほど、1.8系と比較して高速化や機能強化を果たしている。ただ、Ruby 1.9系の初の安定版であるバージョン1.9.1は2009年1月にリリースされてはいるものの、実戦投入という意味ではまだ1.8系が主流となっている。

 例えばRails利用という観点から見れば、95%以上が1.8系のRubyを使っているという調査がある。New Relicの調査によれば、Rails普及時にもっとも安定していたことから広まったバージョン1.8.6と、1.9系の新機能を1.8系にバックポートしたバージョン1.8.7が、Railsアプリの実に95%を占めているという。

piechart.png 2010年5月現在、デプロイされているRubyのバージョンの統計(出典:New Relic

 RubyとRailsは別物だ。密接に関連しているとはいえ、Rubyから見れば、Railsは1つのフレームワーク(ライブラリ)に過ぎない。一方、Railsユーザー、特にアスキー文字しか扱わない欧米人の中には「Ruby 1.9系は不要」とまで感じているユーザーもいるなど、両者の間には微妙な隔たりがある。こうしたことから、荒削りな“エッジ”が取り切れないRuby 1.9系への移行は進んでいなかったのが現状だ。

 それが、Rails2からRails3のメジャーバージョンアップで足並みを揃え、いよいよRuby本体も1.8から1.9への移行が始まる格好になると予想される。

モジュラリティが高まったRails3

 Rails3で何が変わるのだろうか? そもそも、Rails的なフレームワークがどんな言語でも一般化してしまっている今、Railsに新しさなどあるのだろうか?

 この問いに対して、「それでもRails3は数多くあるWeb開発フレームワークの中で再び頭ひとつ飛び出た存在になる」と指摘するのは、日本有数のRailsハッカーとして知られる松田明氏だ。

photo01.jpg フリーランスのRailsプログラマー・コンサルタントの松田明氏。株式会社groovesフェロー。訳書に『Head First Rails ―頭とからだで覚えるRailsの基本』(David Griffiths著、松田明監訳、児島修翻訳)。Rails3関連で、雑誌『WEB+DB PRESS Vol.58』の特集へ寄稿も。地域Rubyユーザーグループ、Aasakusa.rbの発起人

 Rails3でいちばん変わるのは、その構造だという。

 2008年12月末に、Rubyの2大WebフレームワークだったRailsとMerbの統合計画が発表されてから約1年半。実はRails3は「どちらかと言えばMerb進化系」(松田氏)と言えるアーキテクチャに書き直されているという。Merbの主要開発者であるYehuda Katz氏も、今ではRailsチームに加わっている。

 MerbはもともとRails2.0の時代に「より良いRails」として登場したという背景がある。Railsが密結合のフルスタックだったのに対して、Merbは部品のモジュラリティが高く、個別に好きなライブラリを自由に組みわせることができる良さがあった。小さな部品を組み合わせる柔軟性によってMerbは支持を集めた。

 一方、Merbは柔軟性と引き換えに、多数の部品(gems)の維持管理が複雑化するという隘路にはまっていった。「Merbには40個も50個もgemがあって、アップデートのたびに依存関係で壊れるというのが常態化していました。この意味ではMerbは失敗プロジェクトだったと言えるかもしれません」(松田氏)

 Rails3は、Merbの柔軟さを取り入れつつ問題点を克服したバージョンだという。例えばORMのActiveRecordを、Merb由来のDataMapperに置き換えるといったことができるようになる。gems管理の煩雑さも、システム全体ではなくRailsアプリ単位で管理できる「Bundler」のバージョン1.0.0の正式リリースで緩和されるという。

最新の技術トレンドにキャッチアップできる構造

 これは、進化の速いWeb関連技術、新実装の登場にキャッチアップするという点で大きな意味を持つことになりそうだ。Rails3ではWeb層に対するRack同様のインターフェイスとして、DB層で「Arel」が組み込まれている。Arelはコレクションに対して関係演算をメソッドチェーンとしてつなげていくことでクエリを組み立てられる内部DSLだ。現在“NoSQL”と呼ばれているRDBに変わる新しいストレージ実装が多数登場しているが、こうした新しいアーキテクチャへの移行が、Arelのような抽象化レイヤを挟むことでやりやすくなる。

 Rails3にはWebフレームワークに必要なモジュールがすべてバンドルされてリリースされるが、それは「あくまでも参照実装的な位置付け。もちろん、そのまま使っても十分に優れたものだが、自由にモジュールを入れ替えられる」(松田氏)のだという。「Railsはこれまで、あらかじめベストプラクティスとして敷かれた1本のレールに乗って開発すれば良いというフレームワークだった。このレールがRails3では1本ではなく、アプリケーションの数だけ存在し得ることになる」(松田氏)。

 Rails3では、ORM層だけでなく、コントローラやビュー、JavaScript、Generator API、テストフレームワークなど、各コンポーネントのインターフェイスがきちんと決められいて(APIに対してSPIと呼ぶこともある)、交換可能となっている。JavaScriptライブラリとしてRails標準だったPrototype.jsの代わりにjQueryを選んだり、テストフレームワークとしてならTest::Unitの代わりにRSpecやCucumberを選ぶといったことがやりやすくなる。

 つまり、ちょうどRackがWebのインターフェイスを標準化、抽象化したように、DB層などほかのモジュールについてもインターフェイスを定義することで、Railsはコアを中心に多くのライブラリがつながる構造となるのだという。

rails3.png Rails3ではコアとモジュールの間は各種インターフェイスが定義されていて、モジュール単位の交換がやりやすい構造になっているという

拡散した実装が、再びRails3で集結

 そもそもRailsの本質の1つは、レールに乗って開発することではなかったのだろうか? Railsとは何だったのだろうか。

 「Rails1.0で話題となった15分でブログを作るというデモンストレーションは、説得力があったし、あれは必要だったんだと思います。その本質は“write less code”(書くコードの量を減らせ、コーディング量は少ないほどいいという意味)。それがRailsのマグナカルタだったんだと思います。RailsのActionPackは、そうしたDHH(Rails創始者のDavid Heinemeier Hansson)のイズムを実現するための手段だったわけですが、今やイズムはすっかり浸透しました。Rails3は、言わばRails創始者のDHHの魂だけになったようなものです」

 Railsがバージョン2の時代には、MerbやSinatraなど、それぞれ理想の異なるフレームワークが登場した。Merbは柔軟性、Sinatraは「最小限のRackフレームワーク」というミニマリズムを体現したWeb開発フレームワークとして、それぞれ一定の支持層を得た。

 松田氏によれば、Rails3というのは、いったんMerbやSinatraに拡散したRubyフレームワークの世界が、再び“Railsの旗のもとに集結”しつつある姿なのだという。Railsが密結合の大きなフルスタックだった時代に、Sinatraのシンプルさは注目されたが、Rails3によってRailsはコアと、その周囲に集まるコンポーネントとなるため、Sinatraの存在意義は相対的に小さくなっていくだろうという。もともとRailsはRackやArelなど外部で生まれたプロジェクトを取り込みながら成長してきたが、Rails3は、こうしたエコシステム全体の結節点というべきマイルストーンとなるだろうという。

 Gitブームに乗るように急速に利用が拡大しているプロジェクトホスティングサービスの「GitHub」上では、さまざまな実験実装や、類似プラグインが日々同時多発的に開発されている。ある1つの目的を達成するために利用可能なプラグインは多数存在する。昨日までデファクトと見られていたものが新参に取って変わられるということがよく起こる。OSS利用者にある「何かをコミュニティへ還元したい、貢献したい」という気持ちと、より優れたアイデアやコードを披露することでコミュニティ内で認められたい、という気持ち。そうしたOSS本来のエートスで、GitHubは満たされている。Rails3の登場は、こうしたコミュニティの活力を最大限に活かせるアーキテクチャに移行した、と言えそうだ。

Rails3登場は、秒読み段階

 2010年8月26日現在、Rails3はリリース候補の第2版。正式版登場は、もはや秒読み段階という。Ruby 1.9.2がリリースされた今、多くのRails開発者がRailsプロジェクトの動向を見守っている。文法が洗練され、コマンドも整理されるという点でも期待されているが、HTML5やjQueryなど、新しい技術を使うという意味でもRails3待ち、という状態だ。

 実戦投入が可能となるまで、まだしばらく時間がかかりそうだが、Ruby 1.9.2、Rails3という組み合わせの登場は、Rails1がそうであったように「ほかのWebフレームワークに対しても影響を与えていく」(松田氏)ことになりそうだ。

関連リンク

(@IT 西村賢)

情報をお寄せください:

Coding Edge フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

キャリアアップ

- PR -

注目のテーマ

ソリューションFLASH

「ITmedia マーケティング」新着記事

「ラグビーワールドカップ2019」がおじさんの心を動かす――CCC調査
「ラグビーワールドカップ2019」が日本で開催されたことで日本人のラグビー愛にどう変化...

誰のためのBI? 本当の「アナリティクスの民主化」って? マイクロストラテジー・ジャパン社長に聞く
「エンタープライズBI+セルフサービスBI」を掲げるMicroStrategy。同社日本法人社長に話...

「平成ジャンプ世代」の男女共に約8割は結婚意向あり――Pairsエンゲージ パーソナル婚活研究所調べ
「平成ジャンプ世代」とは、未婚のまま平成の30年間を飛び越えて令和を迎えた昭和生まれ...