Ruby の 定番対話ツール pry 徹底攻略 | Normal Input
概要
Ruby の 定番対話ツール pry 徹底攻略
Normal Input について
How to Intput & Execute
Ruby のコードを入力しすると入力した内容を実行し、戻り値を標準出力します
例: 入力と実行
[2] pry(main)> 'hello, pry'
=> "hello, pry"
[3] pry(main)> [*1..5]
=> [1, 2, 3, 4, 5]
[4] pry(main)> [*1..5].reduce(&:+)
=> 15
Clear Input Buffer
メソッドやクラス定義など、複数行の記述をしている途中に
間違えてしまった場合は、 !
を利用すると通常の入力モードに戻ります。
入力途中に def
を defa
と入力してしまってキャンセルしたい場合は、
下記のようになります。
例: ! によるバッファクリア
[6] pry(main)> class Hoge
[6] pry(main)* defa hoge
[6] pry(main)* !
Input buffer cleared!
Suppress evaluation output
文末にセミコロン ( ; ) を付加すると、標準出力を抑止します。
出力が長くなり、抑止したい場合に便利です。
例: ; による標準出力抑止
[8] pry(main)> 'hoge'
=> "hoge"
[9] pry(main)> 'hige';
出力を抑止したが、後から出力内容を確認したい場合は、
変数 _
や _out_
から確認可能です。
変数 _
は最後の実行結果。
変数 _out_
は履歴全体を Pry::HistoryArray クラスに保持しています
例: _, _out_
[12] pry(main)> 'hoge'
=> "hoge"
[13] pry(main)> 'hige';
[14] pry(main)> _
=> "hige"
[15] pry(main)> _out_
=> #<Pry::HistoryArray size=16 first=0 max_size=100>
[39] pry(main)> _out_.to_a.last
=> "hige"
Show the contents of the input buffer
show-input
で入力バッファの内容を確認します。
長い複数行のコードを書いている際などに、内容を確認するのに便利です。
例: show-input
[43] pry(main)> class Hoge
[43] pry(main)* def hoge
[43] pry(main)* "hoge"
[43] pry(main)* show-input
1: class Hoge
2: def hoge
3: "hoge"
[43] pry(main)* end
[43] pry(main)* end
=> :hoge
[44] pry(main)> show-input
[45] pry(main)>
Amend lines of input
長い複数行のコードを書いている際などに、内容を修正したい場合、
amend line <line number> <fix code>
で修正することができます。
この際、行番号が必要になるため、前述の show-input
を利用します。
例: amend-line
hoge メソッドを作るつもりが、 hige メソッドを定義してしまいました。
show-input
で行番号を確認し、 amend-line
で修正します。
[54] pry(main)> class Hoge
[54] pry(main)* def hige
[54] pry(main)* "hoge"
[54] pry(main)* show-input
1: class Hoge
2: def hige
3: "hoge"
[54] pry(main)* amend-line 2 def hoge
1: class Hoge
2: def hoge
3: "hoge"
[54] pry(main)* end
[54] pry(main)* end
=> :hoge
[55] pry(main)> Hoge.new.hoge
=> "hoge"
例: amend-line + ! でバッファ内の任意の行を削除
hoge メソッドだけでいいところを、 hige メソッドまで定義してしまったので、
amend-line <from>..<to> !
で該当行を削除します。
[61] pry(main)> class Hoge
[61] pry(main)* def hoge
[61] pry(main)* "hoge"
[61] pry(main)* end
[61] pry(main)*
[61] pry(main)* def hige
[61] pry(main)* "hige"
[61] pry(main)* end
[61] pry(main)* show-input
1: class Hoge
2: def hoge
3: "hoge"
4: end
5:
6: def hige
7: "hige"
8: end
[61] pry(main)* amend-line 6..8 !
1: class Hoge
2: def hoge
3: "hoge"
4: end
5:
[61] pry(main)* end
=> :hoge
[62] pry(main)> show-source Hoge
From: (pry) @ line 54:
Class name: Hoge
Number of lines: 5
class Hoge
def hoge
"hoge"
end
end
Editing the contents of the input buffer with an editor
入力中のバッファをエディタで編集します。
エディタを変更したい場合は、
- 実行中の場合は
Pry.editor = 'xx'
- 事前に設定するの場合は .pryrc に
Pry.cofig.editor = "xx"
で設定します。
Replay history
履歴を再実行します。
hist
で履歴を参照。 --tail
オプションで最後から N 件を取得します。
--replay
オプションで指定したコマンドを再実行します。
[8] pry(main)> :hoge
=> :hoge
[9] pry(main)> :hige
=> :hige
[10] pry(main)> :hage
=> :hage
[11] pry(main)> hist --tail 5
6: hist
7: hist --tail 2
8: :hoge
9: :hige
10: :hage
[12] pry(main)> hist --replay 8..10
=> :hoge
=> :hige
=> :hage
[16] pry(main)>
Play files and methods as input
play
コマンドでファイルやメソッドを再生します。
検証用 play.rb ファイル
class Play
def play
puts "play1"
puts "play2"
puts "play3"
end
end
ファイルの再生検証
# play.rb を読み込んで、 3 行目から 4 行目を再生します
[16] pry(main)> play play.rb -l 3..4
play1
play2
=> nil
メソッドの再生検証
Hoge クラスの hige メソッドの 3 行目 から実行します
[17] pry(main)> class Hoge
[17] pry(main)* def hoge
[17] pry(main)* "hoge"
[17] pry(main)* end
[17] pry(main)* def hige
[17] pry(main)* p "hige1"
[17] pry(main)* p "hige2"
[17] pry(main)* end
[17] pry(main)* end
=> :hige
[19] pry(main)> show-source Hoge -l
From: (pry) @ line 17:
Class name: Hoge
Number of lines: 9
17: class Hoge
18: def hoge
19: "hoge"
20: end
21: def hige
22: p "hige1"
23: p "hige2"
24: end
25: end
[21] pry(main)> play Hoge.new.hige -l 3
"hige2"
=> "hige2"