BestGems Pickup! 第5回 「formatador」

タグ: bestgems_pickup / 公開: 2013-09-06

拙作のBestGemsから注目のGemを紹介するエントリー。第5回は「formatador」を取り上げる。

概要

formatadorは標準出力にテキストを整形して出力するライブラリだ。手動では煩わしいテキストの色付けや、テキストによる表組み、プログレスバーの実装まで可能だ。

formatadorは今日現在、合計ダウンロードランキング115位、デイリーダウンロードランキング77位につけている。

インストール

gem install formatador

使用例

テキストの出力と装飾

formatadorの機能は、すべてFormatadorクラスのクラスメソッド呼び出しで利用できる。もちろんインスタンスを生成しても良い。

例えば、以下のコードは、標準出力にHello, World!を出力する。

Formatador.display_line('Hello, World!')
  Hello, World!

Formatadorには、以下4つの基本的なメソッドがある。引数はいずれも文字列だ。

メソッド機能
formatSTDOUTが標準出力なら、文字列にカラーコードを追加して返す
display文字列をformatすると共に、出力する
display_line文字列に改行を加えてdisplayする
redisplay最後の行に上書きして、文字列をdisplayする

文字列はHTMLライクなタグを使って、カラーコードで装飾できる。例えば以下のコードでは、緑色のHello, World!を表示する。

Formatador.display_line('[green]Hello, World![/]')

タグは以下3種類がある。

タグ意味
[スタイル]テキストのスタイルを変更する
[_スタイル_]テキストの背景色を変更する
[/]スタイルと背景色の指定をクリアする

なおスタイルで指定できる色は以下だ。

指定意味
black
red
green
yellow黄色
blue
magentaマゼンタ
purple
cyanシアン
white
light_black_灰色
light_red明るい赤
light_green明るい緑
light_yellow明るい黄色
light_blue明るい青
light_magenta明るいマゼンタ
light_purple明るい紫
light_cyan明るいシアン

色の他に以下のスタイルも指定できる。

指定意味
bold太字
underline下線
blink_slow遅い点滅
blink_fast早い点滅
negative文字色と背景色の反転
normal文字色をデフォルトに戻す
blink_off点滅をなしに戻す
positive文字色と背景色を元に戻す

表、プログレスバー、インデント

テキストの装飾が簡単にできるだけでも強力だが、Formatadorにはさらに以下の拡張メソッドがある。

メソッド機能
display_tableテーブルを表示する
display_compact_tableテーブルを表示する、ただし横線を省略する
redisplay_progressbarプログレスバーを表示する
indentインデントを深くする

display_tabledisplay_compact_tableは、いずれもハッシュの配列を表形式で表示するメソッドだ。オプションで第2引数にキーの配列を与えると、列の順序と表示/非表示を切り替えられる。サンプルは以下のとおり。

data = [
	{:foo => '123', :bar => '456', :buz => '789'},
	{:foo => 'abc', :bar => 'def', :buz => 'ghi'},
	{:foo => 'alpha', :bar => 'beta', :buz => 'gamma'},
]

Formatador.display_table(data, [:bar, :buz])
Formatador.display_compact_table(data, [:bar, :buz])
  +------+-------+
  | bar  | buz   |
  +------+-------+
  | 456  | 789   |
  +------+-------+
  | def  | ghi   |
  +------+-------+
  | beta | gamma |
  +------+-------+
  +------+-------+
  | bar  | buz   |
  +------+-------+
  | 456  | 789   |
  | def  | ghi   |
  | beta | gamma |
  +------+-------+

redisplay_progressbarはプログレスバーを表示するメソッドだ。このメソッドを適当なタイミングで呼び出すことで進捗をリアルタイムで表せる。サンプルは以下のとおり。

started_at = Time.now - 1000
Formatador.redisplay_progressbar(42, 100, {:started_at => started_at})
     42/100  |*********************                             |  16:40  

redisplay_progressbarの第1引数は現在の進捗、第2引数は合計、第3引数はオプションで、ハッシュで以下の要素が渡せる。

キー機能
:colorバーの色を文字列で指定する。デフォルトは白。
:widthバーの幅を数値で指定する。デフォルトは50。
:new_lineバーを出力した後に改行するかを真偽値で指定する。
:started_at開始時間をTime型で与える。このオプションを指定すると、完了予想時間を表示する。

indentメソッドを使えば、出力をインデントできる。

require 'formatador'

Formatador.display_line 'hoge'
Formatador.indent do
	Formatador.display_line 'piyo'
	Formatador.indent do
		Formatador.display_line 'fuga'
	end
end
  hoge
    piyo
      fuga

解説

formatadorを使えば、美しい出力のコマンドラインツールを簡単に作ることができる。前回のBestGems Pickup!で取り上げたコマンドラインオプションのパーサSlopを併用すれば、使いやすく、見やすいツールを最小の手間で実現できるだろう。どちらも現時点では日本語の解説をほとんど見かけないが、非常に強力なGemだ。

この記事をSNSでシェアする
タイトルとURLをコピーする
または投稿画面を開く
Author
Icon
ぺけみさお / xmisao
プログラマ。
Subscription
Recent articles
Related to bestgems_pickup