
このページではINCLUDE命令「インクルードプログラムの意味と使い方」を初心者向けに解説します。
INCLUDEプログラムは、それ単体で実行することはできないプログラムのことで、基本的には他のプログラムに組み込まれることによって、はじめて実行することができるプログラムです。
このページでは、INCLUDE命令とインクルードプログラムの意味と使い方、利用するメリットを簡単に説明します。
SAPエンジニア/ABAPerを目指す方であれば知らないと恥ずかしい基本知識ばかりです。是非最後までご覧ください。
参考 ABAPの基本構文ルール
INCLUDE(インクルード)プログラムとは何か?
ABAPのINCLUDE(インクルード)プログラムとは、共有可能なコードブロック:つまり一連のソースコードをひとまとめにしたプログラムで、他のメインプログラムや他のインクルードプログラムから呼び出される形で利用されます。

イメージとしては、プログラムの一部を外出しして、他のプログラムからでも使えるようにしたようなものです。
インクルードプログラムを利用することで、コードの再利用性が向上し、複数のプログラムで同じコードをコピー&ペーストする必要がなくなります。コードのメンテナンスが容易になるため、大規模な開発現場では利用必須の仕組みの1つです。

このページでは、インクルードプログラムの作成方法と利用方法(INCLUDE命令の使い方)をご説明。
まずは、INCLUDE命令の使い方から解説します。
ABAP:INCLUDE命令
ABAPで他のプログラムをインクルードするためには INCLUDE
文を使用します。これにより、別のプログラム(一般に「インクルード」と呼ばれる)を現在のプログラムに挿入することができます。
INCLUDE <program_name>. * <program_name> はインクルードしたいプログラムの名前
構文ルールは非常に簡易的。INCLUDEの後に、インクルードプログラム名称を記述するだけでOK。

大抵の場合、インクルードするプログラムは基本的に複数あることが多いので、ソースコードの冒頭にチェーン形式で記載します。
INCLUDE: YINCLUDE_D, " データ定義 YINCLUDE_S, " 選択画面 YINCLUDE_F. " サブルーチン

インクルードプログラムの仕組みをさらに具体的に解説します。
まず、以下のような単純なインクルードプログラム ZHELLO_INCLUDE
を作成します。
WRITE: 'Hello, World!'.
参考 WRITE命令
次に、メインプログラム内でこのインクルードプログラムを使用します。
REPORT ZMAIN. INCLUDE ZHELLO_INCLUDE. START-OF-SELECTION. PERFORM hello. FORM hello. WRITE: 'This is from the main program.'. ENDFORM. * Hello, World! * This is from the main program.
参考 イベントブロック / FORM(サブルーチン)
↑の例:メインプログラム ZMAIN
は ZHELLO_INCLUDE
をインクルードしています。
このプログラムを実行すると、先にインクルードプログラムから 'Hello, World!' と出力し、次にメインプログラムから 'This is from the main program.' と出力する流れ。

このように、 INCLUDE
文を使用すると、プログラムの一部を他のプログラムと共有し、プログラムの構造を整理し、コードの再利用性を向上することができます。
インクルードプログラムの作成
インクルードプログラムの作成方法はとっても簡単。ABAP Workbench(または最新のABAP Development Tools)を使用して、新しいINCLUDEプログラムを作成することができます。
以下に基本的な手順を示します。
- ABAP Workbenchを開く: SAP GUIからトランザクションコードSE38またはSE80を入力し、ABAP Workbenchを開きます。
- 新しいプログラムの作成: 「プログラム」→「作成」を選択します。新しいウィンドウが開きます。
- プログラム名の指定: プログラム名を指定します。プログラムの種類として「Include program」を選択します。
- プログラムの記述: ソースコードエディターでプログラムを記述します。
- 保存とアクティベート: プログラムを保存し、アクティベート(有効化)します。
メインプログラム中でINCLUDE命令のあとのプログラム名称をダブルクリックすると、自動的にインクルードプログラムのロジック作成画面に遷移し、そのままインクルードプログラムを作成することも可能です。
INCLUDE: YINCLUDE_D, " データ定義 YINCLUDE_S, " 選択画面 YINCLUDE_F. " サブルーチン

