edge
詳細はrubyonrails.orgで: もっとRuby on Rails

Ruby on Rails 4.0 リリースノート

Rails 4.0 のハイライト:

これらのリリースノートでは、主要な変更のみをカバーしています。さまざまなバグ修正や変更については、changelog を参照するか、GitHub 上のメインの Rails リポジトリの コミットのリスト をチェックしてください。

1 Rails 4.0 へのアップグレード

既存のアプリケーションをアップグレードする場合は、アップグレードする前に十分なテストカバレッジを持っていることが重要です。また、Rails 4.0 への更新を試みる前に、まず Rails 3.2 にアップグレードし、アプリケーションが予想どおりに動作することを確認してください。アップグレード時に注意するべき事項のリストは、Upgrading Ruby on Rails ガイドで入手できます。

2 Rails 4.0 アプリケーションの作成

# 'rails' RubyGem がインストールされている必要があります
$ rails new myapp
$ cd myapp

2.1 Gems のベンダリング

Rails は、アプリケーションのルートにある Gemfile を使用して、アプリケーションの起動に必要な gem を決定します。この Gemfile は、Bundler gem によって処理され、すべての依存関係がインストールされます。さらに、アプリケーションに依存関係がシステムの gem に依存しないように、すべての依存関係をローカルにインストールすることもできます。

詳細はこちら: Bundler ホームページ

2.2 最新版を使用する

BundlerGemfile を使用すると、新しい専用の bundle コマンドを使用して、Rails アプリケーションを簡単にフリーズすることができます。Git リポジトリから直接バンドルする場合は、--edge フラグを渡すことができます。

$ rails new myapp --edge

Rails リポジトリのローカルチェックアウトがあり、それを使用してアプリケーションを生成したい場合は、--dev フラグを渡すことができます。

$ ruby /path/to/rails/railties/bin/rails new myapp --dev

3 主要な機能

Rails 4.0

3.1 アップグレード

  • Ruby 1.9.3 (commit) - Ruby 2.0 が推奨されます。1.9.3+ が必要です。
  • 新しい非推奨ポリシー - Rails 4.0 では非推奨の機能は警告となり、Rails 4.1 で削除されます。
  • ActionPack ページキャッシュとアクションキャッシュ (commit) - ページキャッシュとアクションキャッシュは別の gem に抽出されました。ページキャッシュとアクションキャッシュは手動でキャッシュを削除する必要があります(基になるモデルオブジェクトが更新された場合に手動でキャッシュを削除する必要があります)。代わりに、Russian doll caching を使用してください。
  • ActiveRecord オブザーバー (commit) - オブザーバーは別の gem に抽出されました。オブザーバーはページキャッシュとアクションキャッシュにのみ必要であり、スパゲッティコードにつながる可能性があります。
  • ActiveRecord セッションストア (commit) - ActiveRecord セッションストアは別の gem に抽出されました。SQL でセッションを保存するのはコストがかかります。代わりに、クッキーセッション、メモリキャッシュセッション、またはカスタムセッションストアを使用してください。
  • ActiveModel の大量代入保護 (commit) - Rails 3 の大量代入保護は非推奨です。代わりに、strong parameters を使用してください。
  • ActiveResource (commit) - ActiveResource は別の gem に抽出されました。ActiveResource は広く使用されていませんでした。
  • vendor/plugins の削除 (commit) - インストールされた gem を管理するために Gemfile を使用してください。

    ActionPack

  • Strong parameters (commit) - パラメータを許可されたものだけでモデルオブジェクトを更新する(params.permit(:title, :text))。

  • Routing concerns (commit) - ルーティングDSLで共通のサブルートを抽出する(/posts/1/comments/videos/1/commentsからcommentsを抽出)。

  • ActionController::Live (commit) - response.streamを使用してJSONをストリームで送信する。

  • Declarative ETags (commit) - アクションのETag計算の一部となるコントローラレベルのETag追加を追加する。

  • Russian doll caching (commit) - ビューのネストされたフラグメントをキャッシュする。各フラグメントは依存関係(キャッシュキー)に基づいて期限が切れる。キャッシュキーは通常、テンプレートのバージョン番号とモデルオブジェクトです。

  • Turbolinks (commit) - 初期のHTMLページのみを提供する。ユーザーが別のページに移動すると、pushStateを使用してURLを更新し、AJAXを使用してタイトルと本文を更新します。

  • Decouple ActionView from ActionController (commit) - ActionViewはActionPackから切り離され、Rails 4.1では別のgemに移動します。

  • Do not depend on ActiveModel (commit) - ActionPackはもはやActiveModelに依存しません。

