必須設定を最小化しデフォルトを動的決定する
ルール
設定を設計するとき、以下の原則に従う:
- ユーザーに強制して聞くことを最小化する — 「必ず設定しなければ動かない」項目をできる限り減らす
- デフォルトは静的な値ではなく、環境から動的に決定する — ホスト名・ポート・リージョンなどは自動検出する
- 設定のインターフェースとデータフォーマットを分離する — インターフェースを変えずに内部フォーマットを変更できるようにする
理由
設定が複雑だと:
- セットアップの障壁が高くなり、新環境でのデプロイに時間がかかる
- 設定ミスによる障害が増える(設定の組み合わせ爆発)
- 「なぜこの設定が必要か」がドキュメント化されず、引き継ぎが困難
必須設定を減らすことで:
- 初期セットアップが速くなる(新規サービス・新環境への展開)
- 設定ミスの表面積が減る
- テストが容易になる(デフォルトで起動できる)
実践
設定項目を追加するとき:
- 「これは本当にユーザーが決めなければならないか?」を問う
- 環境変数・メタデータサーバー・設定ファイルの規約から自動検出できないか検討
- デフォルト値を設定したうえで、必要な場合だけオーバーライドできる設計にする
例外
- セキュリティに関わる設定(認証情報・暗号化キー)は明示的に要求することが適切
- ビジネス要件として「必ず人間が確認して設定すべき」項目は強制でよい
出典
Google SRE Workbook(Betsy Beyer他)第14章「Configuration Design」