irbとかpryとかで => で出力されるのを消す方法

最近Rubyで大きいな配列を使うことがあってそんな時に起きたこととその解決策

どんな問題があったか

僕はよくpryとかirbを使ってRubyでちょっとした操作をしたりpry-byebugを使ってbinding.pryでブレークポイントをおいてデバッグしたりする。

例えばpryを使ってa, b, c各ワードを10個並べたものを出力する。

[1] pry(main)> %w(a b c).each { |w| puts w * 10 }
aaaaaaaaaa
bbbbbbbbbb
cccccccccc
=> ["a", "b", "c"]

いつもなら何も違和感がないのだが、オブジェクトがechoされる=> ["a", "b", "c"]が厄介になる。
今回はa b cと3つだがこれが1000, 2000と大きな数をまわすとオブジェクトがechoされるものが最後に出るので本当にみたいものはスクロールしないといけない。

なので便利ではあるが、場合によっては消したい時がある。

どうやって消すか

irbの場合とpryの場合でコマンドが少し違うのでそれぞれ書く。

irb

class IRB::Context (Ruby 2.4.0)
irbにはIRB::Context#echoがあってここで出力するかどうかを制御している。
boolで設定が出来るので、必要ない場合はfalseにしてあげる。

irb(main):001:0> %w(a b c).each { |w| puts w * 10 }
aaaaaaaaaa
bbbbbbbbbb
cccccccccc
=> ["a", "b", "c"]
irb(main):002:0> conf.echo = false
irb(main):003:0> %w(a b c).each { |w| puts w * 10 }
aaaaaaaaaa
bbbbbbbbbb
cccccccccc

pry

Customization and configuration · pry/pry Wiki · GitHub pryでは出力ではprocで定義されているものにしたがっているので空にしてあげる。

[1] pry(main)> %w(a b c).each { |w| puts w * 10 }
aaaaaaaaaa
bbbbbbbbbb
cccccccccc
=> ["a", "b", "c"]
[2] pry(main)> Pry.config.print = proc {}
[3] pry(main)> %w(a b c).each { |w| puts w * 10 }
aaaaaaaaaa
bbbbbbbbbb
cccccccccc