3.2 General

  • ActiveModel::Model (commit) - ActiveModel::Modelは、通常のRubyオブジェクトをActionPackと連携させるためのミックスインです(例:form_forのため)。
  • New scope API (commit) - スコープは常に呼び出し可能なものを使用する必要があります。
  • Schema cache dump (commit) - Railsの起動時間を改善するために、データベースからスキーマを直接ロードする代わりに、ダンプファイルからスキーマをロードします。
  • Support for specifying transaction isolation level (commit) - 繰り返し可能な読み取りまたはパフォーマンスの向上(ロックの削減)のどちらが重要かを選択します。
  • Dalli (commit) - Dalliメモリキャッシュクライアントをメモリキャッシュストアに使用します。
  • Notifications start & finish (commit) - Active Supportのインストルメンテーションは、開始と終了の通知をサブスクライバに報告します。
  • Thread safe by default (commit) - Railsは追加の設定なしでスレッドセーフなアプリケーションサーバで実行できます。

注意:使用しているgemがスレッドセーフであることを確認してください。

  • PATCH verb (commit) - Railsでは、PUTの代わりにPATCHが使用されます。PATCHはリソースの部分的な更新に使用されます。

3.3 Security

  • match do not catch all (commit) - ルーティングDSLでは、HTTPの動詞を指定する必要があります。
  • html entities escaped by default (commit) - erbでレンダリングされる文字列は、rawでラップされていない限りエスケープされます。
  • New security headers (commit) - Railsは以下のヘッダをすべてのHTTPリクエストで送信します:X-Frame-Options(ブラウザがページをフレームに埋め込むことを禁止するためのクリックジャッキング防止)、X-XSS-Protection(ブラウザにスクリプトの挿入を停止するように要求)、X-Content-Type-Options(ブラウザがjpegをexeとして開かないようにする)。 機能の抽出からジェムへの変更 ---------------------------

Rails 4.0では、いくつかの機能がジェムに抽出されました。機能を復元するには、単純に抽出されたジェムをGemfileに追加するだけです。

4 ドキュメンテーション

  • ガイドはGitHub Flavored Markdownで書き直されました。

  • ガイドはレスポンシブデザインになりました。

5 Railties

詳細な変更については、Changelogを参照してください。

5.1 注目すべき変更

  • 新しいテストの場所 test/modelstest/helperstest/controllerstest/mailers。対応するrakeタスクも追加されました。 (Pull Request)

  • アプリケーションの実行可能ファイルは、bin/ディレクトリにあります。bin/bundlebin/railsbin/rakeを取得するには、rake rails:update:binを実行してください。

  • デフォルトでスレッドセーフ

  • rails new--builder(または-b)を渡すことで、カスタムビルダーを使用する機能が削除されました。代わりにアプリケーションテンプレートを使用してください。 (Pull Request)

5.2 廃止予定

  • config.threadsafe!は、より細かい制御を提供するconfig.eager_loadに置き換えられました。

  • Rails::Pluginは廃止されました。vendor/pluginsにプラグインを追加する代わりに、パスやgitの依存関係を使用するか、gemsまたはbundlerを使用してください。

6 Action Mailer

詳細な変更については、Changelogを参照してください。

6.1 注目すべき変更

6.2 廃止予定

7 Active Model

詳細な変更については、Changelogを参照してください。

7.1 注目すべき変更

  • ActiveModel::ForbiddenAttributesProtectionを追加しました。これは、許可されていない属性が渡された場合に属性をマスアサインメントから保護するためのシンプルなモジュールです。

  • ActiveModel::Modelを追加しました。これは、RubyオブジェクトをAction Packとの互換性を持つようにするためのミックスインです。

7.2 廃止予定

8 Active Support

詳細な変更については、Changelogを参照してください。

8.1 注目すべき変更

  • ActiveSupport::Cache::MemCacheStoreで非推奨のmemcache-clientジェムをdalliで置き換えました。

  • ActiveSupport::Cache::Entryを最適化してメモリ使用量と処理オーバーヘッドを削減しました。

  • インフレクションはロケールごとに定義できるようになりました。singularizepluralizeは追加の引数としてロケールを受け入れます。

  • Object#tryは、受信オブジェクトがメソッドを実装していない場合にNoMethodErrorを発生させる代わりに、nilを返すようになりました。ただし、新しいObject#try!を使用することで、古い動作を維持することもできます。

  • String#to_dateは、無効な日付が与えられた場合にArgumentError: invalid dateを発生させるようになりました。これは、Date.parseと同じで、3.xよりも多くの無効な日付を受け入れます。 ```ruby

    ActiveSupport 3.x

    "asdf".to_date # => NoMethodError: undefined method div' for nil:NilClass "333".to_date # => NoMethodError: undefined methoddiv' for nil:NilClass

ActiveSupport 4

"asdf".to_date # => ArgumentError: invalid date "333".to_date # => Fri, 29 Nov 2013 ```

