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つが、足並みを揃えて新時代の扉を開こうとしているのだ。
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%を占めているという。
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ハッカーとして知られる松田明氏だ。
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で集結
そもそも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フレームワークに対しても影響を与えていく」(松田氏)ことになりそうだ。
関連リンク
関連記事
情報をお寄せください:
- プログラムの実行はどのようにして行われるのか、Linuxカーネルのコードから探る (2017/7/20)
C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。最終回は、Linuxカーネルの中では、プログラムの起動時にはどのような処理が行われているのかを探る - エンジニアならC言語プログラムの終わりに呼び出されるexit()の中身分かってますよね? (2017/7/13)
C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。今回は、プログラムの終わりに呼び出されるexit()の中身を探る - VBAにおけるFileDialog操作の基本&ドライブの空き容量、ファイルのサイズやタイムスタンプの取得方法 (2017/7/10)
指定したドライブの空き容量、ファイルのタイムスタンプや属性を取得する方法、FileDialog/エクスプローラー操作の基本を紹介します - さらば残業! 面倒くさいエクセル業務を楽にする「Excel VBA」とは (2017/7/6)
日頃発生する“面倒くさい業務”。簡単なプログラミングで効率化できる可能性がある。本稿では、業務で使うことが多い「Microsoft Excel」で使えるVBAを紹介する。※ショートカットキー、アクセスキーの解説あり
|
|
キャリアアップ
- - PR -
転職/派遣情報を探す
「ITmedia マーケティング」新着記事
生成AIとAR/VRで失った個性を取り戻す――2025年のSNS大予測(Instagram編)
万能だが特徴のはっきりしない「何でも屋」と化したInstagram。2025年の進化の方向性を予...
「AIネイティブ世代」の誕生 10代のAI活用度合いは?
博報堂DYホールディングスのHuman-Centered AI Instituteは、AIに対する現状の生活者意識...
低品質コンテンツがSEOに与える影響は? 低品質になってしまう4つの原因と改善方法
検索エンジンのランキングアルゴリズムの妨げとなる低品質コンテンツは、検索順位の低下...