ActiveSupport::Autoload
参考:
ActiveSupport::Autoload | Ruby on Rails API [Official]
使い方
- 自動読み込みしたい定数を定義するモジュールで内で
extend ActiveSupport::Autoload
する。 autoload :ConstantName, "path/to/file"
- 定数及びファイル名が Rails の命名規則に従っている場合はパスを省略できる。
- 指定したファイルで定数を定義する必要がある。
- 自動読み込みのパスを省略した場合は、命名規則に沿ったファイルで定数を定義する必要がある。
Mod.eager_load!
を実行すると、自動読み込みが設定された全ての定数に対して強制的に即時読み込みを行う。- モジュールのネストに従って探索を行うので、(未ロードの) ネスト外のモジュールで定数が定義されている場合には定義を見つけることはできない。(意図したのとは違った定数が使われる場合がある。)
参考:
ActiveSupport::Autoload を単体で使う | 鳩舎
Rails の autoload の使い方に気をつけよう | TechRacho
定数の自動読み込みと再読み込み | Rails ガイド [公式]
require_dependency | Rails ガイド [公式]
定数がトリガーされない場合 | Rails ガイド [公式]
autoload
参考:
autoload – ActiveSupport::Autoload | Ruby on Rails API [Official]
eager_autoload / eager_autoload!
eager_autoload
ブロック内で autoload
宣言した定数は eager_load!
実行時に自動読み込みを即座に実行する。
eager_autoload do autoload :InstantlyAutoloadedModule end eager_load!
参考:
active support | Adways エンジニアブログ
eager_autoload – ActiveSupport::Autoload | Ruby on Rails API [Official]
eager_load! – ActiveSupport::Autoload | Ruby on Rails API [Official]
頭字語/アクロニム (acronym)
参考:
Rails autoloading fully capitalized name like API – Stack Overflow
ActiveSupport::Dependencies
参考:
require せずに勝手に読み込まれるとでも思ってるの? – Qiita
Rails の自動読み込みを支える技術 – SlideShare
rails/dependencies.rb at v5.2.2.1 · rails/rails – GitHub
const_missing – rails/dependencies.rb at v5.2.2.1 · rails/rails – GitHub
Ruby の autoload
Kernel.#autoload
Module#autoload
参考:
module function Kernel.#autoload (Ruby 2.6.0)
instance method Module#autoload (Ruby 2.6.0)
autoload はどうあるべきか
- Ruby から
autoload
は削除されない。(少なくとも Ruby 3.0 では) - production 環境では
eager_load
が推奨される。
参考:
仕組み
参考:
Rails の自動読み込みを支える技術 – SlideShare
extended
参考: