require
ドキュメント:
Kernel.#require | Ruby リファレンスマニュアル [公式]
使い方
参考:
require で他のライブラリを読み込む | まくまくノート
Ruby の require と Active Support の自動 require について | 酒と涙と Ruby と Rails と
Ruby におけるロードパス (require) の tips | Futurismo
Ruby におけるライブラリロード | kotaroito’s notes
普段特に何も考えずに使っていた require について調べてみた – Qiita
概要
require
:$LOAD_PATH
から Ruby スクリプト (.rb
) もしくは拡張ライブラリ (.so
,.o
,.dll
など) を探索して読み込む。拡張子を補完し、同じファイルを複数回読み込むことはない。require_relative
:現在のファイルからの相対パスでrequire
を行う。load
:指定されたファイルをロードして実行する。同じファイルを複数回ロードすることができる。相対パスが与えられた場合は、$LOAD_PATH
とカレントディレクトリを順に探索し、最初に見つかったファイルをロードする。~
は環境変数HOME
に展開される。また、~user
は該当するユーザーのホームディレクトリに展開される。autoload
:定数が参照されるタイミングまでファイルのロードを遅延させる。クラスやモジュールが参照されたタイミングで定義を読み込むことができる。
参考:
Rails の風が吹いたら確認したい、Ruby のモジュールシステム | UUUM攻殻機動隊
require と require_dependency の違い
参考:
外部ファイル読み込み時の「require」と「require_dependency」の違い – Qiita
Ruby (2.2.0) 自分で作成したファイルを読み込む (require) にハマる | かもメモ
require と require_dependency と Ruby 1.8.7 と Ruby 1.9.2 | 覚え書き
require_dependency の実装を追いかけてみる | しめ鯖日記
定数の自動読み込みと再読み込み | Rails ガイド [公式]
require_dependency – 定数の自動読み込みと再読み込み | Rails ガイド [公式]
Rails で標準ライブラリを require する
参考:
Rails で標準添付ライブラリを require する場所 – Qiita
Where should I require standard library in Rails convention? – Stack Overflow
When to call a “require” in Rails? – Stack Overflow
Rails における定数の自動読み込みと require
自動読み込みされる定数を定義するファイルは require すべきではありません。
参考:
自動読み込みと require – 定数の自動読み込みと再読み込み | Rails ガイド [公式]
Kernel.#load
参考:
Ruby で require より load を使うべき場面は? – QA@IT
Ruby の require/load/autoload/include/extend について | web-k.log
module function Kernel.#load (Ruby 2.5.0)
require_relative
参考:
require と require_relative って何が違うの? – Qiita
Ruby の require と require_relative | 虎塚
ファイルを読み込む時は require_relative を使う | blog.10rane.com
module function Kernel.#require_relative (Ruby 2.5.0)
Ruby の require で相対的にパスを指定する方法 | QA@IT
require_dependency
ドキュメント:
require_dependency – ActiveSupport::Dependencies::Loadable | Ruby on Rails API [Official]
指定したディレクトリ下のファイルを全て require する
参考:
Ruby で Dir.glob して require するときは sort してからにする | Born Too Late
Cleanest/One-liner way to require all files in directory in Ruby? – Stack Overflow
$LOAD_PATH / $: / $-I
参考:
グローバル変数 $LOAD_PATH にパスを追加したい – teratail
LoadError
/path/to/source.rb:123: in `require': cannot load such file -- other_source (LoadError)
/path/to/source.rb
の123行目で require
されている other_source
にパスが通っていない。あるいは、その名前のファイルが存在しない。
対処法:
- gem がインストールされていない →
Gemfile
に必要な gem を記述してbundle install
を実行する。 - パスが通っていない →
puts $LOAD_PATH
でパスを確認して、必要なパスを$LOAD_PATH
に追加する。 - 相対パスで参照しようとしている →
require
ではなくrequire_relative
を使う。 - Rails コンソールで変更が反映されない →
reload!
を実行。イニシャライザを再ロードするためにはquit
してspring stop
、コンソールの再起動が必要。 - Rails サーバー (Puma) で変更が反映されない →
rails restart
でアプリケーションサーバーを再起動する。自動的にリロードさせたい場合は、Spring の監視対象に含める。
参考:
Rails コマンドを実行すると cannot load such file — concurrent/map (LoadError) が出て困っています – teratail
LoadError – Cannot load such file (requiring a gem) – Stack Overflow
Ruby ‘require’ error: cannot load such file – Stack Overflow
autoload
定数が実際に必要になるまで require
を遅延させる。
参考:
module function Kernel.#autoload (Ruby 2.6.0)
“active_support/all” が存在しなくても require できる理由
参考:
How require loads a gem | Ryan Bigg
ruby/kernel_require.rb at f7fb0867897ced531a33a014fb92998b0ed97ac0 · ruby/ruby – GitHub
ロード済み定数の判定 / 二重読み込みの防止
ドキュメント:
defined? | Ruby リファレンスマニュアル [公式]
参考:
const_defined? (Module) – Rubyリファレンス
Ruby で名前空間が定義されているか確認する方法 – Qiita
Detecting if a Ruby gem is loaded | makandra dev
Double-Load Guards in Ruby | Virtuous Code
How do you check if a library/ruby-gem has been loaded? – Stack Overflow
Check if a constant is already defined – Stack Overflow
読み込みエラーを無視する
参考: