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

Ruby on Rails 4.2 リリースノート

Rails 4.2 のハイライト:

これらのリリースノートは主な変更点のみをカバーしています。他の機能、バグ修正、変更点については、変更ログを参照するか、GitHub 上のメインの Rails リポジトリの コミットリスト を確認してください。

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

既存のアプリケーションをアップグレードする場合、アップグレード前に十分なテストカバレッジを持っていることが重要です。また、Rails 4.1 に先にアップグレードし、アプリケーションが正常に動作することを確認してから、Rails 4.2 にアップグレードすることをお勧めします。アップグレード時に注意すべき点のリストは、ガイドの Ruby on Rails のアップグレード で入手できます。

2 主な機能

2.1 Active Job

Active Job は、Rails 4.2 の新しいフレームワークです。これは、ResqueDelayed JobSidekiq などのキューシステム上で共通のインターフェースを提供します。

Active Job API で書かれたジョブは、それぞれのアダプターによってサポートされるキューのいずれかで実行されます。Active Job には、ジョブを直ちに実行するインラインランナーがデフォルトで用意されています。

ジョブはしばしば Active Record オブジェクトを引数として受け取る必要があります。Active Job は、オブジェクト自体をマーシャリングするのではなく、オブジェクトへの参照を URI (uniform resource identifier) として渡します。新しい Global ID ライブラリは、URI を構築し、それらが参照するオブジェクトを検索します。Active Record オブジェクトをジョブの引数として渡すことは、Global ID を内部的に使用することでうまく動作します。

たとえば、trashable が Active Record オブジェクトである場合、次のジョブはシリアライズなしで正常に実行されます:

class TrashableCleanupJob < ActiveJob::Base
  def perform(trashable, depth)
    trashable.cleanup(depth)
  end
end

詳細については、Active Job Basics ガイドを参照してください。

2.2 非同期メール

Active Job をベースにして、Action Mailer には deliver_later メソッドが追加されました。このメソッドを使用すると、メールをキューを介して送信するため、キューが非同期である場合にはコントローラーやモデルをブロックしなくなります(デフォルトのインラインキューはブロックします)。

メールを直ちに送信することも、引き続き deliver_now で可能です。

2.3 Adequate Record

Adequate Record は、Active Record のパフォーマンス改善セットであり、一般的な findfind_by の呼び出し、および一部の関連クエリを最大2倍高速化します。

これは、一般的な SQL クエリをプリペアドステートメントとしてキャッシュし、類似の呼び出しで再利用することで動作します。これにより、後続の呼び出しではクエリ生成のほとんどの作業をスキップできます。詳細については、Aaron Patterson のブログ記事 を参照してください。

Active Record は、ユーザーの関与やコードの変更なしに、サポートされる操作で自動的にこの機能を利用します。以下に、サポートされる操作のいくつかの例を示します:

Post.find(1)  # 最初の呼び出しはプリペアドステートメントを生成してキャッシュする
Post.find(2)  # 後続の呼び出しはキャッシュされたプリペアドステートメントを再利用する

Post.find_by_title('first post')
Post.find_by_title('second post')

Post.find_by(title: 'first post')
Post.find_by(title: 'second post')

post.comments
post.comments(true)

上記の例が示すように、プリペアドステートメントはメソッド呼び出しに渡される値をキャッシュしません。代わりに、値のプレースホルダーを持っています。

次のシナリオではキャッシュは使用されません: - モデルにはデフォルトのスコープがあります - モデルは単一テーブル継承を使用しています - find にIDのリストを指定します。例えば:

```ruby
# キャッシュされていない
Post.find(1, 2, 3)
Post.find([1,2])
```
  • find_by にSQLフラグメントを指定します:

    Post.find_by('published_at < ?', 2.weeks.ago)
    

2.4 Webコンソール

Rails 4.2で生成された新しいアプリケーションには、デフォルトでWeb Console gemが含まれています。Web Consoleは、エラーページごとに対話型のRubyコンソールを追加し、consoleビューとコントローラーヘルパーを提供します。

