はじめに
アプリの設定ファイルを見ていて config/application.rb
に以下のような記述が出てきました。
config.load_defaults X.Y
この load_defaults
が何をしているのか分からなかったため、調べてまとめてみました。
この記事では、load_defaults
の正体や、Railsのバージョン指定との違いについて、初心者の方にもわかりやすく解説していきます!
load_defaults とは
config.load_defaultsはターゲットバージョンとそれ以前のすべてのバージョンのデフォルトの設定値を読み込みます。
ref: 3.1 Railsバージョンごとのデフォルト値
誤解を恐れずに、ざっくりいうと load_defaults
は 「Rails がバージョンアップで変わった設定を、自分で選んで使えるようにするためのスイッチ」 です。
load_defaults の指定バージョンと gem での指定バージョンの違い
以前自分が混乱していたのは、この二つのバージョンば なぜ一致しないのか
という点で、混乱していました。
gem 'rails', 'x.y.z'
config.load_defaults X.Y
しかしこの二つは、全く別の意味を持っています。
指定方法 | 意味 |
---|---|
gem 'rails' | Rails本体のバージョン。つまり、使える機能(クラスやメソッド)のバージョン |
config.load_defaults | デフォルト設定のバージョン。つまり、Railsが用意している設定値の基準となるバージョン |
なぜ分かれている?
Ruby on Rails では いきなり設定まで全部変えるとアプリが壊れるリスクがあるため、
設定の切り替えは開発者が明示的に行う設計 になっています。
例えば、Rails 8 を使っていても、 load_defaults 7.2
であれば、 Rails 7.2までの設定でアプリが動くということになります。
注意点・補足
load_defaults
に将来のバージョンを指定すること(例:Rails 7 で load_defaults 8.0
)はできません。
これは、 load_defaults
は あらかじめ定義された設定しか読み込めないからです。
詳しくどうなってるかみたい方は以下で実際にコードを見てください。
また、new_framework_defaults_x_y.rb
を使用することで段階的なアップデートが可能です。
おわりに
Rails のバージョンアップはコードだけでなく設定にも注意が必要です。
load_defaults
や new_framework_defaults_x_y.rb
を理解しておくと、より安全・スムーズにアップデートできます。
将来的に config.load_defaults
を変更する前に、新しい設定項目を個別に確認・適用して、テストが通ることを確認する運用がオススメです。
参考文献