Ruby
pry

Pry上でreload!要らずのファイル編集

More than 5 years have passed since last update.

単体だとreload!の無いprypry-railsならコマンド入るけど、そうでなければコードをいじるたびに再起動とか面倒。

でも、pry上でエディタ起動してファイルを編集すれば、コードがリロードされるだけでなくオブジェクト再作成などテストの流れをやり直さなくて良くて便利だったのでメモ。

まず、エディタはvimを使いたいので.pryrcで指定しておく。

Pry.config.editor = "vim"

で、とりあえず簡単なテストクラスを作成。


/tmp/my_class.rb

class MyClass

def initialize
@create_time = DateTime.now
end
def foo
puts "created at #{@create_time}."
end
end

pryで動かしてみる。


pry

[1] pry(main)> require '/tmp/my_class'

=> true
[2] pry(main)> x = MyClass.new
=> #<MyClass:0x007fbbebd03848
@create_time=
#<DateTime: 2014-01-19T23:35:08+09:00 ((2456677j,52508s,39159000n),+32400s,2299161j)>>
[3] pry(main)> x.foo
created at 2014-01-19T23:35:08+09:00.
=> nil

というところで、先ほどのクラスを編集。


pry

[4] pry(main)> edit /tmp/my_class.rb


ここで先ほどエディタとして指定したvimが起動するので、適当に編集。今回はfooメソッドの出力するメッセージを気持ち変えてみただけ。


/tmp/my_class.rb

class MyClass

def initialize
@create_time = DateTime.now
end
def foo
puts "edited. but still created at #{@create_time}."
end
end

保存してvimを終了させると、pryに戻る(自動的にコードは再読み込みされている)。

Railsのreload!だと、リロード後はインスタンスの再作成からやらなければならないが、この形であれば、すぐに続きのテストが出来る。


pry

[5] pry(main)> x.foo

edited. but still created at 2014-01-19T23:35:08+09:00.
=> nil

いちいち開けたり閉じたりが面倒な場合もあるけど、テストの流れでちょっとした修正を入れたい時など、むしろ便利な場面も多いかなと。