require_relativeの是非
『パーフェクトRuby』(Amazon)によると
Kernel.#require_relativeは、実行中のファイルから見た相対パスでrequireを行います。requireとは異なり、$LOAD_PATHは探索されません。相対パスの基準となるのはRubyが実行されているディレクトリではなく、require_relativeを呼び出したファイルのディレクトリです。
とのことで、ライブラリを実装する場合などにお世話になるような機能を提供している。
使われていない?
が、実際のところは
Ruby1.9.2以降でrequireする際の注意点 - Qiita
のコメント欄にあるように
1 | $LOAD_PATH << '/lib' |
などとやることで、require_relativeを使わないという方法が存在する。
Ruby 1.9からは
1 | $:.unshift('lib') |
でも良い。
ライブラリ(gem)のパス追加 - 君の瞳はまるでルビー - Ruby 関連まとめサイト
Ruby 2.1以前
config.ruなどのようにeval内でrequire_relativeが呼ばれているとエラーになる様子。
config.ruの中でrequire_relativeするとエラーになる - みんなのちからになりたい
Ruby requires confusion – Benjamin Fleischer
余談
‘Require’ Best Practices? : ruby
では、requireを使うほうが好きな人が多そうだった。
一方、
- require_relativeの方が速いだろう
- 自分の管理しているものはrequire_relative、それ以外はrequireで使い分ける
という声もあった。