JCLとは
JCLはJob Control Language(ジョブ制御言語)の略です。JESに指示してジョブを定義・制御・実行させます。
JESはJob Entry Subsystem(ジョブエントリーシステム)の略です。JESには JES2 と JES3があります。
JCLには使用するデータ、プログラム、出力場所、およびプログラム実行結果における条件分岐を書くことが出来ます。JCLはインタープリタ型でコンパイルはされません。
JCLの構成は次のとおりです。
ステートメント(構成)
JCLには3つのステートメントと呼ばれる構成があります。それぞれの構成は、JCLがOSに対して、ジョブとして定義したり、プログラムを実行させたり、データを読み込ませるなど、役割があります。
1.JOBステートメント
ジョブの開始を示し、ジョブに関する情報(ジョブ名、アカウント情報、優先度、メッセージレベルなど)を定義します。必須のステートメントです。一つのJCL(ファイル)に複数のジョブを定義することが出来ます。次のジョブ記述が来たらそこでジョブは終了です。
ジョブは複数のステップを記述することが出来ます。ステップ単位でOSに入力されるため、1ステップに1実行プログラムが必要です。ステップの上限は255個です。
2.EXECステートメント
ジョブ内の個々のステップを定義し、実行するプログラムまたはプロシージャを指定します。EXECステートメントは、プログラム名(PGM)またはPROCLIB内のプロシージャ名(PROC)を指定することができます。必須のステートメントです。
3.DDステートメント
データセット(データファイル)を定義するために使用されます。これには、データセット名、デバイスタイプ、スペース要件、データセットの処理方法(新規作成、既存の使用、削除など)などの情報が含まれます。こちらはオプションです。

これらのステートメントを組み合わせて、ジョブ全体を定義します。以下に、単純なJCLの例を示します。
//MYJOB JOB (123),'SAMPLE JOB',CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1) //STEP01 EXEC PGM=IEFBR14 //MYDATA DD DSN=MY.DATA.SET,DISP=(NEW,KEEP,DELETE),UNIT=SYSDA,SPACE=(TRK,(5,5))
この例では、ジョブ名がMYJOBで、アカウント番号が123であるジョブを定義しています。ジョブの最初のステップ(STEP01)では、IEFBR14というプログラムが実行されます。このステップでは、MYDATAという名前のデータセットが定義され、新規作成されます。ジョブが完了したら、データセットは保持され、その後削除されます。
JCLを作成する際のポイント
- JCLステートメントは、2文字のスラッシュ(//)で始まります。
- 各ステートメントは、最大80文字までです。それ以上の長さが必要な場合は、続行文字(X)を使用して次の行に続けます。
- コメント行は、スラッシュ(//)の後にアスタリスク(*)を使用して開始します。
JCLはスケジューラーで実行されることが多いです。スケジューラーは IBMのTivoli や 株式会社ユニリタのA-AUTO があります。
JCL実行の流れ
- ジョブを決定する – (ユーザー処置)
- JCL を作成する – (ユーザー処置)
- ジョブを実行依頼する – (ユーザー処置)
- JES が JCL を解釈して MVS に渡す (システム処置)
- MVS が作業を行う (システム処置)
- システムからユーザーにシステム・メッセージをフローする。(システム処置)
- JES はジョブに関する出力と情報を収集する。 (システム処置)
- ユーザーが出力を表示し、解釈する (ユーザー処置)