irbの起動時はLoadErrorが発生しても無視されるが、その後のライブラリの読み込み等は行われない
.irbrcで
require 'hogehoge'
とやっても例外も警告も出なかったので、なんでだろうと思って調べてみた。
irbの起動処理はirb/init.rb内で行われる。このうち、irbrcを読み込んでいるのはIRB.run_configメソッドだと思われる。以下にコードを抜粋する。
def IRB.run_config if @CONF[:RC] begin load rc_file rescue LoadError, Errno::ENOENT rescue print "load error: #{rc_file}\n" print $!.class, ": ", $!, "\n" for err in $@[0, $@.size - 2] print "\t", err, "\n" end end end end
コードを見ると、.irbrcをrubyファイルとみなしてloadしている。つまり、途中で例外が発生した場合には以降の処理(require)は行われず、またそれを警告するメッセージ等も出力されない事になる。これはハマりそうだ…。
オーバーライドして置き換えてもいいのだけれど、まぁそんな事あまりないだろうから放置する事にする(と、皆考えるからずっと放置されている気がする)。