ABAP

【初心者向け】9つのABAP構文ルール(文法)

ABAPってググっても出てこない・・・。何で構文エラーになるんだろう・・・。

意外と出てこないですよね・・・ABAPのコーディングルールって。

このページでは、検索しても出てこなかった「ABAPの基本ルール」を現役のABAPerが9つに分けて整理して解説してみました。

ABAPを勉強しよう!」と思った方に、とりあえずこれだけ覚えていれば大丈夫」という基礎理解9選をお届けします。

ABAP構文 9個のルール

ABAPを書き始めて間もないと、構文ルールが多そうでめんどくさい・・・なんて思っている方がいらっしゃるかと思います。

が、大丈夫です。これから解説する9個のルールさえ守っていれば問題なくプログラミングすることが可能です。しっかり、9個頭に入れておきましょう。

① 命令文は半角英字

OK例) SET CURSOR FIELD ‘S_VKORG’.
NG例) SET CURSOR FIELD ‘S_VKORG’.

命令文は半角英字で書きます。それ以外は構文エラーとなります。

命令文以外にも、プログラム中に全角スペースを入れていると構文エラーとなります。全角スペースは目で見てもわかりづらいので注意が必要です。

命令文にかかわらず、後述するコメント以外は半角が基本です。これは、ABAPに限らずプログラミング言語に共通している原則ですので、これを機会に改めて意識しておきましょう。

「命令” ”は未定義です。スペルをチェックしてください」

というエラーメッセージは全角スペースが入っていることが原因である場合が多いです。

※数字や記号も全て半角で記述します。コメントアウト(コード中に記載するメモ)した箇所については対象外です。

② 個々の単語は半角スペースで区切る

OK例) TYPES ty_dec2 TYPE p DECIMALS 2.
NG例) TYPESty_dec2TYPEpDECIMALS 2.

個々の単語の間には、半角スペース以上空ける。改行でも可。ただし、末尾のピリオドの前にブランクを入れる必要はありません。

場合によっては、全角スペースを空ける場合でも構文エラーにならない場合がありますが、基本半角スペースで統一するのがよいでしょう。

③ 命令は”ABAPキーワード”で始まり”ピリオド”で終わる

OK例)MESSAGE S005(ZAMCM01).
NG例)MESSAGE S005(ZAMCM01)

ピリオドを打つことで、命令の完了となります。ピリオドを打たない場合、命令が続行とみなされ、ABAPキーワード(※上記の例だと”MESSAGE”)を次の行に書いても命令とみなされません。

④ 大文字と小文字は区別されない

例1)  TYPES ty_dec2 TYPE p DECIMALS 2.
例2) 
types ty_dec2 type p decimals 2.

上記2例はどちらも同じ命令とみなされます。その上で、基本はABAPキーワードは大文字で書かれることが多い。(現場によっては全て大文字で書かれている場合もあります。)

システム的に大文字・小文字の制約がないので、下手をすれば開発者によって全てバラバラになってしまう可能性もあります。

通常は各現場単位で、構文規則(どのように変数に名称をつけるか)が決まっているので、大文字・小文字の区別はそちらに従うのが鉄則です。

⑤ 同じABAPキーワードが続く場合はチェーン命令を利用することで一文で記述することができる

例)チェーン命令を使わないで書いた場合

  DATA GW_SCREEN1 TYPE  IT_TBL001.
  DATA GW_SCREEN2 TYPE IT_TBL002.

例)上記例をチェーン命令で書いた場合
  DATA:
  GW_SCREEN1
TYPE  IT_TBL001,
  GW_SCREEN2
TYPE  IT_TBL002.

チェーン命令を記述する場合、ABAPキーワードの後に””を記述。命令が一つ終わるごとに、” , ”を記述します。

チェーン命令の最後は、ルール③の通りピリオドを記述します。

⑥ コメントアウトしたい場合は「*」を行頭に記述する

例)
*———————————————————————-*
*DATA DEFINITION
*———————————————————————-

コード文中に、説明文を載せたい場合などにコメントアウトを使います。

その際は必ず、”*”を行頭につける必要があります。「行頭」というのがポイントで、スペースを入れた後に”*”を入れても意味がありません。

“*”をつけない場合、それらもコードの一部としてみなされてしまい、結果として構文エラーとなってしまいます。

ちなみに、コメントアウトの実践的な利用目的としては「履歴」と「プログラムの説明」です。もともとあったコードを改修する場合、元のコードをコメントアウトしてコード上に残しておくといった使い方があります。あまり使いすぎると、ただの見づらいコードになるだけですが・・・

なんでこれが改修になったのか?この変数は何に使われるか?を説明するためにコメントアウトを使うことが多いです。

※ショートカットキー「Ctrl+<

⑦ 行の途中からコメントを記載したい場合” ”(ダブルコーテーション)を記述する

例)
DATA:
  GW_SCREEN
TYPE IT_TBL001, “選択画面構造
  GIT_YKS002
TYPE YKS002.

上記例の通り、行の途中からコメントアウトする場合は必ず、ダブルコーテーションを記載します。

⑧ 複数の命令が一連となる場合(「IF~ENDIF」 など)はキーワード毎にピリオドを付ける

例)
IF sy-subrc = 0.
・・・
  ELSE.
・・・
ENDIF.

複数の命令が一連(条件分岐とループ)となる場合、上記のようにキーワードごとにピリオドを付ける必要があります。

※条件分岐構文についてはこちらで詳しく解説しています。

⑨ 基本は「コピペ」で記述する!!

以上8ルールを見てきましたが、ご心配させているように絶対に何かしら忘れてしまいます。

ご安心ください。上記の構文ルールを暗記する必要はありません。やってるうちに少しずつ覚えていきます。

実際、熟練ABAPerでも一度も構文チェックに引っかからないことはほぼありません

コードを書くとき、すごい速さでキーボードを打っていく姿はかっこいいですが、どこかしらで何かを間違えるのが常。

したがって、

コードは「コピペ」!

するようにしましょう。できるだけ。

プログラミングを実際に書くときは、ロジックの整理に時間を使うべきであって、初歩的な構文チェックなんかに時間を費やすべきではありません。

そのためにも、今あるコードを適切に切り貼り・一部修正するという流れでコーディングしていくことが大切です。

上記、ABAPの構文ルールを理解しつつ、実務ではできるだけコピペで作業していくように心がけましょう。

構文ルール以外に抑えておきたい前提知識

ABAPでプログラミングをしていくうえで構文ルールを知っているのは必須ですが、それと同様にABAPのプログラムの種類についても前提として知っている必要があります。

例えば、レポートとか、バッチインプット。

この単語の意味がもし分かれなければ、合わせてこちらのページもお読みください。