レガシーシステム移行におけるAI駆動開発の実践:自律型エージェント導入の課題と対策


2025年初頭から、日々の開発業務においてAI駆動開発(AI-Driven Development)を本格的に導入しています。現在は主にLLMとしてGeminiを活用し、エディタ上の自律型エージェント(Clineなど)に実装タスクを依頼するアーキテクチャで開発を進めています。

いろいろなプロジェクトでAI駆動開発を採用していますが、本記事では、10年以上前に開発されたレガシーシステム(ローカルアプリおよび古いバージョンのWebアプリ)をモダンな環境へ統合・再構築する一人体制のプロジェクトにおいて、気が付いた課題と、その対策についてまとめます。

開発環境と体制

  • インフラ / バックエンド: AlmaLinux 8, PHP 8.3, MySQL 8.4, Laravel 13 (Docker / Devcontainer)
  • 体制: 要件定義・設計から実装・導入サポートまで1名体制
  • AI活用フロー: Geminiで全体設計やコードの事前チェックを行い、自律型エージェントに実装を依頼する方式

課題 (Situation / Task)

以下はあくまで現時点の、上記構成における私のケースですが、実務に投入する中で主に3つの課題に直面しました。

1. リファクタリング時の「サイレントな機能破壊」 巨大なファイルを外部モジュールに分割するような大規模なリファクタリングを自律型エージェントに依頼した際、自動テストを通過しているにもかかわらず、実際の動作がおかしくなるケースが頻発しました。 原因を調査すると、リファクタリング前のイベント処理が抜け落ちていたり、括弧の閉じ忘れや間違いによって関数のスコープ(有効範囲)が意図せず変わっていたりしましたが、プログラムの文法上はエラーにならない(サイレントに壊れる)という特徴がありました。

2. 巨大でレガシーなコードベースとの相性の悪さ 長年メンテナンスされてきた巨大なシステムには、運用上必要であっても冗長で非推奨な処理や、現在は使用されていない機能が大量に含まれていることがあります。これらを含むコード全体をそのままLLMに読み込ませるとコンテキストにノイズが多くなり、期待した精度のレスポンスが得られないことが多々ありました。

3. コンテキスト肥大化によるトークン上限(レートリミット)の到達 自律型エージェントは自律的に動作する過程で、過去の会話履歴、読み込んだファイルの内容、ターミナルの実行結果など「すべてのコンテキスト」を毎回APIに送信します。そのため、ある程度作業が進むと1分あたりのトークン上限(Rate Limit)に達してしまい、APIの制限エラーによって処理が頻繁に停止してしまう問題がありました。

解決策 (Action)

上記の課題に対して、運用プロセスとアーキテクチャの観点から以下の対策を実施しました。

1. AIによるダブルチェックと手動テストのプロセス化 エージェントに完全に処理を丸投げするのではなく、工程を分割して「チェック」のフェーズを意図的に挟むようにしました。 具体的には、エージェントによるリファクタリング実行前にGeminiへ対象コードを渡して意図をすり合わせ、実行後は「人手によるテスト結果」と「成果物のコード」を再度Geminiに渡して差分チェックと再修正を行うフローを標準化しました。

2. コンテキストの分割と、モダン基盤への刷新の決断 巨大なレガシーシステム全体をAIに理解させることは避け、処理に関連する部分的なコードスニペット、DDL、サンプルデータのみを抽出して依頼するようにしました。 また、AI駆動開発が一般化しつつある現在の開発パラダイムにおいては、古いコードを無理にAIに読ませて延命するよりも、モダンなフレームワークで基盤部分から作り直したほうが、最終的な開発スピードとコストの両面で圧倒的に有利ではないかと思われます。本プロジェクトも当初はコードレベルのリファクタリングを想定していましたが、既存のサービスの調査の結果、基盤部分から刷新することになりました。

3. タスクの細分化とセッションの定期リセット トークン上限エラーを防ぐため、1つのセッションで長時間の連続作業をさせることをやめました。タスクを機能単位で細かく分割し、キリの良いところでセッション(これまでのコンテキスト履歴)をこまめにリセットすることで、APIに送信されるトークン量をコントロールしています。

結果と所感 (Result)

いくつかの課題があり、人間側によるプロンプトやプロセスのコントロールは不可欠ですが、最終的な開発速度は過去に自身のみでコーディングしていた時期や、外部に委託していた時期と比較して飛躍的に向上しました。

要件の実装から動作検証までのサイクルが高速化したことで、新しい技術の導入や追加要望への対応ハードルが劇的に下がりました。一人開発(ソロ・スタック)の環境において、いつでも壁打ち相談ができ、自身の視点にはなかった新しい知見やアーキテクチャの工夫を与えてくれるAIの存在は、現在のシステム開発において不可欠なパートナーとなっています。

なお、AI関連の進化は早く、今回の記事においても特に「AIによるダブルチェックと手動テストのプロセス化」については大いに改善の余地があると考えています、これからも先達の皆様の記事や事例を参考にし、より開発品質と速度の向上を目指したいです。