Claude Code用TDDツール「EvanFlow」

「AIがコードを書く時代、プログラマーの仕事はコードレビューだけになる」。ここ数年で耳にタコができるほど聞いたセリフだが、実際にフルオートのコーディングエージェントを実際のプロダクト開発に放り込んでみると、そんな甘い夢は数日で打ち砕かれる。

気がつけば頼んでもいない巨大なリファクタリングが始まり、存在しないライブラリをimportし、最後は「完成しました」というドヤ顔とともにコンパイルすら通らないPull Requestを出してくる。我々が今現場で本当に求めているのは、アクセルベタ踏みで突っ走る暴走車ではなく、確実に止まれるブレーキとナビゲーションを備えた「操縦可能な」AIエージェントではないだろうか。

AIに「規律」を教え込むというアプローチ

Claude Code向けのプラグインとして登場した「EvanFlow」は、まさにこの「手綱を握る」感覚をシステムレベルで実装した秀逸なツールだ。作者はこれを「ソフトウェア開発のためのTDD駆動の反復的フィードバックループ」と定義している。

このリポジトリの最大の特徴は、AIをオートパイロット(自動操縦)としてではなく、コンダクター(指揮者)の制御下にある存在として扱う点にある。ブレインストーミング、計画、実行、反復というプロセスの中で、EvanFlowは要所要所で必ず立ち止まり、人間の承認(チェックポイント)を求める。勝手にコミットすることはなく、Gitの操作前には必ず指示を仰ぐ設計だ。

/plugin marketplace add evanklem/evanflow
/plugin install evanflow@evanflow

インストール後、「Let’s evanflow this — I want to add a small feature that does X.」と声をかけるだけで、16のスキル群と2つのカスタムサブエージェントが連携し、この規律あるループが起動する。

「後付けのテスト」ではなく、TDDを強制する理由

多くのAIコーディングアシスタントは「大量のコードを書いてから、帳尻合わせのようにテストを生成する」アプローチをとりがちだ。しかしEvanFlowは、タスク実行フェーズの内側にTDD(テスト駆動開発)を完全に組み込んでいる。

「RED → GREEN → REFACTOR」のサイクルを回し、テストが失敗することを確認してから最小限の実装を行い、テストが通る状態でリファクタリングを行う。なぜか?AIはコンテキストを驚くほど簡単に失うからだ。直前に書いたテストがセーフティネットとして機能している「記憶に新しい」状態でのみリファクタリングを許可することで、AI特有の幻覚(ハルシネーション)によるコード破壊を物理的に防いでいるのである。

アプローチ 一般的なAIエージェント EvanFlow
プロセスの進行 プロンプト一発で最後まで自動生成 各フェーズで人間の承認待ち(チェックポイント)
テストの位置づけ 実装後にまとめて生成(省略されることも) タスクごとの厳格なTDD(垂直スライス)
安全性と制御 自動コミットやPR作成まで一気に進む Git操作の手前で必ず停止、自動コミットなし

研究データに裏打ちされた「疑い深さ」

EvanFlowの設計思想で私が最もシビれたのは、そのハードルールが実社会の研究データに基づいている点だ。例えば、「ファイルパスや環境変数、ライブラリのAPIなどの値を決してでっち上げない。確信が持てない場合は立ち止まって人間に尋ねる」という厳格なルールがある。

これはコロンビア大学のDAPLabが発表した「コーディングエージェントの9つの致命的な失敗パターン」において、アクションの幻覚(Action-hallucination)がトップの失敗要因であるという研究結果に基づいている。さらに、LLMが生成するテストアサーションの62%以上が不正確であるという別の研究結果(arXiv 2402.1…)も踏まえ、規模が大きくなると「並列コーダー」とそれを読み取り専用で監視する「オーバーシーア(監視者)」というサブエージェントの仕組みまで稼働させる。

AIの出力をハナから信じていない。だからこそ、システムに「疑う仕組み」をハードコーディングしているのだ。

魔法の杖を求めてAIにすべてを丸投げするフェーズは終わった。これからのテック業界で真の価値を生むのは、AIのポテンシャルを「規律」という枠組みの中で最大限に引き出せるエンジニアだ。EvanFlowは、人間とAIの新しい協働の形として、我々に非常に実践的なヒントを与えてくれている。

参考リポジトリ: evanklem/evanflow

Photo by Shamin Haky on Unsplash

コメントする