abap-cloud について
abap-cloud は、ABAP Cloud 開発者や SAP 拡張を評価するチーム向けの開発ガイドです。clean core の A~D レベル、開発モデルの選択、API の制限、未リリース API を利用するためのラッパーパターンを解説します。
主な機能
- 01clean core A~D レベルによる拡張分類
- 02ABAP Cloud と従来型 ABAP の比較
- 03API アクセス制限の解説
- 04未リリース API のラッパー指針
- 05リリース済み・従来型 API 分類の確認
- 06clean core の検査と是正の指針
活用シーン
- 01拡張機能の clean core レベル評価
- 02ABAP 開発モデルの選択
- 03未リリース API の代替策の調査
- 04従来型または内部 API のラッパー計画
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ likweitan/ abap-skills --skill abap-cloudインストール後、Claude Code で/abap-cloudを入力して読み込まれたか確認します。
同梱ファイルreferences/clean-core-levels.md
詳細
ABAP Cloud とクリーンコアのレベルコンセプト
ABAP Cloud プログラミングモデルを使った開発、クリーンコアのレベルコンセプト(A~D)を使った拡張機能の分類、クリーンコアの原則の適用に関するガイドです。
用語に関する注意:SAP は、従来の3 層拡張性モデルをクリーンコアのレベルコンセプトへと発展させました。3 層モデル(Tier 1/2/3)は後継のコンセプトに置き換えられています。代わりにレベル A、B、C、D を使用してください。現在の製品名は次のとおりです。SAP Cloud ERP(パブリック)、SAP Cloud ERP Private(旧 S/4HANA Cloud Private Edition)、SAP Business AI Platform(SAP BTP の機能を含む)、SAP Build(プロコードおよびローコードのツール群。ABAP Cloud を含む)。
ワークフロー
-
ユーザーの状況を確認します:
- ABAP Cloud のコンセプトと制限を理解する
- 拡張機能をクリーンコアのレベルに分類する
- ABAP Cloud 開発とクラシック ABAP 開発のどちらを選ぶか判断する
- ABAP Cloud で使用するため、リリースされていない API をラップする
- リリース済みまたはクラシックな API の代替手段を特定する
-
クリーンコアのレベルで拡張機能を分類します:
- レベル A:リリース済み API と拡張ポイントのみ(安定性契約あり)
- レベル B:クラシック API とクラシックフレームワーク(SAP により推奨されていますが、安定性契約はありません)
- レベル C:SAP 内部オブジェクト(変更履歴による緩和を条件にクリーン)
- レベル D:非推奨のオブジェクトとパターン(是正が必要)
-
最も低いレベルのルールを適用します:拡張機能は、使用する中で最も低いレベルに分類されます。内部オブジェクトを 1 つ呼び出すレベル A の拡張機能は、レベル Cの拡張機能になります。
-
実装を可能な限り高いレベル(まずはレベル A)へと導きます。
クリーンコアのレベルコンセプト
SAP は、エネルギーラベルと同様に拡張機能を 4 つのレベルに分類しています。レベル A は「SAP Business AI Platform first」戦略を反映した目標状態です。レベル D は是正が必要です。
| レベル | 名称 | SAP オブジェクトの修飾子 | アップグレード時の安定性 | ATC の動作 |
|---|---|---|---|---|
| レベル A | SAP Build で拡張する | [Released] SAP リモート API、ローカル API、拡張ポイント | 安定性契約によって保証されます | 指摘なし |
| レベル B | クラシック API を活用する | [Classic] SAP API と拡張ポイント | SAP の専門家により推奨されていますが、正式な契約はありません | 優先度 3(情報) |
| レベル C | 内部オブジェクトにアクセスする | [Internal] SAP オブジェクト(分類されていないオブジェクトのデフォルト) | アップグレード時の安定性はありません。変更履歴によって緩和します | 優先度 2(警告) |
| レベル D | 非推奨 | [Not recommended] SAP オブジェクト、拡張ポイント、技術 | 高リスクであり、技術的負債が大きくなります | 優先度 1(エラー) |
クリーンコアのステータス:レベル A = クリーンコア · レベル B と C = 条件付きでクリーンコア · レベル D = クリーンコアではありません。
レベル A — SAP Build と Joule Studio で拡張する
安定性契約がある、一般公開済みのインターフェースと拡張ポイントのみを使用します。
- オンスタック:SAP Cloud ERP Private 内の ABAP Cloud 開発モデルを使用し、リリース済みのローカル API(リリース済み CDS ビュー、リリース済み BO インターフェース、リリース済み拡張ポイント)に加え、キー・ユーザー拡張性を使用します
- サイドバイサイド:SAP Business AI Platform で ABAP Cloud、CAP、またはローコード/ノーコードのツール(SAP Build、Joule Studio)を使用し、リリース済みのリモート API を利用します
- リリース済みオブジェクトは、SAP Business Accelerator Hub、Cloudification Repository、または ADT から直接確認できます
- 注:レベル A の対応範囲は SAP Cloud ERP Private の機能範囲全体を網羅しておらず、全面的な網羅は計画されていません
"Level A: ABAP Cloud class using only released APIs
CLASS zcl_my_extension DEFINITION
PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES if_oo_adt_classrun.
ENDCLASS.
CLASS zcl_my_extension IMPLEMENTATION.
METHOD if_oo_adt_classrun~main.
"Released CDS view — no direct table access
SELECT FROM I_BusinessPartner
FIELDS BusinessPartner, BusinessPartnerName
INTO TABLE @DATA(partners)
UP TO 10 ROWS.
out->write( partners ).
ENDMETHOD.
ENDCLASS.
レベル B — 従来の API を活用する
十分に確立され、文書化され、SAP が指定した従来の APIと従来のフレームワークです。正式な安定性保証はありませんが、長年にわたる信頼性の高い利用実績と SAP 社内の品質保証があります。
- 代表例:
BAPI_*関数モジュール、CL_GUI_ALV_GRID、リリースされていない BAdI、ユーザー/顧客出口、SAP GUI および ALV フレームワーク - ABAP 言語バージョンが Standard ABAP のカスタムオブジェクトは、リリース済みまたは従来のオブジェクトのみを参照する場合、レベル B です
- レベル A のコードから利用できるようにする、従来の API をラップしたものはレベル B です
- フレームワークの分類については、
objectClassifications_SAP.json(Cloudification Repository)および SAP Note 3578329 で従来の API を確認してください - 従来の ABAP 開発に推奨されるソフトウェアコンポーネント:
HOME
レベル C — 内部オブジェクトにアクセスする
技術的にはアクセス可能ですが、リリースも指定も文書化もされておらず、顧客による使用がサポートされていない SAP の内部オブジェクトです。ほかに分類されていない SAP オブジェクトは、すべてこのデフォルト分類になります。
- 代表例:内部関数モジュール/クラスの直接呼び出し、SAP データベーステーブルへの読み取りアクセス
- 緩和策:SAP オブジェクトの変更履歴で、今後のリリースで互換性のない変更が予定されている内部オブジェクトを確認できます。これにより、アップグレード前に先行してリファクタリングできます
- SAP は内部オブジェクトを従来のオブジェクト(→ レベル B)または非推奨オブジェクト(→ レベル D)に再分類する場合があります
- リリース済みの後継オブジェクトがあるオブジェクトには、Cloudification Repository で
internalAPIのフラグが付けられます
レベル D — 非推奨
リスクと技術的負債が最も高い分類です。直ちに是正してください。
- Cloudification Repository で
noAPIに分類されている SAP オブジェクト(例:RFC_READ_TABLE) - SAP オブジェクトへの変更(手動修正を適用した SAP Note を含む)
- 暗黙的および明示的な拡張(ソースコードプラグイン)
- SAP データベーステーブルへの直接の書き込みアクセス
- SAP プログラム内のフォームルーチンの呼び出し
- 重要な ABAP ステートメント(カーネル呼び出し、システム呼び出し、エディター呼び出し、
EXEC SQL、DB ヒント、レポート/Dynpro の生成、nametab のインポート/エクスポート) - SAP 内部としてフラグが付けられた BAdI の実装
開発モデル
SAP Cloud ERP Private では、スタック上で 2 つの開発モデルを併用できます。
| 項目 | ABAP Cloud 開発 | 従来の ABAP 開発 |
|---|---|---|
| クリーンコア | レベル A | レベル B(内部/非推奨オブジェクトを使用する場合は C/D) |
| 言語バージョン | ABAP for Cloud Development | Standard ABAP |
| デフォルトの選択肢 | はい — 新規の ABAP ベース拡張すべて | リリース済み API が存在しない場合、または UI が従来型の場合のみ |
| 主導モデル | RAP | 従来のフレームワーク(SAP GUI、ALV、Web Dynpro、SEGW、BOPF) |
| 適用方法 | 構文チェック + ランタイムチェック | ABAP テストコックピット(ATC)によるガバナンス |
| ソフトウェアコンポーネント | 言語バージョンが ABAP for Cloud Development のコンポーネント | HOME または既存の従来型コンポーネント |
| IDE | ADT(必須) | ADT または SAP GUI |
| 開発者ロール | SAP_BC_ABAP_DEVELOPER_5 テンプレート | 標準の開発者ロール |
アクセスルール
ABAP Cloud オブジェクトがアクセスできるのは、次の対象に限られます。
- 同じソフトウェアコンポーネント内のカスタムオブジェクト
- リリース済み SAP オブジェクト(リリース済み API)
- クラシックソフトウェアコンポーネントの ABAP Cloud 開発向けにリリースされたカスタムオブジェクト(リリース済みカスタム API)
クラシック ABAP オブジェクトがアクセスする対象は、次のものに限るべきです。
- 自身のソフトウェアコンポーネント内のカスタムオブジェクト
- リリース済み SAP API およびクラシック SAP API
- クラシックおよび ABAP Cloud ソフトウェアコンポーネント内のカスタムオブジェクト
権限によるモデルの適用
権限オブジェクト S_ABPLNGVS は、開発者が Standard ABAP でオブジェクトを作成できるか、ABAP for Cloud Development のみで作成できるかを制御します。これを使用して、専用の ABAP Cloud 開発者ロールを作成します。
ABAP for Cloud Development における主な制限
- リリース済み SAP API(C1 コントラクト)のみ使用できます
- SAP テーブルへのデータベーステーブルの直接アクセスは禁止です(リリース済み CDS ビューを使用します)
- クラシック dynpro、選択画面、SAP GUI に依存する文は使用できません
CALL TRANSACTION、SUBMIT、AUTHORITY-CHECKは使用できません(CL_ABAP_AUTHORIZATIONを使用します)- クラシック BAdI やユーザー出口は使用できません(リリース済み BAdI のみ使用できます)
EXEC SQLやネイティブ SQL は使用できません(ABAP SQL または AMDP を使用します)- リリースされていない汎用モジュールは使用できません
INCLUDEプログラムは使用できませんWRITEやクラシックな一覧出力は使用できません- コンソール出力には
if_oo_adt_classrunを使用します
ラッパーパターン
必要な API がリリースされていない場合は、クラシック ABAP ソフトウェアコンポーネント内にラッパーを作成し、ABAP Cloud 開発向けにリリースします。利用する ABAP Cloud コードはクリーンな状態を保ち、ラッパーによってレベル違反を単一の場所に局所化できます。
ラッパーのレベル分類(ホワイトペーパーより):
- クラシック API(レベル B オブジェクト)をラップする場合 → ラッパーは レベル B
- 内部オブジェクト(レベル C オブジェクト)をラップする場合 → ラッパーは レベル C
- 非推奨オブジェクトをラップする場合 → レベル D。作成しないでください
"Classic ABAP software component: wrapper class released for ABAP Cloud
"Wrapping BAPI_PO_CREATE1 (a classic API) → Level B
CLASS zcl_wrapper_material DEFINITION
PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES zif_material_reader.
"Release with C1 contract in ADT → API State tab
ENDCLASS.
CLASS zcl_wrapper_material IMPLEMENTATION.
METHOD zif_material_reader~get_material.
"Access non-released API internally
SELECT SINGLE * FROM mara
WHERE matnr = @iv_matnr
INTO @DATA(ls_mara).
"Map to released structure
rs_material = VALUE #(
matnr = ls_mara-matnr
mtart = ls_mara-mtart
matkl = ls_mara-matkl ).
ENDMETHOD.
ENDCLASS.
ラッパーのガイダンス
- CDS ビュー:リリースされていない SAP CDS ビューの上にカスタム CDS ビューを作成し、リリースします。関連付け先や値ヘルプビューにもラッパーが必要になる場合があります。SAP CDS ビューが存在しない場合は、データベーステーブルをラップします。
- クラス/インターフェイス:リリースされていない FM またはクラスをラップします。リリースされていないデータ型をコピーしないでください。ラッパーの公開セクションで
TYPES宣言を使用してラップすれば、リリースが必要なのはラッパーだけです。 - 権限:クラシック API は、ABAP Cloud では使用できないリリースされていない権限オブジェクトをチェックすることがよくあります。PFCG ロールには、リリース済みとリリースされていない権限オブジェクトを混在させることができます。ラッパーのリリース時に
SU22データを提供し、指定された用途ごとにSU22バリアントを作成します。 - ATC 免除:ラップすると N 件の検出結果が 1 件に減ります。用途ごとに免除を設定するのではなく、ラッパーに対して粒度の細かい免除を 1 件作成します。これは内部オブジェクトに対する SAP 推奨の方法です。
- ラッパーの廃止:SAP が API をリリースしたら、ラッパーを置き換え、コードを ABAP Cloud に移行します。
RFC プロキシによるラッパー(スタック内からサイドバイサイドへ)
"Side-by-side consumer calls a released RFC wrapper
DATA(lo_dest) = cl_rfc_destination_provider=>create_by_comm_arrangement(
comm_scenario = 'Z_MY_COMM_SCENARIO'
service_id = 'Z_MY_OUTBOUND_SRV' ).
CALL FUNCTION 'Z_WRAPPER_FM'
DESTINATION lo_dest->get_destination_name( )
EXPORTING iv_param = lv_value
IMPORTING ev_result = lv_result.
オブジェクト分類の調査
| 方法 | 説明 |
|---|---|
| Cloudification Repository | objectClassifications_SAP.json — クラシック API、noAPI、internalAPI の分類 |
| Cloudification API Viewer | https://sap.github.io/abap-atc-cr-cv-s4hc/ で参照します |
| SAP Business Accelerator Hub | 安定性契約が適用されるリリース済みのリモート API とローカル API |
| ADT: Released Object Search | api: プレフィックスを使って検索します(例:api:cl_*)。または、Project Explorer → Released Objects を選択します |
| ATC clean core checks | SYCM_USAGE_OF_APIS、SYCM_ALLOWED_ENH_TECHNOLOGY、CI_SEARCH_CUST_MODIFICATIONS |
| SAP Note 3578329 | クラシック技術、再利用サービス、アプリケーションフレームワークの分類 |
| SAP Note 3565942 | Usage of APIs および Allowed Enhancement Technologies ATC チェックを提供します |
| released-abap-classes skill | ABAP Cloud でよく使われるリリース済みクラス |
| XCO Library | XCO_CP_* クラスはクラウド対応の代替手段を提供します |
クラシック API の分類は、次のオブジェクトタイプに対して提供されています:ファンクションモジュール(FUNC)、クラス(CLAS)、インターフェース(INTF)、CDS ビュー(STOB)、BO インターフェース(BDEF)。データ型として使われる DDIC オブジェクトは分類もチェックもされません。チェック対象は、SAP テーブルへの SQL アクセスのみです。
リリースされていないオブジェクトからリリース済みオブジェクトへの一般的な置き換え
| リリースされていないオブジェクト(レベル C/D) | リリース済みの代替手段(レベル A) |
|---|---|
AUTHORITY-CHECK | CL_ABAP_AUTHORIZATION=>check_authorization() |
sy-uname | cl_abap_context_info=>get_user_technical_name() |
sy-datum / sy-uzeit | cl_abap_context_info=>get_system_date/time() |
cl_gui_frontend_services | 利用できません — 代わりに Fiori UI を使用します |
CALL TRANSACTION | RAP アクションまたは Fiori ナビゲーション |
SUBMIT ... AND RETURN | CL_APJ_RT_API によるバックグラウンドジョブ |
SAP テーブルへの直接の SELECT | リリース済み CDS ビュー(I_* ビュー) |
CONVERSION_EXIT_* | CL_ABAP_CONV_CODEPAGE、ドメインの固定値 |
BAPI_* ファンクションモジュール | リリース済み API または RAP BO の利用(それ以外はレベル B) |
RFC_READ_TABLE(noAPI) | リリース済み CDS ビューまたはリリース済みリモート API |
クラシックな MESSAGE 文 | REPORTED による RAP メッセージ |
ユースケース → レベルの対応表
| カテゴリ | ユースケース | レベル |
|---|---|---|
| 拡張 | リリース済みの拡張インクルードを使用したカスタムフィールド | A |
| 拡張 | リリース済みSAP BAdI の実装 | A |
| 拡張 | 未リリースの拡張インクルードを使用したカスタムフィールド | B |
| 拡張 | 従来の追加構造を使用した DB テーブル上のカスタムフィールド | C |
| 拡張 | ユーザー/カスタマー exit(例:SAPMV45A)の実装 | B |
| 拡張 | 未リリースSAP BAdI の実装 | B |
| 拡張 | SAP 内部用とフラグ付けされた BAdI の実装 | D |
| 拡張 | RAP ベースの SAP Fiori アプリの拡張 | A |
| 拡張 | SEGW/BOPF/UI5 SAP Fiori アプリの拡張 | B |
| 拡張 | SAP GUI トランザクションの拡張 | B |
| カスタムアプリケーション | カスタム RAP ベースの SAP Fiori アプリ(コアスコープ) | A |
| カスタムアプリケーション | カスタム SEGW/BOPF/UI5 アプリ | B(RAP を推奨) |
| カスタムアプリケーション | レガシー UI アプリ(ALV を使用した ABAP レポート、Web Dynpro) | B(避けるべき) |
| カスタムアプリケーション | SE54 ベースの BC UI | B(RAP ベースの BC アプリを推奨) |
| ラッパー | 未リリース SAP オブジェクト(例:BAPI)をラップするラッパークラス | ラップ対象が従来の API の場合は B、それ以外は C |
| ラッパー | 未リリース SAP テーブルまたは CDS ビュー用のラッパー CDS ビュー | ラップ対象が従来の API の場合は B、それ以外は C |
| 修正 | 手動修正を伴う SAP Note | D(コアに取り込まれたらリセット) |
| 修正 | ビジネス主導の修正 | D(例外的なケースのみ) |
キーユーザー拡張性と開発者拡張性
リリース済みの拡張ポイントを使用する場合、どちらもレベル Aです。
- キーユーザー拡張性(ノーコード/ローコード):Fiori アプリを通じて、カスタムフィールド、カスタムロジック、カスタム CDS ビュー、カスタムビジネスオブジェクト、カスタム分析クエリを作成します。密結合の拡張では、まずここから始めます。トランザクション
SEEAまたは拡張レジストリを使用して、登録済みの拡張ポイントを探します。 - 開発者拡張性(ABAP Cloud):キーユーザー拡張性では制約が大きすぎる場合に使用します。RAP を使用した ADT で、ライフサイクル全体を管理します。
ベストプラクティス
- レベル A を目指す — 「まず SAP Business AI Platform」、スタック上では ABAP Cloud を使用します
- 使用する中で最も低いレベルで分類する — 内部オブジェクトが 1 つでも含まれると、拡張全体がレベル C になります
- レベル D を直ちに排除する — 修正、暗黙的拡張、テーブルへの書き込み、noAPI オブジェクトが対象です
- レベル C を最小限に抑える — 内部オブジェクトをリリース済み API または従来の API に置き換え、SAP オブジェクトの変更ログを監視します
- レベル B を現実的に受け入れる — 従来の API は実際にはアップグレードに対して安定しているため、不要な書き換えを強制しません
- 散在させず、ラップする — 1 つの ATC 免除を伴うラッパーは、複数の直接利用より優れています
- ATC でガバナンスを行う — グローバルチェックバリアントを使用し、優先度 1 および 2 の検出事項がある場合は移送リリースをブロックします
- ソフトウェアコンポーネントを分離する — ABAP Cloud コンポーネントと、従来型の
HOMEを分けます
出力形式
ABAP Cloud/クリーンコアに関するトピックを支援する場合は、回答を次のように構成します。
## ABAP Cloud Guidance
### Context
- Clean core level: [A / B / C / D] (classified by the lowest level used)
- Development model: [ABAP Cloud / Classic ABAP]
- Language version: [ABAP for Cloud Development / Standard ABAP]
- Target platform: [SAP Cloud ERP / SAP Cloud ERP Private / SAP Business AI Platform]
### Recommendation
[Guidance on the approach and how to reach a higher level]
### Code Example
[ABAP code following clean core principles]
### Released API References
- [List of relevant released or classic APIs used]
### Expected ATC Findings
- [Priority and check name, if any]
参考資料
- Clean Core Extensibility Whitepaper(レベルの概念):https://www.sap.com/documents/2023/11/2e6b5b98-957e-001e-9e9e-cbd0b2b1f1e0.html
- ABAP ベースの拡張機能で SAP S/4HANA を拡張する(ガイド):https://community.sap.com/t5/enterprise-resource-planning-blogs-by-sap/extend-sap-s-4hana-in-the-cloud-and-on-premise-with-abap-based-extensions/ba-p/13500561
- SAP Cloudification Repository:https://github.com/SAP/abap-atc-cr-cv-s4hc
- Cloudification Repository Viewer:https://sap.github.io/abap-atc-cr-cv-s4hc/
- SAP Business Accelerator Hub:https://api.sap.com/
- ABAP Cloud Cheat Sheet:https://github.com/SAP-samples/abap-cheat-sheets
- Clean Core Guidelines:https://help.sap.com/docs/abap-cloud
- SAP Note 3578329 — クラシック技術の分類
- SAP Note 3565942 — クリーンコアの ATC チェック
詳細な参考資料
- クリーンコアレベルの詳細:レベルごとの比較、意思決定マトリックス、ガバナンスの設定、修正の優先順位については、
references/clean-core-levels.mdを参照してください。
関連スキル
- abap-cloud-migration:既存のカスタムコードをレベルに基づいて修正する場合に使用します
- atc-cloudification:ATC のクリーンコアチェックとレベルガバナンスを設定する場合に使用します
- released-abap-classes:レベル A のリリース済み API の代替手段を探す場合に使用します
- authorization-iam:ABAP Cloud での権限設定とラッパーの
SU22処理に使用します - badi-enhancement:BAdI と拡張技術のレベル分類に使用します