# MaguyvaのPascal・Delphi対応: ユニットとクラスのグラフ

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

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、シンボル、グラフでPascalとDelphiのユニットに対応しています。AIエージェントは変更前にuses句、クラス、プロシージャをマッピングできます。

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

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

## 最適な用途

- 元の作者がすでに離れたDelphiやLazarus/Free Pascalのアプリケーションを保守するチーム。
- 深いクラス階層、インターフェース、大きな共有ユニットを持つObject Pascalのコードベース。
- 最初の成果物がユニットとその依存関係のマップになる、モダナイゼーションや移植の作業。

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

- 共有ユニットを変更する前に、それを `uses` 句に挙げているユニットをすべて一覧にする。
- 基底フォームや基底コンポーネントを継承するクラスと、それらがオーバーライドするメソッドを見つける。
- ルーチンのパラメーターを変更する前に、それを呼び出すプロシージャを追跡する。

## Pascalのコードベースにまずマップが必要な理由

DelphiやFree Pascalのアプリケーションは、ほかのすべてが使ういくつかの大きなユニットを中心に育つことがよくあります。フォームは基底フォームを、コンポーネントは基底コンポーネントを継承し、業務ルールは十数個の画面から呼ばれるプロシージャに置かれています。ファイル単位では読みやすくても、変更がうまくいかなくなるのは依存関係の部分です。

Maguyvaはまずエージェントにユニットとクラスの構造を渡すため、何かを書く前に、変更がどこに影響するかを示せます。

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

Maguyvaは `.pas` と `.pp` のソースユニットに対応しています。プロシージャと関数の定義は呼び出し可能なシンボルとして抽出され、定義名からは `procedure`、`function`、`var`、`const` のキーワードが取り除かれます。クラスとインターフェースは、構造検索で型定義として選択できます。

インポートは `uses` 句から作られ、キーワードを取り除いてユニット名をグラフに保存します。呼び出しは、メンバーの接頭辞、引数、囲みの括弧を取り除いて正規化されるため、`Self.Save(x)` と書かれた呼び出しは `Save` として保存されます。

グラフには、呼び出し、継承、インターフェース実装、オーバーライド、インスタンス化、型参照、読み取りと書き込み、例外の送出とハンドラーのエッジが記録されます。約107個のランタイムライブラリのルーチン（`WriteLn`、`ReadLn`、`Inc`、`Dec`、`Ord` など）は関係性から除外されます。

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

- 「`DataModuleMain` を使うユニットはどれで、そこから何を呼び出しているか？」（`dependency_search` の incoming）
- 「`TBaseEditForm` を継承するフォームはどれで、どのメソッドをオーバーライドしているか？」（`find_symbol`、次に `dependency_search`）
- 「ボタンのハンドラーからデータベースユニットまで、請求書がどのように計上されるかを説明して。」（`get_task_context`）

## 既知の制限

- Pascalに対応付けられているのは `.pas` と `.pp` だけです。`.dpr` や `.dfm` のようなDelphiのプロジェクトファイルやフォームファイルは拡張子リストに含まれていないため、フォームのレイアウトやプロジェクトの構成はグラフの対象外です。
- メソッドは通常のプロシージャと同じ構文を使うため、`structural_search` の `methods` プリセットは何も選択しません。`functions` プリセットを使ってください。
- 除外されたランタイムライブラリのルーチンへの呼び出しは、グラフのエッジとして現れません。それらには `text_pattern_search` を使ってください。

## 次のステップ

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

## エンジンの詳細

- Pascalの対応は `.pas` と `.pp` のユニットを含みます。`.dpr` や `.dfm` のようなDelphiのプロジェクトファイルやフォームファイルは拡張子リストに含まれていません。
- `uses` 句はインポートの関係になり、呼び出しはメンバーの接頭辞、引数、囲みの括弧を取り除いて正規化されます。
- `WriteLn`、`Inc`、`Ord` など約107個のランタイムライブラリのルーチンは関係性から除外されるため、アプリケーションのコードが際立ちます。

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

- `find_symbol`: 定義と参照が必要なときに、クラス、フォーム、プロシージャの名前で使ってください。
- `dependency_search`: 共有ユニットや基底クラスに対してincomingのトラバーサルを使い、どのユニットや派生クラスが依存しているかを確認してください。
- `get_task_context`: 「ボタンのハンドラーからデータベースユニットまで、請求書がどのように計上されるかを説明して」のようなプロンプトに使ってください。
