# MaguyvaのABAP対応: SAPカスタムコードのクラスグラフ

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

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、シンボル、グラフでABAPに対応しています。AIエージェントはSAPカスタムコードのクラス、インターフェース、再定義、例外をマッピングできます。

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

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

## 最適な用途

- カスタムABAPを `.abap` ソースファイルとしてGitで管理し、移行やクリーンコアのレビュー前にそれを理解する必要があるSAPチーム。
- クラス階層、インターフェース、再定義によって、実際にどの実装が動くのかが見えにくくなっているオブジェクト指向ABAPの資産。
- 「このクラスを変えたら何が壊れるか？」が問いになる、エージェント支援型の影響分析。

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

- 基底クラスを継承するクラスと、それらが再定義するメソッドをマッピングする。
- メソッドシグネチャを変更する前に、インターフェースを実装するクラスをすべて見つける。
- 例外クラスがどこで発生し、どこで捕捉されるかを追跡する。

## 変更前にABAPをマッピングする価値

カスタムABAPには、何十年分もの業務ルールが詰まっていることがよくあります。コードはある部分ではオブジェクト指向、別の部分では手続き型で、どのメソッドが実行されるかは継承とインターフェースの構造で決まります。クラスを1つずつ読んでいては、それが見えません。

Maguyvaはまずエージェントにクラスグラフを渡します。そのため、変更計画は推測からではなく、そのクラスに何が依存しているかから始まります。

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

Maguyvaは `.abap` ソースを専用のABAP文法で解析します。シンボルには、クラスの定義と実装、インターフェース、メソッドの宣言と実装、そして `FORM` ルーチンが含まれます。

グラフには、ABAP開発者が気にかける関係が記録されます。

- `CLASS ... INHERITING FROM` による継承。
- `INTERFACES` によるインターフェース実装。
- `METHODS ... REDEFINITION` によるオーバーライド。
- `RAISE EXCEPTION` と `CATCH` による例外。
- メソッド呼び出し（`obj->m( )`、`cls=>m( )`、`CALL METHOD`）、`TYPE` と `TYPE REF TO` による型参照、そしてクラスに帰属する公開セクションのメソッドのエクスポート。
- メソッド本体内の読み取り、書き込み、制御フロー（`IF`、`CASE`、`LOOP`、`TRY`）。

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

- 「`zcl_order_base` を継承するクラスはどれで、それぞれどのメソッドを再定義しているか？」（`find_symbol`、次に `dependency_search` の incoming）
- 「`zcx_pricing_error` はどこで発生し、誰が捕捉しているか？」（`dependency_search`）
- 「出荷作成フローがレポートから永続化クラスまでどう流れるかを要約して。」（`get_task_context`）

## 既知の制限

- Open SQL（`SELECT ... FROM ... INTO`）、`EXEC SQL`、`AUTHORITY-CHECK` は現在のABAP文法では解析できないため、SQL経由のテーブル読み取りはまだグラフのエッジになりません。テーブル名には `text_pattern_search` を使ってください。
- `INTERFACES` 句は実装の関係であり、インポートではありません。構造検索でインポートとして選択されるのは `INCLUDE` 文だけです。
- Maguyvaは、Gitリポジトリ内に `.abap` ファイルとして置かれたABAPをインデックスします。SAPシステムには接続しません。

## 次のステップ

[クイックスタート](/ja/docs/quickstart)でリポジトリを接続し、[互換性ページ](/ja/docs/compatibility)で対応マトリクスを確認してください。ほかのレガシー資産については[COBOLガイド](/ja/languages/cobol)をご覧ください。

## エンジンの詳細

- ABAPは専用の文法で解析されます。クラス、インターフェース、メソッドの宣言と実装、`FORM` ルーチンがシンボルになります。
- グラフには、`INHERITING FROM` による継承、`INTERFACES` による実装、`REDEFINITION` によるオーバーライド、`RAISE EXCEPTION` と `CATCH`、そして `obj->m( )` や `cls=>m( )` のような呼び出しが記録されます。
- Open SQL、`EXEC SQL`、`AUTHORITY-CHECK` は現在の文法では解析できないため、SQL経由のテーブル読み取りはまだグラフのエッジになりません。

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

- `find_symbol`: 定義と参照が必要なときに、クラス、インターフェース、メソッドの名前で使ってください。
- `dependency_search`: 変更前に、基底クラスやインターフェースに対してincomingのトラバーサルを使い、サブクラス、実装クラス、呼び出し元を見つけてください。
- `text_pattern_search`: グラフがまだカバーしていない、データベースのテーブル名やSQL文に使ってください。