8.2 廃止予定

  • ActiveSupport::TestCase#pending メソッドは廃止予定です。代わりに minitest の skip を使用してください。

  • ActiveSupport::Benchmarkable#silence はスレッドセーフではないため、廃止予定です。Rails 4.1 では代替なしで削除されます。

  • ActiveSupport::JSON::Variable は廃止予定です。カスタムの JSON 文字列リテラルには、独自の #as_json#encode_json メソッドを定義してください。

  • 互換性のあるメソッド Module#local_constant_names は廃止予定です。代わりに Module#local_constants を使用してください(シンボルを返します)。

  • ActiveSupport::BufferedLogger は廃止予定です。代わりに ActiveSupport::Logger または Ruby 標準ライブラリのロガーを使用してください。

  • assert_presentassert_blankassert object.blank?assert object.present? に置き換えるために廃止予定です。

9 Action Pack

詳細な変更については、Changelog を参照してください。

9.1 注目すべき変更点

  • 開発モードの例外ページのスタイルシートを変更しました。さらに、例外が発生したコードの行とフラグメントもすべての例外ページに表示されます。

9.2 廃止予定

10 Active Record

詳細な変更については、Changelog を参照してください。

10.1 注目すべき変更点

  • change マイグレーションの書き方を改善し、古い updown メソッドは不要になりました。

    • drop_table メソッドと remove_column メソッドは、必要な情報が与えられている限り、逆変換可能になりました。 remove_column メソッドは複数の列名を受け付けていたが、代わりに remove_columns を使用してください(逆変換不可)。 change_table メソッドも逆変換可能になりましたが、そのブロックが removechangechange_default を呼び出さない限りです。
    • reversible メソッドを使用すると、マイグレーションを上方向または下方向に実行するときに実行するコードを指定できます。 Migration ガイドを参照してください。
    • revert メソッドは、マイグレーション全体または指定されたブロックを逆変換します。 下方向にマイグレーションする場合、指定されたマイグレーション/ブロックは通常通り実行されます。 Migration ガイドを参照してください。
  • PostgreSQL の配列型サポートを追加しました。任意のデータ型を使用して配列列を作成できます。マイグレーションとスキーマダンパーのサポートも完全です。

  • Relation#load を追加し、レコードを明示的にロードして self を返します。

  • Model.all は今や ActiveRecord::Relation を返します。本当に配列が必要な場合は Relation#to_a を使用してください。特定のケースでは、アップグレード時に問題が発生する可能性があります。

  • ActiveRecord::Migration.check_pending! を追加し、マイグレーションが保留中の場合にエラーを発生させるようにしました。

  • ActiveRecord::Store のカスタムコーダーのサポートを追加しました。次のようにカスタムコーダーを設定できます:

    store :settings, accessors: [ :color, :homepage ], coder: JSON
    
  • mysqlmysql2の接続は、デフォルトでSQL_MODE=STRICT_ALL_TABLESを設定して、データの損失を防ぐためのものです。これは、database.ymlstrict: falseを指定することで無効にすることができます。

  • IdentityMapを削除します。

  • EXPLAINクエリの自動実行を削除します。active_record.auto_explain_threshold_in_secondsオプションはもはや使用されず、削除する必要があります。

  • ActiveRecord::NullRelationActiveRecord::Relation#noneを追加して、Relationクラスにnullオブジェクトパターンを実装します。

  • HABTMの結合テーブルを作成するためのcreate_join_tableマイグレーションヘルパーを追加します。

  • PostgreSQLのhstoreレコードの作成を許可します。

10.2 廃止予定

  • 古いスタイルのハッシュベースの検索APIは廃止されました。これは、以前に「検索オプション」を受け入れていたメソッドがもはや受け入れないことを意味します。

  • find_by_...find_by_...!以外のすべての動的メソッドは廃止予定です。以下にコードの書き換え方法を示します:

    • find_all_by_...where(...)を使用して書き換えることができます。
    • find_last_by_...where(...).lastを使用して書き換えることができます。
    • scoped_by_...where(...)を使用して書き換えることができます。
    • find_or_initialize_by_...find_or_initialize_by(...)を使用して書き換えることができます。
    • find_or_create_by_...find_or_create_by(...)を使用して書き換えることができます。
    • find_or_create_by_...!find_or_create_by!(...)を使用して書き換えることができます。

11 クレジット

Railsを安定かつ堅牢なフレームワークにするために多くの時間を費やした多くの人々に感謝します。Railsの貢献者の完全なリストを参照してください。彼ら全員に敬意を表します。

フィードバック

このガイドの品質向上にご協力ください。

タイポや事実の誤りを見つけた場合は、ぜひ貢献してください。 開始するには、ドキュメントへの貢献セクションを読んでください。

不完全なコンテンツや最新でない情報も見つかるかもしれません。 メインのドキュメントに不足しているドキュメントを追加してください。 修正済みかどうかは、まずEdge Guidesを確認してください。 スタイルと規約については、Ruby on Rails Guides Guidelinesを確認してください。

修正すべき点を見つけたが、自分で修正できない場合は、 問題を報告してください

そして最後に、Ruby on Railsのドキュメントに関するあらゆる議論は、公式のRuby on Railsフォーラムで大歓迎です。