jq クックブック REST ユーザ、NetOps、DevOps のための JSON 解析
ジェイキュー クック ブック レスト ユーザ ネットオプス デヴオプス ノ
なぜ注目されているか
技書の森解説
REST API の応答、クラウド各社の CLI が返す出力、ネットワーク機器から取得した状態情報と、運用の現場で流れてくるデータの多くは JSON です。その JSON をコマンドラインで抽出し、変換し、組み替えるツール jq について、値を抜き出すだけにとどまらない使い方をレシピ形式で示すのが『jq クックブック』 (豊沢聡 著、カットシステム、2023 年 5 月刊) で、副題は「REST ユーザ、NetOps、DevOps のための JSON 解析レシピ」です。版元は本書を、ある程度まで jq を使い込んだ読者向けと位置づけ、基本的な用法は導入篇の『jq ハンドブック』に委ねています。目標は、複雑な JSON テキストの処理を他のツールに頼らず jq 単体で書けるようになることで、各レシピは jq の関数の形で提示され、学習に使えるサンプルファイルのダウンロードサービスが付きます。
全 9 章と付録 5 本、数値関数から SQL 関数 / アルゴリズム関数まで
構成は全 9 章と付録 5 本で、章はすべて関数の種類で分かれています。第 1 章「数値関数」は円周率や自然対数の底を得る、10 進数を N 進数に変換する、Unix エポック時刻を ISO 8601 フォーマットに変換するといったレシピ、第 2 章「文字列関数」は Unicode コードポイントと文字の相互変換、先頭の大文字化、左右揃えなど文字列整形のレシピを集めます。第 3 章「配列関数」に続く第 4 章「集合関数」は和集合 / 積集合 / 差集合 / 対称差集合と部分集合の判定、第 5 章「統計関数」は総和 / 平均値 / 中央値 / 最頻値 / 分散 / 標準偏差を扱い、第 6 章「オブジェクト関数」はプロパティ名の再帰的な抜き出しなどオブジェクト構造の操作です。第 7 章「SQL 関数」は SELECT、WHERE、INNER JOIN から INSERT、UPDATE、DELETE、ALTER TABLE まで、SQL 文に相当する表操作を jq で組み立てる章で、第 8 章「アルゴリズム関数」は九九の表、階乗とフィボナッチ数列のループ版と再帰版、素数といった課題を通じて書き方の型を示します。第 9 章「その他関数」は JSON ではない入力の無視、環境変数やコマンド引数によるプロパティ名の指定、ファイルに記述したパスからの抽出といった実運用寄りのレシピです。付録には関数定義、ビルトイン関数の用法、用語、特殊記号、関数リストが収められ、レシピの参照元として機能します。
jq が難しい理由、フィルタのパイプラインという処理モデル
jq は他のテキスト処理ツールと比べても見劣りしない機能を備え、while や if などの制御構造、変数定義、関数の作成と呼び出しまでできるので、シェルスクリプト的な書き方も可能です。それでも多くの人が最初の一歩でつまずくのは、jq が根源的に、フィルタの処理結果を次のフィルタへ入力して段階的に入力を変形していくパイプライン処理の仕組みだからです。一般のスクリプト言語のように変数へ値を溜めてループで回すのではなく、入力の JSON 値がフィルタを通過するたびに別の値へ置き換わっていくと捉える必要があり、awk のような行指向ツールの感覚とも異なります。この処理モデルに慣れる近道は、文法の説明を読むことより、具体的な課題に対する完成した関数を読み、そのコーディングパターンを自分の課題に移すことです。本書が各レシピを関数の形で提示し、掲載した解法をそのまま使うだけでなく類似の問題を自力で解けるようになることを主目的に置いているのは、この学び方に沿った設計です。不要な行の削除や出力の調整を grep などに任せてパイプで組み合わせることもできますが、一つの処理系だけで書ければメンテナンスや共有が楽になるという版元の説明は、シェルスクリプト の中で JSON 処理が複数ツールにまたがって読みにくくなった経験がある人ほど納得しやすいものです。
『jq ハンドブック』を経た中級者向けという前提と、向かない人
前提は明確で、版元自身が、ある程度まで jq を使い込んだ読者を対象とし、ベーシックな用法は導入篇の『jq ハンドブック』を参照するよう案内しています。jq をこれから初めて触る人、コマンドライン でのパイプ処理や JSON の構造に不慣れな人が最初に読む本ではありません。また、章立てが関数の種類別で、REST API やクラウド CLI といった利用場面別ではないため、特定のサービスの出力を加工する手順書を期待すると肩透かしになります。すべてのユースケースを網羅するものでもなく、版元も掲載した解法より美しい方法があり得ると断っています。逆に、jq の基本文法は知っているものの少し複雑な変換になると別の言語に逃げてしまう人には、その一段上へ進む教材としてちょうど良い難度です。
REST API の応答や運用データを jq 単体で片づけたい人が元を取れる本
元が取れるのは、REST API の応答を日常的に検分する開発者、ネットワーク機器やクラウドの状態を JSON で集計する NetOps / DevOps の担当者、そして CI や運用スクリプトの中で JSON の整形と集計を jq のワンライナーで済ませたい人です。SQL の発想で表形式のデータを扱いたい場面や、統計量の算出、集合演算のように、jq でどう書けばよいか迷いやすい処理に既成の関数が用意されている点は、調べる時間をそのまま節約できる実利です。コマンドライン側の基礎から固めたい人は Linux 本ガイド で挙げた本を先に読むのが順当ですが、jq の基本をすでに押さえているなら、本書は手元に置いて必要なレシピから引くだけで投資を回収できる一冊です。
この本は技書デッキのカードです (備え 2 / 2 枚引く / エナジー +1) 図鑑でこの本を見る
この本に興味がある方におすすめ

関連する本
豊沢聡 の他の書籍
関連記事
関連用語
IAM
AWS のアクセス管理サービスで、誰が何のリソースにどのような操作を行えるかを制御する
ABAC
ユーザー、リソース、環境の属性に基づいてアクセス制御を動的に判断する認可モデル
最小権限の原則
ユーザーやプログラムに、タスクの遂行に必要な最小限の権限のみを付与するセキュリティ原則
ポリモーフィズム
同じインターフェースで異なる型を扱い、呼び出し側を変えずに型ごとの処理へ振り分ける仕組み
A/B テスト
2 つのバリエーションをユーザーにランダムに提示し、どちらがより良い成果を出すかをデータで検証する手法
Amazon Cognito
Web / モバイルアプリに認証 / 認可機能を追加する AWS マネージドサービス