AjaxからPjaxへ、Ruby on Rails 3.2はどうなる!?
Ruby on Railsは、バージョン2系から3系へと移行しつつあります。このメジャーバージョンアップは現在も進行中で、2010年8月29日に出たバージョン3.0は、その後、バージョン3.0.9までマイナーバージョンアップが進んでいますし、2011年5月22日にはRails 3.1のリリース候補版がリリースされ、正式リリースが目前に迫っています。そして、実はバージョン3.2や、4.0の話まで聞こえてきています。
7月25日に発売される『Rails3レシピブック 190の技』(高橋征義/松田明/諸橋恭介著、ソフトバンククリエイティブ)の刊行記念イベントとして東京・池袋のジュンク堂で行われたトークイベント「最新のRuby on Railsの魅力を語る~3.0、3.1、3.2、そして4.0へ~」から、Railsの最新トピックに関連する気になる発言をピックアップしてお伝えします。
トークイベントで話す共著者ら。左から高橋征義氏、諸橋恭介氏、松田明氏
このRails3レシピ本は、ほぼ同名の前著『Railsレシピブック 183の技』の改訂版という位置付けです。Rails2対応だったものをRails3に合わせて書き直し、レシピも追加されています。2→3への移行にともなって世代交代のあった定番プラグインも解説されています。また、CoffeeScriptの使い方などバージョン3.1に関するレシピもあり、「私が知るかぎり、紙の書籍でRails3.1に対応した本は世界初」(松田明氏)ということです。
今回、著者として加わった松田氏は、朝起きたらまず新聞を読むかのように、時差のあるアメリカで前日に行われたRailsの開発のコミット履歴を読むといいます。その松田氏によれば、2→3への移行における各バージョンの関係は、以下の通り。
- Rails3.0は2系との互換性を保ったまま、徹底的にリファクタリングしたバージョン
- Rails3.1は、2.x系との互換性を完全に切り捨てる最初のバージョン。Rails2で書かれたアプリは動くなくなる
- Rails3.0には新機能はあまり入っていない。DSLが“おしゃれ”になった程度
- Rails3.1には新機能がいろいろと入っている。Asset Pipelineや、CoffeeScript、HTTP Streaming、Identity Mapなど
- Rails3.1で入った機能のうち、例えばIdentity Mapは極めて荒削りな状態で入っていて、「ほんとに実アプリで使うの?」という感じ。3.2になれば、使えるようになる
- 3.2は3.1の安定版という位置付け。3.1はコントローラ周りが遅い、Safe Buffer周りの実装がすっきりしないなどの課題がある。3.2ではパフォーマンスチューニングをガッツリやる
- 3.3は、出るかどうか分からない。たとえ出るとしても大きな機能は入らない
- これから出るパッチは、Rails 4に入ることになる。4.0の話はもう始っている
- Rails 4では、Ruby 1.9でないと動かなくなる
- 予言しておくと3.1は短命になる。しかし、3.1はとにかく面白いのでどんどん使うべき
- 3.1でjQueryが標準になった。rails-coreメーリングリストでアンケートを取ったら、すでに8割の開発者がRails3.0でjQueryを使っていた。だから3.0で間違ってprototype.jsを使っている人は、未来がないと思って、jQueryに乗り換えると良い
直近のRails 3.1は、3系の中では大きく足を踏み出したリリースで、その次の3.2でひとつの完成ということでしょうか。となると、Rails2.1、2.2が短命で、2.3系が長く使われたのと同じで、Rails 3.2が長く使われるバージョンとなりそうですね。もちろん、3.1が短命といっても、CoffeeScriptやAsset Pipelineなど、かなり重要な機能が入っているので、使わない手はないのでしょうけど。
さて、松田氏によれば、「Rails 3.2では、DHHが言っていたこととしてPjaxが入るっていうのがありますねぇ」ということです。トーク中ではGitHubを実例として示していました。GitHubでは、ページの真ん中辺りでフォルダ階層をたどっていくと、Ajaxのように画面の一部がスライドして切り替わります。ところが、よく見ると、URLがちゃんと切り替わっている。つまり、これはAjaxではない。「これは単に新機能というだけじゃなくて、とても使いやすくなる。明らかに速くて、明らかに快適。PjaxはAjaxの悪いところをなくしている」(松田氏)。
Pjaxは、すでに3.1でもpjax_railsというプラグインを入れることで「使おうと思えば使える」(松田氏)のだそうです。
ActiveRecord横綱相撲で、NoSQL対応はどうなる?
トーク後にイベント会場から、興味深い質問が出ました。
せっかくRails3でモジュラリティが高まってプラガブルになったのに、永続化層としてActiveRecordが一強状態となっている。今後、ActiveRecordを置き換えるようなものは出てくるのか? NoSQLとしてRDBと異なるものも出てきてるのに、ActiveRecordの強さが多様性を阻害しているのではないか?
この質問に対して、諸橋氏は、「NoSQL的なところでしょうか。ActiveRecordを使わずに、Mongoid(MongoDBのRailsライブラリ)を使ったプロジェクトもある。そういう方向性は、あるかなと思う」と回答。
松田氏は「RDBMSの部分をモジュールとして切り出していることを考えると、ActiveRecordをデフォルトにしようという意図はあまりないのではないかと思います。あくまでもActiveRecordパターンのRuby実装という位置付け。ただ、Rails2から3への移行でいちばん感動したのは、実はActiveRecord。ほんとに良く書けていて完成度が高いんですよね」と、むしろActiveRecordの完成度を強調していました。ユースケースを拾い切れないなら一強状態は好ましくないですが、本当に実力を伴った横綱なのであれば、それはそれでいいということかもしれませんよね。ActiveRecordを横綱とすると、NoSQLの中でもMongoDBだけは例外的に関取ぐらいにメキメキと頭角を表して昇進している、という感じでしょうか。
さて、バージョン2から3.0→3.1→3.2へと変遷するに連れて、Rails自身も、それを取り巻く環境も大きく変わってきています。バージョンごとに変化の激しいRailsと、そのエコシステムのあり方について、高橋氏はこう指摘してトークを締めくくりました。
「個人的にRailsを使っていたのは、バージョン2とか2.1のときです。しばらく間があって、今は3を使っています。途中の変化を見ていれば、どう進化してきたか分かるかもしれないけど、結構3になってガラっと変わっているんですよね。ただ、新しいバージョンは当然使いやすくなっているので、ぜひこの本を読んでRails3にチャレンジしていただければなあと思います」