ジョブ制御言語(JCL)は、IBMメインフレーム・オペレーティングシステムで使用されるスクリプト言語の名称です。主にバッチジョブの定義、実行順序の管理、外部ファイルやデバイスの割り当て、サブシステムの起動方法などをシステムに指示するために用いられます。

目的と役割

JCLの主な目的は次のとおりです。

  • どのプログラムを実行するかを指定する(ジョブやステップの定義)。
  • 入出力に使用するファイルやデバイス(データセットやディスク、テープ、プリンタなど)を割り当てる。
  • 実行条件やエラー時の処理(ステップのスキップや再試行、終了条件の設定)を指定する。
  • ジョブの属性(実行クラス、優先度、リソース制限など)の指定。

基本構文と主要なステートメント

JCLは独自の書式(カード形式)を持ち、記述に一定のルールがあります。詳しい構文はシステムや世代によって違いがありますが、代表的なステートメントには次のものがあります。

  • JOBステートメント:ジョブの開始を宣言し、ジョブ名や実行属性(CLASS、MSGCLASS、TIME、REGIONなど)を指定する。
  • EXECステートメント:実行するプログラムまたはユーティリティを指定する。1ジョブ内に複数のステップ(EXEC)が含まれることが多い。
  • DD(Data Definition)ステートメント:プログラムが使用するデータセットやデバイスを定義する。主なパラメータにはDSN=(データセット名)、DISP=(状態/処理方法)、UNIT=(デバイス種別)、SPACE=、VOL=などがある。

例(z/OS系の簡単な一例):

//MYJOB   JOB  (ACCOUNT),'NAME',CLASS=A,MSGCLASS=X,REGION=0M //STEP01  EXEC PGM=MYPROG //INFILE  DD   DSN=MY.DATA.INPUT,DISP=SHR //OUTFILE DD   DSN=MY.DATA.OUT,DISP=(NEW,CATLG,DELETE),SPACE=(CYL,(1,1)) //SYSPRINT DD  SYSOUT=*

系譜と種類

IBM Job Controlには大きく分けて2つの系譜があります:

  • DOS/360から始まるオペレーティングシステムの流れ(現代では z/VSE がその代表的なメンバー)。この系列のJCLはz/VSE固有の仕様や命令を持ちます。
  • OS/360から始まり z/OS へ続く流れ。z/OSではジョブ管理サブシステムJES(Job Entry Subsystem)を用い、さらにJESの拡張機能である JECL(Job Entry Control Language) が存在します。JECLはジョブの入力管理やジョブエントリ処理に関する追加指示を扱います。

両者は基本的な概念(ジョブ/ステップ/DDなど)やいくつかの構文ルールを共有しますが、パラメータ名や細かな振る舞い、JESとの連携方法は大きく異なります。

運用上のポイント

  • 条件分岐とリカバリ:z/OSではIF/THEN/ELSE/ENDIFによる条件実行や、CONDパラメータによるステップ実行制御、RETURNコード(リターンコード/ステータス)に基づく分岐が用いられます。
  • メッセージとログ:MSGCLASSやSYSOUT指定で出力先やログの扱いを制御します。ジョブの監視や障害調査ではJESの出力が重要です。
  • データセット形式:PS(パイシックレコード)、PDS(パーティション付きデータセット)、VSAMなどの違いに応じたDD指定が必要です。
  • 近年の環境:既存のJCL資産は多くの企業で稼働を続けており、モダンな運用ではジョブスケジューラやAPI連携、RACFなどのセキュリティ機能と組み合わせて使われます。

まとめ

JCLはIBMメインフレームでバッチ処理を記述・管理するための重要な言語であり、システム世代ごとに異なる流派(z/VSE系とz/OS系)が存在します。基本概念は共有されるものの、具体的な構文や機能、運用方法は系統ごとに異なるため、対象となるプラットフォームに応じた学習が必要です。