サービス開発2課のくればやしです。
AWSを扱う際に便利なAWS CLIですが、 --output table オプションの付与により、テーブル形式で結果を出力できます。これにより、人間がみるときに分かりやすくパラメータを確認できます(ちなみに実行時のターミナルのウィンドウ幅によって、テーブルの見出しの縦・横が勝手に切り替わる便利機能があると最近知りました)。
AWS CLI での出力フォーマットの設定 - AWS Command Line Interface

このテーブル形式の出力ですが、変換する前のJSON(ハッシュ)形式のデータはリソースによって階層の深さや属性値の数が違うため、内部的にはどのように実現しているか気になったので少し覗いてみました。
アルゴリズム概要
元のデータをテーブル出力に変換しているのはコード的にはここのクラスのため、ここを読んでいきます。ポイントとなるのは処理の起点となる _build_table メソッドです。
アルゴリズムを実現している部分だけを抜き出すと以下のような流れでした。
_build_table(title, current) # title にテーブルの中央に表示する文字列、 current にハッシュまたは配列のデータ title があればタイトルとして表示 if current が配列 if 配列の中身がハッシュ 値がスカラーの組み合わせは、キーと値をセルとして表示 値がスカラーで無い組み合わせは、順番に _build_table() else 値がスカラーのものは、セルとして表示 値がスカラーで無いものは、順番に _build_table() if current がハッシュ 値がスカラーの組み合わせは、キーと値をセルとして表示 値がスカラーで無い組み合わせは、順番に _build_table()
ポイントとしては、ハッシュにおける値がスカラーであった場合はテーブルのセルとして表示する、それ以外(ハッシュまたは配列)であった場合はその値を再帰関数に渡して呼び出す。それを値がスカラー以外のものが無くなるまで繰り返す、という流れでした。
具体的にある部分の処理をスナップショットとして抜き出すと以下のようなイメージです。
感想
再帰関数をうまく使って、ハッシュ化されているデータを走査していきながらテーブルのセルとするか、タイトル(Section)とするかを判定していると分かりました。少し気になっていたことが分かって、スッキリしました。
紅林輝(くればやしあきら)(サービス開発部) 記事一覧
サービス開発部所属。2015年にサーバーワークスにJOIN。クラウドインテグレーション部を経て、現在はCloud Automatorの開発に従事。ドラクエ部。推しナンバーはⅤ、推しモンスターはクックルー。
