# MaguyvaのKotlin対応: AndroidとJVMのコードグラフ

Canonical source: https://maguyva.ai/ja/languages/kotlin

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

MaguyvaはAST、シンボル、グラフでKotlinに対応しています。AIエージェントはAndroidとJVMのコード全体で、クラス、拡張関数、コルーチンをたどれます。

## 対応状況スナップショット

- 対応レベル: AST・シンボル対応
- プログラミング
- 拡張子: .kt, .kts
- 構文を考慮した検索と構造コンテキストのための実際のAST解析。
- 名前付きシンボルはセマンティック検索と相互参照に利用されます。関係抽出が有効な場合は、グラフナビゲーションも利用できます。
- この言語は、グラフを考慮した検索にシンボルと関係情報を提供します。対応するエッジの種類は、その言語固有の構文要素によって異なります。
- AST解析とシンボル抽出の両方に対応しています。

## 最適な用途

- ViewModel、リポジトリ、ユースケースがモジュールをまたいで呼び合う、大規模なマルチモジュールアプリを持つAndroidチーム。
- KotlinとJavaの古いコードが混在する、サーバーサイドKotlinやKotlin/JVMのサービス。
- エージェントがアプリケーションコードと並べて読む必要がある、Kotlinスクリプト（`.kts`）で書かれたGradleビルド。

## エージェントワークフロー

- リポジトリやユースケースのクラスのAPIを変更する前に、その呼び出し元をすべて見つける。
- ViewModelの `launch` から `withContext` を経てデータ層に至るコルーチンのフローを追跡する。
- リファクタリングの前に、インターフェースを実装するクラスや基底メソッドをオーバーライドするクラスをマッピングする。

## Kotlinが浅いAIツールをつまずかせるところ

Kotlinが簡潔なのは、配線を隠しているからです。`apply`、`let`、`also`、`run`、`with` は、`this` と `it` の意味を変えます。拡張関数は、ほかの場所で定義された型に振る舞いを付け加えます。コルーチンは `launch`、`async`、`withContext` をまたいで処理を移します。ファイルを1つずつ読むエージェントには、呼び出しは見えても、その背後にあるレシーバーは見えません。

Maguyvaはインデックス作成時にその構造をより多く解決するため、エージェントが関数の呼び出し元を尋ねると、本当の答えが返ってきます。

## MaguyvaがKotlinで抽出するもの

Maguyvaは `.kt` と `.kts` に対応しています。関数、クラス、オブジェクト、コンパニオンオブジェクトが抽出され、関数のシグネチャには拡張レシーバー、パラメーター名、デフォルト値、`vararg` パラメーターが記録されます。

呼び出しの関係はクラス修飾名を保持するため、`OrderRepository.save` はほかの `save` と区別されたままです。レシーバーの型付けは、`apply` と `run` の中の `this`、`let` と `also` の中の `it`、そして `with` の引数をたどるため、スコープ関数内の呼び出しも正しい型に解決されます。コルーチンビルダーとFlowの演算子（`launch`、`async`、`withContext`、`coroutineScope`、`supervisorScope`、`flow`、`emit`、`delay`、`Channel`）は意図的にグラフに残されます。

グラフには、継承、インターフェース実装、オーバーライド、インスタンス化、アノテーション、型参照、読み取りと書き込み、例外のスローとキャッチのエッジも記録されます。

## エージェントへのプロンプト例

- 「`CheckoutUseCase.invoke` を呼び出しているのは誰で、どのViewModelからか？」（`find_symbol`、次に `dependency_search` の incoming）
- 「`SyncWorker` からネットワーククライアントまでの同期フローを追跡して。」（`get_task_context`）
- 「`PaymentGateway` を実装しているクラスはどれか？」（`dependency_search`）

## 既知の制限

- 約250個のKotlin標準ライブラリとプラットフォームの呼び出しは関係性から除外されるため、`listOf`、`map`、`filter`、`println` のようなヘルパーはグラフのエッジになりません。それらには `text_pattern_search` を使ってください。

## 次のステップ

[クイックスタート](/ja/docs/quickstart)でリポジトリを接続し、[互換性ページ](/ja/docs/compatibility)で対応マトリクスを確認してください。混在するコードベースでは、[Javaガイド](/ja/languages/java)もご覧ください。

## エンジンの詳細

- Kotlinの対応は `.kt` と `.kts` を含みます。シグネチャには拡張レシーバー、パラメーター名、デフォルト値、`vararg` パラメーターが記録されます。
- レシーバーの型付けは、`apply` と `run` の中の `this`、`let` と `also` の中の `it`、`with` の引数をたどり、呼び出しはクラス修飾名を保持します。
- `launch`、`withContext`、`flow` などのコルーチンビルダーとFlowの演算子はグラフに残り、約250個の標準ライブラリの呼び出しは除外されます。

## 役立つMCPエントリーポイント

- `find_symbol`: 定義と参照が必要なときに、クラス、ユースケース、拡張関数で使ってください。
- `dependency_search`: APIを変更する前に、リポジトリやインターフェースに対してincomingのトラバーサルを使い、呼び出し元と実装クラスを確認してください。
- `get_task_context`: 「`SyncWorker` からネットワーククライアントまでの同期フローを追跡して」のようなプロンプトに使ってください。
