Rubyのrequireとrequire_relative

一昨日の同じディレクトリにある他の.rbファイルの読み込み方について、りょーさんからツッコミいただきました。

require_relative を使った方がよい場面があるんではなかったでしたっけ

https://twitter.com/beakmark/status/555112756727144448

requireでなくrequire_relativeを使う場合があるとのこと。

requireはカレントディレクトリからの相対パス、require_relativeは当該ファイルからの相対パスを記述するそうです。

自分は後者のつもりで前者を使おうとしていたので、誤りでした。

で、じゃあrequire_relativeをこれからは使うぞと思っていたところ、「require_relativeなんて使ってるの見たことねーぞ」と某所からツッコミを受けました。githubの言語別Trendに上がっているリポジトリを覗いて回ったところ、たしかに誰も使ってないですね^q^

ではどうやっているんだと思ったら。

ある特定のディレクトリ以下のライブラリを読み込みたい場合は、$LOAD_PATHに追加したほうが楽そうですね。

http://qiita.com/nekogeruge_987/items/2d18f388219597c75e05#comment-b8a83de723d5962a62a2
$LOAD_PATH << '/lib'
require 'filename'

あーRakefileの先頭とかでよく見るこれか。

$:.unshift( "lib" )

libディレクトリにコードをまとめておいて、まとめてLOAD_PATHに追加する。

この記述のおかげで、個別のファイルの中では相対パスで書かずに済むんですね。なるほど。