💬
Rails で強制的にすべてのクラスを読み込み
Railis の development や test 環境ではクラスが遅延読み込みされることがあります。
ここでいう遅延読み込みとは『クラス(定数)が参照されたときに初めて関連するファイルを読み込む』ような仕組みです。
なので例えば rails server
や rails console
を立ち上げただけでは『まだ全クラスが定義されていない』状態になっています。
詳しくは以下を参照。
基本的には利点がある機能なんですがたまーに調査や検証とかで『全クラスに対して網羅的に走査したい』みたいなことがあります。
例えば『特定のモデルクラスに対してアプリケーション上の制約を満たしているかどうか』みたいな検証をしたり『特定の module を mixin しているクラスを抽出する』などなど。
このようなときにクラスが遅延読み込みされていることで正しく走査できないことがあります。
Zeitwerk::Loader.eager_load_all ですべてのクラスを読み込む
クラスの読み込みは Zeitwerk
というライブラリで管理されています。
Zeitwerk::Loader.eager_load_all
を呼び出すことで Zeitwerk
で管理しているすべてのクラスが明示的に読み込まれます。
Zeitwerk::Loader.eager_load_all
Zeitwerk::Loader.eager_load_all
はそれなりに重い処理になるので基本的には必要な箇所でのみ利用するようにするとよいでしょう。
Discussion