宇宙は究極のフリーランチ

マネジメント / 意思決定 / プログラミング

irbでrequireしたファイルを再読み込みしたい時には

自分で作ったライブラリの動作をirbで確認している時に、「requireでライブラリを読み込む->動作を確認する->ライブラリをちょっと修正->もう一回動作を確認する」と、言うことがやりたい。

そんな時、ライブラリをもう一回requireしても、修正内容はirb上には反映されない。

同じファイルを複数回requireした場合、最初の1回しかロードが行われないためだ。

こう言った時は、requireの代わりにloadを使うと、irbを再起動しなくても同じファイルを何度もロード出来るので便利だ。

例えば、example.rbと言うライブラリをirb上で動作確認しつつ修正したい時には、以下のようにすると良い。

  • 修正前のライブラリ

  • irb内でloadして動作を確認
irb>load "./example.rb"
irb>Example.new.greet
#=> "hello"
  • 修正

  • irbを再起動しなくてもloadしなおせば動作が変わる
irb>load "./example.rb"
irb>Example.new.greet
#=> "hi!!!!!"

もちろん、irbではなくpryを使っている時も同じようにロードし直せる。
ちなみに、rails consoleを使っている時に同じような事がしたい時は、pryと、pry-railsをGemfileに加えて、rails console上で reload!とコマンドを打てば、少なくともapp以下のファイルに加えた変更は全部反映される。
この辺りの詳しい仕組みははっきり分かっていないので今度調べてみます…