この記事について
この記事は、生成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
見るべき差は mode の test → prod です。キーの並び替えは差分から消えます。
なぜ -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/
