columnizeを使ってみた[Ruby][irb][Gem]
あけましておめでとうございます!
新年一発目はライトな話題から...
今回はcolumnizeというgemを触ってみてあったら便利な時もありそうだなーと思ったので備忘録として。
どんなgem?
このgemは簡単に言うと配列の中身を見やすく整形してくれる
gemです!
デバッグ時などに便利そうなgemですね。
pryでもirbでも問題なく使えたので、そのあたりと組み合わせると幸せになれるかも?
ちなみにgemを知ったきっかけは BestGems -- Ruby Gems Download Ranking をぼーっと見ていて目に止まったからです!
いや〜このサービスは便利+見ていて楽しいですねwありがとうございます!
ちなみにこのcolumnize
はtotalランキング122位でした。
インストール
gem columnize
こちらをGemfile
に記述してbundle install --path vendor/bundle
するか、gemに直接インストールしてしまいましょう。
おしまいです:)
使い方
早速使ってみます。
columnize_sample|⇒ bundle exec irb irb(main):001:0> require 'columnize' => true
requireしてあげることでcolumnizeが有効になります。
当たり前ですがpryを用いてbinding.pry
等を行うときは、requireをbinding.pry
する以前にrequireしておいてあげればそのまま使用することが可能です。
irb(main):002:0> a = (1..10).to_a => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] irb(main):003:0> a.columnize => "1 2 3 4 5 6 7 8 9 10"
columnizeをrequireするとarrayにcolumnizeというメソッドが生えるようになります。
実行すると上記の様に配列が文字列に展開されたような形になります。
この展開の方式をオプションによって変えて、それをputsで表示することで配列をフォーマットしてよしなな形で見れるようにしよう、というのがcolumnizeの趣旨です。
irb(main):004:0> puts a.columnize :displaywidth => 10 1 5 9 2 6 10 3 7 4 8 => nil irb(main):005:0> puts a.columnize :displaywidth => 20 1 3 5 7 9 2 4 6 8 10 => nil
:displaywidthオプションをつけると表示文字列の一行あたりの最大文字数
を指定することが可能です。
ちょっとわかりにくいかもしれませんが、例えば一つ目の例での:displaywidth => 10
だと、1行あたり10文字まで表示できる状態でいい感じに表示してくれます。このいい感じに
っていうのがなかなか賢いですね!2 6 10
の並びは8文字ですが、10を指定してもこの様に表示してくれます。
:displaywidth => 20
を指定すると、先ほどまでは10文字の制限があって表示できなかった2 4 6 8 10(14文字)
を表示できるようになるわけです。
(ちょっと挙動がわかりにくいのは内緒な)
irb(main):006:0> puts a.columnize :arrange_array => true, :displaywidth => 20 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] => nil
:arrange_array => true
を指定すると、配列の形で吐き出してくれます。
irb(main):007:0> g = %w(bibrons golden madascar leopard mourning suras tokay) => ["bibrons", "golden", "madascar", "leopard", "mourning", "suras", "tokay"] irb(main):008:0> puts g.columnize :displaywidth => 15 bibrons suras golden tokay madascar leopard mourning => nil
中身が文字列でもOKです。
irb(main):009:0> puts g.columnize :displaywidth => 19, :colsep => ' | ' bibrons | mourning golden | suras madascar | tokay leopard => nil
:colsep => <区切り文字として利用したい文字列>
とすると、それで列の間を区切ってくれます。
レイアウトをそのままにしたい場合はcolsepの文字数分displaywidthの値を上手く増やす必要があります。(このへんももう少しよしなにできたらなおよさそう)
irb(main):062:0> puts g.columnize :displaywidth => 19, :colsep => ' | ', :ljust => false bibrons | mourning golden | suras madascar | tokay leopard => nil irb(main):063:0> puts g.columnize :displaywidth => 19, :colsep => ' | ', :ljust => true bibrons | mourning golden | suras madascar | tokay leopard => nil
:ljust
オプションによって左揃えかどうかを選択できます。デフォルトはfalseに設定されています。
irb(main):011:0> Columnize.columnize(a) => "1 2 3 4 5 6 7 8 9 10" irb(main):012:0> puts Columnize.columnize(a, :displaywidth => 10) 1 5 9 2 6 10 3 7 4 8 => nil
クラスメソッドとして呼ぶことも可能です。
ちなみにputsしないで見てみるとこんな感じです。
irb(main):071:0> g.columnize :displaywidth => 18, :colsep => ' | ', :ljust => true => "bibrons | suras\ngolden | tokay\nmadascar\nleopard \nmourning"
終わりに
実データっぽいものをサクッと扱いたいときなどに知っていると楽ができそうだなぁという印象のgemでした!
今回の物は割りと有名そうでしたが、このようにいろんなパッと出会ったgemを触ってコードも読んでみたりするのも楽しそうだなと感じました!
gem reading習慣の機運?w