エラーページ上の対話型コンソールでは、例外が発生した場所のコンテキストでコードを実行することができます。consoleヘルパーは、ビューまたはコントローラーのどこでも呼び出された場合、レンダリングが完了した後に最終的なコンテキストで対話型コンソールを起動します。

2.5 外部キーのサポート

マイグレーションDSLは、外部キーの追加と削除をサポートしています。これらはschema.rbにもダンプされます。現時点では、mysqlmysql2postgresqlアダプタのみが外部キーをサポートしています。

# `articles.author_id`を`authors.id`を参照する外部キーを追加
add_foreign_key :articles, :authors

# `articles.author_id`を`users.lng_id`を参照する外部キーを追加
add_foreign_key :articles, :users, column: :author_id, primary_key: "lng_id"

# `accounts.branch_id`の外部キーを削除
remove_foreign_key :accounts, :branches

# `accounts.owner_id`の外部キーを削除
remove_foreign_key :accounts, column: :owner_id

詳細については、add_foreign_keyremove_foreign_keyのAPIドキュメントを参照してください。

3 非互換性

以前に非推奨とされていた機能は削除されました。このリリースでの新しい非推奨事項については、個々のコンポーネントを参照してください。

以下の変更は、アップグレード時に直ちに対応が必要な場合があります。

3.1 文字列引数を使用したrender

以前は、コントローラのアクションでrender "foo/bar"を呼び出すと、render file: "foo/bar"と同じ意味でした。Rails 4.2では、これはrender template: "foo/bar"を意味するように変更されました。ファイルをレンダリングする必要がある場合は、コードを明示的な形式(render file: "foo/bar")に変更してください。

3.2 respond_with / クラスレベルのrespond_to

respond_withと対応するクラスレベルのrespond_toは、responders gemに移動されました。使用するには、Gemfilegem 'responders', '~> 2.0'を追加してください。

# app/controllers/users_controller.rb

class UsersController < ApplicationController
  respond_to :html, :json

  def show
    @user = User.find(params[:id])
    respond_with @user
  end
end

インスタンスレベルのrespond_toは影響を受けません。

# app/controllers/users_controller.rb

class UsersController < ApplicationController
  def show
    @user = User.find(params[:id])
    respond_to do |format|
      format.html
      format.json { render json: @user }
    end
  end
end

3.3 rails serverのデフォルトホスト

Rackの変更により、rails serverはデフォルトで0.0.0.0ではなくlocalhostでリッスンするようになりました。これは、開発ワークフローにほとんど影響を与えません。自分のマシン上では、http://127.0.0.1:3000とhttp://localhost:3000の両方が以前と同様に機能します。

ただし、この変更により、開発環境が仮想マシンにあり、ホストマシンからアクセスしたい場合など、別のマシンからRailsサーバーにアクセスできなくなります。その場合は、rails server -b 0.0.0.0でサーバーを起動して、古い動作を復元してください。

これを行う場合は、ファイアウォールを適切に設定して、信頼できるネットワーク内のマシンのみが開発サーバーにアクセスできるようにしてください。

3.4 renderのための変更されたステータスオプションシンボル

Rackの変更により、renderメソッドが受け入れる:statusオプションのシンボルが変更されました。

  • 306: :reservedが削除されました。
  • 413: :request_entity_too_large:payload_too_largeに名前が変更されました。
  • 414: :request_uri_too_long:uri_too_longに名前が変更されました。
  • 416: :requested_range_not_satisfiable:range_not_satisfiableに名前が変更されました。

不明なシンボルでrenderを呼び出す場合、レスポンスステータスはデフォルトで500になります。

3.5 HTMLサニタイザ

HTMLサニタイザは、LoofahNokogiriを基にした新しい、より堅牢な実装に置き換えられました。新しいサニタイザはより安全で、サニタイズはより強力で柔軟です。

