Ruby の 定番対話ツール pry 徹底攻略 | Normal Input #pry #ruby

# Ruby の 定番対話ツール pry 徹底攻略 | Normal Input
## <i class="fa fa-cubes" style="font-size:1em;"></i> 概要
Ruby の 定番対話ツール pry 徹底攻略
<i class="fa fa-edit" style="font-size:1em;"></i> Normal Input について

## <i class="fa fa-edit" style="font-size:1em;"></i> How to Intput & Execute
Ruby のコードを入力しすると入力した内容を実行し、戻り値を標準出力します

### <i class="fa fa-flask" style="font-size:1em;"></i> 例： 入力と実行

~~~
[2] pry(main)> 'hello, pry'
=> "hello, pry"
[3] pry(main)> [*1..5]
=> [1, 2, 3, 4, 5]
[4] pry(main)> [*1..5].reduce(&:+)
=> 15
~~~

### <i class="fa fa-remove" style="font-size:1em;"></i> Clear Input Buffer
メソッドやクラス定義など、複数行の記述をしている途中に
間違えてしまった場合は、 `!` を利用すると通常の入力モードに戻ります。

入力途中に `def` を `defa` と入力してしまってキャンセルしたい場合は、
下記のようになります。

### <i class="fa fa-flask" style="font-size:1em;"></i> 例： ! によるバッファクリア

~~~
[6] pry(main)> class Hoge
[6] pry(main)*   defa hoge
[6] pry(main)*   !
Input buffer cleared!
~~~

### :mask: Suppress evaluation output
文末にセミコロン ( ; ) を付加すると、標準出力を抑止します。
出力が長くなり、抑止したい場合に便利です。

### <i class="fa fa-flask" style="font-size:1em;"></i> 例： ; による標準出力抑止

~~~
[8] pry(main)> 'hoge'
=> "hoge"
[9] pry(main)> 'hige';
~~~

出力を抑止したが、後から出力内容を確認したい場合は、
変数 `_` や `_out_` から確認可能です。
変数 `_` は最後の実行結果。
変数 `_out_` は履歴全体を Pry::HistoryArray クラスに保持しています

### <i class="fa fa-flask" style="font-size:1em;"></i> 例： \_, \_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"
~~~

### :flashlight: Show the contents of the input buffer
`show-input` で入力バッファの内容を確認します。
長い複数行のコードを書いている際などに、内容を確認するのに便利です。

### <i class="fa fa-flask" style="font-size:1em;"></i> 例： 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)>
~~~

### <i class="fa fa-refresh" style="font-size:1em;"></i> Amend lines of input
長い複数行のコードを書いている際などに、内容を修正したい場合、

`amend line <line number> <fix code>`

で修正することができます。
この際、行番号が必要になるため、前述の `show-input` を利用します。

### <i class="fa fa-flask" style="font-size:1em;"></i> 例： 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"
~~~

### <i class="fa fa-flask" style="font-size:1em;"></i> 例： 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
~~~

## <i class="fa fa-edit" style="font-size:1em;"></i> Editing the contents of the input buffer with an editor
入力中のバッファをエディタで編集します。
エディタを変更したい場合は、

* 実行中の場合は `Pry.editor = 'xx'`
* 事前に設定するの場合は .pryrc に `Pry.cofig.editor = "xx"`

で設定します。

## <i class="fa fa-history" style="font-size:1em;"></i> 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)>
~~~

## <i class="fa fa-play" style="font-size:1em;"></i><i class="fa fa-file-text-o" style="font-size:1em;"></i> Play files and methods as input
`play` コマンドでファイルやメソッドを再生します。

### <i class="fa fa-file-text-o" style="font-size:1em;"></i> 検証用 play.rb ファイル
~~~ruby
class Play
  def play
    puts "play1"
    puts "play2"
    puts "play3"
  end
end
~~~

### <i class="fa fa-flask" style="font-size:1em;"></i> ファイルの再生検証

~~~
# play.rb を読み込んで、 3 行目から 4 行目を再生します
[16] pry(main)> play play.rb -l 3..4
play1
play2
=> nil
~~~

### <i class="fa fa-flask" style="font-size:1em;"></i> メソッドの再生検証
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"
~~~

## :man::woman: 親記事
<i class="fa fa-external-link-square" style="font-size:1em;"></i> [Ruby の 定番対話ツール pry 徹底攻略](http://qiita.com/tbpgr/items/12a60f2f9e3de61517b5)