Ruby | Command Line Interface 用 表フォーマットテキスト整形ツール 格子( kosi ) gem version 1.0.0 リリース #ruby

# Command Line Interface 用 表フォーマットテキスト整形ツール 格子( kosi ) gem version 1.0.0 リリース
## :musical_score: 概要
ターミナルアプリケーション用 表フォーマットサポートツール 格子 ( kosi ) のリリース告知

## :notes: Images
### :baby_chick: Before

:rage1::rage1::rage1:,:alien:,:older_woman::older_woman:
:older_man:,:dog:,:baby::baby::baby::baby::baby::baby::baby:
:cat::cat:,:octocat::octocat::octocat::octocat::octocat::octocat::octocat:,:octopus::octopus::octopus::octopus::octopus:

### :chicken: After
+-----------+---------------------------+---------------------------+
|:rage1::rage1::rage1:|:alien::grey_question::grey_question::grey_question::grey_question::grey_question::grey_question:|:older_woman::older_woman::grey_question::grey_question::grey_question::grey_question::grey_question:|
|:older_man::grey_question::grey_question:|:dog::grey_question::grey_question::grey_question::grey_question::grey_question::grey_question:|:baby::baby::baby::baby::baby::baby::baby:|
|:cat::cat::grey_question:|:octocat::octocat::octocat::octocat::octocat::octocat::octocat:|:octopus::octopus::octopus::octopus::octopus::grey_question::grey_question:|
+-----------+---------------------------+---------------------------+

## <i class="fa fa-question-circle" style="font-size:1em;"></i> kosi とは？
Command Line Interface ( 以降 CLI )の出力時に
以下のようなフォーマットを見かけることがあります。

~~~
+-------+-------+-------+
|column1|column2|column3|
+-------+-------+-------+
|a      |b      |c      |
|ほｹﾞ1  |ひｹﾞ22 |へｹﾞ333|
+-------+-------+-------+
~~~

特に DB 系の CLI ツールなどに多い形式です。
データの加工などには向きませんが、 Human Readable なフォーマットです。

こういったフォーマットが必要な場合、 ruby の gem で標準的なのは
terminal-table gem です。

しかし、 terminal-table はマルチバイト文字に対応していません。
日本語でも、同等の機能を利用したい、ということで
この gem を作成しました。

※ 等幅フォントを利用しないと綺麗に出力されません

## :man: 利用想定
* CLI の出力に Human Readable なフォーマットを追加したい

~~~bash
$ your_gem list
a,b,c
ほｹﾞ1,ひｹﾞ22,へｹﾞ333,
$
$ your_gem list --table
+-------+-------+-------+
|column1|column2|column3|
+-------+-------+-------+
|a      |b      |c      |
|ほｹﾞ1  |ひｹﾞ22 |へｹﾞ333|
+-------+-------+-------+
~~~

こんな時に、内部で kosi gem を利用して出力文字列を整形する想定です。

## <i class="fa fa-flask" style="font-size:1em;"></i> 出力サンプル
下記のような設定をカスタマイズ可能です

* ヘッダーの有無
* 行区切りの有無
* 利用する文字

※この記事の出力は若干表がずれていますが、等幅フォントを利用していれば綺麗に揃います

### <i class="fa fa-tint" style="font-size:1em;"></i> サンプル1
* ソースコード

~~~ruby
require 'kosi'

kosi = Kosi::Table.new
print kosi.render([[*'a'..'c'], ['ほｹﾞ1', 'ひｹﾞ22', 'へｹﾞ333']])
~~~

* 出力

~~~
+-----+------+-------+
|a    |b     |c      |
|ほｹﾞ1|ひｹﾞ22|へｹﾞ333|
+-----+------+-------+
~~~

### <i class="fa fa-tint" style="font-size:1em;"></i> サンプル2
* ソースコード

~~~ruby
require 'kosi'

kosi = Kosi::Table.new({align: Kosi::Align::TYPE::CENTER})
print kosi.render([[*'a'..'c'], ['ほｹﾞ1', 'ひｹﾞ22', 'へｹﾞ333']])
kosi = Kosi::Table.new({align: Kosi::Align::TYPE::RIGHT})
print kosi.render([[*'a'..'c'], ['ほｹﾞ1', 'ひｹﾞ22', 'へｹﾞ333']])
kosi = Kosi::Table.new({align: Kosi::Align::TYPE::LEFT})
print kosi.render([[*'a'..'c'], ['ほｹﾞ1', 'ひｹﾞ22', 'へｹﾞ333']])
~~~

* 出力

~~~
+-----+------+-------+
|  a  |  b   |   c   |
|ほｹﾞ1|ひｹﾞ22|へｹﾞ333|
+-----+------+-------+
+-----+------+-------+
|    a|     b|      c|
|ほｹﾞ1|ひｹﾞ22|へｹﾞ333|
+-----+------+-------+
+-----+------+-------+
|a    |b     |c      |
|ほｹﾞ1|ひｹﾞ22|へｹﾞ333|
+-----+------+-------+
~~~

## :musical_note: 等幅フォント (M+ Font) での表示例

![kosi.png](https://qiita-image-store.s3.amazonaws.com/0/43480/adc052f0-a25b-87df-1a5e-4c9a7cfdef65.png)

## :memo: 補足
他のオプションなど詳細な利用方法については、 GitHub の README をご確認ください。
<i class="fa fa-external-link" style="font-size:1em;"></i><i class="fa fa-github-square" style="font-size:1em;"></i> [kosi GitHub](https://github.com/tbpgr/kosi)

## 外部資料
* <i class="fa fa-external-link" style="font-size:1em;"></i><i class="fa fa-github-square" style="font-size:1em;"></i> [kosi GitHub](https://github.com/tbpgr/kosi)
* <i class="fa fa-external-link" style="font-size:1em;"></i>:gem: [kosi RubyGems](https://rubygems.org/gems/kosi)