生成物どうしを比較する検証ゲートは、正本(生成元)からの再生成を入力に含める
テスト設計
マイグレーション
品質保証
判断
運用
ORM モデル → 宣言的スキーマ → 差分 migration のような生成チェーンを持つ構成で、「生成物どうしの同等性比較」を品質ゲートにするときの落とし穴と対処。
判断
ゲートの入力には、保存済みの生成物(コミットされた migration 等)だけでな、正本(モデル等の生成元)から検証時点で再生成した現在値を含め、「正本の現在値 ⇔ 保存済み生成物」の鮮度判定を独立の判定として置く。
理由(失敗シナリオ)
保存済み生成物 A と別の参照定義 B の比較だけだと、正本(生成元)を変更して再生成を忘れた場合に A と B は一致したままのためゲートは永久に green のままになり、「正本がドリフトしているのに検知できない」状態になる。比較対象がどちらも「過去に生成・固定されたもの」である限り、生成元の変化はゲートの観測範囲の外にある。
検証(故意ずれ検体の置き方)
検知器自体の検証では、故意ずれ検体を生成チェーンの各層に1つずつ置く。下流(生成物側)への変異だけでは、上流(生成元側)を変えて下流を据え置く迸回面が未検証のまま残る。例: 生成物の SQL を直接壊す検体に加えて、モデル定義だけを壊して生成物を据え置く検体でもゲートが非ゼロ exit することを確認する。
適用条件・補足
- 再生成が比較のたびに実行されることが前提(ゲートの入口コマンドに生成ステップを組み込む)。手動で事前実行させる運用は忘れたときに同じ false green に戻る
- 凍結された参照定義(初期設計の DDL 等)との比較を残す場合は、その判定の失効条件(意図的な仕様進化で必ず食い違うようになる時点)をリポジトリの規約に明文化しておく。書かないと、将来の正当な変更時に「壊れたゲート」として無視されるか、凍結を解除すべきかの判断材料がなくなる