↑の「YINCLUDE_S」をダブルクリックすることでプログラム作成が可能。以下のようにそのままコーディングを開始することができ、とっても便利です。
&--------------------------------------------------------------------- *& Include YINCLUDE_S *&---------------------------------------------------------------------* *-- データ選択条件 SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-S01. SELECT-OPTIONS: S_SEQNO FOR GW_SCREEN-SEQNO , "連番 S_STATUS FOR GW_SCREEN-STATUS OBLIGATORY , "処理ステータス S_AUART FOR GW_SCREEN-AUART . "販売伝票タイプ PARAMETERS : P_VKORG TYPE YKS002-VKORG OBLIGATORY . "販売組織 SELECT-OPTIONS: S_VKBUR FOR GW_SCREEN-VKBUR , "営業所 S_VDATU FOR GW_SCREEN-VDATU , "指定納期 S_BSTKD FOR GW_SCREEN-BSTKD . "得意先発注番号 SELECTION-SCREEN END OF BLOCK B1. *-- 日情報表示制御 SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-S02. PARAMETERS: P_OUT AS CHECKBOX. SELECTION-SCREEN END OF BLOCK B2.
インクルード(INCLUDE)プログラムを利用するメリット

ここからは、インクルードプログラムを利点するメリットについて補足しておきます。
実際、インクルードプログラム(INCLUDE)を使わなくてもシステム全体を完成させることは可能です。インクルードプログラムを利用せず、メインプログラムにゴリゴリ、ロジックを記載していくことで目的とするプログラム開発を行うことは可能。
ですが、インクルードプログラムには様々な利点があるため、使い方を覚えれば結構便利な代物ですし、実際の開発現場では当たり前のように利用される技術でもあります。
インクルードプログラムのメリット1:開発効率の向上
インクルードプログラムは、複数のプログラムから呼び出し可能。
例えば、プログラムAでインクルード(INCLUDE)しているプログラムでも、また別のプログラムBでもインクルード(INCLUDE)することが可能です。
"プログラムA" INCLUDE: YINCLUDE_D, " データ定義 YINCLUDE_S, " 選択画面 YINCLUDE_F. " サブルーチン
"プログラムB" INCLUDE: YINCLUDE_S, " 選択画面 YINCLUDE_FUNCTION. " サブルーチン
この仕組みをうまく利用することで、開発効率を向上させることが可能。同じような処理を別の機能でも利用したい場合に、1から開発しようとすると、設計・コーディングに加えてテスト工数などが膨らんでしまうこともしばしば。
インクルードプログラムであれば、その部分についてはそれらの開発工数が不要となります。
汎用モジュールもインクルードプログラム同様、複数のプログラムから呼び出し可能です。ただし、汎用モジュールの方が用途が限定されており、例えば選択画面だけのプログラムを汎用モジュールとしてコーディングすることはできません。
一方で、インクルードプログラムではインターフェースとしてのパラメータ受け渡しができません。

汎用モジュールとインクルードプログラムの違いは以下の記事でもご確認ください。
インクルードプログラムのメリット2:可読性の向上
データ宣言部、サブルーチン定義部、選択画面、、、等、プログラム全体をある程度の部品に分解・区分けしまとめておくことで可読性が向上します。

実際、プログラムを読んでいく作業は大変で、10000行のソースコードを目で見て追っていくことは大変な重労働です。
例えば調査対象がプログラムの「選択画面」であることが分かっている場合、ソースコードを頭からスクロールして見るよりも、INCLUDEプログラムを探して、ピンポイントで調査したほうがはるかに効率的ですよね。

バグが発生したときの原因分析も容易になりますし、同時にプログラムを修正したときの影響範囲も限定させることができます。
ABAP:INCLUDEのまとめ

初めてABAPを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。
ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?
読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!