Rubyでのloadとrequireの違いをしらべたメモ

    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はファイル名になる。