LoginSignup
41

More than 5 years have passed since last update.

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

Posted at

単体だと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

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
41