Delivery Gate — Claude Code用機械的品質ゲート
Claude Codeがセッションを終了する前に、決定論的チェック(ファイルの変更タイムスタンプ、ディスク使用量、トランスクリプトテキストの正規表現パターン)のみを使用して3つの項目を確認するStopフックです。AI推論は使用しません。
これは(self-auditのような)推論ゲートとは異なります。delivery-gateは機械的に検証可能な事実をチェックし、self-auditは4つの推論次元にわたる出力品質をチェックします。これらは多層防御を形成します。
- delivery-gate: 「学習ライブラリは今日更新されたか?ディスク容量は安全か?」
- self-audit: 「ファイルの内容は正しく、完全で、正直か?」
これはCIパイプラインゲートと同じパターンです。自己申告のステータスを信頼するのではなく、機械可読な事実を検証する自動化された決定論的チェックです。
チェック内容
| チェック | 仕組み | 結果 |
|---|---|---|
| 正当化パターン | トランスクリプト末尾の正規表現 | 警告のみ(ブロックしない) |
| 古い学習ライブラリ | 5つの設定可能なパスのmtime | 一部古い場合は警告、3つ以上古い、または複雑タスクで成長ログが古い場合はブロック |
| ディスク容量 < 50GB | shutil.disk_usage | 警告 |
| ディスク容量 < 15GB | shutil.disk_usage | ブロック(exit 2) |
正当化検出は、「テストは後回し」「既存のバグ」などのパターンについて警告します。これらは思考が途中で打ち切られた可能性を示す表面信号です。正規表現によるヒューリスティックは誤検出の可能性があるため、単独ではブロックしません。ブロック条件は、ディスククリティカル、3つ以上の学習ライブラリが古い、またはgrowth-logが特に古い場合(すべて複雑タスクで3回以上の編集が必要)です。
なぜ必要か
Claude Codeの組み込みチェックはコード品質(ビルド→型→lint→テスト)をカバーします。しかし、別の障害モードがあります。エージェントが動作するコードを生成しながら、セッションの衛生状態がおろそかになっている場合です。学習が記録されず、ショートカットが正当化され、ディスクが知らないうちに不足しています。
何度も「そのまま出荷して忘れる」セッションを繰り返すと、人間は成長しません。このフックは習慣を強制します。複雑なタスク→学習ライブラリに触れる必要がある。
インストール
cp quality-gate.py ~/.claude/scripts/
~/.claude/settings.jsonに以下を追加:
{
"hooks": {
"Stop": [{
"hooks": [{
"type": "command",
"command": "python3 ~/.claude/scripts/quality-gate.py",
"timeout": 5000
}]
}]
}
}
学習ライブラリ
プロジェクトのメモリディレクトリに以下のファイルを作成します。フックは少なくとも1つが本日更新されたかを確認します。
memory/
├── growth-log/ # 日々の学習エントリ(ディレクトリ)
├── decisions/log.md # 決定ログ
├── output-index.md # セッション出力のインデックス
├── ratings-tracker.md # スキル評価の経時記録
└── tooling_capabilities.md # 既知のツール一覧
LIBS辞書を編集して、自身のファイル構造に合わせてカスタマイズしてください。
設定
quality-gate.pyを編集:
| 変数 | デフォルト | 目的 |
|---|---|---|
RATIONALIZE | 4パターン | 正当化検出のための正規表現パターン |
LIBS | 5ライブラリ | 本日の更新を確認するファイル/ディレクトリ |
COMPLEX_THRESHOLD | 3 | 複雑と分類する編集/書き込み呼び出し数 |
DISK_WARN_GB | 50 | この値以下で警告 |
DISK_CRIT_GB | 15 | この値以下でブロック |
例
単純なセッション — 許可:
edit_count=1 (< 3, 複雑ではない) → exit 0
複雑タスク、学習が記録された — 許可:
edit_count=5 (複雑) → LIBSをチェック → growth-logが本日更新 → exit 0
複雑タスク、学習なし — ブロック:
edit_count=4 (複雑) → LIBSをチェック → 5つすべて古い → exit 2
stderr: "Blocked: complex task completed but no learning captured today."
ディスク容量不足 — ブロック:
disk_free=12GB < 15GB クリティカル → exit 2
stderr: "Blocked: disk space at 12GB (threshold: 15GB)."
制限事項
このフックは学習ライブラリに触れる習慣を強制するものであり、記録された内容の品質を強制するものではありません。output-index.mdが更新されていてもgrowth-logがスキップされた場合、フックは通過します(5つのライブラリ中1つに触れたため)。これは設計上の意図です。機械的ゲートは機械可読な事実をチェックします。内容品質の検証には、self-auditと組み合わせて使用してください。
互換性
- Python 3.8+(
from __future__ import annotationsを使用) - クロスプラットフォーム: Windows、macOS、Linux
- stdlib以外の依存関係ゼロ
品質
このコードは4ラウンドの自動コードレビュー(CodeRabbit + Greptile)を経て、9件の実際のバグが発見・修正されました。
関連項目
self-audit— 推論品質ゲート(完全性/一貫性/根拠性/正直性)verification-loop— コード品質チェック(ビルド/型/lint/テスト)gateguard— ツール使用前の安全ゲート