Rails 3.0 Beta の Release Notesを読んでみる
キーヘッドラインにあった項目は下記のような感じ。
・routing の設定方法がよりRESTfulな宣言を意識したものに
・Action Mailerの大幅な変更(添付ファイルの送信などがかなりラクに)
・ActiveRecordにチェーン可能な新クエリーメソッドが登場
・JavaScriptヘルパーでライブラリ(JQueryも!)を管理(インラインJSの終焉)
・gemの依存性管理をBundlerで行うようになる
次にRails3.0 Release Notesを読んでみた。かなり盛りだくさんな印象
1.Rails3へのアップグレード
動作環境など
Ruby1.8.7以上が必要で、Rails2.3.5で動くアプリであることが必要。
アプリ設定管理用オブジェクトの新設
同一プロセスで複数のアプリケーションを動かすことができる目的でconfig/environment.rb で設定していたような項目を管理する Application Object が導入された。設定は config/application.rb で行う。
(個人的感想:既存アプリを移行する際に、config/environment.rb から config/application.rb に必要な設定を移植する作業を忘れるとRailsが起動しなくなりそうなので注意ポイントかな。。。)
scriptコマンドがなくなった
script/generate のようなコマンドが下記のように変わるらしい。
rails console # 以前の ./script/console(個人的感想:プロジェクトを作るときのコマンドが rails プロジェクト名 のままなので、rails console と打とうとしてスペルミスしたら新しいプロジェクトができちゃった!なんてことになるのだろうか。。。)
rails g scaffold post title:string # 以前の ./script/generate scaffold post title:string
gemの管理設定
config.gem に替わって、bundlerを使ってGemfileで設定する形になるらしい。(個人的感想:Google App Engine + JRuby と一緒ですね。でも、既存アプリを移行するときに Gemfileを作り忘れるというポカをやらかしそう。。。)
移行をアシストするプラグイン
下記プラグインをインストールして、rails:upgrade:check を実行すると、修正すべき項目を示してくれたり、Gemfileを作ったり、新しいフォーマットでのルーティング設定をするように指示してくれるらしい。
rails plugin install git://github.com/rails/rails_upgrade.git
2.Rails 3.0 アプリケーションの作成
gemファイルのインストール
Gemfileを作っておくと、必要な gem を依存関係を見て全てインストールしてくれるらしい。システムの gem とは別にローカルにインストールするようにすることも可能だとか。
Railsのfreezeがなくなった
Gitのレポジトリから直接インストールする場合、--edge を使う。
rails myapp --edgeローカルにcheckout済みのRailsレポジトリからアプリを生成したければ --dev を使う。
ruby /path/to/rails/railties/bin/rails myapp --dev
3 Rails の構造的な変更
大きくわけて6つあり。
Railties がフレームワーク全体に一貫性のあるプラグインAPIを提供
Generatorの中にもフックが用意されるようになり、プラグインが処理に介入できるようになった。
コアコンポーネントの分離
Merbとの統合の成果により、Railsのコアコンポーネントはプラグインと同じAPI上で動くようになった。プラグインでもRailsのコア機能を全て利用できるため、コアコンポーネントの置き換えや拡張などが容易になった。
Active Modelの抽象化
コアコンポーネントの分離によって、Action Pack の Active Record との強固な結びつきがなくなった。新しいORMプラグインは Action Pack と連携するには Active Model を実装するだけでActive Recordのような操作ができるようになる。
コントローラーの抽象化
HTTPの概念から隔離された、Viewのレンダリングを行うための基礎スーパークラスが新設された。これにより、ActionController と ActionMailer がシンプルになった。
Arelの統合
Active Recordの基盤として Arel(Active Relation)が採用され、Railsの必須モジュールとなった。ArelはActiveRecordをシンプルにするSQLの抽象化機能や、ActiveRecordのリレーション管理機能の基盤を提供する。
メール
今までのAction Mailerは TMailの上に、事前パーサー、送信、受信などのメールに関する機能をごった煮で詰め込んでいた。これらの機能がRails3では Mail gem に抽象化された。このため、ソースの重複がなくなり、Action Mailerとメールのパーサーが綺麗に住み分けられるようになった。
(以下、詳細な項目が続いたので割愛)
その他、個人的に目にとまったところ
Scaffoldの生成するフォーム
scaffold generator が edit と new で共通するフォームを _form のパーシャルで生成するようになる。
環境を表す定数の廃止
下記の定数がdeprecatedになり、右の新しい記法になる。
RAILS_ROOT → Rails.root,
RAILS_ENV → Rails.env
RAILS_DEFAULT_LOGGER → Rails.logger
ビューでのサニタイズ処理がデフォルトに
helperの出力はデフォルトで h(string) 済みに。エスケープしないで出力したい場合は raw(string)を使う。