# MaguyvaのAda対応: 仕様、本体、パッケージのグラフ

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

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、シンボル、グラフでAdaに対応しています。AIエージェントは長く使われるAdaシステムのパッケージ仕様、本体、タスク、タグ付き型をたどれます。

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

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

## 最適な用途

- 航空宇宙、防衛、鉄道など、すべての変更がレビューされる高信頼性分野で長年使われるAdaを保守するチーム。
- インターフェースと実装が別ファイルにある、`.ads` 仕様と `.adb` 本体に分かれたコードベース。
- AIエージェントを、レビューなしのコード生成ではなく、影響分析とレビュー準備に使うエンジニア。

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

- パッケージの仕様を変更する前に、そのパッケージを `with` しているユニットをすべて見つける。
- パッケージ境界をまたいで、どのサブプログラムがルーチンを呼び出しているかを追跡する。
- 並行処理や設計の変更前に、タスク型、保護型、タグ付き型の階層をマッピングする。

## Adaリポジトリに依存関係マップが必要な理由

Adaは、パッケージが約束すること（`.ads`）と、それをどう実現するか（`.adb`）を分けています。これは優れた設計ですが、1つの変更が複数のファイルに及び、テキスト検索ではそのつながりが見えないことも意味します。長く使われるAdaシステムには、さらにジェネリック、タグ付き型、タスク、保護オブジェクトという層が加わり、その関係はどの単一ファイルよりも重要です。

Maguyvaは、エージェントが編集を提案する前にその依存関係マップを渡します。これは高信頼性のレビューが求める順序でもあります。

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

Maguyvaは `.ads`、`.adb`、`.ada` に対応しています。サブプログラム本体と、プロシージャおよび関数の仕様は呼び出し可能なシンボルとして抽出されるため、ルーチンの仕様と本体の両方を検索できます。シンボルの照合は、Ada自体と同じく大文字と小文字を区別しません。

インポートは `with` 句と `use` 句から作られ、キーワードを取り除いてパッケージ名をグラフに保存します。グラフには、呼び出し、タグ付き型の継承とオーバーライド、インスタンス化、型参照、読み取りと書き込み、例外の送出とハンドラーのエッジも記録されます。

構造検索では、タスク型、保護型、レコード型、インターフェース型を型定義として、エントリー本体をメソッドとして選択できます。

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

- 「`Flight_Control.Sensors` に依存するユニットはどれで、そのどのサブプログラムを呼び出しているか？」（`dependency_search` の incoming）
- 「`Compute_Trajectory` の仕様と本体、そしてすべての呼び出し元を表示して。」（`find_symbol`）
- 「テレメトリータスクがロギング用の保護オブジェクトにデータをどう渡すかを説明して。」（`get_task_context`）

## 既知の制限

- Adaでは、一部の呼び出し、レコードのフィールドアクセス、インデックス指定が同じ構文になります。Maguyvaはコールグラフをきれいに保つため、組み込み型、標準ライブラリのパッケージ、属性関数、演算子（約113パターン）を除外します。そのため、標準ライブラリへの呼び出しはグラフのエッジになりません。レコードのフィールドアクセスとインデックス指定は、フィールド名のリストではなく、文法上の位置によって呼び出しと区別されます。`Put_Line`、`Put`、`Get` のような一般的なテキストI/Oの呼び出しは意図的に残しています。
- `use` 句は可視性を変えますが、構造検索ではインポートとして選択されません。`with` 句は選択されます。
- レコード型やインターフェース型のノードは無名の断片になることがあるため、名前ベースの構造クエリでは見落とす場合があります。名前付きの型には `find_symbol` を使ってください。

## 次のステップ

[クイックスタート](/ja/docs/quickstart)でリポジトリを接続し、[互換性ページ](/ja/docs/compatibility)で対応マトリクスを確認してください。AdaのコードがCとバインドしている場合は、[Cガイド](/ja/languages/c)もご覧ください。

## エンジンの詳細

- Adaの対応は `.ads` の仕様、`.adb` の本体、`.ada` を含みます。サブプログラムの本体と仕様はどちらも呼び出し可能なシンボルです。
- シンボルの照合は大文字と小文字を区別せず、`with` 句と `use` 句はキーワードを取り除いたうえでインポートの関係になります。
- 約113個の組み込み型、標準ライブラリのパッケージ、属性関数、演算子は呼び出しから除外されます。レコードのフィールドアクセスとインデックス指定は文法上の位置によって呼び出しと区別され、`Put_Line`、`Put`、`Get` は意図的に残されます。

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

- `find_symbol`: サブプログラムの仕様と本体を、参照とあわせてまとめて見つけるのに使ってください。
- `dependency_search`: パッケージの仕様を変更する前にincomingのトラバーサルを使い、依存するユニットをすべて確認してください。
- `get_task_context`: 「テレメトリータスクがロギング用の保護オブジェクトにデータをどう渡すかを説明して」のようなプロンプトに使ってください。
