AIエージェント向けの効果的なガードレール
本ドキュメントは、AIエージェントを利用した開発において、プロンプトへの依存を減らし、品質とルールを「仕組み」で強制するためのベストプラクティスをまとめた。
1. プロンプトではなく仕組み(ガードレール)で解決する
AIへの「テストを書いて」「この規約を守って」というお願い(プロンプト)は、いずれ必ず無視されるタイミングが来る。人間への指示ではなく、機械的・決定論的な仕組みで品質を強制する必要がある。
2. CLI中心の運用原則:探索・計測はツール、判断はAI
AIエージェントの性能を最大限に引き出すためには、「探索と計測はCLIツールを優先して使い、AIにはその結果の解釈と判断を任せる」という役割分担が重要である。
-
再現性と決定論の確保:
- AIが自ら
grepやfindを繰り返してコードベースを探索するよりも、静的解析ツールやGit履歴分析ツールを実行させ、確定的なデータを取得させるほうが再現性は高まる。
- AIが自ら
-
観測可能性の向上:
- ツールが出力するログやメトリクスを介在させることで、AIがどのような根拠に基づいて判断を下したのかを人間が検証しやすくなる。
-
指示の具体化:
- 「リファクタリングして」という曖昧なプロンプトではなく、「ホットスポット分析で上位のファイルを特定し、その依存関係を可視化して改善案を出して」のように、ツール実行を前提とした指示に切り替える。
-
リンター・フォーマッターの導入:
- 本プロジェクトでは Biome を採用している。
- 重要: リンターのエラーメッセージに は、AIが自己修正できるように「どう直すべきか」が明確になるルール設定を心がける。
-
Gitフック (Pre-commit / Pre-push) の設定:
- コミット前やプッシュ前に必ずリンター、フォーマッター、型チェック(
tsc)が走るようにしている。具体的な設定は メンテナンスについて を参照すること。これにより、AIがルール違反のコードをコミットできない仕組みを作る。
- コミット前やプッシュ前に必ずリンター、フォーマッター、型チェック(
-
構造・アーキテクチャのテスト:
- ドキュメントで「XはYに依存する」と説明するのではなく、依存関係やデータ構造をテストコードとして記述し、CIで検証させる。例として
dependency-cruiserの導入や型チェックによる境界防御が挙げられる。未利用・不要なコードの発見には Knip を利用する。
- ドキュメントで「XはYに依存する」と説明するのではなく、依存関係やデータ構造をテストコードとして記述し、CIで検証させる。例として
3. エージェント可読性(Agent Readability)の最適化
AIエージェントはリポジトリ内のテキストしか読めない。コンテキスト(文脈)をエージェントに正しく伝える工夫が必要である。
- 暗黙知のコード化 (ADRの活用):
- Slackの議論や人の頭の中にある取り決めは、リポジトリ内に ADR (Architecture Decision Record) としてMarkdownで保存する。
- 枯れた技術(Boring Technology)の選定:
- APIが安定しており、LLMの事前学習データに多く含まれている技術を選定する。最新技術よりも、AIが確実に正解を出力できる技術を優先する。
- 指示書(CLAUDE.md / .cursorrules)の軽量化:
- システムプロンプトとして読み込まれる全体指示書は50行以下などの最小限に抑え、詳細なルールやツールの使い方への「ポインタ(ファイルパス)」のみを記述する。
4. 中央集権的な制約とローカルの実装の自由
「何をすべきか(境界)」は厳格に守らせ、「どう実装するか(内部)」はAIの自律性に委ねる。
- インターフェース・境界の厳密化:
- 外部入力やモジュール間の境界では、Zod などを用いてデータの型や形状をパース・検証することを必須とし、テストやリンターで強制する。
- 実装手法の自由:
- データパースにZodを使うかなどの内部実装詳細はエージェントに任せ、結果だけを自動テストで担保する。
5. 特化したAIツールの活用とレビュー
すでに導入されているツールを組み合わせることで、開発環境をさらに強固にする。
- AI向けCLIツール・開発支援ツールの活用:
- AIの能力拡張には Agent Skills やフロントエンドの構築支援プラグインを利用できる。
- Difit を活用し、ローカルのGit差分をAIエージェント向けのプロンプトに変換してコードレビューにかけることで、レビュー漏れを防ぐ。
- AIによるPRレビューと人間のレビュー:
- CI上でPRエージェントを動かし、人間のレビュアーが見る前に軽微なバグを指摘・修正させるアプローチが有効である。人間が行うレビューの意図の伝え方については Pull Request 時のレビューについて を参照すること。