sap-migration-dossier について
ARC-1 の移行分析をまとめ、コードやインターフェースの範囲を評価するチーム向けの SAP 移行計画資料を作成するスキルです。通常は簡潔なレポートを返し、要望に応じてファイルやグラフ、人によるレビューにも対応します。
主な機能
- 01パッケージ・名前空間・オブジェクトで範囲指定
- 02オブジェクト一覧と移行シグナルの整理
- 03ATC と Clean Core のリスク評価
- 04要望に応じた統合技術レベルの評価
- 05証拠不足と次の手順の提示
活用シーン
- 01SAP パッケージや名前空間の移行計画
- 02高リスク対象や廃止候補コードの特定
- 03RFC、IDoc、OData 統合の評価
MCP 対応
ARC-1 で SAP オブジェクトを調査し、利用可能な場合は SAP Docs MCP で API 状態、後継 API、移行ガイダンスを補います。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ arc-mcp/ arc-1 --skill sap-migration-dossierインストール後、Claude Code で/sap-migration-dossierを入力して読み込まれたか確認します。
同梱ファイルagents/openai.yamlreferences/auditor-patterns.md
詳細
SAP Migration Dossier
単一オブジェクトを修正するワークフローではなく、移行計画の成果物を作成します。このスキルを使うと、既存の ARC-1 移行スキルを組み合わせ、すぐに着手でき、ユーザーから要望があった場合にのみ正式な形式へ発展させられる、対象範囲を定めたドシエを作成できます。
既定では、簡潔なチャットレポートを作成します。ファイル、レビューカード、HTML、CSV/JSON、グラフは追加の選択肢として提示し、最初からユーザーにレポートシステムの設計を求めないでください。
ユーザーが永続的な成果物、人によるレビュー、インポートした抽出データ、ECC 拡張の詳細な抽出、整合性ハッシュ、HTML ダッシュボード、またはグラフ出力を求めた場合にのみ、references/auditor-patterns.md を読み込みます。
利用可能な場合は SAP Docs MCP を使用します。特に、Clean Core/API のステータス、後継 API、リリース固有の構文、移行ガイダンスの確認に活用します。SAP Docs MCP が接続されていない場合でも、ARC-1 の証拠に基づいてドシエを作成し、証拠の不足項目として「SAP Docs MCP unavailable」を記載します。
既定の手順
対象範囲が明確な場合は、すぐに開始します。
- 対象範囲を確定します。
- パッケージ:
SAPRead(type="DEVC", name="<package>") - プレフィックス/名前空間:該当するタイプ(
PROG、CLAS、FUGR、FUNC、DDLS、BDEF、SRVD、TABL)ごとにSAPSearch - オブジェクト一覧:曖昧な名前を
SAPSearchで特定します - ローカル抽出データ:ファイルを解析し、証拠はライブの ARC-1 ではなくインポートされたものだと明記します
- パッケージ:
- 小規模なインベントリを作成します。オブジェクト、タイプ、パッケージ、説明、取得可能な場合は LOC、最終変更/バージョンを含めます。
- 移行シグナルを追加します。
- ATC:
SAPDiagnose(action="atc", type="<type>", name="<name>") - Clean Core/API リスク:
sap-clean-core-atcのロジックを再利用します - SAP Docs MCP:
sap_get_object_detailsで SAP API 参照情報を補足し、上位の ATC テーマや置き換えガイダンスにはsearch/fetchを使用します - 使用状況/廃止:SCMON/SUSG データが利用可能な場合に限り、
sap-unused-codeを再利用します - 依存関係/使用箇所:
SAPContextまたはSAPNavigate(action="references")
- ATC:
- 次の内容を含む簡潔なレポートを返します。
- 主な件数
- リスクが最も高いオブジェクト
- 廃止候補と思われるもの
- 標準オブジェクトの変更/拡張に関する重点箇所
- 上位の ATC/Clean Core テーマ
- 明確な証拠の不足項目
- 推奨する次のアクション
必要な場合に限り、質問します。
- 対象範囲が指定されていない場合は、パッケージ、名前空間/プレフィックス、またはオブジェクト一覧を尋ねます。
- 対象範囲が非常に広い場合は、絞り込むか、ファイルベースのドシエとして保存するかを尋ねます。
- 顧客向けの判断をユーザーが求めている場合は、人によるレビューを含むフローを使用するか尋ねます。
統合インターフェース(Clean Core 統合)
ユーザーがインターフェース、統合、RFC/IDoc/OData、「clean core integration」、またはクラウド移行の障害となるインターフェースについて尋ねた場合は、このセクションを実行します。それ以外の場合はスキップしてください。既定の手順では引き続きカスタムコードを対象とします。
これは sap-clean-core-atc とは異なる評価軸です。このスキルは拡張性(SAP Note 3578329。コードが呼び出す API)を評価します。このセクションは統合テクノロジー(SAP Note 3690029。システム間の通信方法)を評価します。同じ A~D の文字を使いますが、評価軸は異なります。SAP の表現によれば、統合に関するノートは拡張性ガイダンスを「補完しますが、重複しません」。
まず対象範囲を確定
既定の手順で確定した対象範囲を再利用します。Z% を固定で指定してはいけません。ユーザーが実際に指定したプレフィックス(Z*、Y*)、登録済み名前空間(/NS/*)、オブジェクト一覧、またはパッケージの TADIR.DEVCLASS に基づいて名前フィルターを作成します。Z% のみのフィルターでは、Y* と名前空間付きのオブジェクトがすべて暗黙に除外されます。
EDIPO* テーブル(IDoc ポート)、EDP13(パートナープロファイル)、RFCDES(宛先)は、システム全体の設定であり、パッケージや名前空間で対象を限定できません。読み取る前にユーザーへ確認し、対象範囲内のインベントリではなくランドスケープのコンテキストとして報告します。ユーザーが詳細な証拠の取得を断った場合は、これらを完全にスキップします。
証拠(すべて読み取り専用)
既定では SAPRead(type="TABLE_QUERY") を使用します。data スコープと構造化された where を指定し、ユーザーが SQL を作成する方式は使用しません。
必ず columns を指定してください。省略すると SELECT * が実行され、設定テーブルからドシエで参照する必要のないフィールドまで取得してしまいます。
| 確認項目 | 呼び出し | columns |
|---|---|---|
| 対象範囲内のインターフェイスオブジェクト | TADIR、PGMID = R3TR + OBJECT IN (…) + 対象範囲フィルターで where | OBJECT, OBJ_NAME, DEVCLASS |
| RFC 対応のカスタム FM | TFDIR、FMODE = 'R' + 対象範囲フィルターで where(下記参照) | FUNCNAME, PNAME |
| カスタム IDoc 基本タイプ | EDBAS、IDOCTYP に対象範囲フィルターを適用 | IDOCTYP, RELEASED |
| IDoc → ポートのバインディング | EDP13(アウトバウンドパートナープロファイル) | MESTYP, IDOCTYP, RCVPOR |
| ポートごとのポートタイプ | EDIPORT — すべてのポートタイプを網羅するサマリーテーブル。PORTTYP はドメイン EDI_PORTYP | PORT, PORTTYP |
| XML-HTTP ポートの背後にある宛先 | EDIPOXH(LOGDES が宛先を示します) | PORT, LOGDES |
| アウトバウンド宛先 | RFCDES — 下記の RFCTYPE コードを参照 | RFCDEST, RFCTYPE のみ |
| リリース契約の状態 | SAPRead(type="API_STATE", name="<obj>", objectType="<type>") | — |
RFCDES.RFCOPTIONS または RFCOPTION1…RFCOPTIONV は決して選択しないでください。これらにはログオンデータを含む接続文字列がパックされて格納されています。調査資料に必要なのは宛先名とタイプだけです。
OBJECT IN (…) のリストは IWPR IWSV IWSG IWMO SRVD SRVB EVTB EVTO IDOC SICF HTTP です。
コードテーブル(ハードコードされた推測ではなく、システム独自のドメインから読み取ります):
EDIPORT.PORTTYP(ドメイン EDI_PORTYP) | RFCDES.RFCTYPE |
|---|---|
0 CPI-C · 1 トランザクション RFC · 2 SAPcomm | 3 ABAP システムへの RFC(TCP/IP) · W WebSockets 経由の RFC |
3 ファイル · 6 XML ファイル | H ABAP システムへの HTTP · G 外部サーバーへの HTTP |
4 インターネット · 5 ABAP プログラミングインターフェイス · 7 XML HTTP | T 外部プログラム · I 同一データベース · L 参照 · A アプリケーション |
H だけを HTTP 宛先として扱わないでください。SAP 以外のエンドポイントへのアウトバウンド連携はタイプ G であり、これはまさにここで最も重要なケースです。
プレフィックスごとに 1 回クエリを実行します。 TABLE_QUERY はすべての where エントリーを AND で結合するため、同じフィールドに対する 2 つの LIKE 条件は何も一致しません。Z%、Y%、各名前空間を個別に実行し、クライアント側で結果を統合してください。結果は 10,000 行に制限されます。パーティションの結果がちょうど 10,000 行の場合は、完全な結果として数えず、切り捨てられたものとして報告してください。タイプ別の件数調査は、取得した行を対象にしたカウントです。
TFDIR の対象範囲指定。 ファンクションモジュール名にはパッケージが含まれないため、FUNCNAME LIKE が機能するのは 名前プレフィックス による対象範囲指定だけです。パッケージの調査資料を作成する場合は、まずパッケージの FUGR オブジェクトを解決し、FMODE を確認する前に TFDIR.PNAME をそれらと照合してください。プログラム名は正しく組み立ててください。名前空間が先頭に来るため、ファンクショングループ /NS/FOO のメインプログラムは /NS/SAPLFOO であり、SAPL/NS/FOO ではありません。名前空間のないグループ ZFOO の場合に限り、SAPLZFOO となります。これを逆にすると、名前空間付きのグループはすべて、気付かないまま 0 行を返します。
ユーザーが詳細なエビデンスを選択し、フリー SQL が有効な場合に限り、SAPQuery を使って次のグループ化ステートメントを 1 回実行し、件数を調査できます。'Z%' は解決済みの対象範囲に置き換えてください。これは最適化であり、必須ではありません。
SELECT object, COUNT( * ) AS cnt FROM tadir WHERE pgmid = 'R3TR' AND obj_name LIKE 'Z%' GROUP BY object ORDER BY cnt DESCENDING
この 2 つのゲートは独立しており、一方からもう一方が有効になることはありません。SAPQuery には sql スコープと SAP_ALLOW_FREE_SQL が必要です(これらがないとツール自体が登録されません)。TABLE_QUERY には data スコープと SAP_ALLOW_DATA_PREVIEW が必要です。フリー SQL が有効でデータプレビューが無効なインスタンスもあれば、その逆もあります。
どちらも利用できない場合、テーブルベースの代替手段はありません。tadir_lookup は役に立ちません。source="db"/"both" はそれ自体が sql スコープにエスカレーションし、タイプ別のオブジェクト検出ではなく、正確な名前を解決するためです。代わりに、対象範囲内の各パッケージに対して SAPRead(type="DEVC") を実行し、タイプごとに通常の SAPSearch オブジェクト検索を行ってください。いずれもベストエフォートで実行し、TADIR の件数調査、旧式の SEGW タイプ、すべての RFC/IDoc/宛先のカバレッジを利用不可として記載してください。推測はしないでください。
注意点が 1 つあります。SAPRead(type="DEVC") ではレガシーな SEGW タイプが省かれるため、それらには TADIR を使用してください(または、sql スコープと正確な名前が必要な tadir_lookup を使用してください)。また、サポートされる契約はオブジェクトタイプごとに異なります(SRVD が公開するのは C0 のみです)。そのため、システム全体で「C2 で共有」と報告することは絶対に避けてください。
レベル(SAP Note 3690029)
ABAP システムで確認できる内容に絞って要約しています。このノートでは BW エクストラクター、SLT、Delta Share、データプロダクトも扱っていますが、これらは ARC-1 の範囲外です。そのため、省略せずに証拠の不足として列挙してください。
| 技術 | レベル | ARC-1 の証拠 |
|---|---|---|
| RAP によるイベント連携(AMQP/MQTT) | A | TADIR EVTB / EVTO;SAPRead(type="EVTB") |
| RAP サービスバインディングによる OData;サービスバインディングによる CDS | A | TADIR SRVB + SRVD |
| HTTP(S) | A | TADIR SICF / HTTP(カスタム ICF ノード) |
| SOA Manager による Web サービス | A | ADT では確認できません — SOAMANAGER で確認してください |
| SAP Gateway Service Builder(SEGW)による OData | B | TADIR IWPR IWSV IWSG IWMO |
| RFC による BAPI;RFC(CPI-C);WebSocket RFC | B | TFDIR.FMODE = 'R';RFCDES.RFCTYPE = '3' |
| HTTPS による IDoc | B | EDP13 → EDIPORT.PORTTYP = 7 かつ 宛先で TLS が確認されていること |
| RFC による IDoc | C | EDP13 → EDIPORT.PORTTYP = 1 |
| XI による ABAP プロキシ | C | ここでは対象外 — ADT の証拠なし;SPROXY / SXMB の設定を確認してください |
| フラットファイル | D | SAPSearch(searchType="source_code") で OPEN DATASET を検索 |
| FTP | D | source_code 検索で FTP_CONNECT / FTP_COMMAND を検索 |
| SFTP、JDBC/ODBC | D | ABAP では検出できません — 外部ツールが必要です;推測せず、確認してください |
| RFC(ODP) | 禁止 | API ポリシー(SAP Note 3255746)で禁止されています — 見つけたら報告してください |
IDoc のレベルを判定するにはポートが必要であり、ポートを特定するにはパートナープロファイルが必要です。 EDBAS には基本タイプが、EDIPORT にはポートが列挙されていますが、両者は関連付けられていません — アウトバウンドパートナープロファイル(EDP13)にある RCVPOR が、メッセージ/基本タイプを受信ポートに結び付けます。ポートのタイプは EDIPO.PORTTYP ではなく EDIPORT.PORTTYP から取得してください(稼働中のポートがあった実システムで、前者は空であることを確認しています)。また、どの EDIPO* テーブルに行が格納されているかを推測してはいけません — EDIPOF は ABAP プログラミングインターフェイスであり、ファイルポートではありません。EDP13 → EDIPORT の完全な結合がない場合、IDoc は B/C 判定不能 と報告してください。レベルに算入することは絶対に避けてください。
PORTTYP = 7 が証明するのは XML over HTTP であり、HTTPS ではありません。ポートが指定するのは宛先(EDIPOXH.LOGDES)のみです。TLS はその宛先で設定されます — 一般には RFCTYPE = 'G' のエントリーで設定されます — その SSL 設定は、このスキルが読み取りを拒否する RFCDES 接続 BLOB 内にあります。そのため、XML-HTTP ポートはレベル B の候補として扱い、その宛先について SM59 で SSL を確認するようユーザーに依頼してください。ポートから TLS を推測してはいけません。また、確認のために RFCOPTIONS を解析してはいけません。
source_code 検索には SAP_BASIS 7.51 以降が必要です。古い ECC システムでは利用できないため、そこでレベル D の検索結果が何もない場合は「検索未実施」を意味し、「存在しない」という意味ではありません — 証拠の不足として記録してください。
このノートが評価するのは技術であり、特定のシナリオにおけるレベルはユースケースに依存すると述べています。インターフェイスに対する判定ではなく、その技術に対する SAP のデフォルトとしてレベルを報告してください。
出力
成果物ではなく、インターフェースを数えます。 1つの統合は通常、複数のオブジェクトで構成されます。RAP サービスは
SRVD と SRVB、IDoc シナリオは基本タイプ と パートナープロファイル と ポート、RFC
インターフェースは関数モジュール と 場合によっては宛先で構成されます。それぞれを1つの インターフェース
レコード — { id, technology, level, evidence[] } — にまとめ、レベルの分布ではこれらの
レコードを数えます。生の成果物数は別に報告し、その旨を明記してください。両方を決して合算しないでください。
続けて、統合テクノロジーレベルの分布(レベルごとのインターフェースレコード数)、B→A および C→B の順に並べたモダナイゼーション候補、そして Forbidden の該当項目があれば最初に報告します。この分布をアップグレード安定性の指標と呼ばないでください。Note 3690029 では、基盤となる ABAP オブジェクトのリリース状態に依存するため、レベルモデルからアップグレード安定性を意図的に除外しています。これは API_STATE および Business Accelerator Hub とは別に報告してください。よくある調査結果は、SEGW/Gateway V2(B)と RAP V4(A)の併存です。これらは migrate-segw-to-rap に渡してください。もう1つの標準的な移行は、RFC 経由の IDoc(C)→ RAP ビジネスイベント(A)です。
エスカレーションする場合
オプションモードは、ユーザーから依頼された場合、または対象範囲がチャットで出力するには大きすぎる場合にのみ使用します。
| ユーザーからの依頼 | 実施すること |
|---|---|
| 「保存して」「共有して」「資料一式」「顧客向けレポート」 | docs/migration-dossiers/<scope>/<date>/ を作成し、report.md と必要に応じて inventory.csv を格納します |
| 「HTML」「PDF」「ダッシュボード」 | 自己完結型の report.html を生成します。PDF に印刷できることを伝えます |
| 「レビュー済み」「コンサルタントによる検証」「AI だけではない」 | ドラフトカードを作成し、検証・修正済みのカードのみを最終レポートに含めます |
| 「グラフ」「可視化」「依存関係マップ」 | リスクまたはファンアウトが大きい上位オブジェクトについて、範囲を限定した Mermaid グラフを生成します |
| 「ECC の詳細」「ユーザーエグジット」「BAdI」「標準オブジェクトの改修」 | references/auditor-patterns.md の詳細なエビデンスを使用します。許可されている場合にのみ SAPQuery を使用します |
| 「インターフェース」「統合」「RFC/IDoc/OData インベントリ」「クリーンコア統合」 | Integration Interfaces セクションを実行します |
| 「後継 API」「リリース済み API」「これに代わるものは」 | SAP Docs MCP の sap_get_object_details を使用し、必要に応じて search/fetch でガイダンスを確認します |
| 「この構文はリリース X で動作するか」 | SAP Docs MCP の abap_feature_matrix と、適切な ABAP フレーバーでの search を使用します |
| 「これを修正して」 | 選択した調査結果について migrate-custom-code に切り替えます。このスキルで一括修正は行いません |
出力形式
チャットに出力する場合は、短くまとめます。
Migration Dossier - <scope>
Scope: <n> objects, <types>, <packages>
Evidence: ATC=<variant/default>, docs=<SAP Docs MCP/unavailable>, usage=<SCMON/SUSG/unavailable>, clean-core=<source>, dependencies=<source>
Summary:
- <1-3 lines>
Priority objects:
| Object | Why it matters | Suggested action |
Retirement candidates:
| Object | Evidence | Caveat |
Main risks:
- <ATC/Clean Core/standard modification themes>
Evidence gaps:
- <missing usage data, skipped objects, dynamic calls, unavailable variants>
Next step:
- <one recommendation>
ファイルに出力する場合は、デフォルトの成果物セットを小さく保ちます。
docs/migration-dossiers/<scope>/<date>/
report.md
inventory.csv
methodology.md
report.html、cards.jsonl、reviews.jsonl、graph.mmd、または dashboard.html は、依頼された場合にのみ追加します。
レビュールール
顧客向けレポート、または意思決定に使用するレポートに限り、人によるレビューを必須とします。
ステータス:
ai_draft | validated | corrected | skipped | ai_error
分類:
REMOVE | KEEP | ADAPT | COVERED_BY_STANDARD | UNDETERMINED
これらは意思決定とは分けて扱います。
extensibilityLevel: A | B | C | D | unknown # Note 3578329 — which SAP APIs the code calls
integrationLevel: A | B | C | D | FORBIDDEN | indeterminate # Note 3690029 — interface technology
usageStatus: USED | LIKELY_UNUSED | UNUSED | INDETERMINATE
2つのレベルは独立した軸であり、単一の cleanCoreLevel にまとめてはいけません。ほとんどのカードが持つのは、どちらか一方だけです。コードオブジェクトには extensibilityLevel、インターフェースレコードには integrationLevel を使用します。ポートを特定できなかった IDoc には indeterminate が適切な値です。B または C に丸めないでください。
レビュー済みの最終レポートには、ドラフトであることを明示的に示す場合を除き、ai_draft のカードを含めないでください。
安全性
- 範囲を指定せずにシステム全体の抽出を実行しないでください。
- フリーフォーム SQL が有効で、ユーザーが詳細なエビデンスを選択した場合を除き、
SAPQueryを使用しないでください。 - オブジェクトが
$TMPにある場合、または ATC がスキップした場合は、ATC の検出結果がゼロでも問題なしと判断しないでください。 - このスキルからオブジェクトを削除、更新、有効化、または移送しないでください。
- ドラフトであることを明示的に示す場合を除き、AI のみで作成した評価を最終判断として公開しないでください。
- エビデンスの不足は、推測で補わず明確に伝えてください。