ファイルを読み込む時は require_relative を使う

Posted by Tatsuyano on Fri, Mar 27, 2015
In
Tags ruby

こちら[requireとrequire_relativeの違いとは?] に詳しく書いてあるのですが、

ファイルを読み込む時はrequireではなく、require_relativeを使いましょう(Ruby1.9.2以降で、かつ$LOAD_PATHに含まれていない場合)。

Ruby1.9.2以降、$LOAD_PATHにカレントディレクトリが含まれなくなったため、 例えば、同じ階層のfile.rbを読み込もうと思ってrequire 'file'と書いたらエラーになります。

$HOME/.anyenv/envs/rbenv/versions/2.2.0/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in
`require': cannot load such file -- file (LoadError)

その回避方法として、require ./file と相対パスで書くことも可能ですが、 違う階層から読み込むと結局エラーになってしまいます。

どうしてもrequireと使いたい場合は、require する前に、 カレントディレクトリを$LOAD_PATHに追加する方法があります。

$:.unshift File.dirname(__FILE__)  # ロードパスにカレントディレクトリを追加
require 'file'

因みに$:$LOAD_PATHの別の書き方です。

  • $LOAD_PATH … プログラム実行時に読み込まれるパス
  • $: … $LOAD_PATHの別の書き方

参考サイト