新しいアルゴリズムにより、特定の病的な入力に対してサニタイズされた出力が異なる場合があります。

古いサニタイザの正確な出力が必要な場合は、Gemfilerails-deprecated_sanitizerジェムを追加して、古い動作を行うことができます。このジェムはオプトインであり、非推奨の警告を発行しません。

rails-deprecated_sanitizerはRails 4.2のみサポートされ、Rails 5.0ではメンテナンスされません。

新しいサニタイザの変更の詳細については、このブログ記事を参照してください。

3.6 assert_select

assert_selectは現在Nokogiriをベースにしています。その結果、以前は有効だったセレクタの一部がサポートされなくなりました。アプリケーションがこれらのスペルを使用している場合は、更新する必要があります。

  • 属性セレクタの値には、非英数字の文字が含まれている場合、引用符で囲む必要があるかもしれません。

    # 以前
    a[href=/]
    a[href$=/]
    
    # 現在
    a[href="/"]
    a[href$="/"]
    
  • 不正なHTMLを含むHTMLソースから構築されたDOMは、違いが生じる場合があります。

    例えば:

    # content: <div><i><p></i></div>
    
    # 以前:
    assert_select('div > i')  # => true
    assert_select('div > p')  # => false
    assert_select('i > p')    # => true
    
    # 現在:
    assert_select('div > i')  # => true
    assert_select('div > p')  # => true
    assert_select('i > p')    # => false
    
  • 選択されたデータにエンティティが含まれている場合、以前は生の値(例:AT&amp;T)が選択され、現在は評価されます(例:AT&T)。

    # content: <p>AT&amp;T</p>
    
    # 以前:
    assert_select('p', 'AT&amp;T')  # => true
    assert_select('p', 'AT&T')      # => false
    
    # 現在:
    assert_select('p', 'AT&T')      # => true
    assert_select('p', 'AT&amp;T')  # => false
    

さらに、置換の構文も変更されました。

今は:match CSSのようなセレクタを使用する必要があります。

assert_select ":match('id', ?)", 'comment_1'

また、アサーションが失敗した場合、正規表現の置換は異なる見た目になります。ここでは/hello/:

assert_select(":match('id', ?)", /hello/)

"(?-mix:hello)"になります:

Expected at least 1 element matching "div:match('id', "(?-mix:hello)")", found 0..
Expected 0 to be >= 1.

assert_selectの詳細については、Rails Dom Testingのドキュメントを参照してください。

4 Railties

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

4.1 削除

  • アプリケーションジェネレータから--skip-action-viewオプションが削除されました。(Pull Request)

  • rails applicationコマンドが削除され、代替機能はありません。(Pull Request)

4.2 非推奨

  • 本番環境のconfig.log_levelの不足が非推奨となりました。(Pull Request)

  • rake test:alltestフォルダ内のすべてのテストを実行するため、rake testに非推奨となりました。(Pull Request)

  • rake test:all:dbrake test:dbに置き換えるために非推奨にしました。 (プルリクエスト)

  • Rails::Rack::LogTailerを非推奨にしましたが、代替はありません。 (コミット)

