ロードパスとは?
requireなどがファイルを参照する際に使用するディレクトリパスのことです。
例
config/application.rbの中に「require "rails"」という記述がありますが、ロードパスの記述を辿ってRailsにたどり着いています。
ロードパスを確認する方法
Railsコンソール上で下記のコマンドを実行します。
1 |
pp $LOAD_PATH |
オートロードパスとは?
Railsのシステムが自動で読み込むディレクトリのこと。Rails6からは「Zeitwerk(ツァイトベルク)」と言うオートロードシステムが組み込まれています。
例えば、JavaScriptであれば他のモジュールの読み込みはimportなどを使う必要がありますが、Zeitwerkがあればimoprt文不要で他のモジュールを読み込むことが可能です。
従来のRails(Rails5以前)では、const_missingという仕組みが導入されていたのですが、処理順序によっては不具合が発生する可能性があるとのことでRails6からZeitwerkという仕組みに置き換わりました。
また、従来のオートロードシステムに比べてパフォーマンスも向上しており、スレッドセーフで汎用性も高い仕組みになります。
なお、ZeitwerkはGemになっており、Railsに限らず様々なRubyプロジェクトに流用することが可能です。(使えばrequire地獄から脱出することが可能です。)
Zeitwerkのオートロードパスを確認する方法
Railsコンソール上で以下のコマンドを実行します。
1 |
pp ActiveSupport::Dependencies.autoload_paths |
なお、もしロードパスにZeitwerkのオートロードパスを使う場合はRailsに以下の設定をすることが推奨されています。
1 |
config.add_autoload_paths_to_load_path = false |
なぜなら、通常のRailsのロードパスに比べてZeitwerkのオートロードパスの方が厳選されていて高速化を見込めるためです。
Zeitwerkが有効化調べるには?
1 |
Rails.autoloaders.zeitwerk_enabled? |
ちなみに、以下のように設定されていれば有効になっています。
config/application.rb
1 |
config.load_defaults 6.0 |
この記事へのコメントはありません。