- 開発
READ MORE
こんにちは、hachi8833です。BigBinaryシリーズ記事の第一弾をお送りします。
シリーズをとおして、元記事の全文の逐字訳ではなく再構成した記事としますのでご了承ください。詳しくは元記事を参照いただくようお願いいたします。
※Rails 5へのアップグレードの詳細な手順については本記事では省略いたします。詳しくはRailsアップグレードガイドなどをご覧ください。
Rails 5でrails new
すると生成されるconfig/initializers/new_framework_defaults.rbファイルは、Rails 5の新機能のオン/オフに使われます。この場合Rails 5の新機能はオンになります。
このファイルの冒頭に以下の記述があることからわかるように、Rails 5.0へのアップグレード作業を軽減するために導入されたものです。
This file contains migration options to ease your Rails 5.0 upgrade.
Rails 5へのアップグレードでは、Gemfileとrubygemのバンドリングを更新するといった作業のほかに、この新しいデフォルト設定ファイルについても配慮が必要です。
bin/rails app:update
で生成したnew_framework_defaults.rbはRails 4のアップグレードとRails 5で異なるconfig/initializers/new_framework_defaults.rbファイルはRails 4以下のアプリにはないので、アップグレード作業中にbin/rails app:update
を実行してこのファイルを生成する必要があります。このコマンドでは他にも多数のconfig/やbin/以下のファイルが生成・更新・置換されます。
Rails 5へのアップグレード中に上のコマンドで生成したconfig/initializers/new_framework_defaults.rbファイルでは、rails new
した場合と異なり、Rails 5の新機能はオフに設定されますので、これらの新機能がRails 4アプリの機能に影響せずに済みます。
実行後、新機能を確認しながら新機能を順次オンにすることで、アップグレード作業がやりやすくなります。
以下は本記事執筆時に確認した、Rails 4からのアップグレード中に生成されたnew_framework_defaults.rbの項目です。ファイルの冒頭に記載されているとおり、Railsアプリを再起動しないと有効になりません。
これらの設定項目はRailsガイド: 2.19 フレームワークの新しいデフォルト設定にも記載されていますが、生成したnew_framework_defaults.rbではRails.application.
をつけたフルパスになっています。
Rails.application.config.action_controller.per_form_csrf_tokens
false
、Rails 5ではtrue
Rails.application.config.action_controller.per_form_csrf_tokens = false # Rails 4以前
Rails.application.config.action_controller.forgery_protection_origin_check
false
、Rails 5ではtrue
Rails.application.config.action_controller.forgery_protection_origin_check = false # Rails 4以前
ActiveSupport.to_time_preserves_timezone
to_time
を呼んだときにレシーバのtimezoneを変えないようにするfalse
、Rails 5ではtrue
ActiveSupport.to_time_preserves_timezone = false # Rails 4以前
Rails.application.config.active_record.belongs_to_required_by_default
belongs_to
アソシエーションをデフォルトで必須にするfalse
、Rails 5ではtrue
Rails.application.config.active_record.belongs_to_required_by_default = false # Rails 4以前
ActiveSupport.halt_callback_chains_on_return_false
true
にすると、コールバックでfalse
が返された場合にコールバックチェーンを停止する(Rails 4との後方互換性のための設定)true
、Rails 5ではfalse
ActiveSupport.halt_callback_chains_on_return_false = false # Rails 4以前
Rails 5ではこのような場合にコールバックチェーンを停止しないのが基本なので、この項目は最終的にfalse
にする必要があります。
他の項目はRails 4からのアップグレード中に確認しながら順々にfalse
をtrue
にしますが、ここだけはtrue
をfalse
に変えることになるので、なかなかややこしいです。
参考: BigBinaryの別記事「Rails 5 does not halt callback chain when false is returned」でもこの設定項目について解説しています。
rails new
で設定される項目以下の項目は、Rails 5でrails new
したときにnew_framework_defaults.rbに含まれていました。私の環境でRails 4からアップグレードしたときには含まれていませんでした。
Rails.application.config.ssl_options
true
(Rails 4以前は`false)Rails.application.config.ssl_options = { hsts: { subdomains: true } } # Rails 5のみ
Rails 4からRails 5へのアップグレード時にbin/rails app:update
で生成・更新されるファイルはアプリの内容や設定によって異なります。
以下は、私の手元のシンプルなRails 4環境で、アップグレード中にコマンドの対話にすべてyes
と入力した場合に追加・置換・更新・削除されたファイルです。実際には対話ごとにファイルを変更してよいかどうかを確認してください。
「置換」はファイル全体を置き換えたもの、「更新」は内容をgsub
で更新したものを指します。