私たちは、厄介なレガシーリポジトリを1つ用意した — テストなし、絡み合った状態管理、3層の抽象化が積み重なったデータベースレイヤーを持つ、14k行のExpress + Reactアプリだ — そして同じリファクタリングの指示を、5つの異なるAIコーディングエージェントに渡した。それから結果を差分で比較した。
開示: Build Lab は Y Build が発行している。この実験はコーディングエージェントそのものについてのものだ。数値は私たちのもので、手法は以下に記す。
5つ、そしてなぜ異なるのか
市場は3つの形に分かれる。私たちはそのすべてから選んだ。
- Claude Code — ターミナルファーストのエージェント。公開されているSWE-bench Verifiedのリーダーボードでトップ。
- OpenAI Codex (CLI) — ターミナルファースト、トークン消費が明らかに軽い。
- Cursor — IDEネイティブ、今やタイル状のマルチエージェントモードを備える。
- Aider — ターミナル、gitネイティブ、外科手術のような差分。
- Windsurf — IDEネイティブ、エージェント的なフロー。
指示
5つすべてに同一:「データレイヤーをrepositoryインターフェースの背後に抽出し、各repositoryメソッドにテストを追加し、公開APIを変更しないこと。」 それから私たちは測定した。実行後にテストが通るか、変更された行数、公開APIが実際に保たれたか、消費トークン、実時間、そして手採点の品質スコア。
何が起きたか
| エージェント | 時間 | テスト通過 | 公開API維持 | アプローチ |
|---|---|---|---|---|
| Claude Code | 23 min | ✓ | ✓ | 几帳面な複数ファイルのリファクタリング、品質9.0/10 |
| Cursor | 47 min | ✓ | ✓ | 遅め、IDE主導、8.5/10 |
| Codex | 26 min | ✓ | ✓ | 最も軽いトークン(Claude Codeの約3〜4分の1) |
| Aider | 19 min | 一部 | ✓ | 外科的、最小の差分 — 2つのメソッドを取りこぼした |
| Windsurf | 38 min | ✓ | ✗ | レイヤーの半分を書き換え、1つのシグネチャを壊した |
物語はアプローチのばらつきにあった。Aiderは10行の外科的な変更をして止まった。Windsurfはアプリの半分を書き換え、こっそり関数のシグネチャを変えた。Claude Codeは、最も多くのファイルにまたがって筋を見失わずに計画を保った — 同じ作業に対してCodexの3〜4倍のトークンコストで。
誰も警告してくれないボトルネック
ここが私たちを驚かせた点だ。エージェントを2つ以上動かすと、エージェントはもはやボトルネックではなくなる。 その周りのすべてが仕事になる — どのセッションが何をしているか、誰の差分が準備できているか、どのブランチがどれか、昨日から何が壊れたか。Cursorのタイル状マルチエージェントビューは、まさに直列のレビューがスケールしないから存在する。5つのエージェントを動かしても私たちは5倍速くはならなかった。レビューが新しいフルタイムの仕事になっただけだった。
方法論
同じリポジトリの同じコミット、同じ指示、エージェントごとに新鮮なコンテキスト、デフォルトのモデル。それぞれ2回ずつ実行し、良い方を採用した。品質は固定のルーブリック(可読性、テストの意味のある度合い、差分スコープの規律)で手採点した。完全な差分とログ:github.com/ybuild/lab-04。
結論
「最良のリファクタリングエージェント」は存在しない — 仕事に合う気質があるだけだ。引き締まった、レビューしやすい差分が欲しい? AiderかCodex。一貫性を保たねばならない大規模な複数ファイルのリファクタリング? Claude Code。だがどれを選ぼうと、デモが飛ばす部分のために予算を取っておこう:エージェントがやったことをレビューすることが、今や本当の仕事だ。