mcpField
A
abap

abap

github.com/likweitanテスト・品質72131 回インストール2 週間前に更新
リポジトリ

abap について

abaplintによる静的解析とClean ABAPの手動レビューで、ABAPコードを検査するスキルです。目的に応じたチェック方法を選び、優先度付きの改善案を提示します。

主な機能

  1. 01abaplintによる構文・型チェック
  2. 02設定可能なlintルール
  3. 03Clean ABAPスタイルレビュー
  4. 04優先度付きの改善提案
  5. 05Clean Coreレベルの説明

活用シーン

  1. 01ABAPプロジェクトのlint
  2. 02Clean ABAPに沿ったコードレビュー
  3. 03総合的な品質チェック

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/likweitan/abap-skills --skill abap

インストール後、Claude Code で/abapを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
abaplint.md
checklist.md
CleanABAP.md
quick-reference.md

詳細

ABAP

相補的な2つの方法でABAPコードの品質をチェックし、改善します。

  • abaplint:CLIによる自動静的解析で、構文、型、設定可能なルールをチェックします
  • Clean ABAP:Clean ABAPスタイルガイドの原則に基づき、手動でレビューします

ワークフロー

  1. ユーザーの依頼に基づいてチェックの種類を判断します。

    • lint、abaplintの実行、または構文チェックを依頼された場合:abaplintを使用します
    • クリーンコードのレビュー、ベストプラクティス、またはコード品質について依頼された場合:Clean ABAPレビューを使用します
    • 不明な場合、または全体的なチェックを依頼された場合:両方を使用します
  2. abaplintのチェックの場合:

    • abaplintがインストールされていることを確認します(npx @abaplint/cli --versionまたはabaplint --version)
    • インストールされていない場合は、次のコマンドでインストールします:npm install @abaplint/cli -g
    • プロジェクトのルートにabaplint.jsonがあるか確認します
    • 設定ファイルがない場合は、作成を支援します(スターター設定についてはreferences/abaplint.mdを参照してください)
    • プロジェクトのルートディレクトリでabaplintを実行します
    • 検出結果を解析し、ユーザーに提示します
  3. Clean ABAPレビューの場合:

    • ユーザーが提示したABAPコードを読みます
    • Clean ABAPのカテゴリーに照らして確認します:名前、言語、定数、変数、テーブル、文字列、ブール値、条件、IF文、クラス、メソッド、エラー処理、コメント、フォーマット、テスト
    • 該当する行を具体的に示して違反を特定します
    • コード例を用いて、実行可能な改善案を提示します
    • 影響度(重大、大、小)に基づいて問題に優先順位を付けます

abaplintのクイックスタート

プロジェクトのルートで実行します。

abaplint

デフォルト設定を生成します(すべてのルール)。

abaplint -d > abaplint.json

On-Premise、Steampunk/BTP、HANA互換性向けのスターター設定を含む、abaplintの詳細な設定については、references/abaplint.mdを参照してください。

Clean ABAPのチェックカテゴリー

名前
  • 内容が分かる名前を使用し、snakecaseにし、ハンガリアン記法(iv、lv*、lt*)は使用しません
  • クラスには名詞、メソッドには動詞を使用し、不要な語句は避けます
言語
  • 手続き型よりオブジェクト指向を、命令型より関数型を優先します
  • NEW、インライン宣言、テーブル式などのモダンな構文を使用します
定数
  • マジックナンバーを使用せず、ENUMまたはグループ化した定数を使用します
変数
  • インライン宣言を優先し、連鎖したDATA宣言は使用しません
テーブル
  • DEFAULT KEYは使用せず、INSERT INTO TABLE、LINE_EXISTS、WHERE句を使用します
文字列
  • リテラルにはバッククォート、文字列テンプレートにはパイプを使用します
ブール値
  • ABAP_BOOL、ABAP_TRUE/ABAP_FALSE、XSDBOOLを使用します
条件
  • 肯定形の条件を使用し、NOT ISよりIS NOTを優先し、述語形式のメソッド呼び出しを使用します
IF文
  • 空のIF分岐は作成せず、ELSE IFよりCASEを優先し、ネストの深さは3以下にします
メソッド
  • 静的メソッドよりインスタンスメソッドを、EXPORTINGよりRETURNINGを優先し、パラメーターは3つ以下、行数は20行以下にします
エラー処理
  • 戻りコードより例外を優先し、クラスベースの例外を使用し、CX_ROOTは捕捉しません
コメント
  • 何をするかではなく、なぜそうするかを説明し、*ではなく"を使用し、コメントアウトしたコードは残しません
フォーマット
  • 1行につき1つのステートメントとし、120文字以下に収め、一貫したインデントを使用します
テスト
  • Given-when-thenの構成にし、焦点を絞ったアサーションと依存性注入を使用します

出力形式

分析結果は次のように構成します。

# ABAP Check Results

## abaplint Findings
[abaplint output, grouped by severity]

## Clean ABAP Review

### Summary
- Total Issues: [count]
- Critical: [count] | Major: [count] | Minor: [count]

### Critical Issues
#### [Category] - [Issue Title]
**Location:** Line [X] / Method [name]
**Problem:** [description]
**Recommendation:** [how to fix]

### Major Issues
[Same format]

### Minor Issues
[Same format]

### Positive Observations
- [Things done well]

Clean Coreレベルのコンテキスト

ABAP Cloudを対象とする、またはABAP Cloudの基準で評価するコードの場合、コード品質に関する検出結果をSAPのClean Coreレベルに対応付けられます。

  • レベルA — リリース済みAPIのみを使用し、Clean ABAPとabaplintのチェックをクリア
  • レベルB — クラシックAPIを使用し、安定していますが、クラシックABAPの言語バージョンが必要
  • レベルC — SAPの内部オブジェクトを使用しており、後継のオブジェクトへの移行が必要
  • レベルD — SAPテーブルへの直接書き込み、EXEC SQL、内部利用向けにリリースされたAPIを使用しており、排除が必要

Clean Coreに関する検出結果は、スタイルに関する検出結果とは分けて扱います。書式が整ったSAPテーブルへのSELECTでも、レベルCです。レベルの定義についてはabap-cloudスキルを、自動チェックについてはatc-cloudificationを参照してください。

参考資料

  • abaplint の設定とセットアップ:インストール方法、設定オプション、スターター設定については、references/abaplint.md をお読みください
  • Clean ABAP ガイド完全版:根拠と例を含む完全なスタイルガイドについては、references/CleanABAP.md をお読みください
  • クイックパターン:良いコードと悪いコードの例をまとめたものについては、references/quick-reference.md をお読みください
  • レビュー用チェックリスト:体系的なレビュー用チェックリストについては、references/checklist.md をお読みください

関連スキル

  • abap-cloud:クリーンコアのレベルと ABAP Cloud への準拠に使用します
  • abap-unit-testing:Clean ABAP の原則に沿ったユニットテストの作成に使用します
  • abap-sql-amdp:コード品質の改善時に ABAP SQL をモダナイズするために使用します

コメント