mcpField
A
abap-cloud

abap-cloud

github.com/likweitan開発72105 回インストール2 週間前に更新
リポジトリ

abap-cloud について

abap-cloud は、ABAP Cloud 開発者や SAP 拡張を評価するチーム向けの開発ガイドです。clean core の A~D レベル、開発モデルの選択、API の制限、未リリース API を利用するためのラッパーパターンを解説します。

主な機能

  1. 01clean core A~D レベルによる拡張分類
  2. 02ABAP Cloud と従来型 ABAP の比較
  3. 03API アクセス制限の解説
  4. 04未リリース API のラッパー指針
  5. 05リリース済み・従来型 API 分類の確認
  6. 06clean core の検査と是正の指針

活用シーン

  1. 01拡張機能の clean core レベル評価
  2. 02ABAP 開発モデルの選択
  3. 03未リリース API の代替策の調査
  4. 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 を含む)。

ワークフロー

  1. ユーザーの状況を確認します:

    • ABAP Cloud のコンセプトと制限を理解する
    • 拡張機能をクリーンコアのレベルに分類する
    • ABAP Cloud 開発とクラシック ABAP 開発のどちらを選ぶか判断する
    • ABAP Cloud で使用するため、リリースされていない API をラップする
    • リリース済みまたはクラシックな API の代替手段を特定する
  2. クリーンコアのレベルで拡張機能を分類します:

    • レベル A:リリース済み API と拡張ポイントのみ(安定性契約あり)
    • レベル B:クラシック API とクラシックフレームワーク(SAP により推奨されていますが、安定性契約はありません)
    • レベル C:SAP 内部オブジェクト(変更履歴による緩和を条件にクリーン)
    • レベル D:非推奨のオブジェクトとパターン(是正が必要)
  3. 最も低いレベルのルールを適用します:拡張機能は、使用する中で最も低いレベルに分類されます。内部オブジェクトを 1 つ呼び出すレベル A の拡張機能は、レベル Cの拡張機能になります。

  4. 実装を可能な限り高いレベル(まずはレベル A)へと導きます。

クリーンコアのレベルコンセプト

SAP は、エネルギーラベルと同様に拡張機能を 4 つのレベルに分類しています。レベル A は「SAP Business AI Platform first」戦略を反映した目標状態です。レベル D は是正が必要です。

レベル名称SAP オブジェクトの修飾子アップグレード時の安定性ATC の動作
レベル ASAP 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 DevelopmentStandard ABAP
デフォルトの選択肢はい — 新規の ABAP ベース拡張すべてリリース済み API が存在しない場合、または UI が従来型の場合のみ
主導モデルRAP従来のフレームワーク(SAP GUI、ALV、Web Dynpro、SEGW、BOPF)
適用方法構文チェック + ランタイムチェックABAP テストコックピット(ATC)によるガバナンス
ソフトウェアコンポーネント言語バージョンが ABAP for Cloud Development のコンポーネントHOME または既存の従来型コンポーネント
IDEADT(必須)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 RepositoryobjectClassifications_SAP.json — クラシック API、noAPI、internalAPI の分類
Cloudification API Viewerhttps://sap.github.io/abap-atc-cr-cv-s4hc/ で参照します
SAP Business Accelerator Hub安定性契約が適用されるリリース済みのリモート API とローカル API
ADT: Released Object Searchapi: プレフィックスを使って検索します(例:api:cl_*)。または、Project Explorer → Released Objects を選択します
ATC clean core checksSYCM_USAGE_OF_APIS、SYCM_ALLOWED_ENH_TECHNOLOGY、CI_SEARCH_CUST_MODIFICATIONS
SAP Note 3578329クラシック技術、再利用サービス、アプリケーションフレームワークの分類
SAP Note 3565942Usage of APIs および Allowed Enhancement Technologies ATC チェックを提供します
released-abap-classes skillABAP Cloud でよく使われるリリース済みクラス
XCO LibraryXCO_CP_* クラスはクラウド対応の代替手段を提供します

