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

既存のアプリケーションをアップグレードするのであれば、その前に質のよいテストカバレッジを用意するのはよい考えです。Railのバージョンが4.1に達していない場合は、まずアプリケーションをRails 4.1にアップグレードし、アプリケーションが期待どおりに動作することを確認してからRails 4.2にアップグレードしてください。アップグレードの際に注意すべき点のリストについては、Ruby on Rails アップグレードガイドを参照してください。

2 主要な変更

2.1 Active Job

Active Jobとは、Rails 4.2から採用された新しいフレームワークです。Active Jobは、ResqueDelayed JobSidekiqなど、さまざまなクエリシステムの最上位に位置するものです。

Active Job APIで記述されたジョブは、Active Jobがサポートするどのクエリシステムでもアダプタを介して実行できます。Active Jobは、ジョブを直ちに実行できるインラインランナー(inline runner)として最初から構成済みです。

ジョブの引数にActive Recordオブジェクトを与えたくなることはよくあります。Active Jobでは、オブジェクト参照をURI(uniform resource identifiers)として渡します。オブジェクト自身をマーシャリングしません。このURIは、Railsに新しく導入されたGlobal IDライブラリによって生成され、ジョブはこれを元にオブジェクトを参照します。Active Recordオブジェクトをジョブの引数として渡すと、内部的には単にGlobal IDが渡されます。

たとえば、trashableというActive Recordオブジェクトがあるとすると、以下のようにシリアライズをまったく行わずにジョブに引き渡すことができます。

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

詳細については、Active Jobの基礎を参照してください。

2.2 メールの非同期処理

今回のリリースで、Action MailerはActive Jobの最上位に配置され、deliver_laterメソッドを用いてジョブキューからメールを送信可能になりました。これにより、キューを非同期(asynchronous)に設定すればコントローラやモデルの動作がキューによってブロックされなくなりました(ただしデフォルトのインラインキューではコントローラやモデルの動作はブロックされます)。

deliver_nowメソッドを使うと、メールを直ちに送信できます。

2.3 Adequate Record

Adequate Recordとは、Active Recordの性能を向上させるさまざまな改良の総称であり、いわゆるfindfind_by呼び出し、および一部の関連付けクエリの動作速度を最大2倍に向上させます。

この改善は、よく用いられるSQLクエリをSQLのプリペアドステートメント(prepared statement)としてキャッシュし、同様の呼び出しが発生した場合にそれを使い回すことによって行っています。これにより、以後の呼び出しでのクエリ生成作業の大半がスキップされるようになります。詳細については、Aaron Pattersonのブログ記事を参照してください。

Active Recordは、サポートされている動作に対してこのAdequate Recordを自動的に適用するので、コードや設定の変更など開発者が何かを行う必要はありません。Adequate Recordでサポートされている動作の例を以下に示します。

Post.find(1)  # 最初の呼び出しで準備済みSQL文が生成およびキャッシュされる
Post.find(2)  # キャッシュされた準備済みSQL文は以後の呼び出しで再利用される

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

post.comments
post.comments(true)

上の例で、メソッド呼び出しで渡された値そのものは準備済みSQL文のキャッシュに含まれていない点にご注目ください。全体をキャッシュしているのではなく、キャッシュされたSQL文が値のプレースホルダーとなっており、値だけ差し替えられている点が重要です。

以下のような場合にはキャッシュは使われません。

  • モデルにデフォルトスコープが設定されている
  • モデルで単一テーブル継承(STI)が使われている
  • findで(単一のidではなく)idのリストを検索する。例:
  # キャッシュされない
  Post.find(1, 2, 3)
  Post.find([1,2])
  • find_byでSQLフラグメントが使われている
  Post.find_by('published_at < ?', 2.weeks.ago)

2.4 Web Console gem

Rails 4.2で新規生成したアプリケーションにはデフォルトでWeb Console gemが含まれるようになりました。Web Console gemはすべてのエラーページに対話操作可能なRubyコンソールを追加し、consoleビューとコントローラヘルパーメソッドを提供します。

エラーページで対話的コンソールが利用できるようになったことで、例外が発生したコンテキストで自由にコードを実行できるようになりました。consoleヘルパーは、画面出力が完了した最終的な状態のコンテキストで対話的コンソールを起動します。このヘルパーは、どのビューやコントローラからでも自由に呼び出すことができます。

2.5 外部キーのサポート

マイグレーション用DSLで外部キーの追加・削除がサポートされました。今後は外部キーもschema.rbにダンプされます。現時点では、外部キーがサポートされるのはmysqlmysql2、およびpostgresqlアダプタのみです。

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

# `users.lng_id`を参照する`articles.author_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

完全な説明については、APIドキュメントのadd_foreign_key およびremove_foreign_keyを参照してください。

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_toresponders 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:3000http://localhost:3000の振る舞いはどちらも以前と同じです)。

