🤖

コード影響範囲を自動で特定したい

2025/01/12に公開

はじめに

ノベルワークスでエンジニアをしているりょうちん(ryotech34)です。

今回は、生成AIを使用してコードから依存関係マップを作成し、変更箇所をマップから辿ることで影響範囲を出力させようというものです。試験的にバックエンドに焦点を当てて実装してみました。

browser-use などブラウザを操作可能なAIエージェントが公開され、ゆくゆくはインプットとして機能したらいいなというのも狙いとしてあります。

対象読者

  • テストに時間が取られてしまっている方
  • 生成AIが実際に実務に使えるのか迷っている方

今回話さないこと

依存関係マップを作成するにあたり、Userに関連したコードを読ませました。
設計にはドメイン駆動設計(以下DDD)を採用し、少しアレンジを加えています。設計の詳細については今回はお話ししません。

結果

依存関係マップ

今回はワークフローを独自に作成し、DDDとして表現される各レイヤーごとに依存関係を特定して、依存関係をマッピングしていきました。
使用したモデルはClaude 3.5 Sonnetです。

フロー

  1. Controller層の特にエンドポイントを始点とし、依存関係をグラフデータとして格納する
  2. UseCase層の依存関係をグラフデータとして格納する
  3. Infrastructure層の依存関係をグラフデータとして格納する
  4. domain層の依存関係をグラフデータとして格納する
  5. グラフデータから依存関係マップを出力する
  6. 依存関係マップをもとに変更箇所から影響範囲を特定する

コード

今回インプットした一部コードです。
添付画像のようにimportに使用しているクラスまたはライブラリを依存先として解釈させ、グラフデータを作成しました。

出力

CreateUserUseCaseを変更した場合は、userを作るエンドポイントが影響範囲であることが出力されました。

Cursorに聞いてみた

完璧ですね。特に言うことはありません。。

おわりに

どうでしたでしょうか?
最近CursorやClineなどコーディングエージェントツールが話題として上がっており、関心の多い分野かと思います。
今回アップロードしたファイルは10ファイルほどで、3分弱ほどで今回の依存関係マップが作成できました。DIなど直接依存はしていないものの間接的に影響のあるものに関しては、これから検討していきたいと考えています。

今後の展望として

  1. コードの修正
  2. 影響範囲の特定
  3. AIエージェントによるE2Eテストの自動実行

を考えており、今回は1から2までをワークフローで実行しました。
最後に記載したCursorの出力から見ると、1から3までをエージェントにお任せも出来そうです👀

Discussion