require

ドキュメント:

Kernel.#require | Ruby リファレンスマニュアル [公式]

使い方

参考:

require メソッドの使い方メモ | MogLog

require で他のライブラリを読み込む | まくまくノート

Ruby の require と Active Support の自動 require について | 酒と涙と Ruby と Rails と

Ruby におけるロードパス (require) の tips | Futurismo

Ruby におけるライブラリロード | kotaroito’s notes

普段特に何も考えずに使っていた require について調べてみた – Qiita

ロード | Ruby ソースコード完全解説

概要

  • 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 ソースコード完全解説

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

variable $-I (Ruby 2.5.0)

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

読み込みエラーを無視する

参考:

Bundler.require でのエラーが変わった – Qiita

記事をシェアする:
タグ:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Protected by reCAPTCHA