LoginSignup
3
4

More than 5 years have passed since last update.

オブジェクトをテキストのテーブル表記にする table_format gem の紹介

Last updated at Posted at 2017-11-11

こんな感じでオブジェクトをテーブル表記で表示する table_format の紹介です。

irb
>> tp GC.stat
|-----------------------------------------+----------|
|                                   count | 25       |
|                    heap_allocated_pages | 112      |
|                      heap_sorted_length | 112      |
|                  heap_allocatable_pages | 0        |
|                    heap_available_slots | 45654    |
|                         heap_live_slots | 45574    |
|                         heap_free_slots | 80       |
|                        heap_final_slots | 0        |
|                       heap_marked_slots | 35528    |
|                         heap_eden_pages | 112      |
|                         heap_tomb_pages | 0        |
|                   total_allocated_pages | 112      |
|                       total_freed_pages | 0        |
|                 total_allocated_objects | 222393   |
|                     total_freed_objects | 176819   |
|                   malloc_increase_bytes | 231664   |
|             malloc_increase_bytes_limit | 16777216 |
|                          minor_gc_count | 21       |
|                          major_gc_count | 4        |
|       remembered_wb_unprotected_objects | 295      |
| remembered_wb_unprotected_objects_limit | 422      |
|                             old_objects | 34856    |
|                       old_objects_limit | 52480    |
|                oldmalloc_increase_bytes | 2305744  |
|          oldmalloc_increase_bytes_limit | 16777216 |
|-----------------------------------------+----------|

特徴

  1. tp メソッドの引数にオブジェクトを指定するとテーブル表記で表示します。
  2. 主にデバッグ用で pp よりも簡潔に表示したい場合の利用を想定しています。
  3. rake タスクの結果を整えて表示したいときなどにも有用かもしれません。
  4. デフォルトでは Org 用のテーブル表記ですが Markdown のテーブル表記にも対応しています。
  5. 日本語でもガタガタになりません

インストール方法

gem i table_format

そのあとは require 'table_format' です。

使用例

ハッシュの配列

いちばんよく使う例です。

コード
tp [{id: 1, name: 'alice'}, {id: 2, name: 'bob'}]
表示
|----+-------|
| id | name  |
|----+-------|
|  1 | alice |
|  2 | bob   |
|----+-------|

数字は右寄せ、文字列は左寄せにします。

org-table 用のフォーマットなので Org 文書にコピペできます。

ハッシュ

コード
tp({id: 1, name: 'alice'})
表示
|------+-------|
|   id | 1     |
| name | alice |
|------+-------|

見やすくするため、ハッシュの場合に限り、キーと値を中央ライン寄りにしています。

配列

コード
tp [:alice, :bob]
表示
|-------|
| alice |
| bob   |
|-------|

配列の場合、縦に並びます。

数値・文字列・シンボル

コード
tp 1
tp 'foo'
tp :foo
表示
|---|
| 1 |
|---|
|-----|
| foo |
|-----|
|-----|
| foo |
|-----|

配列や、これらはとくに嬉しくありませんが、コンソールで目立たせて表示したい場合などにたまに使うことがあります。

ActiveRecord と Mongoid を少し便利にします

AR または Mongoid で、次のようにして作ったレコードがあったとします。

['alice', 'bob'].each { |e| User.create!(name: e) }

そこで tp モデルクラス とすると全件数をテーブル表示します。

コード
tp User
表示
|----+-------|
| id | name  |
|----+-------|
|  1 | alice |
|  2 | bob   |
|----+-------|

リレーションのインスタンスもそのままテーブル表示できます。

コード
tp User.limit(1)
表示
|----+-------|
| id | name  |
|----+-------|
|  1 | alice |
|----+-------|

モデルクラスのインスタンスの場合は属性を表示します。

コード
tp User.first
表示
|------+-------|
|   id | 1     |
| name | alice |
|------+-------|

ActiveRecord の select_all の結果に対して

これもそのままテーブル表示できます。

コード
tp ActiveRecord::Base.connection.select_all('SELECT * FROM users')
表示
|----+-------|
| id | name  |
|----+-------|
|  1 | alice |
|  2 | bob   |
|----+-------|

テーブル表示ではなく文字列で欲しい場合

to_t メソッドを使います。

コード
[{id: 1, name: 'alice'}, {id: 2, name: 'bob'}].to_t
結果の文字列
|----+-------|
| id | name  |
|----+-------|
|  1 | alice |
|  2 | bob   |
|----+-------|

Markdown フォーマットにしたい場合

オプション一覧
tp TableFormat.default_options
表示
|-------------------+-------|
|          markdown | false |
|            header |       |
|             cover | true  |
|          vertical | |     |
|      intersection | +     |
| intersection_both | |     |
|           horizon | -     |
|           padding |       |
|           in_code | UTF-8 |
|-------------------+-------|

このなかの markdown を true にすると Markdown フォーマットになります。
次のように tp メソッドの最後にオプションを指定します。

コード
tp [{id: 1, name: 'alice'}, {id: 2, name: 'bob'}], markdown: true
表示 (Markdownフォーマット)
| id | name  |
|----|-------|
|  1 | alice |
|  2 | bob   |

出力を qiita にそのままコピペできます。

以上です。よかったら使ってみてください。

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4