# MaguyvaのSwift対応: iOSとmacOSのコードグラフ

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

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、シンボル、グラフでSwiftに対応しています。AIエージェントはiOSとmacOSのコードのプロトコル、エクステンション、イニシャライザー、オブザーバーをたどれます。

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

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

## 最適な用途

- 大きなアプリターゲットと共有Swiftパッケージを持つiOSおよびmacOSのチーム。
- プロトコルとエクステンションを中心に作られ、1つの型の振る舞いが多くのファイルに散らばるコードベース。
- 共有のモデル、サービス、プロトコルを変更する前に影響分析が必要なエージェントのワークフロー。

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

- プロトコルの要件を変更する前に、そのプロトコルに準拠する型をすべて見つける。
- ViewModel、コーディネーター、パッケージをまたいで、サービスメソッドの呼び出し元を追跡する。
- ある状態に触れるイニシャライザー、計算プロパティ、`didSet` オブザーバーを特定する。

## Swiftにファイル検索以上のものが必要な理由

Swiftは1つの型を多くの場所に広げます。構造体はあるファイルで宣言され、ほかの3つのファイルのエクステンションから振る舞いを得て、パッケージで定義されたプロトコルに準拠します。状態の変更は計算プロパティや `willSet` / `didSet` オブザーバーに隠れています。ファイルを1つずつ読むエージェントは、その大半を見落とします。

Maguyvaは構造をインデックスするため、エージェントは型のメンバー、準拠、呼び出し元をまとめて見ることができます。

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

Maguyvaは `.swift` に対応しています。呼び出し可能なシンボルには、関数、`init` と `deinit`、サブスクリプト、計算プロパティのゲッターとセッター、`willSet` / `didSet` オブザーバーが含まれるため、状態を変えるコードはプロパティの本体に埋もれず、シンボルとして検索できます。

構造体、列挙型、プロトコル、エクステンションの中で宣言されたメンバーは、所有する型で修飾され（例: `CartStore.add`）、エクステンションで追加されたメンバーは拡張される型に帰属します。定義名からはジェネリックパラメーター、プロトコル準拠のリスト、`?` / `!` の接尾辞が取り除かれるため、検索はそのままの名前で行えます。呼び出しは `self.` とクラス修飾を保持し、トレイリングクロージャーも呼び出しの引数の数に数えられます。

グラフには、呼び出し、プロトコル準拠、継承、オーバーライド、インスタンス化、属性、型参照、読み取りと書き込み、`throw` のエッジが記録されます。

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

- 「`PaymentProvider` に準拠する型はどれで、それぞれどこで生成されているか？」（`dependency_search`）
- 「`CartStore.add` を呼び出しているのは誰で、どのビューからか？」（`find_symbol`、次に `dependency_search` の incoming）
- 「プッシュ通知が受信箱の画面に届くまでの流れを説明して。」（`get_task_context`）

## 既知の制限

- 対応付けられているのは `.swift` のソースだけです。StoryboardとXIBのファイルは拡張子リストに含まれていないため、Interface Builderでの接続はグラフの対象外です。
- `print`、`debugPrint`、`NSLog`、アサーションなどの標準ライブラリやFoundationの呼び出しは関係性から除外されるため、グラフのエッジになりません。それらには `text_pattern_search` を使ってください。

## 次のステップ

[クイックスタート](/ja/docs/quickstart)でリポジトリを接続し、[互換性ページ](/ja/docs/compatibility)で対応マトリクスを確認してください。同じ製品をAndroidでも提供している場合は、[Kotlinガイド](/ja/languages/kotlin)をご覧ください。

## エンジンの詳細

- 呼び出し可能なシンボルには、関数、`init`、`deinit`、サブスクリプト、計算プロパティのゲッターとセッター、`willSet` / `didSet` オブザーバーが含まれます。
- 構造体、列挙型、プロトコル、エクステンションのメンバーは、`CartStore.add` のように所有する型で修飾されます。
- 定義名からはジェネリックパラメーター、プロトコル準拠のリスト、`?` / `!` の接尾辞が取り除かれ、呼び出しは `self.` とクラス修飾を保持します。

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

- `find_symbol`: 定義と参照が必要なときに、型、プロトコル、メソッドの名前で使ってください。
- `dependency_search`: プロトコルに対して使えば準拠する型が、メソッドに対してincomingで使えば呼び出し元が見つかります。
- `get_task_context`: 「プッシュ通知が受信箱の画面に届くまでの流れを説明して」のようなプロンプトに使ってください。
