Pry

参考:

Pry – an IRB alternative and runtime developer console [Official]

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

使い方

# Gemfile
group :development, :test do
  gem "pry"
  gem "pry-byebug"
  gem "pry-doc"
  gem "pry-rescue"
  gem "pry-stack_explorer"
end

ヘルプを表示する。

> help

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

> help show-doc

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

> show-method String#split

参考:

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

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

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

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

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

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

pry の help で pry の概要を知る – Qiita

Command system · pry/pry Wiki – GitHub

Powering your Ruby & Rails development with Pry | Ruby Inside

導入

参考:

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

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

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

binding.pry

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

binding.pry

参考:

binding.pry でループ内にブレイクポイント仕掛けるとだるいことになる | もふもふ技術部

ls コマンド

カレントスコープに定義されているメソッドや変数を一覧表示する。

> ls

指定したクラス/モジュールに定義されているメソッドや変数を一覧表示する。

> ls ClassName

指定したオブジェクトに定義されているメソッドや変数を一覧表示する。

> ls object_instance

参考:

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

Ruby の 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

クラスの定義場所

参考:

Ruby で 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 – Tech & Life –

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と

カスタマイズ

参考:

.pryrc file – Qiita

Customization and configuration · pry/pry Wiki – GitHub

Pry rc · pry/pry Wiki – GitHub

コマンドを定義する

参考:

Pry が真の力を発揮してくれる19個のコマンドとコマンドの自作方法 | 酒と涙とRubyとRailsと

Command system · pry/pry Wiki – GitHub

Custom commands · pry/pry Wiki – GitHub

プラグイン

pry-* という名前の gem を Bundler でバンドルすると自動的に読み込まれる。

コマンドラインから実行時にプラグインを読み込まない。

$ pry --no-plugins

.pryrc でプラグインを読み込まない指定をする。

Pry.config.should_load_plugins = false

個別にプラグインを無効にする。

Pry.plugins["doc"].disable!

個別にプラグインを有効にする。

Pry.plugins["doc"].activate!

参考:

Plugins – Qiita

Plugins · pry/pry Wiki – GitHub

Available plugins · pry/pry Wiki – GitHub

Railsにてbinding.pryを使うためのGemについて | teratail

Hooks

参考:

`rails console`で、各実行の開始・終了時刻を自動で表示する方法 – Qiita

gem 開発が少し便利になる .pryrc | tail -f pinzo.log

Hooks · pry/pry Wiki – GitHub

Method: Pry::Hooks#add_hook — Documentation for pry | RubyDoc.info

変数名として使えない名前

Pry::Commands で定義済みのコマンドと同じ名前の変数は、Pry のプロンプトではコマンドとして解釈されてしまうためにそのままでは使えない。セミコロン ; に続けて入力することで変数として解釈される。

> ; step = 100
=> 100
> ; step
=> 100

参考:

Pry のコンソールで使えない変数 – Qiita

The command prefix – Command system · pry/pry Wiki – GitHub

Pry Error: Cannot find local context. Did you use `binding.pry`? – Stack Overflow

例外

参考:

Working with exceptions in Pry | Honeybadger

まとめ

参考:

今更ながら Pry について色々と調べてみた 前編 – Qiita

今更ながら Pry について色々と調べてみた 後編 – Qiita

Ruby の pry をより高機能に使うためのパッケージ6選のメモ | メモ帳代わりのブログ

Pry cheatsheet | Devhints

Tips

参考:

Rubyist 必携 pry-rails を使いこなせば幸せになれる | Happy Elements Labs

Ruby でオブジェクトの中身を調べたい時によく使うメソッド – 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"
Tagged:

コメントを残す

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