Delivery Gate — Claude Code用機械的品質ゲート
Stopフック。セッション終了時に3つの項目を決定論的チェック(ファイルの更新タイムスタンプ、ディスク使用量、トランスクリプトテキスト上の正規表現パターン)で検証します。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の組み込みチェックはコード品質(ビルド→型→リント→テスト)をカバーしています。しかし、別の障害モードがあります:エージェントは動作するコードを作成している間、セッションの衛生状態がおろそかにされる——学習が記録されず、言い訳によるショートカットが行われ、ディスクが静かに枯渇する、といった問題です。
「作って放置」のセッションを繰り返すと、人間は成長しません。このフックは習慣を強制します:複雑なタスク→学習ライブラリに触れること。
インストール
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: "ブロック:複雑なタスクが完了しましたが、今日の学習が記録されていません。"
ディスク容量不足——ブロック:
disk_free=12GB < 15GB(クリティカル)→ exit 2
stderr: "ブロック:ディスク容量が12GBです(しきい値:15GB)。"
制限事項
このフックは学習ライブラリに触れる習慣を強制しますが、記録内容の品質までは保証しません。output-index.mdが更新されていてもgrowth-logがスキップされた場合、フックは通過します(5つのライブラリのうち1つに触れたため)。これは意図的な設計です。機械的なゲートは機械で検証可能な事実をチェックします。コンテンツ品質の検証にはself-auditと組み合わせて使用してください。
互換性
- Python 3.8以上(
from __future__ import annotationsを使用) - クロスプラットフォーム:Windows、macOS、Linux
- 標準ライブラリのみで動作、依存関係ゼロ
品質
このコードは4ラウンドの自動コードレビュー(CodeRabbit + Greptile)を経て、9件の実際のバグが発見・修正されました。
関連項目
self-audit— 推論品質ゲート(完全性/一貫性/根拠の確かさ/正直さ)verification-loop— コード品質チェック(ビルド/型/リント/テスト)gateguard— PreToolUse安全ゲート