この記事はRuby開発環境 Advent Calendar / Jul.の1日目の記事です.参加は「7/1よりRuby開発環境アドベントカレンダーを開始します!」から!
7/2になってしまってごめんなさい.
tmuxによる縦分割,pryを使った快適,高速なコードリーディング&開発について書きます.
以下ではresqueのコードを読んだり,手を加えたりするという想定で話を進めます.
事前準備
それぞれのツールについては
pry: ググるよりもまずはpry - Qiita
tmux: tmuxタグページ
あたりを参考に.
以下,必要なものをインストールします.
gem install -r gem-browse pry pry-doc
cd /tmp
gem clone resque
cd resque
# tmuxを使って画面を縦半分に割る
# 左: vim -R lib/redis.rb
# 右: pry -Ilib
![](https://dl.dropbox.com/u/164559/screenshots/Screen Shot 2012-07-02 at 12.40.46 PM.png)
上記みたいな感じ.ここでpry -Ilibがポイントです.-Ilibすることでいま見ているresqueのソースを参照させます.
pryのedit, edit-methodをうまく使う
pry内でedit lib/resque.rb:50
のように実行すると,lib/resque.rb
の50行目にカーソルが移動した状態でエディタが立ち上がります.(ちなみにぼくはemacsclientを使ってます)
そこで適当に編集し,保存して戻ってくると変更が反映されているので,pryで実行すると挙動が変わっているのがわかると思います.
特定メソッドを編集したい場合はedit-method Resque#redis
という形でも指定できます.便利!
binding.pry
実行時のローカル変数を見たいとき,毎回ソースにp @foo
を入れて実行→結果を見てまたp @bar
を入れて実行,は面倒すぎる.そこでbinding.pry
です.ブレークポイントを設定できます.
上記のedit
やedit-method
を使って目的の場所にbinding.pry
を入れてメソッドを呼ぶと,binding.pryの行で実行が止まり,その行のスコープに入ってpryを開いてくれます.あとはローカル変数を覗くなりステップ実行するなりメソッドを呼ぶなりするなりお好きなように.
edit -c
するとその行をエディタで開いてくれます.
まとめ
pry -Ilib
[1] pry(main)> edit lib/foo.rb:10
[2] pry(main)> edit-method Foo#bar
[3] pry(main)> …
文章による説明だとあまり便利さが伝わりにくいのですが,コードリーディング時にメソッドの挙動を確認したい,少し変更したいときなんかにはとても便利なので,一度試してみてください.