ABAPについて
ABAPはSAPでは必須のプログラミング言語です。

SAPの開発に必要不可欠なプログラミング言語としてABAPがあります。SAPの世界以外では利用されないプログラム言語であるため、詳しく知らない人も多いでしょう。SAPのバージョンアップに伴い利用機会の減少が危惧されていますが、まだまだ現役のプログラミング言語です。今回はSAPで必須であるABAPとはどのようなプログラミング言語であるのか、概要から基本ルールまで順に解説します。
INDEX LINK
ABAPはSAP向けプログラミング言語
ABAPはSAP向けに開発されているプログラミング言語です。それ以外の用途はないため、どのようなプログラミング言語であるのかまずは理解を深めておきましょう。
ABAPの概要
ABAPはSAPの開発に利用するプログラミング言語です。SAP自体がABAPだけで開発されているわけではないものの、アドオンプログラムなどを作成する際には必須のプログラミング言語です。
SAPで採用されているため「主要なプログラミング言語なのか」と問われるケースがありますが、SAPだけで利用されているプログラミング言語です。他のプログラミング言語と同じような文法を採用しつつ、SAPで処理しやすいようにカスタマイズされているのです。
ABAPで実装できること
ABAPで実装できる内容は大きく以下の3つに分類できます。
- レポート
- バッチインプット
- Dynpro
レポート
ABAPで実装するものとして、特に利用頻度が高いものがレポートプログラムです。データの出力を目的としたプログラムで、データベースに保管されているデータを取得して所定の形式で出力します。レポートプログラムを利用する例としては以下が挙げられます。
- 定期的な報告書
- 会計データの出力
- 各種伝票
- 財務諸表
これからもイメージしてもらえるとおり、決まった形式で出力するものがレポートプログラムです。なお、レポートプログラムは接続する際の操作によって以下のとおり分類されます。
- レポート出力するだけのもの
- ユーザーの操作によって出力内容が変化するもの
- レポートを出力してから更新ができるもの
レポートにどのような機能を求めるかによって、ABAPの実装方法が変化すると理解しておきましょう。
バッチインプット
ABAPで実装するプログラムの中でも、大量のデータをまとめて処理するものです。レポートプログラムも多くのデータを処理する場合がありますが、バッチインプットはさらに多くのデータを処理すると考えておきましょう。ただ、厳密な違いが設けられているわけではありません。
バッチインプットの例としては、在庫情報の出力や出荷伝票の作成などが挙げられます。規模の大きな会社のSAPになると、出力しなくてはならない在庫の情報が多くなってしまうでしょう。また、取り扱う製品が多ければ、出荷伝票の作成なども情報が多くなってしまいます。対応すべき内容としてはレポートプログラムと似ていますが、処理するデータ量に違いがあるのです。
ABAPでバッチインプットとして実装しておけば、大量のデータをまとめて処理可能です。自動的に次々と処理ができるようになるため、データの処理時間短縮も期待できます。また、事前に設定しておけば自動的に処理が動くため、SAPの利用者がいない時間帯に処理させることも可能です。
Dynpro
ABAPで対話型のプログラムを開発するにはDynproと呼ばれるものを作成します。プログラムが自動的に処理するだけではなく、ユーザーが選択したり入力したりするものです。SAPで開発するプログラムでDynproに該当するものも多いでしょう。Dynproに該当するプログラムの例は様々あり、例えば検索画面が挙げられます。検索画面では何かしら検索条件を入力すると、それに合致するものが結果として表示されるはずです。このようなユーザーの入力によって出力結果が変化するものをDynproと呼びます。
検索のようにデータを表示させるものだけではなく、入力した内容をデータベースに保存するものもあります。ABAPはデータベースの読み書きやファイルの読み書きができるため、ユーザーと様々な形式で対話ができるプログラムを作成可能です。
プログラムタイプ
プログラムタイプとはSAPでABAPのプログラムを作成する際に指定が必要な事項です。どのプログラムタイプを選択するかによって、ABAPがどのように実行されるかが変化します。それぞれの違いを理解して、適切なプログラムタイプを選択しなければABAPが思うように動いてくれません。
実行可能プログラム
実行可能プログラムはユーザーが直接実行できるプログラムを指します。上記でご説明した例では「レポート」「バッチインプット」はユーザーが「TC:SE38」や「TC:SE80」でプログラム名を指定して実行できるため、実行可能プログラムに該当します。上記では「事前に登録しておいて自動的に動くもの」との印象を与えてしまったかもしれません。しかし、レポートもバッチインプットもユーザーが必要とするタイミングで手動での実行が可能です。
INCLUDEプログラム
ユーザーが直接実行できるプログラムではなく、別のABAPプログラムから呼び出して実行できるものです。「include」は多くのプログラミング言語で「呼び出し」「読み込み」という意味合いがあるため、ABAP以外のプログラミング言語で開発した経験があればイメージしやすいでしょう。実行可能プログラムとして作成すると、ユーザーが任意のタイミングで実行できてしまいます。ただ、ABAPプログラムの中には単体で動かないものがあり、ユーザーの利用を制限したい場面があるはずです。そのような時は実行可能プログラムではなく、INCLUDEプログラムを利用します。
モジュールプールプログラム
ABAPで作成するプログラムの中でもDynproを作成する場合はモジュールプログラムを選択します。Dynpro以外のABAPプログラムを作成する場合は、モジュールプログラムを選択することはありません。
モジュールプログラムとしてABAPプログラムを登録しておくと、割り当てたトランザクションコードで実行できるようになります。レポートは上記でご説明したとおり「TC:SE38」や「TC:SE80」で実行する必要がありますが、モジュールプログラムは勝手が違うのです。
ABAPで覚えておきたいルール
これからABAPを利用してプログラムを開発したいならば、基本的なルールを覚えておく必要があります。ABAPはSAP向けに開発されているプログラミング言語であるため、部分的にSAPに最適化されている状況です。ただ、他のプログラミング言語を経験していれば理解しやすいものであると考えられます。
基本ルール
ABAPでプログラムを作成する際は基本ルールに従わなければなりません。いわゆる「文法」と呼ばれるもので、具体的には以下を意識する必要があります。
プログラムは半角英数字で作成
ABAPでプログラムを作成する際は半角英数字を利用します。ABAPに限らず大半のプログラミング言語は半角英数字を利用するため、エンジニアの皆さんであれば特に違和感はないでしょう。なお、半角英数字を利用してABAPプログラムを作成していれば、大文字と小文字は区別されません。混在していても差支えがありませんが、ABAPは慣例的に大文字で記述することが多くなっています。
ただ、プログラムの中にコメントを挿入した場合はこれに限りません。部分的には日本語などの全角文字を利用可能です。しかし、特殊文字などコメント部分にも利用できない文字があるため注意しなければなりません。
区切り文字は半角スペース
ABAPの中で単語を作りたい場合は半角スペースを利用します。例えば命令と引数を設定するならば以下のように指定します。
MESSAGE M001(Hello).
誤って全角スペースで区切ってしまうと、ABAPプログラムが正しくコンパイルされなくなってしまいます。ただ、半角スペースで区切っていればスペースの数は1つではなくとも複数挿入可能です。
文末にピリオド
ABAPプログラムでは文末をピリオドで示さなければなりません。例えば以下のとおりです。
MESSAGE M001(Hello).
プログラミング言語によっては文末をセミコロンで示します。しかし、ABAPでは以下のような記述はできません。
MESSAGE M001(Hello);
プログラミング言語によって文末の示し方が異なるため、正しく理解しておきましょう。
コメントは「*」と「”」
プログラム中にコメントを記述したい場合は「*」と「”」を利用します。コメントを記述したい場面によってどちらを利用するか使い分けましょう。
「*」は文頭から文末までをコメントアウトしたい場合に利用します。例えば以下のとおりです。
*–ここはこコメント部分–
それに対して、「”」は文の途中から文末までをコメントアウトしたい場合に利用します。
MESSAGE M001(Hello). “メッセージの出力
文の頭からコメントアウトしたいか途中からコメントアウトしたいかによって記述が異なるのです。
データ構造
ABAPプログラムを作成する際はデータ構造を決定しなければなりません。データ構造とは「データの種類」と「データの長さ」から構成される情報です。
TYPES:データ型の定義
ABAPでは最初に「TYPES」を利用してデータ型を定義します。基本的なルールと例は以下のとおりです。
ルール:TYPES データ型名称 TYPE データ型
例:TYPES YEAR TYPE I.
基本的にはこの形式であり「データ型」にはさまざまな定義が利用できます。数値や文字などの定義はもちろん、テーブルデータや構造データの定義も可能です。ここで定義した「データ型名称」を利用して、以下でご説明する変数や構造を定義します。
DATA:変数や構造の定義
ABAPで変数を定義したい場合は「DATA」を利用します。変数の定義方法はプログラミング言語によって異なる部分であるため、ABAPの変数定義について理解するようにしておきましょう。変数の定義は変数名称とデータ型を利用して以下のとおりです。
ルール:DATA 変数名 TYPE データ型
例:DATA YEAR TYPE I.
ABAPプログラムをこのように記述することによって、「YEAR」という数数字4桁の変数を定義できます。変数名とそれに適用するとデータ型を定義するためであるため、プログラミングの経験があれば難しいものではないでしょう。
なお、変数名については英数字であれば特段の縛りはありません。基本的にはプログラムの可読性を高めたりプロジェクトで決められたルールを守ったりしながら決定します。
データフロー
ABAPプログラムの中では様々なデータフローが存在します。プログラムは一直線に動くものではなく、状況に応じて分岐したり繰り返したりしなければなりません。
IF・CASE:条件分岐
多くのプログラムでは条件分岐が利用されます。ABAPも条件分岐が記述できるようになっていて、大きく「IF」と「CASE」に分類できます。まず、IFは条件をひとつずつ評価して、最初にTRUEになった処理のみが実行されます。記述ルールは以下のとおりです
IF (条件式).
処理内容(TRUE)
ELSE.
処理内容(FALSE).
ENDIF.
この場合は条件式がTRUEであるかどうかに応じて、どちらかの処理だけが実施されます。続いて、CASEは条件に合致した処理だけが実行されます。記述ルールは以下のとおりです。
CASE (変数).
WHEN (変数1)
処理内容
WHEN(変数2)
処理内容
WHEN OTHERS.
処理内容
ENDCASE.
与えられた変数に合致する「WHEN」の中身だけが処理されます。それ以外に書かれている内容については実施されません。また、与えられた変数に合致する処理がない場合は「OTHERS」として処理されます。
DO・WHILE:繰り返し
同じ処理を何度も記述するのは冗長であるため、ABAPにも繰り返しが用意されています。ループには「DO」と「WHILE」があります。まず、「DO」は決められた回数だけ処理を実施します。例えば以下のとおり記述します。
DO ( 3 TIMES).
処理内容
ENDDO.
このように記述することで処理内容が3回繰り返されます。数字を変更すれば繰り返し回数が変更となり、数字を記述しない場合は無限ループとなります。無限ループの場合は、ループを抜けるための条件を処理内容に含めなければなりません。続いて、「WHILE」は条件を満たしている間だけ繰り返されます。例えば以下のとおり記述します。
WHILE (条件)
処理内容
ENDWHILE.
条件を駆使することで繰り返し回数を制御する方法です。DOもWHILEも一般的なプログラミング言語で利用される繰り返しの方法です。そのため、文法の違いはありますが、アルゴリズムとしては理解しやすいでしょう。
文字列処理
ABAPで文字列を操作するためのルールが用意されています。画面やレポートなどに文字を表示する場面は多々あるため、文字列処理をご説明します。
WRITE:文字列の出力
ABAPのプログラム中で文字列を出力したい場合は「WRITE」を利用します。例えば以下のとおりです。
WRITE /’HELLO’.
上記の記述によって画面やレポートに「HELLO」を出力できます。また、文字列ではなく、文字を含んだ変数を出力することも可能です。例えば以下のとおりです。
WRITE HELLO.
事前にDATAでHELLOという変数を定義しておけば、それを引数として文字列を出力することができます。文字列の出力についても多くのプログラミング言語と同じ考え方であるため、特に違和感を感じないはずです。ただ、WRITEでは文字列の出力位置を細かく指定する必要があります。指定を誤ると思わぬ部分に出力されてしまうため、利用時には意識しておきましょう。
CONCATENATE:文字列の結合
複数の文字列を結合したい場合は「CONCATENATE」を利用します。例えば以下のとおりです。
CONCATENATE HE,LL,O INTO (VARIABLE).
このような記述をするとVARIABLEには文字列が結合されて「HELLO」が代入されます。プログラミング言語によっては、「+」や「&」を利用して文字列を結合しますが、ABAPではこのようにプログラミングする必要があります。
なお、すべての文字列を自由に結合できるわけではありません。結合できる文字列には状況に応じた制限があるため、その点は注意が必要です。
数値計算
レポートなどを作成するためには数値計算が必須です。ABAPでは四則演算と比較演算が可能です。
四則演算
四則演算は一般的なプログラミング言語と同様に記号を利用します。具体的には以下のとおりです。
+:加算
-:減算
*:乗算
/:除算
これらの記号を利用することで、例えば以下のように計算ができます。
TOTAL = 10 * 3.
この場合はTOTALに計算結果である30が代入されます。さらに細かい四則演算も可能であり、TOTAL変数をレポートの出力などに利用することも可能です。
比較演算
単純な数値計算だけではなく、比較演算にも対応しています。比較演算とは複数の文字列などを比較して、内容が一致しているかどうかなどを評価する処理です。例えば以下のとおりです。
WHILE( TOTAL < 3).
この例ではTOTALの値が3未満であればTRUE、3以上になるとFALSEと評価されます。これは不等号を利用していますが、等号や等号の否定などの評価方法も可能です。
ファイル操作
ファイル操作が必要となる場合は、ファイルオープンから読み書き、クローズまでそれぞれを明示する必要があります。
OPEN DATASET:ファイルオープン
ファイルの内容を取り込む際は、まずファイルオープンをしなければなりません。オープンの記述方法は以下のとおりです。
OPEN DATASET ファイルパス FOR アクセスタイプ IN タイプ.
ファイルパスを指定するだけではなく、アクセスタイプを指定する必要があります。読み取り専用や上書きなどを指定します。また、ABAPではテキストかバイナリかの指定もしなければなりません。
READ DATASET:ファイル読み込み
ファイルオープンすれば自動的にファイルが読み込まれるのではなく、READ DATASETでファイル読み込みが必要です。例えば以下のようにファイルを読み込みます。
READ DATASET ファイル名 INTO 変数.
ファイルオープンしてあるファイル名を指定することで、変数にファイルの内容を読み込みます。ファイルの内容は直接処理することができないため、変数に格納してから処理するのです。
TRANSFER:ファイル書き出し
事前にファイルオープンしてあるならば、TRANSFERを利用してファイルへの書き込みが可能です。ファイルへ書き込みする際は以下のように記述します。
TRANSFER 書き込み内容 TO ファイル名.
書き込み内容は基本的に文字列を指定します。ただ、TRANSFERは1行ずつしか書き出しができないため、実際には繰り返し処理などを組み合わせてデータを出力します。
イベント
ABAPには処理の順番を制御するためにイベントとの概念があります。それぞれのイベントが起こることによって、該当するプログラムが実行される仕組みです。
イベントブロック
実行されるABAPプログラムの区切りを「イベントブロック」と呼びます。イベントブロックはABAPで事前に定められていて「画面がロードされた時」「ボタンがクリックされた時」などです。これら定められたイベントブロックを理解しておき、必要なタイミングで処理が実行されるようにプログラミングしなければなりません。イベントブロックにはいくつもの種類があり、代表的なものは以下のとおりです。
- LOAD-OF-PROGRAM
- INITIALIZATION
- AT-SELECTION-SCREEN
- START-OF-SELECTION
- GET
- TOP-OF-PAGE
- END-OF-PAGE
- END-OF-SELECTION
- AT LINE-SELECTION
イベントブロックには処理順序があるため、ABAPプログラムでは、順序を理解しておくことが特に重要となります。
内部テーブルへのアクセス
SAPには内部テーブルと呼ばれる呼ばれる機能があり、ABAPでプログラミングする際にはこれが多用されます。内部テーブルは簡単に説明すると、一時的かつ仮想的に作成するテーブルです。本来、テーブルはデータベースに存在するものですが、SAPでは処理中の情報などを内部テーブルに格納できます。
内部テーブルの定義
新しく内部テーブルを定義する際には、以下のとおり記述します
DATA 構造名称 TYPETABEL OF テーブル名称.
上記でご説明したDATAを利用して内部テーブルを定義しますが、異なるのは「TYPETABEL OF」を指定することです。こちらを利用して宣言することで、「構造」が内部テーブルに変化します。「構造」は1行しかないものですが、内部テーブルに変更すると複数行の情報を管理できるのです。
READ TABLE:内部テーブルの読み込み
上記で作成した内部テーブルを読み込みする際はREAD TABLEを利用します。読み込みとデータの格納は以下のとおり記述します。
READ TABLE 内部テーブル名称 INTO 構造名称
内部テーブルと一致した構造の変数などを用意しておくことで、その変数に必要な情報を代入することが可能です。内部テーブルは情報を出力しなければ、その内容を処理に利用できません。まずは読み出してから、必要な処理へとつなげていきます。
データベース操作
ABAPではSAPの起動に利用されている標準テーブル・アドオンテーブルなどのデータベースから情報を取得できるようになっています。ただ、こちらは一般的なSQLに近いものであり、ほぼABAPにSQLを記述するといっても過言ではありません。例えば、項目の取得は以下のとおり記述します。
SELECT *
FROM テーブル名称
INTO 構造
ENDSELECT.
ABAPのルールに沿って記述する部分はありますが、ほとんど一般的なSQLと同様です。ABAPの説明ではなくSQLの説明に近いものとなるため、ここでは割愛します。
ABAPは2025年までのプログラミング言語
ABAPは需要の高いプログラミング言語ではありますが、2025年までのプログラミング言語とも言われています。この点も最後に抑えておきましょう。
S/4 HANAへの切り替えで需要が低下
ご説明してきたとおり、ABAPはSAPで開発するために必須のプログラミング言語です。ABAPがなければ開発ができないため、ABAPを扱えるエンジニアの需要は非常に高くなっています。ただ、SAPは現在のバージョンから新バージョンであるS/4 HANAへの移行が進んでいます。S/4 HANAではABAPがメインのプログラミング言語として採用されていないため、ある時を境に需要は減少してしまうと考えておきましょう。とはいえ、現時点ではABAPを扱えるエンジニアが求められているのは事実です。移行に向けた準備でもABAPのエンジニアは求められています。完全切り替えは2025年から2027年に延期されるともいわれているため、まだまだABAPのスキルがあれば活躍できる状況です。
まとめ
SAPでの開発に必要となるプログラミング言語のABAPについてご説明しました。他の用途で利用するプログラミング言語ではないため、 SAP での開発に携わったことがない人は詳しく知らないプログラミング言語でしょう。利用方法や基本的なルールについてはご説明したとおりであるため、最低限これらについては理解するようにしてください。
SAP開発で必須のプログラミング言語であるため需要は高いですが、SAPのバージョンが新しくなるに伴い、必須のプログラミング言語ではなくなることがアナウンスされています。2025年か2027年には大きな変化を迎えるため、エンジニアとしてABAPを扱うのであればその点は気をつけるようにしておきましょう。
ただ、まだまだ現役のプログラミング言語であり、ABAPの開発に関連する案件がなくなってしまったわけではありません。むしろ、SAPのバージョンアップに向けてABAPプログラムの改修が必要となり、ABAPが扱えるエンジニアが求められています。弊社でもABAPプログラマーを求めるクライアントを多く抱えているため、スキルを活かしたい方はぜひお問い合わせください。