JSON Diffを使った設定ファイルの比較

JSON diffを使用して環境、ブランチ、バージョン間で設定ファイルを比較する方法を学びます。意図しない変更を検出し、デプロイ設定の一貫性を確保します。

Real-World Scenarios

詳細な説明

設定ファイルは、最も頻繁に比較されるJSONドキュメントの1つです。config.dev.jsonconfig.prod.json の比較でも、アプリケーション設定を変更するプルリクエストのレビューでも、JSON diffは何が変わり何が同じままかを明確に表示します。

環境比較の例:

// config.dev.json
{
  "database": {
    "host": "localhost",
    "port": 5432,
    "name": "app_dev",
    "ssl": false,
    "pool": { "min": 1, "max": 5 }
  },
  "logging": {
    "level": "debug",
    "prettyPrint": true
  },
  "cache": {
    "enabled": false
  }
}

// config.prod.json
{
  "database": {
    "host": "db.production.internal",
    "port": 5432,
    "name": "app_prod",
    "ssl": true,
    "pool": { "min": 10, "max": 100 }
  },
  "logging": {
    "level": "warn",
    "prettyPrint": false
  },
  "cache": {
    "enabled": true,
    "ttl": 3600
  }
}

diffが明確に示すもの:

  • データベースのホスト、名前、SSL、プールサイズが異なる(環境間で想定内)
  • ロギングレベルとフォーマットが異なる(想定内)
  • 本番環境でキャッシュが有効化され、追加の ttl フィールドがある

設定diffで確認すべきポイント:

  1. 平文のシークレット: APIキーやパスワードがdiffに表示される場合、環境変数やシークレットマネージャーに移動すべきです。
  2. 予期しない類似性: 開発環境と本番環境の設定が同じデータベースホストを共有している場合、何かが誤設定されている可能性があります。
  3. 欠落フィールド: 開発環境には存在するが本番環境にないフィールドは、フォールバック使用やクラッシュの原因になる可能性があります。
  4. 型の不一致: ポート番号が一方の環境で文字列、もう一方で数値として保存されていると、厳密に型付けされたアプリケーションで問題が発生します。

ベストプラクティス:

  • 完全に別のファイルを維持するのではなく、ベース設定に環境固有のオーバーライドを持つ構成にしてください。
  • CI/CDパイプラインでJSON diffを使用して、設定変更が意図的であることを検証してください。
  • プルリクエストレビューでは、コード変更と同じ厳格さで設定diffをレビューしてください。

ユースケース

デプロイ設定を変更するプルリクエストをレビューし、意図した設定のみが変更され、機密性の高い値が誤ってコミットされていないことを確認する。

試してみる — JSON Diff

フルツールを開く