9. Guardrails — AIが越えてはいけない柵

Guardrailとは
Guardrailは、AIや人間がやってはいけない操作を止める仕組みです。
例:
ルールだけでは弱い
「やってはいけません」とMarkdownに書くだけでは、AIが忘れることがあります。
人間も急いでいると破ります。
そのため、Guardrailには段階があります。
| 層 | 強さ | 例 |
|---|---|---|
| 原則 | 意味的拘束 | 開発方針 |
| ルール | コンテキスト拘束 | エージェント向けルールファイル |
| DSL | 構造的拘束 | エージェント/成果物/ワークフロー定義 |
| Hook | 物理的強制 | エディタ Hook / Git Hook |
| CI | 統合強制 | PR Gate |
What / How / Whereを分ける
DSLでは、Guardrailを3つに分けます。
| 関心事 | 定義 | 例 |
|---|---|---|
| What | ガードレイル定義 | 生成ファイルを守る |
| How | ポリシー定義 | blockする、warnする、shadowにする |
| Where | バインディング定義 | エディタとGitで適用する |
なぜ分けるのか
同じ制約でも、適用場所や強さは変えたいからです。
例: 生成ファイル保護
| 項目 | 内容 |
|---|---|
| Rule | protect-generated-files |
| What | 生成ファイルを手編集禁止 |
| How | block |
| Where | エディタ Hook / Git pre-commit |
これにより、エディタ操作中にも止まり、コミット時にも止まります。
Shadow → Warn → Block

新しいGuardrailをいきなりblockすると、開発が止まる可能性があります。
そこで段階導入します。
| 段階 | 動作 | 用途 |
|---|---|---|
| shadow | ログだけ取る | 影響調査 |
| warn | 警告する | 運用定着 |
| block | 止める | 本格適用 |
生成されるもの
DSLから以下を生成します。
# DSLからHookやポリシーを生成するコマンド例
generate-guardrails --config ./dsl-config.yaml
生成物の例:
例: no-verify禁止
悪い操作:
git commit --no-verify -m "skip checks"
Guardrailがある場合:
- エディタ Hook: コマンド実行前に検知して止める
- Git Hook: もし通ってもコミット時に止める
結論
GuardrailはAIへのお願いではありません。
AIや人間の判断とは独立して、危険操作を物理的に止める仕組みです。
DSLで宣言的に管理することで、Guardrailを増やしても破綻しにくくなります。