ただし、今回の変更により、別のPCからRailsサーバーへのアクセスは以前と同じようにはできなくなります。たとえば、development環境が仮想マシン上にあり、ホストマシンからこのdevelopment環境にアクセスする場合などがこれに該当します。 このような場合、サーバーを起動する際にrails server -b 0.0.0.0とすることで、以前と同じ動作を再現できます。

以前の動作に戻す場合は、必ずファイアウォールを適切に設定し、自社ネットワーク内の信頼できるPCだけが開発用サーバーにアクセスできるようにしてください。

3.4 HTMLサニタイザ

HTMLサニタイザはLoofahNokogiriをベースにした、より新しく堅固な実装に置き換えられました。新しいサニタイザはより安全で、かつ強力で柔軟性に富んでいます。

新しいアルゴリズムが採用されたことにより、特定の汚染された入力をサニタイズした結果が従来と異なる場合があります。

従来のサニタイザと完全に同じ結果を得たい場合は、rails-deprecated_sanitizer gemを Gemfileに追加することで従来と同じ結果を得られます。このgemはオプトイン(opt-in: 自らの責任で選ぶこと)であるため、非推奨の警告を表示しません。

rails-deprecated_sanitizerのサポートはRails 4.2でしか行われないことにご注意ください。Rails 5.0ではメンテナンスされません。

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

3.5 assert_select

assert_selectNokogiriベースで実装されました。 これにより、以前は有効であったセレクタの一部がサポートされなくなりました。アプリケーションでこれらを使っている場合は、アプリケーションを変更する必要があります。

  • 属性セレクタの値に英文字以外の文字が含まれる場合は、値を引用符で囲む必要が生じることがあります

    # 以前の動作
    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など)。

    # <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
    

4 Railties

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

