Rubyで、他のファイルを取り込むときにrequireとloadがある。 違いをしらべてみた。

結論

結論からいうと、

  • コードの中で使う場合は require
  • irbのなかで使う場合は load

詳細

コードのなかでloadをつかってはいけない理由

loadをコードの中で利用すると、無限ロードがが発生する可能性がある。 具体的には、A.rbでは、load ‘./B’, B.rbでは load ‘./A’を宣言している場合、 2つのファイルがお互いに互いをloadしあう。(C言語での2重インクルード)

なので、コードのなかでloadをつかうのは危険。

irbのなかでrequireをつかってはいけない理由

requireをつかうと、一度取り込まれた修正は更新されない。loadをつかうと更新される。 そのため、コードを修正たあとにirbでデバッグしようとしたときに、修正をirbに取り込むことができない。

loadを利用すると、再度修正を取り込むことができる。

Tips

以下のように書くと、irbからloadしても修正は取り込まれない。

if $0 == __FILE__
  ...
end

irbから実行した場合、__FILE__は irb、$0はファイル名になる。