jqでJSON設定を比較する ― キー順の違いを消してdiffを読みやすくする

Linux・CLI・DevOpsカテゴリを表すパンダのイラスト Linux・CLI・DevOps

この記事について
この記事は、生成AIを活用した自動生成フローで作成しています。jq公式マニュアルのキーソート機能を確認し、JSON設定の差分を人が読みやすくする安全な手順を整理しています。

検証ステータス:📘 jq公式仕様確認済み・Ubuntu実機未確認

JSONファイルをそのまま diff すると、キー順の違いだけで大量の差分が出ることがあります。jqでキー順を正規化してからdiffすると、設定値の違いへ集中できます。

まず試す

cat > before.json <<'JSON'
{"port":8080,"mode":"test","enabled":true}
JSON
cat > after.json <<'JSON'
{"enabled":true,"mode":"prod","port":8080}
JSON

jq -S . before.json > before.sorted.json
jq -S . after.json  > after.sorted.json
diff -u before.sorted.json after.sorted.json

見るべき差は modetestprod です。キーの並び替えは差分から消えます。

なぜ -S が効くのか

JSON objectのキー順は、人間が設定差を確認するときの本質ではないことがあります。jq -S はobjectのキーをソートして出力するため、表記上の揺れを減らせます。

1か所変えてみる

port を8080から8081へ変えて再実行します。差分が2か所になり、レビュー時に「何を変えたか」が目で追えます。

仕事で使うなら

Webサーバー設定、APIレスポンス、エクスポートしたアプリ設定、AIが生成したJSONの変更確認などに使えます。変更申請へ添付する前に秘密値が含まれていないかも確認してください。

jq 'del(.password, .token, .secret)' config.json

この例はトップレベルの同名キーだけを削除します。入れ子や別名の秘密値を自動で完全除去できるわけではありません。

注意

正規化は「意味が同じ」と保証する処理ではありません。配列は順番が意味を持つ場合があるため、安易にsortしないでください。

まとめ

JSON比較では、先に表記ゆれを減らしてから差分を見ると、人間のレビューが楽になります。jq -S + diff -u は小さく試せる実務的な組み合わせです。

公式情報・一次情報

  • jq Manual: https://jqlang.org/manual/

文書情報

記事タイトル
jqでJSON設定を比較する ― キー順の違いを消してdiffを読みやすくする
作成日
更新日
Source URL
https://papanda925.com/?p=15829

ライセンス: 本記事のうち、当サイトが権利を有する本文・自作図表は、特記なき限り CC BY 4.0 で利用できます。生成AIを活用して作成・編集した内容を含みます。コードについて、別途ライセンス表示またはリンク先GitHubリポジトリのライセンスがある場合は、その条件を優先します。引用・第三者資料・画像・商標等は本ライセンスの対象外です。 利用ポリシー

タイトルとURLをコピーしました