Aiderのリポジトリマップについて
私はコーディングエージェントとしてAiderを使用しています。
なぜならメインでEmacsを使っているからです!
CLIベースのコーディングエージェントとしては、Claude CodeやOpenAI Codex CLIはよく紹介されていますが、Aiderについてあまり触れられることがありません。
CLIベースのコーディングエージェントは、シンプルであるがゆえに自律性が高くなく、多くの作業を自分で行う必要があると。
しかし、Aiderには他のツールにはない特徴的な機能があります。
そこで今回は、Aiderの特徴を少し詳しく紹介したいと思います。
Aiderについて
まずAiderについて簡単に説明したいと思います。
Aiderは、Aider AI LLCという会社によって開発・運営されています。
また、AiderはApache 2.0ライセンスの下で提供されているオープンソースツールです。
(私も少しですがコントリビュートしています。)
開発の中心人物はPaul Gauthier氏で、過去にGrouponのCTOを務めていたようです。
Aiderの歴史は古く、2023年4月まで遡ります。
そのためか、近年のエージェントとは異なり、「ソフトウェア開発におけるAIペアプログラマー」と位置づけられています。
AiderはPythonで開発されており、uv経由でインストールするため導入も比較的簡単です。
Aiderの特徴には以下のようなものがあります。
- Gitとの密接な統合
- 用途に合わせたチャットモード
- リポジトリマップによるコンテキスト提供
- 広範なLLMのサポート
- 豊富なチャット内コマンド
- コーディング規約などの指示ファイルの指定
その中でも一番大きな特徴はリポジトリマップだと思います。
リポジトリマップ (Repository Map)について
起動時にRepo-mapが作成されている
Aiderでコードの修正を依頼すると、編集対象として追加していないファイルであっても、正確に修正対象のファイルとして追加するかどうか尋ねてくることがよくあります。
これはどのようにして提案されているのでしょうか?
chatに適切なファイルを追加するか提案してくる
Aiderは、コードの編集や理解を助けるために、Gitリポジトリ全体の簡潔なマップを作成し、使用します。これがリポジトリマップです。
このマップには、最も重要なクラスや関数、それらの型や呼び出しシグネチャが含まれています。
LLMはこのマップの情報を参照することで、リポジトリ全体の構造を把握し、他のコード部分との関連性を理解できます。
大規模なリポジトリでも、Aiderはグラフランキングアルゴリズムを使用して、チャットの現在の状態に最も関連性の高い部分のみをマップに含めることで最適化を行います。
Aiderは、チャットの内容とともに、このリポジトリマップの情報をLLMにコンテキストとして送信します。
これにより、大規模なリポジトリであっても、LLMに対して関連するファイルやコードの内容を正確に伝えることができます。
では、ソースファイルから主要なクラスや関数などのシンボルをどのように抽出しているのでしょうか?
Aiderは、これらの情報を効率的に収集するためにtree-sitterを使用しています。
tree-sitterが対応しているファイル形式であれば、Aiderはクラスや関数といったキーとなるシンボルを抽出できます。
また、これらのシンボルはチャットでも利用されます。
チャットで指示に含めるファイル名やクラス名、関数名などを入力する際の補完候補として使用されます。
関数 get_repo_map を指定しようとした際に補完候補が出る
そのため、修正対象の関数名が長くても、間違えることなく簡単に入力できます。
LLMに指示を出す際には、編集対象の関数名やファイル名を正確に指定することが不可欠です。
Aiderには指示を出す際にも開発者を強力にサポートする機能が備わっているのです。
まとめ
Aiderは、CLIベースでありながら「リポジトリマップ」という強力な機能を備えた実用コーディングエージェントです。
リポジトリマップは、プロジェクト全体のコード構造を把握し、LLMに適切なコンテキストを提供できる強力な機能です。
Aiderは他のCLIベースのコーディングエージェントよりも大規模なコードベースにおいても正確なコード編集や理解を支援することができます。
チャットでの補完機能により、開発者はよりスムーズかつ正確にLLMへ指示を出すことができる点も非常に強力です。
興味を持った方は是非、Aiderを試してみて下さい。
Discussion