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)は行われず、またそれを警告するメッセージ等も出力されない事になる。これはハマりそうだ…。
オーバーライドして置き換えてもいいのだけれど、まぁそんな事あまりないだろうから放置する事にする(と、皆考えるからずっと放置されている気がする)。