JSON Diffを使った設定ファイルの比較
JSON diffを使用して環境、ブランチ、バージョン間で設定ファイルを比較する方法を学びます。意図しない変更を検出し、デプロイ設定の一貫性を確保します。
Real-World Scenarios
詳細な説明
設定ファイルは、最も頻繁に比較されるJSONドキュメントの1つです。config.dev.json と config.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で確認すべきポイント:
- 平文のシークレット: APIキーやパスワードがdiffに表示される場合、環境変数やシークレットマネージャーに移動すべきです。
- 予期しない類似性: 開発環境と本番環境の設定が同じデータベースホストを共有している場合、何かが誤設定されている可能性があります。
- 欠落フィールド: 開発環境には存在するが本番環境にないフィールドは、フォールバック使用やクラッシュの原因になる可能性があります。
- 型の不一致: ポート番号が一方の環境で文字列、もう一方で数値として保存されていると、厳密に型付けされたアプリケーションで問題が発生します。
ベストプラクティス:
- 完全に別のファイルを維持するのではなく、ベース設定に環境固有のオーバーライドを持つ構成にしてください。
- CI/CDパイプラインでJSON diffを使用して、設定変更が意図的であることを検証してください。
- プルリクエストレビューでは、コード変更と同じ厳格さで設定diffをレビューしてください。
ユースケース
デプロイ設定を変更するプルリクエストをレビューし、意図した設定のみが変更され、機密性の高い値が誤ってコミットされていないことを確認する。