環境:ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-darwin11.4.2]
sinatraとかnokogiriのような外部ライブラリを読み込みたい時と、同じプロジェクト内にある自身が作ったファイル等を読み込みたい時の2パターンがあって、その時にrequireをどう使い分ければいいか調べたのでメモ。
requireメソッドの挙動
渡す引数の形式によって、読み込み先が変わる。
ちなみに、拡張子は省略可能。
ファイル名だけを引数に渡すと組み込み変数$LOAD_PATHからファイルを探す
# $LOAD_PATHからsinatra.rbを探して読み込む require 'sinatra'
相対パスを引数に渡すと、rubyが実行されているディレクトリを起点としてファイルを探す
# rubyが実行されているディレクトリと同じ階層にあるlibrary.rbを読み込む require './library'
pryで実際にやってみる
以下の構成になっているディレクトリ上で行う。
$ tree . └── app.rb 0 directories, 1 files
結果
# sinatraを読み込む [1] pry(main)> require 'sinatra' => true # app.rbを読み込む(ファイル名だけ指定) [1] pry(main)> require 'app' => false # app.rbを読み込む(相対パスを指定) [1] pry(main)> require './app' => true
その他の方法
組み込み変数$LOAD_PATHはパスの配列なので、この配列に読み込みたいパスを追加すれば、相対パス指定をしなくても任意のファイルを読み込めるようになる。
# /path/to/my/libraries/以下にあるファイルを$LOAD_PATHに追加 $LOAD_PATH << '/path/to/my/libraries'