前回、Rubyの基礎を学習するために、対話型実行ツールの irb が使えるということで、
irb について調べていたところ、より洗練されて多機能であるツールがあるという情報をgetしました。
その名も pry
環境:Mac OS X 10.9.4
pry とはなんぞや
irb よりも多機能な対話型ツール。
発音は、「ぷらぁい」
対話型ツールのことをREPLというらしい。
ちなみに、pry の意味は、"覗く"とか"詮索好きな"とか、"てこ"(テコの原理)の意味がある。
pry の Git公式ドキュメントのトップ絵は確かにてこっぽい。
pry を使うとこんなことができる
- シンタックスハイライトしてくれる。
- パッとコード補完してくれる。
- ドキュメントをスッとブラウズできる。
- gemやRubyの内部のコードをサッと読める。
- コマンドシェルでスッとエディタ起動をしたりできる。
- Gistと連携できる。
- デバッグができる。
…etc
Oh...さすが、pry なんでもできる。
今回は、Rubyの基礎を学ぶために使用するので上記の機能を全ては使うわけではありません。
ですが、後々活用できそうなので、使うときになったら記事を更新していこうかと思います。
さて、早速導入といきましょう。
pry を使う
§ インストール
兎にも角にもモノがないと始まりません。
インストールしましょう。
$ gem install pry pry-doc
インストールが終わったら得意技のバージョン確認です。
$ pry -v Pry version 0.10.1 on Ruby 2.0.0
無事にインストールできました。
??
gem?
gemって何?
rvmじゃねぇの?
ggrksしました。
Wikipediaより
RubyGemsは、Ruby言語用のパッケージ管理システムであり、Rubyのプログラムと("gem" と呼ばれる)ライブラリの配布用標準フォーマットを提供している。gemを容易に管理でき、gemを配布するサーバの機能も持つ。Rubyバージョン1.9以降では標準ライブラリの一部となっている。
ほうほう。
Rubyのライブラリはgemで管理して、Ruby本体のバージョンはrvmで管理するということかな?
とりあえず、gemが何者かはわかったので違いは別途調べることとしよう。
§ 起動する
$ pry [1] pry(main)>
きました。なんでもできるpryきました。
「俺、対話型だからなんでも言ってくれよ」といわんばかりの風格です。(適当)
§ 実行する
[1] pry(main)> puts "Hello, pry!!" Hello, pry!! => nil [2] pry(main)>
毎度おなじみ、Hello, pry。
シンタックスハイライトもやってくれています。
これだけじゃ物足りないので他の機能も見ていきましょう。
§ コード補完機能
p だけ入力して、Tabキーを押すと、
[1] pry(main)> p p private_methods pessoa-poem proc play protected_methods pp pry pretty_inspect pry-backtrace pretty_print pry-version pretty_print_cycle public pretty_print_inspect public_method pretty_print_instance_variables public_methods print public_send printf putc private puts
サジェストしてくれます。
Linux と同じような感じですね。
§ ドキュメントを見る:?
puts のドキュメントを見てみます。
[26] pry(main)> ? puts From: io.c (C Method): Owner: Kernel Visibility: private Signature: puts(*arg1) Number of lines: 3 Equivalent to $stdout.puts(obj, ...)
Alias が設定されているので、show-doc でも同じ結果になります。
§ ソースコードを見る:$
puts のソースコードを見てみましょう。
[33] pry(main)> $ puts From: io.c (C Method): Owner: Kernel Visibility: private Number of lines: 8 static VALUE rb_f_puts(int argc, VALUE *argv, VALUE recv) { if (recv == rb_stdout) { return rb_io_puts(argc, argv, recv); } return rb_funcall2(rb_stdout, rb_intern("puts"), argc, argv); }
Aliasが設定されているので、show-method、show-source でも同じ結果になります。
§ オブジェクト一覧を見る:ls、指定したオブジェクトの中に移動する:cd
hoge オブジェクトを作って、
[6] pry(main)> hoge = "hoge" => "hoge"
ls で現在のオブジェクト一覧が見れます。
[7] pry(main)> ls self.methods: inspect to_s locals: _ __ _dir_ _ex_ _file_ _in_ _out_ _pry_ hoge
cd で指定したオブジェクトに移動します。
[8] pry(main)> cd hoge [9] pry("hoge"):1>
メソッド:prepend を実行してみます。
[10] pry("hoge"):1> prepend "fugaaaa" => "fugaaaahoge" [11] pry("fugaaaahoge"):1>
§ 現在位置を調べる:@
[6] pry(main)> @ At the top level. [34] pry("fugaaaahoge"):1> @ Inside "fugaaaahoge".
Alias が設定されているので、whereamiでも可能です。
§ 現在位置までのフレームネストを調べる:nesting
現在位置までのフレームネストがどれくらいあるのかを表示してみます。
フレームというのは、1つのWindow内にある複数の切り替え可能な画面のこと。
調べたところ、Emacsの用語からきていると思われる。
[54] pry("fugaaaahoge"):1> nesting Nesting status: -- 0. main (Pry top level) 1. "fugaaaahoge"
§ シェルコマンドを実行する
"."を頭につけると、シェルコマンドを実行できます。
[13] pry(main)> .date 2014年 8月30日 土曜日 23時47分17秒 JST
§ デバッグを行う
ruby のソースコード内に
binding.pry
を書くと、書いた場所がブレークポイントとなり、
アプリケーションの実行が止まってpryが立ち上がります。
デバッグ機能を使うのはまだ先ですが、とりあえず覚えておきます。
§ pry を終了する:!!!
気合入ってるように見えますが、コマンドなんですこれ。
[4] pry(main)> !!!
Aliasが設定されているので、quit、exitでも同じ結果になります。
あとがき
とりあえず、pryの基本的な操作はこれでできそうです。
helpコマンドでpryのヘルプは参照できるので、そちらも活用しながら徐々に慣れていければと。
オブジェクトの中に移動するってところがRubyらしくていいですね。

- 作者: 高橋征義,後藤裕蔵,まつもとゆきひろ
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2013/06/04
- メディア: 単行本
- この商品を含むブログ (26件) を見る

- 作者: 久保秋真
- 出版社/メーカー: SBクリエイティブ株式会社
- 発売日: 2013/11/08
- メディア: Kindle版
- この商品を含むブログ (2件) を見る
(参考サイト)
File: README — Documentation for banister/pry (master)
Rubyistよ、irbを捨ててPryを使おう - TIM Labs
GNU Emacs Lispリファレンスマニュアル: 28. フレーム
【ruby】pryを使ってデバッグしよう。 - 記すに足らず。