Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

ruby-progressbarで少し格好いいCLIに

ruby-progressbarは、その名のとおり進捗率をCLI上に表示してくれるgemです。

入手方はお察しのとおり

gem install ruby-progressbar

です。*1

基本的な使い方は以下の様になっています。

require 'ruby-progressbar'

##まずは初期化。タイトル(:title)や、初期値(:starting_at)、そして出力先!(:output)を指定できます。
progressbar = ProgressBar.create(:title => "Items", :starting_at => 20, :total => 100, :output => $stderr)

##この例では、力技で30カウント進めてます。
##進め方は、当然自力でコントロール可能です。
30.times { progressbar.increment }

##当然、何らかの動作を途中に挿入出来ます。
##putsは$stdoutのままなので、進捗率とは別に表示されます。
puts "50%"

##残りを進めます。
50.times { progressbar.increment }

puts "that's all"

この出力結果は、以下のようになります。

ruby rubyProgressbarTest.rb > testdoc.txt
Items: |=======================================================================|

標準出力と標準エラー出力が分かれているので、testdoc.txtに進捗表は入りません。

またパラメータ次第で、表示法もかなり自由に改変することができ

ProgressBar.create(:format => '%a |%b>>%i| %p%% %t', :starting_at => 10)

とすると、

Time: --:--:-- |====>>                                        | 10% Progress

のような恰好で表示してくれます。

<蛇足>
公式リファレンスの売り文句が何ともアレなのでついでに紹介。

The ultimate text progress bar library for Ruby! It'll SMASH YOU OVER THE HEAD with a PURE RUSH of progress bar excitement!

Don't miss out on what all the kids are talking about! If you want everyone to know that your gem or app can survive in the cage then YOU WANT RUBY-PROGRESSBAR!

参照元

*1:私自身は、接続不良のためrubygemから直接持ってきましたが……