4.3 注目すべき変更点

  • デフォルトのアプリケーションのGemfileweb-consoleを導入しました。 (プルリクエスト)

  • モデルジェネレータにrequiredオプションを追加して、関連付けのために使用できるようにしました。 (プルリクエスト)

  • カスタムの設定オプションを定義するためのx名前空間を導入しました:

    # config/environments/production.rb
    config.x.payment_processing.schedule = :daily
    config.x.payment_processing.retries  = 3
    config.x.super_debugger              = true
    

    これらのオプションは設定オブジェクトを介して利用できます:

    Rails.configuration.x.payment_processing.schedule # => :daily
    Rails.configuration.x.payment_processing.retries  # => 3
    Rails.configuration.x.super_debugger              # => true
    

    (コミット)

  • 現在の環境の設定を読み込むためのRails::Application.config_forを導入しました。

    # config/exception_notification.yml
    production:
      url: http://127.0.0.1:8080
      namespace: my_app_production
    development:
      url: http://localhost:3001
      namespace: my_app_development
    
    # config/environments/production.rb
    Rails.application.configure do
      config.middleware.use ExceptionNotifier, config_for(:exception_notification)
    end
    

    (プルリクエスト)

  • アプリケーションジェネレータに--skip-turbolinksオプションを導入して、turbolinksの統合を生成しないようにしました。 (コミット)

  • アプリケーションをブートストラップする際の自動設定コードの慣例としてbin/setupスクリプトを導入しました。 (プルリクエスト)

  • config.assets.digestのデフォルト値を開発環境でtrueに変更しました。 (プルリクエスト)

  • rake notesの新しい拡張機能を登録するためのAPIを導入しました。 (プルリクエスト)

  • Railsテンプレートで使用するためのafter_bundleコールバックを導入しました。 (プルリクエスト)

  • Rails.gem_versionを導入し、Gem::Version.new(Rails.version)を返す便利なメソッドとしました。 (プルリクエスト)

5 Action Pack

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

5.1 削除

  • respond_withとクラスレベルのrespond_toをRailsから削除し、responders gem(バージョン2.0)に移動しました。これらの機能を引き続き使用するには、Gemfilegem 'responders', '~> 2.0'を追加してください。 (プルリクエスト, 詳細はこちら)

  • 非推奨のAbstractController::Helpers::ClassMethods::MissingHelperErrorAbstractController::Helpers::MissingHelperErrorに置き換えました。 (コミット)

5.2 非推奨

  • *_pathヘルパーのonly_pathオプションを非推奨にしました。 (コミット)

  • assert_tagassert_no_tagfind_tagfind_all_tagassert_selectに置き換えました。 (コミット)

  • ルータの:toオプションにシンボルまたは"#"文字を含まない文字列を設定するサポートを非推奨にしました:

    get '/posts', to: MyRackApp    => (変更の必要なし)
    get '/posts', to: 'post#index' => (変更の必要なし)
    get '/posts', to: 'posts'      => get '/posts', controller: :posts
    get '/posts', to: :index       => get '/posts', action: :index
    

    (コミット)

  • URLヘルパーで文字列のキーを使用することを非推奨にしました:

    # bad
    root_path('controller' => 'posts', 'action' => 'index')
    
    # good
    root_path(controller: 'posts', action: 'index')
    

    (プルリクエスト)

5.3 注目すべき変更点

  • ドキュメントから*_filterメソッド群を削除しました。これらの使用は非推奨であり、*_actionメソッド群を使用することが推奨されています:

    after_filter          => after_action
    append_after_filter   => append_after_action
    append_around_filter  => append_around_action
    append_before_filter  => append_before_action
    around_filter         => around_action
    before_filter         => before_action
    prepend_after_filter  => prepend_after_action
    prepend_around_filter => prepend_around_action
    prepend_before_filter => prepend_before_action
    skip_after_filter     => skip_after_action
    skip_around_filter    => skip_around_action
    skip_before_filter    => skip_before_action
    skip_filter           => skip_action_callback
    

    アプリケーションが現在これらのメソッドに依存している場合は、代わりに*_actionメソッドを使用する必要があります。これらのメソッドは将来的に非推奨となり、最終的にRailsから削除されます。

    (コミット 1, 2)

  • render nothing: trueまたはnilのボディをレンダリングすると、レスポンスボディに単一のスペースのパディングが追加されなくなりました。 (プルリクエスト)

  • Railsは、テンプレートのダイジェストをETagに自動的に含めるようになりました。 (プルリクエスト)

  • URLヘルパーに渡されるセグメントは、自動的にエスケープされるようになりました。 (コミット)

  • グローバルに許可されるパラメータを構成するためのalways_permitted_parametersオプションを導入しました。この設定のデフォルト値は['controller', 'action']です。 (プルリクエスト)

  • RFC 4791からHTTPメソッドMKCALENDARを追加しました。 (プルリクエスト)

  • *_fragment.action_controller通知には、コントローラとアクション名がペイロードに含まれるようになりました。 (プルリクエスト)

  • ルーティングエラーページを改善し、ルート検索に対して曖昧なマッチングを追加しました。 (プルリクエスト)

  • CSRFの失敗のログ記録を無効化するオプションを追加しました。 (プルリクエスト)

  • Railsサーバーが静的アセットを提供するように設定されている場合、クライアントがサポートしており、ディスク上に事前生成されたgzipファイル(.gz)がある場合、gzipアセットが提供されるようになりました。デフォルトでは、アセットパイプラインは圧縮可能なすべてのアセットに対して.gzファイルを生成します。gzipファイルを提供することで、データ転送を最小限に抑え、アセットリクエストを高速化することができます。本番環境でRailsサーバーからアセットを提供している場合は、常にCDNを使用してください。 (プルリクエスト)

  • 統合テストでprocessヘルパーを呼び出す場合、パスには先頭にスラッシュが必要です。以前は省略することができましたが、それは実装の副産物であり意図的な機能ではありませんでした。例:

    test "list all posts" do
      get "/posts"
      assert_response :success
    end
    

