どの設定が勝つか:7段の優先順位
AI 公開日 更新日 中級

どの設定が勝つか:7段の優先順位

共有テンプレートと個別設定がぶつかったとき、どちらが効くかを見失わない設計を解説します。

クムビーバー
クムビーバー 現場実装 / Platform Engineer

現場実装の クムビーバー です。検証基盤が壊れやすい典型原因は、設定の上書きルールが曖昧なことです。「誰のYAMLが正」か分からない状態で git pull すると、共有設定とマシン固有値が衝突します。速いモデル選定より先に、設定が溶けない規則が必要です。

この回の答え

設定は7段の上書きで、上の層が勝ちます。意図しない層が勝つと事故ります。コマンド行の未指定は下層を潰しません。

この回だけの用語

用語ひとことで
優先順位(precedence)どの設定が最終的に勝つかの順番。CSS の詳細度に近い
起動設計図(profile)用途の起動設計図。共有しやすい層
上書き差分(override)ローカルや一時の差分。共有の正本を直接いじらない
試運転(dry-run頭の中でマージせず、最終解決値を表示して確認する
空値による潰し(null潰し)未指定と空値を混ぜて、下層の値を消してしまう事故
コマンド行引数(CLI)いちばん上の層。一回限りの試験向き

まずはこれだけ

  • 壊れたら「どの層が勝ったか」を先に見る
  • 共有の正本を直接いじらず、差分は上書き層へ
  • 頭の中でマージせず、試運転で最終値を確認する

社内基盤では、低優先から高優先へ固定順でマージします。

  1. ランタイム既定
  2. 起動設計図
  3. クラスタ設定
  4. ノード設定
  5. ローカル上書き
  6. 環境変数
  7. コマンド行引数

後のレイヤが前を上書きし、辞書はキー単位マージ、リスト/単値は置換、というルールに統一します。

図1: 設定の優先順位
図1: 設定の優先順位

なぜこの順番か

  • 共有できるもの(example、共通プロファイル)を低い層に置く
  • マシン固有(ノード差、経路、秘密情報)を高い層に置く
  • 一時的な試験をコマンド行で上書きできるようにする

これにより、git pull で共有ロジックだけ更新し、サーバ固有状態を壊しにくくします。レビューも「どの層の差分か」で議論できます。

レイヤ置きたいもの置きたくないもの
既定 / 起動設計図用途の意図、再現可能な既定ホスト固有パス、秘密情報
クラスタ / ノード共有クラスタ差、ノード差個人の一時実験
ローカル上書き開発者ローカルの差分チームの正本
環境変数 / コマンド行秘密情報、一回限りの試験長期の正設定(忘れやすい)

マージ規則を一文で

現場トラブルの多くは、「配列がマージされたと思ったら置換だった」「空値で潰した」系です。規則を短く固定します。

  • 辞書: キー単位で深いマージ
  • リスト / 単値: 後勝ちで置換
  • 明示の空値: 潰し事故になりやすいので、未指定と空値を混ぜない
  • 最終解決値: 試運転で確認する(頭の中でマージしない)

「YAML を見た」と「最終起動値を見た」は別物です。

追跡するもの / しないもの

git追跡(共有)ローカル(管理外)
example YAML、docs、コード.env、実ノード/クラスタ
起動/評価テンプレート実 models.yaml、ローカル上書き
生成器・テストresults、ログ、モデル本体

秘密情報やホスト固有値をリポジトリに入れないことは、セキュリティだけでなく、再現実験のノイズ削減にも効きます。

運用チェック

  1. 試運転後の生成物で「最終解決値」を確認する
  2. 未指定のコマンド行が空値で設定を潰していないか確認する
  3. ノード切替は node_id と上書きで明示する
  4. 共有プロファイルを直接編集せず、差分は上書きに寄せる
  5. 一時試験はコマンド行 / 環境変数に閉じ、終わったら残さない
  6. レイヤを跨いだ同名キーの意図を、コメントか docs に残す

事故例と戻り方

事故見え方戻り方
共有設計図を直接編集他用途まで巻き込まれる設計図を戻し、差分を上書きへ
環境変数の消し忘れ昨日の試験設定が残存環境変数一覧を起動前に確認
空値上書き突然既定に戻る未指定と空値の扱いをテスト
リストのつもりマージフラグが消える置換前提で差分を書く

興味がある人向け

小さなチーム向けの実務ルールです。

  • 共有に入れる前に「この値は全ノード共通か?」と問う
  • 迷ったら高い層(ローカル / 環境変数)に仮置きし、安定したら適切な層へ下げる
  • レビューではコード差分より、最終解決値の差分を優先する
  • 設定変更もスパイラルの1軸として扱う(ついで変更禁止)

設定PRやプロファイル変更を見るとき、長い議論の前に次だけ確認します。

  1. この差分は7段のどの層か
  2. 最終解決値は試運転で確認したか
  3. 共有に残すべき値か、ローカルに閉じる値か

この3問で、大半の「気づいたら本番相当が変わっていた」系の事故を防げます。設定優先順位は哲学ではなく、レビュー言語です。

つまずいたこと

環境変数、Compose、プロファイル、コマンド行、秘密情報…どこが勝つか分からず、同じキーを三箇所で上書きして一夜を溶かしたことがあります。

苦労したのはドキュメントを書くこと自体より、実際に効いている値を表示する手段を先に用意することでした。優先順位表だけでは、運用事故は止まりませんでした。

この回の要点

  • 優先順位表と実効値の表示をセットにする
  • 同じキーの三重上書きを禁止する
  • 効いている値が見えない設定を信用しない

優先順位の段組みは公開できますが、各段の推奨値一覧ではありません。実効値が意図どおりかの確認ログは運用側で残し、ベンチ数字は再計測・匿名化後に足します。

次は「起動設定はどうコマンドになるか」です。7段のどれが効いているかを意識したまま、起動コマンドへ落とします。

よくある質問

7段とは何ですか?

設定の上書き優先順位です。意図しない層が勝つと事故ります。

CLI で何も指定しないとどうなりますか?

下層の値が残ります。未指定で下層を潰さない設計が安全です。

壊れたときは何を見ますか?

どの層が最終的に勝ったかを先に確認します。

Related

関連記事

Contact

検証や観光DXの進め方について、お気軽にご相談ください。