Help us understand the problem. What is going on with this article?

pryを使った快適なRubyライブラリのコードリーディング&開発方法

More than 5 years have passed since last update.

この記事は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

上記みたいな感じ.ここで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です.ブレークポイントを設定できます.
上記のeditedit-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)> …

文章による説明だとあまり便利さが伝わりにくいのですが,コードリーディング時にメソッドの挙動を確認したい,少し変更したいときなんかにはとても便利なので,一度試してみてください.

yaotti
Qiitaを作っているIncrements株式会社の創業者
http://yaotti.hatenablog.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away