4.1 削除されたもの

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

  • rails applicationコマンドは削除されました。他のコマンドへの置き換えは行われていません。 (プルリク

4.2 非推奨

  • production環境でconfig.log_levelを未設定のままにすることが非推奨になりました。 (プルリク

  • rake test:allが非推奨になりました。現在はrake testの方が推奨されます(これによりtestフォルダ以下のテストがすべて実行されます)。 (プルリク

  • rake test:all:dbが非推奨になりました。現在はrake test:dbが推奨されます。 (プルリク

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

4.3 主な変更点

  • web-consoleがデフォルトのアプリケーションのGemfileに導入されました。 (プルリク

  • モデル関連付けをおこなうジェネレータにrequiredオプションが追加されました。 (プルリク

  • カスタム設定オプションを定義する時に利用できるx名前空間が導入されました。

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

    これらのオプションは、以下のようにconfigurationオブジェクト全体で利用できます。

    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/production.rb
    Rails.application.configure do
      config.middleware.use ExceptionNotifier, config_for(:exception_notification)
    end
    

    プルリク

  • アプリケーションのジェネレータに--skip-turbolinksオプションが導入されました。これは生成時にTurbolinksを統合しないためのオプションです。 (コミット

  • bin/setupスクリプトが導入されました。これはアプリケーションの初期設定時に設定を自動化するためのコードの置き場所となります。 (プルリク

  • development環境において、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(version 2.0)に切り出されました。引き続きこの機能を使う場合は、Gemfileにgem "responders", "~> 2.0"を追加してください。 (プルリク詳細

  • 非推奨のAbstractController::Helpers::ClassMethods::MissingHelperErrorが削除されました。今後はAbstractController::Helpers::MissingHelperErrorをお使いください。 (コミット

5.2 非推奨

  • *_pathヘルパーでonly_pathオプションを利用することが非推奨になりました。 (コミット

  • assert_tagassert_no_tagfind_tagfind_all_tagが非推奨になりました。今後はassert_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ヘルパー内において、ハッシュのキーに文字列を使うことが非推奨になりました。例:

    # 良くない例
    root_path('controller' => 'posts', 'action' => 'index')
    
    # 良い例
    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から削除される予定です。

    (コミット12

  • render nothing: true、およびbodyをnilにしたレンダリングを行った場合にレスポンスのbodyを埋めていたスペース文字1つが追加されなくなりました。 (プルリク

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

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

  • グローバルに使ってよいパラメータを指定するためのalways_permitted_parametersが導入されました。この設定のデフォルト値は['controller', 'action']です。 (プルリク

  • RFC 4791に基づいたMKCALENDARというHTTPメソッドを追加しました。 (プルリク

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

  • ルーティング探索があいまい一致した場合のRouting Errorページの表示が改良されました。 (プルリク

  • CSRFによる失敗のログ出力を無効にするオプションが追加されました。 (プルリク

  • Railsが静的なアセットを送信するように設定されている場合、ブラウザがgzip圧縮ファイルをサポートし、かつgzipファイル(.gz)がサーバーのディスク上にあれば、アセットのgzip圧縮がサポートされるようになりました。 アセットパイプラインは、圧縮可能なすべてのアセットから.gzファイルをデフォルトで生成するようになりました。gzip圧縮されたファイルを送信することで、通信量が最小化され、アセットへのリクエストが高速化されます。Railsがproduction環境でアセットを提供する場合は、必ず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 = {})は非推奨になりました。 今後、引数は1つのハッシュとして渡す必要があります。 (プルリク

6.2 主な変更点

  • render "foo/bar"が拡張され、render file: "foo/bar"ではなくrender template: "foo/bar"を実行するようになりました。 (プルリク

  • フォームヘルパーが変更され、インラインCSSを持つ<div>要素が隠しフィールドの周辺で生成されなくなりました。 (プルリク

  • #{partial_name}_iterationという特殊なローカル変数が導入されました。このローカル変数は、コレクションのレンダリング時にパーシャルを使います。これにより、#index#size#first?last?メソッドを使って現在のイテレート中の状態にアクセスできるようになりました。 (プルリク

  • プレースホルダの国際化(I18n)がlabelの国際化と同じルールに従うようになりました。 (プルリク

7 Action Mailer

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

7.1 非推奨

  • Action Mailerの*_pathヘルパーが非推奨になりました。今後は必ず*_urlヘルパーをお使いください。 (プルリク

  • deliverdeliver!が非推奨になりました。今後はdeliver_nowdeliver_now!をお使いください。 (プルリク

7.2 主な変更点

  • link_tourl_forを使って絶対パスのURLを生成するとき、only_path: falseを渡す必要がなくなりました。 (コミット

  • deliver_laterが導入されました。これは、アプリケーション内キューにジョブを流し込み、メールを非同期配信します。 (プルリク

  • show_previews設定オプションが追加されました。これはdevelopment環境の外でメーラーをプレビューできるようにするためのものです。 (プルリク

8 Active Record

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

8.1 削除されたもの

  • cache_attributesおよびその同類が削除されました。すべての属性は常にキャッシュされるようになりました。 (プルリク

  • 非推奨のActiveRecord::Base.quoted_locking_columnメソッドが削除されました。 (プルリク

  • 非推奨のActiveRecord::Migrator.proper_table_nameが削除されました。今後はActiveRecord::Migrationproper_table_nameインスタンスメソッドを代わりにお使いください。 (プルリク

  • 未使用の:timestampタイプが削除されました。今後は常に透過的に:datetimeにエイリアスされるようになります。これにより、XMLシリアライズなどでカラムの種類がActive Recordの外に送信された場合の不整合が修正されます。 (プルリク

8.2 非推奨

  • after_commitafter_rollback内でのエラーの抑制が非推奨になりました。 (プルリク

  • has_many :through関連付けにおけるカウンタキャッシュの自動検知サポートが非推奨になりました(元々壊れていました)。今後は、has_many関連付けやbelongs_to関連付けでレコード全体を手動でカウンタキャッシュする必要があります。 (プルリク

  • .find.exists?にActive Recordオブジェクトを渡すことは非推奨になりました。最初にオブジェクトのidを呼び出すべきです。 (コミット12

  • PostgreSQLで開始値を除外する範囲値に対する(不十分な)サポートが非推奨になりました。現在はPostgreSQLのRangeをRubyのRangeクラスにマップしています。ただし、RubyのRangeクラスでは開始値が外せないため、この方法は完全には実現できません。

    現時点における、開始値を増分(increment)する解決方法は正しくないため、非推奨になりました。増分の方法が不明なサブタイプ(例: #succは増分方法が未定義)については、開始値を除外する範囲指定によってArgumentErrorが発生します。 (コミット

  • 接続が行われていない状態でのDatabaseTasks.load_schemaの呼び出しが非推奨になりました。今後はDatabaseTasks.load_schema_currentをお使いください。 (コミット

  • Replacementを使わずにsanitize_sql_hash_for_conditionsを使うことが非推奨になりました。クエリを発行したり更新する際にはRelationを使うことが、推奨APIとなります。 (コミット

  • :nullオプションを渡さずにadd_timestampst.timestampsを使うことが非推奨になりました。現在の初期値はnull: trueですが、Rails 5ではnull: falseに変更される予定です。 (プルリク

  • Reflection#source_macroが非推奨になりました。今後Active Recordでの必要性がなくなったため、代替はありません。 (プルリク

  • serialized_attributesは非推奨になりました。代替はありません。 (プルリク

  • カラムがない場合にcolumn_for_attributenilを返す動作が非推奨になりました。Rails 5.0ではnullオブジェクトが返されるようになる予定です。 (プルリク

  • Replacementを使わずに、インスタンスの状態に依存するアソシエーション(例: 引数をとるスコープと共に定義される場合)において、.joins.preload.eager_loadを使うことが非推奨になりました。 (コミット

8.3 主な変更点

  • create_tableが実行されるとき、SchemaDumperforce: :cascadeを使うようになりました。これにより、外部キーが適切であればスキーマが再読み込みできるようになります。

  • 単独の関連付けに対する:requiredオプションが追加されました。これは関連付けが存在することを確認するバリデーション(validation)を定義します。 (プルリク

  • ActiveRecord::Dirtyの動作が変更され、改変可能な値(mutable value)に対する適切な変更を検出するようになりました。 何も変更がないときは、Active Recordモデル内のシリアライズされた要素は保存されなくなります。これらの変更は、PostgreSQLのstringカラムやjsonカラムでも同様に機能します。 (プルリク1, 2, 3

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

  • レコードが正しくないときにActiveRecord::RecordInvalidを返すActiveRecord::Base#validate!が導入されました。 (プルリク

  • valid?のエイリアスとしてvalidateが導入されました。 (プルリク

  • touchが複数の属性を一度に扱えるようになりました。 (プルリク

  • PostgreSQLアダプターでPostgreSQL 9.4+のjsonbデータタイプがサポートされました。 (プルリク

  • PostgreSQLとSQLiteアダプターで、String型の初期値から255文字制限が外れました。 (プルリク

  • PostgreSQLアダプターのカラム型でcitextがサポートされました。 (プルリク

  • PostgreSQLアダプターでユーザ定義のRangeタイプがサポートされました。 (コミット

  • sqlite3:///some/pathのようなパスは今後絶対システムパスで解決されるようになりました。相対パスが必要な場合は、代わりにsqlite3:some/pathのような表記をお使いください (従来sqlite3:///some/pathsome/pathのような相対パスで解決されていましたが、これはRails 4.1で非推奨となっていました)。 (プルリク

  • MySQL 5.6以上で小数点以下の秒数サポートが追加されました。 (プルリク12

  • モデルを整えた形式で出力する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 削除されたもの

  • 非推奨のValidator#setupが削除されました。代替はありません。 (プルリク

9.2 非推奨

  • reset_#{attribute}が非推奨になりました。今後はrestore_#{attribute}をお使いください。 (プルリク

  • ActiveModel::Dirty#reset_changesが非推奨になりました。今後はclear_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での文字列ベースの終端指定子(terminator)がこれまで非推奨になっていたのが削除されました。 (プルリク

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コンポーネントをゼロに切り詰めるように変更されました。 (コミット

  • オブジェクト自身を返す恒等関数としてObject#itselfが導入されました。 (コミット1, 2

  • ブロック中で明示的にレシーバーを示さなくてもObject#with_optionsが使えるようになりました。 (プルリク

  • 単語数を指定して文字列を切り詰めるString#truncate_wordsが導入されました。 (プルリク

  • ハッシュの値を変更するときの共通のパターンを簡潔にするため、Hash#transform_valuesHash#transform_values!が追加されました。ただし、ハッシュのキーは変更されません。 (プルリク

  • アンダースコアなどを含むメソッド名などを英語らしくするhumanizeヘルパーメソッドが、冒頭のアンダースコアを除去するようになりました。 (コミット

  • Concern#class_methodsが導入されました。Kernel#concernと同様、これはmodule ClassMethodsを置き換えるためのものであり、module Foo; extend ActiveSupport::Concern; endのような冗長な定形コードを避けるためのものです。 (コミット

  • 自動読み込みやリロードに関する新しいガイドが追加されました。

11 クレジット表記

Railsを頑丈かつ安定したフレームワークにするために多大な時間を費やしてくださった多くの開発者については、Railsコントリビューターの完全なリストを参照してください。これらの方々全員に深く敬意を表明いたします。

フィードバックについて

Railsガイドは GitHub の yasslab/railsguides.jp で管理・公開されております。本ガイドを読んで気になる文章や間違ったコードを見かけたら、気軽に Pull Request を出して頂けると嬉しいです。Pull Request の送り方については GitHub の README をご参照ください。

原著における間違いを見つけたら『Rails のドキュメントに貢献する』を参考にしながらぜひ Rails コミュニティに貢献してみてください 🛠💨✨

本ガイドの品質向上に向けて、皆さまのご協力が得られれば嬉しいです。

Railsガイド運営チーム (@RailsGuidesJP)

支援・協賛

Railsガイドは下記の協賛企業から継続的な支援を受けています。支援・協賛にご興味あれば協賛プランからお問い合わせいただけると嬉しいです。

  1. Star
  2. このエントリーをはてなブックマークに追加