マキモノ
開発プロセス無料✅ 公式検証済みv1.0.0 / 更新

設定ドリフト照合器が「毎朝ずっと赤」になるのを止める(照合対象外の値の扱いとguardの当て方)

決定台帳と本番設定を毎日照合する仕組みは、APIに現れない値をパス欄に説明文で書いた瞬間に永久MISSINGへ落ち、本物のドリフトが埋もれる。照合対象外を第3状態(null=DOC)に分ける設計、値を巻き込まず書式だけ直す手順、旧データでfailさせてから当てるguardの検定順を示す。

出品者: seisaku-team@orgiast.jp📖 読込 約2,148トークン (約3円)💰 コスパ 5
トークン節約メーター84%節約
ゼロからAIに作らせた場合1.4万トークン
このMDを読ませた場合2,200トークン

1.2万トークンの節約 (API料金換算で約18円分)。 要件定義・技術調査・試行錯誤ぶんのトークンがまるごと不要になります。※ 出品者申告とレビューに基づく推定値。モデル・タスク内容により変動します。

この巻物について

設定ドリフト照合器が「毎朝ずっと赤」になるのを止める(照合対象外の値の扱いとguardの当て方)」は、開発プロセスカテゴリのAI指示書(MDファイル)です。決定台帳と本番設定を毎日照合する仕組みは、APIに現れない値をパス欄に説明文で書いた瞬間に永久MISSINGへ落ち、本物のドリフトが埋もれる。照合対象外を第3状態(null=DOC)に分ける設計、値を巻き込まず書式だけ直す手順、旧データでfailさせてから当てるguardの検定順を示す。この巻物をAIに読み込ませると、ゼロから設計・調査する場合に比べて 約1.2万トークン(API料金換算で約18円)・84%のトークンを節約できます。

カテゴリ
開発プロセス
対応AI
claude-code、cursor、codex-cli
ライセンス
商用利用可 (再販不可)
価格
無料
ゼロから開発時
約1.4万トークン
この巻物使用時
約2,200トークン
節約量
約1.2万トークン (約18円)
更新日
2026-09-21

使い方 (AIに渡す3つの方法)

いちばん簡単なのはワンライナー。Claude Code のターミナルに貼るだけです。

⬇ .md をダウンロード
claude "https://makimono-md.vercel.app/api/v1/files/guard/raw を読み込んで、この指示書どおりに実装して"
claude-codecursorcodex-cliライセンス: 商用利用可 (再販不可)

中身

設定ドリフト照合器が「毎朝ずっと赤」になるのを止める(照合対象外の値の扱いと guard の当て方)

これは何の指示書か

本番設定(価格パラメータ・機能フラグ・しきい値など)の「決定台帳」を JSON で持ち、 毎日のバッチで実設定と機械照合して差分(ドリフト)を検出する仕組みを運用している人向け。

この仕組みは必ず一度は「常に赤」に落ちる。落ち方の型と、二度と起きないようにする guard の当て方を書く。 AI エージェントに読ませればそのまま設計・修正できる粒度にしてある。

起きること(実例・2026-09)

台帳のエントリはこういう形をしている。

{
  "parameters": {
    "upperPrice": {
      "configPath": "pricing.upperPrice",
      "current": 14100,
      "status": "decided",
      "rationale": "…なぜこの値にしたか…",
      "history": [ { "at": "…", "value": 16000, "note": "…なぜ覆したか…" } ]
    }
  }
}

照合器は configPath を本番設定 API の戻り値に対して split('.') で辿り、 値が一致すれば OK、辿れなければ MISSING、違えば DRIFT を出す。MISSING か DRIFT が1件でもあれば exit 1。

半年運用したあと、本番 API には現れない場所に住む値を台帳へ載せる日が来る。 コード内の定数、管理画面にしかない項目、表計算シートの列などだ。 その時、担当者(または AI)は親切心で configPath所在の説明文を書く。

"configPath": "PriceCalculator の FLOOR 定数(コード内・API には出ない)"

照合器はこれを設定パスとして split('.') するので、永遠に MISSING を返す。 以後、毎日のバッチは必ず exit 1 で終わり、レポートの冒頭と通知が毎朝 「🚨 前提が崩れています」で始まるようになる。

なぜ致命的か

  1. 本物のドリフトが埋もれる。 毎朝赤いので、誰も赤を見なくなる。 照合器は「値が勝手に変わったこと」を捕まえるために作ったのに、その用を成さなくなる。
  2. 原因の表示が嘘に見える。 出るのは「台帳と実設定が一致しない」。 実際には設定は正しく、壊れているのは台帳の書き方だけ。読んだ人は本番設定を疑って時間を溶かす。
  3. 見つかるのが遅れる。 常駐ジョブが固定の版(ミラーやコンテナイメージ)で走っていると、 台帳の更新が反映されず何日も隠れる。版を揃えた瞬間に初めて出る。

直し方(設計)

照合器に「照合対象外」の第3の状態を持たせ、台帳の書式でそれを表現できるようにする。

  • configPath: nullDOC(記録専用。機械照合しない。緑扱い)
  • configPath: "a.b.c" → 設定 API を辿って OK / DRIFT / MISSING
  • 所在の説明は別キーlocation)に書く。configPath には自由文を一切入れない

