LoginSignup
8
3

More than 1 year has passed since last update.

rails 7.0では`config/initializers`配下のファイルが少なくなっている

Posted at

概要

rails new直後のconfig/initializers配下の初期化ファイルの数が多くユーザの認知的負荷につながっていました。
その中には必ずしもすべてのアプリケーションに必要とは限らない設定や、過去のアップグレードの中で既に不要になっている可能性がある設定が存在していたため、今回ファイル構成が見直され不要あったと判断されたファイルが削除されました。

rails7.0以前

バージョン7.0以前のrailsではrails new時にアプリケーションの初期設定のファイルがconfig/initializers配下に10ファイル作成されていました。

$ rails -v
Rails 6.1.4.4
$ rails new sample_app
$ tree config/initializers/
config/initializers/
├── application_controller_renderer.rb
├── assets.rb
├── backtrace_silencers.rb
├── content_security_policy.rb
├── cookies_serializer.rb
├── filter_parameter_logging.rb
├── inflections.rb
├── mime_types.rb
├── permissions_policy.rb
└── wrap_parameters.rb

rails7.0

rails7.0では認知的負荷を低減するために初期化ファイルの構成をシンプルにするため、初期化設定の一部をフレームワーク内のデフォルトの設定として定義することでrails new時に生成されるconfig/initializers配下ファイルの数を10ファイルから5ファイルに減らしています。

$ rails -v
Rails 7.0.0
$ rails new sample_app
$ tree config/initializers/
config/initializers/
├── assets.rb
├── content_security_policy.rb
├── filter_parameter_logging.rb
├── inflections.rb
└── permissions_policy.rb

削除されたファイルの解説

削除された初期化ファイルは以下の5つです。

  • application_controller_renderer.rb
  • backtrace_silencers.rb
  • cookies_serializer.rb
  • mime_types.rb
  • wrap_parameters.rb

各ファイルについての役割は以下の通りです。

application_controller_renderer.rb

コントローラーの以外でviewテンプレートをrenderする際のデフォルト設定値を指定します。
多くのアプリケーションでは不要な設定であることと、少なくともrails new直後の状態では不要なため削除されたようです。

対応されたPR: https://github.com/rails/rails/pull/42538

backtrace_silencers.rb

任意の処理でbacktrace表示を無効化する設定ファイルです。
削除された理由についての詳細は書かれていませんが、このファイルが存在することにより上記の機能が提供されるメリットよりもinitializersファイルが増えてしまうことによる認知的負荷のデメリットの方が大きいと判断がされたようです。

対応されたPR: https://github.com/rails/rails/pull/43237

cookies_serializer.rb

cookieのシリアライザの方式を指定するファイルです。バージョン4.1以降のrailsアプリではデフォルトで:marshalが定義されrails new時に作成されるconfig/initializers/cookies_serializer.rbによっての値を:jsonに上書きされていました。
背景としては、過去rails4.0から4.1へのバージョンアップの際に、互換性を維持する為デフォルトの設定は変更せず、新しく作るアプリケーションのみ変更するためにconfig/initializers/cookies_serializer.rbで上書きしてた為です。
rails7になりinitializersファイルを減らすため、デフォルト値が:jsonに変更されconfig/initializers/cookies_serializer.rbは不要になりました。

対応されたPR: https://github.com/rails/rails/pull/42538

mime_types.rb

mime typeの追加を行うファイルです。アプリケーション固有のカスタムmime typeをすることも可能です。
削除された理由についての詳細は書かれていませんが、このファイルが存在することにより上記の機能が提供されるメリットよりもinitializersファイルが増えてしまうことによる認知的負荷のデメリットの方が大きいと判断がされたようです。

対応されたPR: https://github.com/rails/rails/pull/43237

wrap_parameters.rb

これまでファイルの中で定義されていた以下の設定値がデフォルトの設定になりこのファイルは不要になりました。

ActiveSupport.on_load(:action_controller) do
  wrap_parameters format: [:json]
end

wrap_parameter自体についてはこちらの記事でも書いています。

対応されたPR: https://github.com/rails/rails/pull/43237

8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3