Ruby on Rails 4.0 Release Notes を読む

Pocket

こんにちは、鈴木です。

 

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」という形で追記しました。

 

ハイライト

 

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 は非推奨となった機能(ハッシュベースの動的ファインダ)が 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
test/integration test/acceptance rake test:acceptance (※2013/6/15追記: test:integration のままになったようです。)
  • 実行可能ファイルが 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 メソッドを追加。
  • 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!

 

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です