多くの実装は既に「null なら飛ばす」を持っている。持っているのに使われないのは、 書式の契約が台帳ファイル自身に書かれていないからなので、台帳の先頭 rules 配列にも1行入れる。

"configPath には設定 API のドット区切りパスだけを書く。API に現れない値は configPath を null にし、
 所在は location に書く。説明文を configPath に入れると照合器が MISSING を返し毎朝 exit 1 になる"

直し方(guard・ここが本題)

契約を文章で書いても次の人は破る。機械で止める

// 設定 API の戻りを辿れる形だけ許す
const DOTTED_PATH = /^[A-Za-z_][A-Za-z0-9_]*(\.[A-Za-z_][A-Za-z0-9_]*)*$/;

test('configPath は null か設定 API のドット区切りパスだけ(説明文を書かない)', () => {
  const bad = Object.entries(ledger.parameters)
    .filter(([, e]) => e.configPath !== null && !DOTTED_PATH.test(String(e.configPath)))
    .map(([k, e]) => `${k}: ${JSON.stringify(e.configPath)}`);
  assert.deepEqual(bad, []);
});

test('configPath が null の項目は所在を location か sheetCell に持つ', () => {
  const bad = Object.entries(ledger.parameters)
    .filter(([, e]) => e.configPath === null)
    .filter(([, e]) => !e.location?.trim() && !e.sheetCell?.trim())
    .map(([k]) => k);
  // 既存の未記入分は許容し、新しく増えないことだけを守る
  const KNOWN = ['legacyEntryName'];
  assert.deepEqual(bad.filter(k => !KNOWN.includes(k)), []);
});

guard は必ず「落ちる側」で先に検定する。 読み込む台帳のパスを環境変数で差し替えられるようにしておき、

const LEDGER_PATH = process.env.LEDGER_PATH || path.join(HERE, '..', 'config', 'decisions.json');
  1. 修正前の台帳に当てて fail すること(何件・どの項目を検出したかまで見る)
  2. 修正後の台帳で pass すること

の順で確かめる。この順を守らないと、「常に通る空の検査」を追加して満足する事故が起きる。 assert.deepEqual(bad, []) は対象が0件でも通るので、通ったことは検知できることの証拠にならない

直すときにやってはいけないこと

  • 値を一緒に直さない。 これは書式の修正であって、判断の変更ではない。 current / history / 根拠文は1文字も変えず、機械比較で差分ゼロを確認してからコミットする。
// 修正前後の台帳を突き合わせて「値は動いていない」を証明する
for (const k of Object.keys(next.parameters)) {
  const a = next.parameters[k], b = prev.parameters[k];
  if (JSON.stringify(a.current) !== JSON.stringify(b.current)) diff.push(k);
  if (JSON.stringify(a.history) !== JSON.stringify(b.history)) diff.push(k + ' history');
}
  • 照合器の側を緩めない。 「MISSING を警告どまりにする」で赤は消えるが、本物のドリフトも消える。 直すのはデータの書式であって検出器の感度ではない。

検収(この順で確かめる)

  1. 修正した台帳で照合器を実走 → exit 0 / MISSING 0 / DRIFT 0
  2. guard を旧台帳に当てて fail → 新台帳で pass
  3. テスト全体が緑
  4. 常駐ジョブが実際に読む場所(ミラー・コンテナ・デプロイ先)を新しい版に揃えてから、そこで照合器を実走 → exit 0 手元のリポジトリで通っても、常駐ジョブが古い版を読んでいれば翌朝また赤くなる

横に効く教訓

  • 「毎朝赤い」は壊れているのではなく検出器が死んでいる。赤を見なくなった時点で仕組みが無効になっている
  • 自由文と機械が辿る値を同じキーに同居させない。同居させた瞬間、片方が必ず壊れる
  • 常駐ジョブが固定版を読む構成では、台帳の不良は版を揃えた日に初めて出る。 「今まで出ていなかった」は「無かった」ではない

よくある質問

「設定ドリフト照合器が「毎朝ずっと赤」になるのを止める(照合対象外の値の扱いとguardの当て方)」とは何ですか?

決定台帳と本番設定を毎日照合する仕組みは、APIに現れない値をパス欄に説明文で書いた瞬間に永久MISSINGへ落ち、本物のドリフトが埋もれる。照合対象外を第3状態(null=DOC)に分ける設計、値を巻き込まず書式だけ直す手順、旧データでfailさせてから当てるguardの検定順を示す。

どれくらいトークン(費用)を節約できますか?

ゼロから開発すると約1.4万トークンかかりますが、この巻物を使えば約2,200トークンで済みます。差し引き約1.2万トークン(API料金換算で約18円)・84%の節約です。

どうやって使いますか?

無料です。MDファイルを Claude Code などのAIに読み込ませるだけ。ワンライナーをターミナルに貼れば実装が始まります。要件定義や技術調査を省いて実装だけにトークンを使えます。

どのAIツールに対応していますか?

claude-code、cursor、codex-cli に対応しています。

商用利用できますか?

ライセンスは「商用利用可 (再販不可)」です。

🤝 自分でAIを動かすのは、まだ不安…という方へ

この巻物の内容を、AIを使うプロに丸ごと任せることもできます。姉妹サービスAI代行堂なら「LINEで頼むだけで、仕事が完成」。

AI代行堂を見る →

関連する巻物

この巻物、誰かのトークンも救えます

𝕏 で節約レシートをシェア