クラシック API の分類は、次のオブジェクトタイプに対して提供されています:ファンクションモジュール(FUNC)、クラス(CLAS)、インターフェース(INTF)、CDS ビュー(STOB)、BO インターフェース(BDEF)。データ型として使われる DDIC オブジェクトは分類もチェックもされません。チェック対象は、SAP テーブルへの SQL アクセスのみです。

リリースされていないオブジェクトからリリース済みオブジェクトへの一般的な置き換え

リリースされていないオブジェクト(レベル C/D)リリース済みの代替手段(レベル A)
AUTHORITY-CHECKCL_ABAP_AUTHORIZATION=>check_authorization()
sy-unamecl_abap_context_info=>get_user_technical_name()
sy-datum / sy-uzeitcl_abap_context_info=>get_system_date/time()
cl_gui_frontend_services利用できません — 代わりに Fiori UI を使用します
CALL TRANSACTIONRAP アクションまたは Fiori ナビゲーション
SUBMIT ... AND RETURNCL_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 UIB(RAP ベースの BC アプリを推奨)
ラッパー未リリース SAP オブジェクト(例:BAPI)をラップするラッパークラスラップ対象が従来の API の場合は B、それ以外は C
ラッパー未リリース SAP テーブルまたは CDS ビュー用のラッパー CDS ビューラップ対象が従来の API の場合は B、それ以外は C
修正手動修正を伴う SAP NoteD(コアに取り込まれたらリセット)
修正ビジネス主導の修正D(例外的なケースのみ)

キーユーザー拡張性と開発者拡張性

リリース済みの拡張ポイントを使用する場合、どちらもレベル Aです。

  • キーユーザー拡張性(ノーコード/ローコード):Fiori アプリを通じて、カスタムフィールド、カスタムロジック、カスタム CDS ビュー、カスタムビジネスオブジェクト、カスタム分析クエリを作成します。密結合の拡張では、まずここから始めます。トランザクション SEEA または拡張レジストリを使用して、登録済みの拡張ポイントを探します。
  • 開発者拡張性(ABAP Cloud):キーユーザー拡張性では制約が大きすぎる場合に使用します。RAP を使用した ADT で、ライフサイクル全体を管理します。

ベストプラクティス

  1. レベル A を目指す — 「まず SAP Business AI Platform」、スタック上では ABAP Cloud を使用します
  2. 使用する中で最も低いレベルで分類する — 内部オブジェクトが 1 つでも含まれると、拡張全体がレベル C になります
  3. レベル D を直ちに排除する — 修正、暗黙的拡張、テーブルへの書き込み、noAPI オブジェクトが対象です
  4. レベル C を最小限に抑える — 内部オブジェクトをリリース済み API または従来の API に置き換え、SAP オブジェクトの変更ログを監視します
  5. レベル B を現実的に受け入れる — 従来の API は実際にはアップグレードに対して安定しているため、不要な書き換えを強制しません
  6. 散在させず、ラップする — 1 つの ATC 免除を伴うラッパーは、複数の直接利用より優れています
  7. ATC でガバナンスを行う — グローバルチェックバリアントを使用し、優先度 1 および 2 の検出事項がある場合は移送リリースをブロックします
  8. ソフトウェアコンポーネントを分離する — 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]

参考資料

詳細な参考資料

  • クリーンコアレベルの詳細:レベルごとの比較、意思決定マトリックス、ガバナンスの設定、修正の優先順位については、references/clean-core-levels.md を参照してください。

関連スキル

  • abap-cloud-migration:既存のカスタムコードをレベルに基づいて修正する場合に使用します
  • atc-cloudification:ATC のクリーンコアチェックとレベルガバナンスを設定する場合に使用します
  • released-abap-classes:レベル A のリリース済み API の代替手段を探す場合に使用します
  • authorization-iam:ABAP Cloud での権限設定とラッパーの SU22 処理に使用します
  • badi-enhancement:BAdI と拡張技術のレベル分類に使用します

コメント