Pry
参考:
Pry – an IRB Alternative and Runtime Developer Console [Official]
使い方
development
/ test
グループに Pry とその関連 Gem を追加する。
# Gemfile
group :development, :test do
gem "pry"
gem "pry-byebug"
gem "pry-doc"
gem "pry-rescue"
gem "pry-stack_explorer"
end
Code language: Ruby (ruby)
ヘルプを表示する。
> help
コマンドのヘルプを表示する。
> help show-doc
メソッドのソースコードを表示する。
> show-method String#split
参考:
pry-byebug で Ruby をデバッグする – Qiita
今更聞けない Pry の使い方と便利プラグイン集 – Qiita
pry-byebug を使って Rails アプリをステップ実行する | Hack Your Design!
Powering Your Ruby & Rails Development with Pry | Ruby Inside
導入
参考:
Rubyist よ、IRB を捨てて Pry を使おう | TIM Labs
今更ながら IRB から Pry にして色を付けた話 | ウェブエンジニア珍道中
コマンド
参考:
Command System · pry/pry Wiki – GitHub
ナビゲーション
参考:
State Navigation · pry/pry Wiki – GitHub
binding.pry
ソースコード内の指定箇所に実行が移った時点で Pry を起動する。
binding.pry
Code language: Ruby (ruby)
参考:
binding.pry でループ内にブレイクポイント仕掛けるとだるいことになる | もふもふ技術部
Runtime Invocation · pry/pry Wiki – GitHub
disable-pry
セッションを終了してプログラムの実行を再開する。これ以後 binding.pry
で停止しない。
参考:
disable_pry.rb at v0.12.2 · pry/pry – GitHub
ls コマンド
カレントスコープに定義されているメソッドや変数を一覧表示する。
> ls
指定したクラス/モジュールに定義されているメソッドや変数を一覧表示する。
> ls Array
指定したオブジェクトに定義されているメソッドや変数を一覧表示する。
> ls "hello"
リストを grep する。
> ls Enumerable --grep each
ローカル変数の名前と値を一覧表示する。
> ls -l
参考:
Learning About Your Context with the ls Command – State Navigation · pry/pry Wiki – GitHub
cd コマンド
指定したクラス/モジュールにスコープを移す。
> cd ClassName
指定したオブジェクトにスコープを移す。
> cd object_instance
クラスを新たにインスタンス化してスコープを移す。
> cd ClassName.new
参考:
Changing Scope with cd – State Navigation · pry/pry Wiki – GitHub
nesting
起動されている Pry のネストを確認する。
> nesting
参考:
Seeing the Nested Contexts – State Navigation · pry/pry Wiki – GitHub
Ctrl + D
コンテキストによって幾つかのコマンドと同等の機能を持つ。
- 複数行に渡る入力を中止する (
!
コマンド) - トップレベルのセッションを終了する (
exit
) - ネストしたセッションを抜ける (
cd ..
)
参考:
^D Handling – State Navigation · pry/pry Wiki – GitHub
show-source コマンド
クラス/モジュールの定義を表示する。
> show-source ClassName
インスタンスメソッドの定義を表示する。
> show-source ClassName#instance_method
クラスメソッド/モジュールメソッドの定義を表示する。
> show-source ClassName.class_method
show-source
のエイリアス $
を使う。
> $ method_name
モンキーパッチを含めて定義箇所を全て表示する。(-a
オプションを使う。)
> $ -a ClassName
pry-doc gem をインストールすると Ruby ビルトインの C 言語ソースが表示できる。
gem "pry-doc", groups: [:development, :test]
Ruby ビルトインの C 言語ソースを表示する。
> $ Array#join
参考:
$ (show-source / show-method) の使い方 – Qiita
show-source でメソッドの実装をみる – Qiita
Pry のコマンド show-source でメソッドの実装をみてみる | Bye Bye Moore
IRB や Pry でメソッドの定義元をすっと調べる方法 | TechRacho
pry-doc でカジュアルに Ruby のソースコードを読む – Qiita
Pry と pry-doc Gem を使って Ruby のソースコードを読む | ジョージプログラマーの日記
定義されているメソッドのソースコードを Pry などで確認する方法 – スタック・オーバーフロー
show-method & show-source | Drew Nickerson
Source Browsing · pry/pry Wiki – GitHub
Finding out where methods are defined in Ruby / Rails – Stack Overflow
Access Pry’s show-source method from Ruby file – Stack Overflow
クラスの定義場所
参考:
class や const の定義位置を調べる方法 – Qiita
pry#show-source は自前定義クラスやモンキーパッチの大元を見に行くことができる | Bye Bye Moore
show-source does not work on some classes defined in external gems · Issue #1283 · pry/pry – GitHub
Feature #10771: An easy way to get the source location of a constant | Ruby Issue Tracking System
edit コマンド
エディタで開く。
> edit ClassName
エディタの終了待ちをしない。
> edit -n ClassName#method_name
edit
コマンドのヘルプを参照する。
> help edit
edit
コマンドで開くエディタを .pryrc
で指定する。
Pry.config.editor = proc do |file, line, blocking| if blocking then "atom -w #{file}:#{line}" else "atom #{file}:#{line}" end end
参考:
Pry 上で reload! 要らずのファイル編集 – Qiita
rails console 上で、あるメソッドが定義されているファイルを shell を使わず直接エディタで開きたい | 機略戦記
Editing with Pry | Kevin Jalbert
Editor Integration · pry/pry Wiki – GitHub
pry/edit.rb at v0.12.2 · pry/pry – GitHub
pry/editor.rb at v0.12.2 · pry/pry – GitHub
Setting a default editor in Pry – Stack Overflow
find-method コマンド
名前空間からメソッドを探す。
> find-method application Rails
参考:
Pry 上で Rails アプリのコードを読むために使える知識まとめ – Qiita
5 Pry Features Every Ruby Developer Should Know | Cognito Blog
Rapidly exploring with the find-method command – State navigation · pry/pry Wiki – GitHub
stat コマンド
メソッドに関する情報を表示する。
> stat Rails.application Method Information: -- Name: application Alias: None. Owner: #<Class:Rails> Visibility: public Type: Bound Arity: 0 Method Signature: application() Source Location: /path/to/vendor/bundle/ruby/2.6.0/gems/railties-6.0.0.beta3/lib/rails.rb:40
参考:
今更ながら Pry について色々と調べてみた 前編 – Qiita
5 Pry Features Every Ruby Developer Should Know | Cognito Blog
View basic method information – Documentation browsing · pry/pry Wiki – GitHub
pry/stat.rb at v0.12.2 · pry/pry – GitHub
特殊変数
参考:
Special Locals · pry/pry Wiki – GitHub
最後の実行結果を参照する
特殊変数 _
を使う。
> _
参考:
Ruby の定番対話ツール pry 徹底攻略 Special Locals – Qiita
出力を参照する
特殊変数 _out_
を使う。
> _out_[1]
参考:
Pry が真の力を発揮してくれる 19個のコマンドとコマンドの自作方法 | 酒と涙とRubyとRailsと
変数名として使えない名前
Pry::Commands
で定義済みのコマンドと同じ名前の変数は、Pry のプロンプトではコマンドとして解釈されてしまうためにそのままでは使えない。セミコロン ;
に続けて入力することで変数として解釈される。
> ; step = 100 => 100 > ; step => 100
参考:
Pry でも Ruby の next を使いたい!そんなときの対処法 – Qiita
The Command Prefix – Command system · pry/pry Wiki – GitHub
Error: Cannot find local context. · Issue #1619 · pry/pry – GitHub
Pry Error: Cannot find local context. Did you use `binding.pry`? – Stack Overflow
例外
参考:
Working with Exceptions in Pry | Honeybadger
Cannot find local context エラー
binding.pry
を使用せずに Pry を起動して pry-byebug のコマンドを実行するとエラーが発生する。
Error: Cannot find local context. Did you use `binding.pry`?
参考:
Error: Cannot find local context. · Issue #1619 · pry/pry – GitHub
Error: Cannot find local context. Did you use `binding.pry`? – Stack Overflow
まとめ
今更ながら Pry について色々と調べてみた 前編 – Qiita
今更ながら Pry について色々と調べてみた 後編 – Qiita
Ruby の Pry をより高機能に使うためのパッケージ 6選のメモ | メモ帳代わりのブログ
Tips
Rubyist 必携 pry-rails を使いこなせば幸せになれる | Happy Elements Labs
オブジェクトの中身を調べたい時によく使うメソッド – Qiita
5 Pry Features Every Ruby Developer Should Know | Cognito Blog
My Top 5 Pry Features | Big Nerd Ranch
Pry Tips and Tricks | Josh Thompson
Bundler でインストールした Pry を Bundler.setup せずに読み込む
require "bundler"
class Pry
BUNDLED_GEMS = %w[
pry coderay method_source
pry-byebug byebug
pry-rescue interception
pry-stack_explorer binding_of_caller debug_inspector
].join("|")
def self.gems_dir
File.join(::Bundler.bundle_path, "gems")
end
def self.bundled_paths
Dir \
.children(gems_dir) \
.grep(/^#{BUNDLED_GEMS}-[\d.]+$/) \
.map { |path| File.join(gems_dir, path, "lib") }
end
end
$LOAD_PATH.concat(Pry.bundled_paths)
require "pry"
require "pry-byebug"
require "pry-rescue"
require "pry-stack_explorer"
# Attach Pry on an unhandled exception
Pry.rescue do
raise "Rescue me!!"
end
# Attach Pry at the next line
binding.pry
puts "do something"
Code language: Ruby (ruby)
readline が使用できないエラー
Homebrew で Mac に readline をインストールする。
$ brew install readline
rbenv で指定した Ruby のバージョンを再インストールする。
$ rbenv install 2.6.3 -f
参考:
Pry 起動時にエラーが出る件への対処法 | Web Food
”より良い IRB” Pry をインストールして使ってみようとしたらエラーになった | ギリギリギリギリジンジン ギリギリギリジンジンジン
Pry を起動する時にエラーが出たので、その対処 | Viblo
ソースが表示できない
定義箇所が見つからない旨のエラーが発生する。
Error: Couldn't locate a definition for ...
参考:
show-source does not work on some classes defined in external gems · Issue #1283 · pry/pry – GitHub
no_definition_message – pry/show_info.rb at v0.12.2 · pry/pry – GitHub
process – pry/show_info.rb at v0.12.2 · pry/pry – GitHub
code_object_with_accessible_source – pry/show_info.rb at v0.12.2 · pry/pry – GitHub
ドキュメント
Documentation – pry | RubyDoc.info
リポジトリ
pry/pry: An IRB Alternative and Runtime Developer Console – GitHub
関連 Gems
参考:
deivid-rodriguez/pry-byebug: Step-by-step Debugging and Stack Navigation in Pry – GitHub
pry/pry-doc: Provide MRI Core Documentation and Source Code for the Pry REPL – GitHub
ConradIrwin/pry-rescue: Start a Pry Session Whenever Something Goes Wrong – GitHub
pry/pry-stack_explorer: Walk the Stack in a Pry Session – GitHub