エージェント工学におけるリファクタリングの経済的利益
リファクタリングはAIトークンコストを直接削減する
エージェントが生成したコードベースをリファクタリングすることで、新機能を実装する際にAIエージェントが処理しなければならない入力トークン数を減らし、測定可能な経済的利益が得られます。制御された実験では、17,155行のRustファイル1つをモジュラー構造にリファクタリングすることで、代表的な変更に必要な入力トークンが 159,564 から 27,360 に減少し、トークン消費が 83% の削減 となりました。
この削減はコード全体の量が減ったからではなく(データアクセス層の総行数はほぼ一定でした)、モジュール化によりエージェントが必要最小限のファイル集合だけを特定して読み取れるようになるために起こります。コードが単一の巨大ファイルに統合されると、エージェントはコンテキストを維持するためにファイル全体を取り込む必要があり、コストが上昇し実行速度も遅くなります。
リファクタリング実験
コード構造がトークン使用量に与える影響を定量化するため、約150,000行(主にRust)のアプリケーションを使用しました。このアプリケーションはエージェント(Claude Code と Cursor)だけで完全に作成され、人間によるコードレビューは行われませんでした。時間が経つにつれ、データアクセス層は重複が多く内部抽象が欠如した状態で、17,000行を超える単一ファイルへと肥大化しました。
方法論
実験では各テストごとに「新しい」エージェントを使用し、前ステップからの学習が結果に影響しないようにしました。プロセスは以下の手順で進めました:
- ベースラインの確立: 代表的な変更(新しいトレイトと実装の追加)をサブエージェントに指示し、初期トークンコストを記録しました。
- 反復的リファクタリング: 厳格なリファクタリング手法(Martin Fowler の Refactoring 第2版 を参照)に基づき、15段階のリファクタリングを実施しました。
- 測定: 各リファクタリングステップ後に、同じ代表的な変更を新しいサブエージェントに指示し、入力トークン、出力トークン、実行時間の変化を測定しました。
定量的結果
| 指標 | ベースライン | ステップ15後 | 変化 |
|---|---|---|---|
| データアクセス層 行数 (LoC) | 17,155 | 16,608 | -2.9% |
| 最大ファイル 行数 (LoC) | 17,155 | 3,695 | -78.4% |
| 変更あたり入力トークン | 159,564 | 27,360 | -83% |
| 変更あたり出力トークン | 1,705 | 2,113 | +23.9% |
| 変更あたり時間 (秒) | 342 | 454 | +32.7% |
最大ファイルサイズが減少したことで入力トークンは「急落」しましたが、出力トークンは比較的安定しました。これは、リファクタリングによりコードがAIにとって 読みやすく なる一方で、生成されるコードが必ずしも 短く なるわけではないことを示しています。
主要な技術的洞察
モジュール性 vs. 単純な分割
大きなファイルをランダムに小さく分割するだけでは、これらの削減は実現できません。実験では、重複を抽出し繰り返し利用できるコアを確立するように論理的にリファクタリングした後に、最も大きなトークン削減が見られました。この構造により、エージェントの検索メカニズムは必要なロジックを探すために多数の小ファイルを読むのではなく、関連ファイルを的確に特定できるようになります。
リファクタリングにおける「エージェントギャップ」
大量のコードを生成できるにもかかわらず、実験では現在のAIエージェント(特にClaude)がリファクタリング自体に苦労していることが明らかになりました:
- イニシアティブの欠如: エージェントはコードベースを改善するためのリファクタリングを自発的に提案・適用せず、明示的な人間の指示と詳細な計画が必要でした。
- 実行エラー: コードの移動やインポートの更新といったリファクタリングの機械的作業はエージェントが行うと信頼性が低く、正確性を確保するために
grepとsedを用いた外部Pythonスクリプトの使用が必要でした。 - 指示の必要性: 深いソフトウェア工学の知識を持つ人間が、望ましいアーキテクチャ的結果を得るためのプロンプトとリファクタリング計画を作成する必要がありました。
コミュニティの見解の総合
エンジニア間での議論は、AIとソフトウェアアーキテクチャの交差点に関していくつかの重要な点を浮き彫りにしています:
「退屈な」ベストプラクティスの復活
多くの観察者は、リファクタリングがAIに有益であるという「エキサイティング」な新発見は、実は基本的なソフトウェア工学の原則の再発見に過ぎないと指摘しました。ある貢献者は次のように述べています:
"退屈: リファクタリングは開発者の長期的な生産性を向上させる。エキサイティング: リファクタリングはAIの長期的な生産性を向上させる。"
推論と正確性への影響
トークンコスト以外にも、コンパクトなコンテキストがAIの推論能力を向上させると主張する声があります。より良い抽象化によってコードの「エントロピー」を減らすことで、AIが特定のテストケースを通過するだけでなく、汎用性の高い正しいソフトウェアを生成する確率が高まる可能性があります。
ヒューマン・イン・ザ・ループの必要性
エージェントがコードを書ける一方で、上位レベルのアーキテクチャビジョンは人間の責任であるという合意があります。特定の非同期トレイトとそれを複数のストアタイプに実装するよう指示できることは、エージェントがまだ独自に統合できない領域の専門知識を要します。人間がアーキテクト、AIが高速実装者という「バイブ・コーディング」の時代に突入していると指摘する声もあります。