6 Action View

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

6.1 廃止予定

  • AbstractController::Base.parent_prefixesを廃止しました。ビューを検索する場所を変更する場合は、AbstractController::Base.local_prefixesをオーバーライドしてください。 (プルリクエスト)

  • ActionView::Digestor#digest(name, format, finder, options = {})を廃止しました。引数はハッシュとして渡す必要があります。 (プルリクエスト)

6.2 注目すべき変更

  • render "foo/bar"は、render template: "foo/bar"ではなく、render file: "foo/bar"に展開されるようになりました。 (プルリクエスト)

  • フォームヘルパーは、非表示フィールドの周りにインラインCSSを持つ<div>要素を生成しなくなりました。 (プルリクエスト)

  • コレクションでレンダリングされるパーシャルに使用するための#{partial_name}_iterationという特別なローカル変数を導入しました。indexsizefirst?last?メソッドを介して現在のイテレーションの状態にアクセスできます。 (プルリクエスト)

  • プレースホルダのI18nは、labelのI18nと同じ規則に従います。 (プルリクエスト)

7 Action Mailer

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

7.1 廃止予定

  • メーラー内の*_pathヘルパーを廃止しました。常に*_urlヘルパーを使用してください。 (プルリクエスト)

  • deliver / deliver!を廃止し、deliver_now / deliver_now!を使用するようにしました。 (プルリクエスト)

7.2 注目すべき変更

  • テンプレートでlink_tourl_forはデフォルトで絶対URLを生成するようになりました。only_path: falseを渡す必要はもはやありません。 (コミット)

  • 非同期にメールを配信するために、deliver_laterを導入し、アプリケーションのキューにジョブをエンキューするようにしました。 (プルリクエスト)

  • メーラープレビューを開発環境以外でも有効にするためのshow_previews構成オプションを追加しました。 (プルリクエスト)

8 Active Record

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

