2014-02-23

【Ruby】requireメソッドの使い方メモ

sinatraとかnokogiriのような外部ライブラリを読み込みたい時と、同じプロジェクト内にある自身が作ったファイル等を読み込みたい時の2パターンがあって、その時にrequireをどう使い分ければいいか調べたのでメモ。

環境:ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-darwin11.4.2]

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'

参考