以下の内容はhttps://madogiwa0124.hatenablog.com/entry/2026/02/09/161016より取得しました。


`strict_loading_mode=:n_plus_one_only`をグローバルに設定してRails標準機能でN+1を検知するメモ📝

はじめに

Railsのstrict_loadingは「関連を意図せず遅延ロードしてない?」を検知できる便利機能ですが、Rails v8から strict_loading_mode をグローバル設定できて、しかも :n_plus_one_only が選べる のを最近知りました📝

Allow to configure strict_loading_mode globally or within a model.
Defaults to :all, can be changed to :n_plus_one_only.
https://github.com/rails/rails/blob/8-0-stable/activerecord/CHANGELOG.md

以下の記事で以前書いた時にはstrict_loading_mode = trueしかグローバルに設定できなかったので導入を躊躇っていたのですが、n_plus_one_onlyなら現実的に運用できそうだったので、導入してみたメモ📝

madogiwa0124.hatenablog.com

strict_loading_mode=:n_plus_one_onlyをグローバルに有効化する

以下の通り、development/test環境で有効化しました。

# config/environments/development.rb
config.active_record.strict_loading_by_default = true
config.active_record.strict_loading_mode = :n_plus_one_only
# config/environments/test.rb
config.active_record.strict_loading_by_default = true
config.active_record.strict_loading_mode = :n_plus_one_only

これだけで、development/test環境で関連の遅延ロードがN+1的に発生した場合に例外が発生するようになります🎉

またTIPSですが、consoleではstrict_loadingによるN+1の検知を無効化したい場合には以下のようにapplication.rb等で無効化してあげると良いかと思います。

# config/application.rb
console { ApplicationRecord.strict_loading_by_default = false }

おわりに

Rails 8でn_plus_one_onlyモードをグローバルで適用できるようになり、strict_loadingの運用がかなり現実寄りになった気がします。

Rails標準機能でN+1を検知できるのはありがたいですね🙏

参考リンク




以上の内容はhttps://madogiwa0124.hatenablog.com/entry/2026/02/09/161016より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14