8.1 削除

  • cache_attributesおよび関連するメソッドを削除しました。すべての属性はキャッシュされます。 (プルリクエスト)

  • 廃止予定のメソッドActiveRecord::Base.quoted_locking_columnを削除しました。 (プルリクエスト)

  • 廃止予定のActiveRecord::Migrator.proper_table_nameを削除しました。代わりにActiveRecord::Migrationのインスタンスメソッドproper_table_nameを使用してください。 (プルリクエスト)

  • 未使用の:timestampタイプを削除しました。すべての場合において:datetimeにエイリアスします。XMLシリアライズなど、Active Recordの外部にカラムタイプが送信される場合の不整合を修正します。 (プルリクエスト)

    廃止予定

  • after_commitafter_rollback内でのエラーの無視を廃止しました。 (プルリクエスト)

  • has_many :through関連でのカウンターキャッシュの自動検出のサポートが廃止されました。 代わりに、スルーレコードのhas_manybelongs_to関連でカウンターキャッシュを手動で指定する必要があります。 (プルリクエスト)

  • .findまたは.exists?にActive Recordオブジェクトを渡すことは廃止されました。まずオブジェクトに対してidを呼び出してください。 (コミット 1, 2)

  • PostgreSQLの範囲値の除外開始に対する不完全なサポートを廃止しました。現在、PostgreSQLの範囲をRubyの範囲にマッピングしていますが、Rubyの範囲は除外開始をサポートしていないため、完全な変換は不可能です。

    現在の解決策である開始の増分は正しくありませんし、廃止されました。succが定義されていないサブタイプの場合、除外開始を持つ範囲に対してはArgumentErrorが発生します。 (コミット)

  • 接続なしでDatabaseTasks.load_schemaを呼び出すことは廃止されました。代わりにDatabaseTasks.load_schema_currentを使用してください。 (コミット)

  • 置換なしでsanitize_sql_hash_for_conditionsを廃止しました。クエリと更新を実行するためにRelationを使用することが推奨されるAPIです。 (コミット)

  • add_timestampst.timestampsnullオプションを指定せずに使用することは廃止されました。Rails 5では、デフォルトのnull: truenull: falseに変更されます。 (プルリクエスト)

  • Active Recordで不要なReflection#source_macroを置換なしで廃止しました。 (プルリクエスト)

  • 置換なしでserialized_attributesを廃止しました。 (プルリクエスト)

  • カラムが存在しない場合にcolumn_for_attributeからnilを返すことは廃止されました。Rails 5.0では、代わりにヌルオブジェクトが返されます。 (プルリクエスト)

  • 置換なしで、インスタンスの状態に依存する関連(引数を受け取るスコープで定義されたもの)を使用して.joins.preload.eager_loadを使用することは廃止されました。 (コミット)

8.2 注目すべき変更点

  • SchemaDumpercreate_tableforce: :cascadeを使用します。これにより、外部キーが存在する場合にスキーマを再読み込みすることが可能になります。

  • 単数形の関連にrequiredオプションを追加しました。これにより、関連に対して存在検証が定義されます。 (プルリクエスト)

  • ActiveRecord::Dirtyは、可変値へのインプレース変更を検出するようになりました。Active Recordモデルのシリアライズされた属性は、変更がない場合に保存されなくなりました。これは、PostgreSQL上の文字列カラムやJSONカラムなどの他のタイプでも機能します。 (プルリクエスト 1, 2, 3)

  • 現在の環境のデータベースを空にするためのdb:purge Rakeタスクを導入しました。 (コミット)

  • ActiveRecord::Base#validate!を導入しました。これにより、レコードが無効な場合にActiveRecord::RecordInvalidが発生します。 (プルリクエスト)

  • validatevalid?のエイリアスとして導入しました。 (プルリクエスト)

  • touchは複数の属性を一度にタッチすることができるようになりました。 (プルリクエスト)

  • PostgreSQLアダプタは、PostgreSQL 9.4+でjsonbデータ型をサポートするようになりました。 (プルリクエスト)

  • PostgreSQLおよびSQLiteアダプタは、文字列カラムのデフォルトの制限を255文字から削除しました。 (プルリクエスト)

  • PostgreSQLアダプタでcitextカラムタイプをサポートするようになりました。 (プルリクエスト)

  • PostgreSQLアダプタでユーザーが作成した範囲型をサポートするようになりました。 (コミット)

  • sqlite3:///some/pathは絶対システムパス/some/pathに解決されるようになりました。相対パスの場合は、代わりにsqlite3:some/pathを使用してください。 (以前は、sqlite3:///some/pathは相対パスsome/pathに解決されました。この動作はRails 4.1で廃止されました)。 (プルリクエスト)

  • MySQL 5.6以降での小数秒のサポートを追加しました。 (プルリクエスト 1, 2)

  • モデルをきれいに表示するために、ActiveRecord::Base#pretty_printを追加しました。 (プルリクエスト)

  • ActiveRecord::Base#reloadは、m = Model.find(m.id)と同じように動作するようになりました。 つまり、カスタムのSELECTからの余分な属性を保持しなくなりました。 (プルリクエスト)

  • ActiveRecord::Base#reflectionsは、シンボルキーの代わりに文字列キーを持つハッシュを返すようになりました。 (プルリクエスト)

  • マイグレーションのreferencesメソッドは、外部キーのタイプを指定するためのtypeオプションをサポートするようになりました(例::uuid)。 (プルリクエスト)

