Rails 3.2 は 2012年1月のリリース以来,年間を通じて定期的なアップデートが続けられてきた - そして数週間前,バージョン 3.2.8 がリリースされた。Rails/master ブランチは昨年の12月,バージョン 4.0.0 beta 用に切り替えられている。4.0 のリリースは 2012 年夏というのが 当初の予定だった。その後もリリース予定日に関しての新たな発表はないが,全体像は徐々に明らかになってきている – Boston RB で行われたプレゼンテーション では,コントリビュータである Prem Sichanugrist 氏から,Rails 4.0 で実施されるであろう変更についての概要が説明された。リリースノートのドラフト版 にも記載された主な機能は次のものだ。
- Ruby 1.9.3 必須
- Strong Parameters サポート
- Queue API サポート
- キャッシュの改善
Ruby 1.8 を対象外とする決定は,すでに昨年,DHH (David Heinemeier Hansson 氏,Ruby on Rails の作者) が発表していた ので,このこと自体に驚きはない。Ruby 1.8 を過去のものにする作業のひとつに過ぎないだろう。
Strong Parameters は mass-assignment を本来の場所に – モデルではなくコントローラに – 移動することによって,それを保護する手段を提供するものだ。新たなアプローチでは指定可能なパラメータが明確なので,パラメータのフィルタリングがこれまでより簡単になる。さらに "パラメータを必須としてマークしたり,事前に定義された reise/rescue フローを通じて転送し,最終的に 400 Bad Request を発生させるような処理が,特別な操作を必要とせず実現できるのです。" プラグインを使用すれば Rails 3.2.8 でも利用可能である。
ActiveSupport::Queue は Ruby の標準キュークラスを継承するが,キューされたジョブはバックグラウンドスレッドで実行される。扱うジョブは run メソッドを持ったシンプルなオブジェクトだ。このキューシステムは,テストを容易とするためにコンフィギュレーション可能になっていて,ジョブを同期的に実行するような設定もできる。
Cache Digests は Russian-doll (ロシア人形) キャッシングスキームの操作を容易にする新プラグインである。 現在のアプローチでは,依存テンプレートのバージョン番号を確認して更新する操作は,マニュアルで実施しなければならない。しかし,
Cache Digests の入力: このプラグインを使用すれば ビュー内の # cache コール毎に,対象テンプレートとそのすべての依存ファイルのダイジェストが自動追加されるようになります! これによって作業対象とする特定のテンプレートのバージョン番号を手作業で更新したり,変更作業の影響を受ける他のテンプレートに配慮したりする必要はなくなります。
Rails 4 は HTTP/1.1 PATCH メソッド もサポートする。
HTTP (Hypertext Transfer Protocol) を拡張するアプリケーションの中には,リソースの部分的な更新機能を必要とするものがあります。既存の HTTP PUT メソッドでは,ドキュメント全体を置換することしかできないので,[RFC 5789] として,既存の HTTP リソースを変更する PATCH メソッドが追加されました。
PATCH 動詞は PUT と同じく update メソッドにマップされるので,後方互換性を損ねることはない。導入理由と影響に関するより詳細な情報は,Rails issue tracker での議論{/0} を参照してほしい。
その他の新機能や変更点としては,スキーマキャッシュのダンプ や PostgreSQL 配列のサポート,重複するルートをクリアして ActiveRecord::Relation を更新する ルーティング関連の機能 などがある。
新たなリリースに付きものだが,廃止される古い機能もある。ドラフト版のリリースノート にはすでに,廃止対象のコンポーネントやメソッドの詳細なリストが掲載されている。ActiveRecord::SessionStore や ActiveResource のように,単に独自の gem に移動したものもこれに含まれている。Prem Sichanugrist 氏の話には,新たな廃止方針に関する概略が述べられていた - Rails 4.0 のリリースに伴い Rails 3.1 は廃止される予定である,また 3.2 の機能のいくつかは,廃止予定であることが警告されるようになる,ということだ。廃止対象になった機能は,Rails の 4.1 リリースで削除される予定である。このような方法によって,3.2 から 4,0 へのアップグレードは十分にスムーズで,大きなリスクを伴わないものになるはずだ。
リリース候補版はまだ発表されていないが,クリスマス前には手元に届くことだろう。