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"
endCode language: Ruby (ruby)

ヘルプを表示する。

> help

コマンドのヘルプを表示する。

> help show-doc

メソッドのソースコードを表示する。

> show-method String#split

参考:

pry-byebug で Ruby をデバッグする – Qiita

今更聞けない Pry の使い方と便利プラグイン集 – Qiita

Pry の簡易的なコマンドまとめ – Qiita

Pry でよく使うコマンド – Qiita

pry-byebug を使って Rails アプリをステップ実行する | Hack Your Design!

メソッドの定義場所を見つける方法 – Qiita

Pry のヘルプで Pry の概要を知る – Qiita

Powering Your Ruby & Rails Development with Pry | Ruby Inside

導入

参考:

Rubyist よ、IRB を捨てて Pry を使おう | TIM Labs

今更ながら IRB から Pry にして色を付けた話 | ウェブエンジニア珍道中

Pry が便利だったメモ | secon の日記

コマンド

参考:

Command System · pry/pry Wiki – GitHub

ナビゲーション

参考:

State Navigation · pry/pry Wiki – GitHub

binding.pry

ソースコード内の指定箇所に実行が移った時点で Pry を起動する。

binding.pryCode 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 でメソッド定義をすぐ見つける方法 – Qiita

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

Pry からソースコードをエディタで開く | PIYO

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 – Qiita

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 のコンソールで使えない変数 – Qiita

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選のメモ | メモ帳代わりのブログ

Cheatsheet – Pry | Devhints

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 起動時にエラーが出る場合の対処法 – Qiita

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 Wiki – GitHub

リポジトリ

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

記事をシェアする:
タグ:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Protected by reCAPTCHA