9 Active Model

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

9.1 削除

9.2 非推奨

  • reset_#{attribute}restore_#{attribute}に非推奨としました。 (プルリクエスト)

  • ActiveModel::Dirty#reset_changesclear_changes_informationに非推奨としました。 (プルリクエスト)

9.3 注目すべき変更

  • valid?の別名としてvalidateを導入しました。 (プルリクエスト)

  • ActiveModel::Dirtyrestore_attributesメソッドを導入し、変更(dirty)された属性を以前の値に戻します。 (プルリクエスト 1, 2)

  • has_secure_passwordは、デフォルトで空のパスワード(スペースのみを含むパスワード)を許可するようになりました。 (プルリクエスト)

  • has_secure_passwordは、バリデーションが有効な場合、与えられたパスワードが72文字未満であることを検証するようになりました。 (プルリクエスト)

10 Active Support

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

10.1 削除

  • 非推奨のNumeric#agoNumeric#untilNumeric#sinceNumeric#from_nowを削除しました。 (コミット)

  • ActiveSupport::Callbacksの非推奨の文字列ベースの終端子を削除しました。 (プルリクエスト)

10.2 非推奨

  • 代替なしで非推奨のKernel#silence_stderrKernel#captureKernel#quietlyを削除しました。 (プルリクエスト)

  • Class#superclass_delegating_accessorを非推奨とし、Class#class_attributeを使用するようにしました。 (プルリクエスト)

  • ActiveSupport::SafeBuffer#prepend!を非推奨とし、ActiveSupport::SafeBuffer#prependが同じ機能を実行するようにしました。 (プルリクエスト)

10.3 注目すべき変更

  • テストケースの実行順序を指定するための新しい設定オプションactive_support.test_orderを導入しました。このオプションは現在はデフォルトでsortedになっていますが、Rails 5.0ではrandomに変更されます。 (コミット)

  • Object#tryObject#try!は、ブロック内で明示的なレシーバーなしで使用することができるようになりました。 (コミット, プルリクエスト)

  • travel_toテストヘルパーは、usecコンポーネントを0に切り捨てるようになりました。 (コミット)

  • Object#itselfを同一関数として導入しました。 (コミット 1, 2)

  • Object#with_optionsは、ブロック内で明示的なレシーバーなしで使用することができるようになりました。 (プルリクエスト)

  • 文字列の単語数で文字列を切り詰めるためのString#truncate_wordsを導入しました。 (プルリクエスト)

  • Hash#transform_valuesHash#transform_values!を追加し、ハッシュの値を変更する一般的なパターンを簡素化しましたが、キーは変更しません。 (プルリクエスト)

  • humanizeインフレクターヘルパーは、先頭のアンダースコアを削除するようになりました。 (コミット)

  • Concern#class_methodsmodule ClassMethodsの代替として導入し、module Foo; extend ActiveSupport::Concern; endの冗長なコードを避けるためのKernel#concernを導入しました。 (コミット)

  • 定数の自動ロードと再読み込みに関する新しいガイドを追加しました。

11 クレジット

Railsへの多くの時間を費やした多くの人々に感謝します。Railsを安定かつ堅牢なフレームワークにしてくれたすべての人々に感謝します。

フィードバック

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

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

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

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

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