ruby で gem の開発をしているとします。 gem の開発なので、以下のようなスタンダードなフォルダ構成になっているとします。

% tree
.
├── Rakefile
├── bin
│   └── hola
├── hola.gemspec
├── lib
│   ├── hola
│   │   └── translator.rb
│   └── hola.rb
└── test
    └── test_hola.rb

この際、 lib/hola.rb から lib/hola/translator.rb を require するときに、 require_relative を利用しない理由などありますか?

とくに、 lib 内部の相対参照であるならば:

  • すべて自分が管理するコードなので、フォルダ構成もコントロールできる
  • 同一 LOAD_PATH エントリー内部の話なので、bin/test/ といった、プロジェクトとしてのフォルダ構成の変更の影響を受けることはあまり考えにくい

ことに加え、特に、 require_relative することによって、 $LOAD_PATH から意図しないスクリプトが読み込まれる危険を避けることができます。なので、基本的に require_relative するべきだと思っています。

しかし一方で、 require_relative を利用するライブラリや、 require_relative の利用を推奨するような記事もあまり見掛けないので、自分の認識が違っているのかもりえない、と若干思ったりもします。

質問

lib 内部など、同一LOAD_PATHエントリー上の、自分のファイルをロードするにあたり、 require_relative より require を利用するべき理由などあったりなどしますでしょうか。