こんにちは、鈴木です。
Ruby on Rails 4.0 Release Notes の内容を確認しました。
正式リリースまでに変更があるかもしれませんが、大きく変わることはないと思います。
今のうちにざっと眺めておきましょう!
※以下、Ruby on Rails 4.0 Release Notes の項目と対応しています(プロジェクト作成方法などは省略しました)。
※2013/2/15 最新情報に合わせて内容を更新しました。「※2013/2/15追記: xxx」という形で追記しました。
※2013/6/15 Rails 4.0.0 rc2 が出ましたので、最新情報に合わせて更新しました。「※2013/6/15追記:xxx」という形で追記しました。
ハイライト
Ruby 1.9.3 以降をサポートRuby2.0推奨、Ruby1.9.3以降をサポート (※2013/2/15追記: Ruby2.0 推奨に変更されました!)- Strong Parameters (Gem ライブラリだったものが Rails コアに取り込まれた)
- Turbolinks (https://github.com/rails/turbolinks)
- Russian Doll Caching (https://github.com/rails/cache_digests)
Asynchronous Mailers (非同期メール送信)(※2013/2/15追記: 問題があったようで、一旦メインブランチから除外されました。)
1. Rails 4.0 へのアップグレード
(省略)
2. Rails 4.0 アプリケーションの作成
(省略)
3. メジャーな機能
(省略: Ruby on Rails 4.0 Release Notes にある図を見たほうが早いです)
4. Gem ライブラリに切り出された機能
以下の機能は Gem ライブラリに切り出されたので、使用したい場合は Gemfile に依存関係を追加する必要があります。
- Hash-based & Dynamic finder methods
- Mass assignment protection in Active Record models
- ActiveRecord::SessionStore
- Active Record Observers
- Active Resource
- Action Caching
- Page Caching
- Sprockets
- Performance tests
一つ目の Hash-based & Dynamic finder methods は非推奨となった機能(ハッシュベースの動的ファインダ)が Gem ライブラリとして外出しされたものです。「rails new ...」でプロジェクトを作成した直後の Gemfile に含まれていますが、今後を考えると Gemfile から消しておく方が良いかと思います。
5. Documentation
(省略)
6. Railties
主な変更点
- テストコードのディレクトリが以下の通り変更された。
変更前 | 変更後 | テスト実行方法 |
---|---|---|
test/units | test/models | rake test:models |
test/units/helpers | test/helpers | rake test:helpers |
test/functional (controller) | test/controllers | rake test:controllers |
test/functional (mailer) | test/mailers | rake test:mailers |
- 実行可能ファイルが bin ディレクトリに置かれるようになった。(※2013/2/15追記: 「bundle install」するときに --binstubs オプションを付ける場合に注意が必要です。詳しくは「Hello Rails4 beta」をご参照ください。)
- デフォルトでスレッドセーフになった。
非推奨
- (デフォルトでスレッドセーフになったため)config.threadsafe! が非推奨となった。
- Rails::Plugin は廃止された。vendor/plugins ではなく Gem ライブラリを使用する。
7. Action Mailer
主な変更点
- 特に無し。
非推奨
- 特に無し。
8. Active Model
主な変更点
- 許可しない属性に対する Mass-assignment を防ぐシンプルなモジュールである ActiveModel::ForbiddenAttributesProtection を追加。
- 普通のクラスにモデルの機能を与える ActiveModel::Model を追加。
非推奨
- 特に無し。
9. Active Support
主な変更点
- ActiveSupport::Cache::MemCacheStore において、非推奨の memcache-client から dalli に変更。
- ActiveSupport::Cache::Entry を最適化し、メモリ使用量と処理のオーバーヘッドを削減。
- Inflection (単数形/複数形) がロケールごとに設定可能となり、singularize/pluralize が追加の引数としてロケールを取るようになった。
- Object#try は NoMethodError の代わりに nil を返すように変更。また、今までの NoMethodError を raise する動作をする Object#try! を追加。
非推奨
- ActiveSupport::TestCase#pending
代わりに MiniTest の skip を使用する。 - ActiveSupport::Benchmarkable#silence
スレッドセーフではないため非推奨。代替のものを準備する予定はなく、Rails 4.1 で削除予定。 - ActiveSupport::JSON::Variable
独自に #as_json, #encode_json を定義すること。 - Module#local_constant_names
代わりに Module#local_constants を使用すること(このメソッドは文字列ではなくシンボルを返す)。 - BufferedLogger
ActiveSupport::Logger または Ruby 標準添付ライブラリの logger を使用すること。 - assert_present, assert_blank (※2013/2/15追記: 追加しました。)
「assert_present object」、「assert_blank object」ではなく「assert object.present?」、「assert object.blank?」を使いましょう。
10. Action Pack
主な変更点
- development モードにおける例外ページのスタイルシートを変更し、例外ページに「発生した例外の断片とコード」を表示するように変更。
非推奨
- 特に無し。
11. Active Record
主な変更点
- スキーマ変更を行うマイグレーションの書き方が改善され、古い up/down メソッドが不要となった。
- drop_table 及び remove_column は必要な情報が与えられた場合においてリバーシブルとなった。複数カラムを削除する remove_columns はリバーシブルではない。change_table については、ブロック内で
カラムの削除remove, change, change_default (※2013/6/15追記: 元文書の修正に伴い変更しました。)を行わない限りリバーシブル。 - up/down を行うコードを指定可能な reversible メソッドを追加。
- 与えられたマイグレーションを down する revert メソッドを追加。
- drop_table 及び remove_column は必要な情報が与えられた場合においてリバーシブルとなった。複数カラムを削除する remove_columns はリバーシブルではない。change_table については、ブロック内で
schema_migrations にメタデータを保持するカラムを追加。(※2013/6/15追記: 無くなりました。)migrated_at ... マイグレーション日時。fingerprint ... マイグレーションの MD5 ハッシュ値。name ... バージョンと拡張子を除いたファイル名。
- PostgreSQL の配列型をサポート。任意のデータ型で配列型を作成可能。
- 明示的にレコードを読み込み self を返す Relation#load メソッドを追加。
- Model.all は配列ではなく ActiveRecord::Relation を返すように変更。配列が必要な場合は Relation#to_a を使用すること。この変更は、Rails 4.0 へのアップグレード時に問題を生む可能性がある。
- マイグレーションが保留されているときに例外を発生する ActiveRecord::Migration.check_pending! メソッドを追加。
- カスタムコーダーをサポートする ActiveRecord::Store を追加。次のようにカスタムコーダーを設定可能:
- store :settings, accessors: [:color, :homepage], coder: JSON
- mysql, mysql2 のコネクションはデフォルトで SQL_MODE=STRICT_ALL_TABLES が設定されるように変更。これをオフにするには database.yml で strict: false を指定すること。
- IdentityMap を削除。
- ActiveRecord::Relation の Null オブジェクトパターンを実装する ActiveRecord::NullRelation, ActiveRecord::Relation#none を追加。
- HABTM (Has And Belongs To Many) の中間テーブルを作成するヘルパーメソッド create_join_table を追加。
- PostgreSQL の hstore 型のレコードが作成可能となった。
非推奨
- 古い形式であるハッシュベースの Finder API が非推奨となった。以下のように書きなおすことができる。
非推奨コード | 代替コード |
---|---|
find_all_by_... | where(...) |
find_last_by_... | where(...).last |
scoped_by_... | where(...) |
find_or_initialize_by_... | where(...).find_or_initialize |
find_or_create_by_... | find_or_create_by(...) または where(...).first_or_create |
find_or_create_by_...! | find_or_create_by!(...) または where(...).first_or_create! |
まとめ
Ruby on Rails 4.0 Release Notes を読んで、全体的な感じは把握することができました。
細かい変更点は個別のドキュメントなどを確認する必要があるので、それらの確認も必要ですね。
また、非推奨となる機能もいくつかありますので注意が必要ですね(きっと 4.1 で削除されるので)。
今回のエントリを読んで実際に動かしてみたくなった!という方は、「Hello Rails4 beta」をご覧ください。
Rails 4.0.0.beta を動かす方法をまとめています。
Enjoy Rails!