sap-clean-core-atc について
sap-clean-core-atcは、カスタムSAPコードをClean CoreのA~Dレベルに分類するスキルです。依存関係分析、ATCの結果、SAP APIのリリース情報を組み合わせ、オブジェクトごとのレポートを作成してクラウド対応評価や移行計画を支援します。
主な機能
- 01パッケージまたは一覧からカスタムオブジェクトを抽出
- 02参照されるSAP APIを特定
- 03ATCによるクラウド対応チェック
- 04APIをClean CoreのA~Dに分類
- 05オブジェクト別のリスクと代替案を報告
活用シーン
- 01SAPクラウド移行に向けたカスタムコードの評価
- 02アップグレード前の高リスクオブジェクトの優先付け
- 03BTP移行やコード廃止の計画
- 04パッケージ全体のClean Core状況の確認
MCP 対応
このスキルはARC-1のMCPツールでSAPオブジェクトの検索、依存関係分析、ATCチェック、ソース取得を行います。SAP APIの分類にはmcp-sap-docsも利用し、接続できない場合はATCのみの分類に切り替えます。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ arc-mcp/ arc-1 --skill sap-clean-core-atcインストール後、Claude Code で/sap-clean-core-atcを入力して読み込まれたか確認します。
詳細
SAP Clean Core ATC 分類
カスタムコードのパッケージをインベントリ化し、使用している SAP API に基づいてすべての Z/Y オブジェクトを Clean Core レベル A~D に分類します。これは「クラウド対応かどうか」を監査するものです。
これは migrate-custom-code とは異なります。このスキルは 1 つのオブジェクトの ATC 指摘を修正しますが、こちらはオブジェクトごとのレベルを含むパッケージ全体の分類レポートを作成し、クリーンコア/BTP 移行の計画に使用します。ARC-1(ATC とソースアクセス)と mcp-sap-docs(SAP/abap-atc-cr-cv-s4hc のリリース済み API 分類データ)を組み合わせます。
Clean Core レベル(意味)
| レベル | 意味 | クラウド対応? |
|---|---|---|
| A | リリース済み SAP API のみを使用 | ✅ はい — そのまま ABAP Cloud / BTP に移行できます |
| B | クラシック API を使用(オンプレミス専用、文書化済み) | 🟡 オンプレミスの S/4HANA では動作します。クラウド向けには書き換えが必要です |
| C | 内部/安定版 SAP オブジェクトを使用(顧客向けにリリースされていない) | 🔴 現在はサポートされていますが、API の保証はありません |
| D | API ステータスがないオブジェクトを使用(深い内部実装、文書化されていない) | 🔴 移行リスクが高く、アップグレード時に動作しなくなる可能性があります |
出典:SAP/abap-atc-cr-cv-s4hc — SAP 公式の機械可読なリリース状態リストです。
これらは拡張性のレベル(SAP Note 3578329)であり、コードが呼び出す SAP API を表します。SAP は、Note 3690029 で統合テクノロジー(RFC、IDoc、SEGW OData、ファイル転送など)向けに、別個の A~D スケールを定義しています。こちらは「このスケールを補完するものの、重複はしない」ものです。同じ文字でも評価軸は異なるため、2 つを 1 つのスコアにまとめないでください。統合軸については、sap-migration-dossier の Integration Interfaces セクションを使用してください。
スマートデフォルト(黙って適用し、質問しない)
| 設定 | デフォルト | 理由 |
|---|---|---|
| 対象システムの種類 | public_cloud | クリーンコア監査では、ほぼ常にクラウド対応が対象となります |
| ATC バリアント | 利用可能な場合は ABAP_CLOUD_READINESS、そうでなければシステムのデフォルト | この作業の目的はクラウド対応です。まず atc_variants で名前を確認してください |
| 対象に含めるもの | Z*、Y*、およびユーザーが指定した /namespace/* | 顧客コードのみを対象とし、SAP 提供のものは除外します |
| レポートの詳細度 | サマリーテーブル+レベル別内訳+主な違反 | 実行可能な概要を示し、要望があれば詳細を掘り下げます |
入力
ユーザーはパッケージ(推奨)またはカンマ区切りのオブジェクト一覧と、任意で対象システムの種類を指定します。
- パッケージ(例:
Z_FI_CUSTOM):パッケージ内のすべてのカスタムオブジェクトを監査します - オブジェクト一覧(例:
ZCL_POSTING, ZR_SALES_REPORT):指定されたオブジェクトのみを監査します - 対象システムの種類:
public_cloud(デフォルト) |btp|private_cloud|on_premise
パッケージもオブジェクト一覧も指定されていない場合は、どちらを使用するか尋ねてください。「すべて」を監査してはいけません。ユーザーがそれを望むことはありません。
手順 1:カスタムオブジェクトの列挙
1a. パッケージのパス
SAPRead(type="DEVC", name="<package>")
結果を絞り込み、PROG | CLAS | INTF | FUGR | FUNC | DDLS | BDEF | SRVD | TABL のうち、名前が Z、Y、または顧客名前空間で始まるものだけを残します。サブパッケージは別途監査するため除外します。ただし、ユーザーが「recursive」と指定した場合を除きます。
1b. オブジェクト一覧のパス
各名前について、型を解決します。
SAPSearch(query="<name>")
最初に見つかった完全一致を使用します。
手順 2:オブジェクトごとに SAP API 参照を抽出
各カスタムオブジェクトについて、参照している SAP 提供オブジェクトの一覧を収集します。
2a. 依存関係の抽出に SAPContext を使用
SAPContext(type="<type>", name="<object_name>", depth=1)
SAPContext は依存関係の一覧を返します。名前が Z/Y/顧客名前空間で始まらない依存関係のみを残します。これらが SAP 参照です。それぞれを (objectType, objectName) として記録します。
SAPContext は CLAS、INTF、PROG、FUNC、DDLS(オンプレミス)および CLAS、INTF、DDLS(BTP)をサポートします。それ以外の型(FUGR、BDEF、SRVD、TABL)については、ソースを SAPRead で読み込み、行に対する正規表現スキャン(例:CL_*、IF_*、SAP*、CALL FUNCTION '...')で SAP クラス/インターフェース/関数の参照を抽出してください。AST から導出した依存関係より確度が低いことがユーザーにわかるよう、レポートではこれらの参照に「static-scan」と記してください。
2b. クラウド対応状況を確認するため、ATC も実行します
SAPDiagnose(action="atc", type="<type>", name="<object_name>", variant="ABAP_CLOUD_READINESS")
システムに ABAP_CLOUD_READINESS が存在しない場合、ARC-1 は DEFAULT を黙って実行するのではなく、呼び出しを拒否します。SAPDiagnose(action="atc_variants") で実際のバリアント名を一覧表示して選択するか、variant を省略してシステムで設定されたデフォルト(systemCheckVariant)を使用し、レポートに選択内容を記載してください。オンプレミスシステムには、ABAP_CLOUD_READINESS の代わりに S4HANA_READINESS_<release>(例:S4HANA_READINESS_2023)または SAP_CLOUD_PLATFORM_DEFAULT が用意されていることがよくあります。ATC の検出結果は API 分類を補完するものです。リリース済みの API でも、誤った使い方をしている可能性があります。
ATC は
$TMP/ローカルオブジェクトをスキップします(S/4HANA 2023 で実稼働環境にて確認済み)。$TMPオブジェクトに対してチェックを実行すると、オブジェクトセットが空として解決され、検出結果はゼロになります。これは「問題なし」ではなく、「チェックされていない」ことを意味します。パッケージ全体の分類は、移送可能なパッケージでのみ機能します。パッケージがローカル/$TMPの場合は、レポートに ATC 結果を利用できない旨を記載し、mcp-sap-docs の API 分類のみを使用してください。フラグが付くと想定されるコードの検出数が 0 の場合、そのほとんどは問題のないコードではなく、$TMPの落とし穴が原因です。
ステップ 3:mcp-sap-docs で SAP 参照を分類する
カスタムコードが参照する SAP オブジェクトごとに、以下を実行します。
sap_get_object_details(object_type="<type>", object_name="<name>", system_type="<target>", target_clean_core_level="A")
次の情報が返されます。
cleanCoreLevel— A、B、C、または D。これは拡張性の軸です(注記 3578329)。sap-migration-dossierのカードに渡す場合は、統合レベルと混同されないようextensibilityLevelに割り当てますstate— released | deprecated | classicAPI | stable | notToBeReleased | noAPIcomplianceStatus— 目標レベルに対するcompliant|non_compliantsuccessorObjects— 非推奨の場合の置き換え先の推奨
結果は (object_type, object_name) ごとにキャッシュしてください。同じ SAP クラスが複数の Z オブジェクトから参照されることはよくあります。
オブジェクトがデータセットに見つからない(found: false)場合は、**D(不明/API なし)**に分類し、手動レビューが必要であることを示してください。
ステップ 4:オブジェクトごとのレベルに集約する
各カスタムオブジェクトのレベルは、SAP 参照のうち最も高い(最も問題のある)レベルです。
| 次の参照が 1 つでもある場合 | オブジェクトのレベル |
|---|---|
| D | D |
| C(D なし) | C |
| B(C/D なし) | B |
| すべて A | A |
オブジェクトごとに以下を記録します。
- オブジェクトのレベル(A/B/C/D)
- 参照の内訳(レベルごとの件数)
- 最も問題のある参照の上位 3 件と、その後継(存在する場合)
- ATC のクラウド対応状況チェックでの検出数(優先度 1/2/3)
ステップ 5:レポートを出力する
5a. 概要
Clean Core Audit — <package_or_list>
Target system: <target> ATC variant: <variant>
Objects audited: 42
Level A: 12 (29%) — ready for ABAP Cloud as-is
Level B: 18 (43%) — on-prem only; rewrite for cloud
Level C: 8 (19%) — uses internal APIs; plan replacement
Level D: 4 (9%) — high risk; manual review required
5b. レベルごとの表
各レベルについて、D から始めて順に下げながら(最も問題のあるものから)表示します。
Level D — High Risk (4 objects)
Object Non-compliant refs Top violation ATC P1
ZCL_MIGRATION_HELPER 8 CL_SALV_TREE_WRAPPER 3
ZR_OLD_POSTING 12 SAPLSMTR_NAVIGATION 5
...
5c. 置き換え候補(レベル B/C/D のみ)
最も参照されている非推奨 API の上位 10 件について、件数とともに {非推奨 API → 後継 API} の組み合わせを表示します。
CL_GUI_ALV_GRID (used in 18 Z-objects) → CL_SALV_TABLE (A)
CL_IXML (used in 12 Z-objects) → XML transformations (A)
...
5d. 次の選択肢
次のステップを提示します。
- 「レベル D のオブジェクトごとの詳細を表示しますか?」(リスクの高い 4 件を詳しく確認します)
- 「これらのオブジェクトの 1 つを今すぐ移行しますか?」(→ migrate-custom-code)
- 「使用されている Z オブジェクトを確認しますか?」(→ sap-unused-code — 使用されていないコードを移行しても意味がありません)
- 「レベル A のオブジェクトを参考例として文書化しますか?」(→ sap-object-documenter)
- 「エビデンス、顧客への質問、視覚化を保存したレビュー済みのドシエを作成しますか?」(→ sap-migration-dossier)
エラー処理
| エラー | 原因 | 対処方法 |
|---|---|---|
sap_get_object_details が found: false を返す | SAP オブジェクトがリリース状態データセットにありません | D に分類し、手動レビュー対象としてフラグを立てます。データセットは S/4HANA のみを対象としています |
ABAP_CLOUD_READINESS バリアントが見つからない | システムで設定されていません(サイレントフォールバックではなく、ハードエラーです) | SAPDiagnose(action="atc_variants") で名前を一覧表示し、最も近いものを選ぶか、variant を省略してシステムのデフォルトを使用します。検出結果がクラウドに特化したものではなくなることをレポートに記載してください |
| SAPContext がオブジェクトタイプに対応していない | 例:動的プログラム、生成コード | ソースを正規表現でスキャンし、CL_*、IF_*、SAP* パターンを探します |
| パッケージが空 | 入力ミス、またはパッケージが構造パッケージのみです | SAPSearch で確認し、子パッケージを選ぶようユーザーに依頼します |
| mcp-sap-docs が接続されていない | MCP サーバーがありません | スキルは ATC のみの分類に機能を縮小します。ユーザーに警告してください |
注意事項
このスキルでできないこと
- 移行ツールではありません — リスクを分類するものであり、実際の修正には migrate-custom-code を使用してください。
- SAP の Custom Code Migration アプリの代替ではありません — このアプリには、より詳細な分析機能(ランタイム使用状況の分析、simplification DB、トランスポートへの影響)があります。このスキルは、迅速に使える LLM 向けの近似的な手段です。
- 精度は mcp-sap-docs データセットの鮮度に左右されます — SAP/abap-atc-cr-cv-s4hc リポジトリは、S/4HANA のリリースごとに更新されます。
BTP とオンプレミス
- BTP 監査(
system_type=btp):レベル B は非準拠になります。BTP で受け入れられるのはレベル A のみです。public_cloud より厳しい条件です。 - オンプレミス監査(
system_type=on_premise):レベル A と B はどちらも準拠します。「クラウドで実行できるか」ではなく、「次の S/4HANA アップグレード後もカスタムコードが動作するか」が目的の場合に使用してください。
このスキルを使用する場面
- ECC から S/4HANA Cloud への移行計画
- ECC から BTP 上の ABAP Cloud への移行計画
- 四半期ごとのカスタムコード健全性チェック
- メジャーリリースのアップグレード前(高リスクのオブジェクトを早期に特定するため)
- カスタムコード廃止プロジェクトの範囲決定(sap-unused-code と組み合わせます)