Android StudioからPSIを盗む方法:AIに大規模なコードベースをナビゲートさせる
- JunRongAndroid Design System @ Mercari
AIコーディングエージェントは、コードベースをプレーンテキストとして読み込みます。LSPベースのツールであっても、プロジェクトをゼロから再インデックス処理し、メモリ使用量を倍増させます。一方で、既に開いているIDEであるAndroid Studioは、Program Structure Interface (PSI) を通じてはるかに豊かなセマンティック理解を行っています。PSIは、使用箇所の検索(find-usages)、リファクタリング、継承関係のナビゲーションを支えるエンジンと同じものです。 もしAIエージェントが、1万個のファイルをgrepする代わりに、「このメソッドの使用箇所を検索して」「この関数のシグネチャ、アノテーション、可視性を教えて」とAndroid Studioに直接問い合わせ、IDEレベルの回答を得られるとしたらどうでしょうか? 本セッションでは、PSIをModel Context Protocol (MCP) サーバーとして公開し、あらゆるAIエージェントがコードベースのナビゲーションのためにAndroid Studioの「頭脳」を借りられるようにするJetBrainsプラグインをどのように構築したかを共有します。 以下について解説します: - プレーンテキストのAIがAndroidコードベースで失敗する理由: grepでは見えない末尾ラムダ(trailing-lambda)引数、IDEのO(1)参照ではなくO(n)のテキスト検索を必要とする継承階層、モジュール間の名前の衝突、そしてClaude自身の認める「深くネストされた1000行以上のファイルでは、どのブロックがどれの内側にあるかを見失いやすい」という点。 - この用途でPSIがLSPに勝る理由: SerenaのようなLSPベースのツールとの比較。編集ごとの再インデックスが不要、メモリ使用量が倍増しない、IDEが既にツリーを保持しているためリアルタイムで正確。 - PSI MCPで検証したユースケース: • ビジュアルレグレッションテストの自動生成 — Compose画面の正確なUIツリーを描画し(通常、末尾ラムダのネストでAIがつまずく部分)、貪欲集合カバーアルゴリズム(greedy set-cover algorithm)を適用して最小限のテストケースで最大限のカバー率を実現。 • デザインシステムのカラーリファクタリング — find-usagesを使用して、grep-and-replaceによるサイレントエラーを起こさずに、コードベース全体にトークンの変更を安全に伝播。 • ViewModelのリファクタリング、AIコードレビュー、Androidフレームワークソースコードへのステップイン — それぞれがPSIの異なる機能を活用。 このプラグインはJetBrains Marketplaceで公開されており、npmパッケージとしても提供されています。近いうちにMercari配下でオープンソース化される予定です。私がまだ試していないどんなユースケースをAndroidコミュニティが生み出すのか楽しみにしています。 AIにコードベースの推測をさせるのはもうやめましょう。IDEの頭脳をAIに与える方法をぜひ学びに来てください。 レビュアー向けプロジェクトリンク: - JetBrains Plugin: https://plugins.jetbrains.com/plugin/28643-psi-mcp-server - npm Package: https://www.npmjs.com/package/jetbrains-psi-mcp-server - Install guide / demo: https://gist.github.com/worker8/5ac7dade4a2c5b5e562576fdec137561 (DroidKaigi実行委員会による翻訳)
対象者
前提知識: - 基本的な Android 開発の経験 - AI コーディングエージェント(Claude Code、Cursor、GitHub Copilot など)の使用経験 - PSI または MCP の事前知識は不要(どちらもゼロから紹介します) 聴講対象者: - AI エージェントが参照を見落としたり、関数の場所をハルシネーションしたり、周囲を grep するだけでコンテキストウィンドウを使い果たしたりしがちな、大規模またはレガシーなコードベースで作業している Android エンジニア。 - 実際のプロダクションコードベースで Claude Code / Cursor / Copilot を試し、「デモの魔法」と「自分のプロジェクトで実際に役に立つこと」とのギャップを感じた開発者。 - Model Context Protocol (MCP) や、AI エージェントに根本的に欠けている能力を与えるカスタム MCP サーバーを構築することに興味がある方。 - IDE プラグイン開発、JetBrains Platform の内部構造、または Android Studio が内部でどのようにコードを理解しているかに興味があるエンジニア。 本セッションで解決を目指す課題: - 「なぜ AI エージェントはこの関数の使用箇所を見落とし続けるのか?」 - 「なぜ異なるモジュールにある同じ名前の2つのメソッドを混同するのか?」 - 「なぜ末尾 lambda として渡されたパラメータを見つけるのに失敗するのか?」 - 「なぜ1つの画面を理解するためだけに25個ものファイルをコンテキストに読み込むのか?」 - 「自分の IDE がすでに持っているコードインテリジェンスを AI に与える方法はないのか?」