最近Rubyを勉強していて、よく見かける$:.unshift "./lib"
が何を意味しているのかよくわからなかったので調査。
「$:」とは
まず、先頭の「:$」の意味からしてよくわからず…
これは組み込み変数の'$LOAD_PATH'の別名とのこと。
$LOAD_PATHが何かといいますと、requireがファイルを読み込むときに検索するディレクトリの名前を含む配列になります。
irbを起動して>>p $LOAD_PATH
で配列の内容を確認できます。
requireでの検索先の追加
ということで、$:.unshift "./lib"
は難しいことは何もなくて、ただ単にrequireで読み込むファイルの検索先を配列に追加しているだけでした。
ただ、pushじゃなくunshiftを使うのは何故なのかはわかりませんでした。。。
スクリプトファイルからの相対パスの取得
ちなみに、自分が見ていたファイルでの検索先の追加は
$:.unshift(File.join(File.dirname(__FILE__), 'lib'))
という感じで書かれていて、こう書くことで対象のファイルから参照先の階層を指定できてファイル名変更があった時など便利な気がする。