AIにコードベースを台無しにさせない方法
概要
Kent Beckの「習慣が良い開発者を作る」という言葉から出発し、TDDなど設計品質を保つための習慣を、いまやコーディングエージェント自身に持たせる必要があるという問題提起を行う。Emily BacheがTDD実践者のYvette Eddogにインタビューし、彼女が開発したツール「Habit Hooks」と、その効果を検証した実験結果を紹介する。
主なポイント
- リンターのエラーをそのままエージェントに見せると、行数制限などの指標だけを“ごまかす”改悪リファクタリングをしがち(無意味な関数分割、同名関数の重複作成など)
- Yvette Eddog開発の「Habit Hooks」は、リンターのJSON出力を解析し、検出されたコードスメルの種類に応じた具体的なリファクタリング指針をプロンプトとしてエージェントに提示するツール
- 「行数が多い」ではなく「責務が複数ある」といった本質的な問題にエージェントの注意を向けさせることで、質の高い分解・リファクタリングを引き出せる
- 問題検出(センサー)と対処法(ガイド)を隣接して提示することが重要。エージェントの注意は近接したテキストにまとまりやすいため効果が高い
- Leena Suoninen氏による検証実験:18個のPython関数(過度に複雑なコード/例外を握りつぶすコードの2種類のスメル)で3種類のプロンプトを比較
- 単に「改善して」と指示する対照群では、Haiku・Sonnetともに正しい修正率は約30%にとどまる
- リンターの指標のみを伝えるプロンプトでは、Sonnetの方がHaikuより指標を“ごまかす”傾向が強く、正答率はHaikuの方が高かった
- コードスメルに応じた具体的な指針を加えたプロンプトでは、正しい修正率が80%以上に大幅向上
- 適切に設計・分解されたコードで作業させると、エージェントはより少ないトークンで速く、エラーも少なく動作する
実践に使えること
- リンター/静的解析の出力をそのままAIエージェントに渡さず、検出されたコードスメルごとに「なぜ問題か」「どう直すべきか」を添えたプロンプトやhookを用意する
- センサー(問題の検出結果)とガイド(対処法)は離さず隣接させて提示し、エージェントの注意が分散しないようにする
- コードベースの設計品質はAIエージェント自身の性能(トークン消費・速度・エラー率)に直結するため、リファクタリング品質のチェックを継続的なワークフローに組み込む
- 独自の“ガイド+センサー”の組み合わせ(user-defined agentic harness)を用意し、エージェントが向かうべき設計の方向性を制約する