JCL(Job Control Language, ジョブコントロール言語)とは、メインフレームコンピュータ(汎用機)で使用される、ジョブと呼ばれる一連の処理を制御するための言語である。
オペレーティングシステム(OS)に対して、実行するジョブの名前や使用するコンピュータ資源などを指示し、ジョブの開始、終了、およびその間の処理の流れを制御する。
JCLは1950年代にIBMによって開発され、その後、各メインフレームメーカー独自のJCLが開発された。現在では、IBM z/OS、富士通 MSP/EX、日立 VOS3などの主要なメインフレームオペレーティングシステムで使用されている。
JCLの機能
JCLの主な機能は以下のとおりである。
1. ジョブの開始、終了、およびその間の処理の流れを制御する
JCLは、ジョブの開始、終了、およびその間の処理の流れを制御する機能を備えている。具体的には、以下の機能を提供する。
- ジョブの開始:JCLは、ジョブの開始を指示する。ジョブの開始には、ジョブ名、ジョブクラス、ジョブの優先順位などを指定する。
- ジョブの終了:JCLは、ジョブの終了を指示する。ジョブの終了には、正常終了、異常終了、強制終了などを指定する。
- 処理の流れ制御:JCLは、ジョブ内の処理の流れを制御する機能を提供する。条件分岐、ループ処理、エラー処理などを記述することができる。
2. 使用するプログラムを指定する
JCLは、実行するプログラムを指定する機能を備えている。具体的には、以下の機能を提供する。
- プログラム名の指定:JCLは、実行するプログラムの名前を指定する。プログラム名は、PDS(プログラムライブラリ)に登録されている必要がある。
- プログラムパラメータの指定:JCLは、プログラムに渡すパラメータを指定する。パラメータは、プログラムの動作を制御するために使用される。
3. プログラムに必要なデータセットを指定する
JCLは、プログラムに必要なデータセットを指定する機能を備えている。具体的には、以下の機能を提供する。
- データセット名の指定:JCLは、プログラムが必要とするデータセットの名前を指定する。データセット名は、DASD(直接アクセス記憶装置)に格納されている必要がある。
- データセット属性の指定:JCLは、データセットの属性を指定する。属性には、データセットの組織、レコード長、ブロック長などがある。
4. プログラムの実行に必要なメモリ容量を指定する
JCLは、プログラムの実行に必要なメモリ容量を指定する機能を備えている。メモリ容量は、プログラムのサイズや処理内容によって異なる。
5. 出力結果を保存する場所を指定する
JCLは、出力結果を保存する場所を指定する機能を備えている。出力結果は、プリンタ、ファイル、またはディスプレイなどに保存することができる。
6. ジョブの実行条件を指定する
JCLは、ジョブの実行条件を指定する機能を備えている。具体的には、以下の機能を提供する。
- ジョブの実行時間:JCLは、ジョブの実行時間を指定する。ジョブは、指定された時間帯に実行される。
- ジョブの実行リソース:JCLは、ジョブの実行に必要なリソースを指定する。リソースには、CPU、メモリ、ストレージなどがある。
7. その他の機能
JCLは、上記以外にも様々な機能を提供している。例えば、以下の機能がある。
- メッセージ処理:JCLは、ジョブ実行中に発生するメッセージを処理する機能を提供する。
- セキュリティ:JCLは、ジョブの実行に対するセキュリティを設定する機能を提供する。
- ユーティリティ機能:JCLは、データセットの操作、プログラムの保守などのユーティリティ機能を提供する。
JCLは、これらの機能を組み合わせることで、複雑なバッチ処理を効率的に実行することができる。
JCLの構成
JCLの構成要素は以下のとおりである。
1. ジョブカード
ジョブカードは、ジョブの開始を指示するレコードである。ジョブカードには、以下の情報を記述する。
- ジョブ名:ジョブを識別するための名前
- ジョブクラス:ジョブの優先順位や使用するリソースを指定
- 会計情報:ジョブの実行にかかったコストを計上するための情報
2. EXEC ステートメント
EXEC ステートメントは、実行するプログラムを指定するレコードである。EXEC ステートメントには、以下の情報を記述する。
- プログラム名:実行するプログラムの名前
- プログラムパラメータ:プログラムに渡すパラメータ
3. DD ステートメント
DD ステートメントは、プログラムが必要とするデータセットを指定するレコードである。DD ステートメントには、以下の情報を記述する。
- データセット名:プログラムが必要とするデータセットの名前
- データセット属性:データセットの組織、レコード長、ブロック長など
4. その他のステートメント
JCLには、上記以外にも様々なステートメントがある。例えば、以下のステートメントがある。
- メッセージ処理:ジョブ実行中に発生するメッセージを処理するためのステートメント
- セキュリティ:ジョブの実行に対するセキュリティを設定するためのステートメント
- ユーティリティ機能:データセットの操作、プログラムの保守などのユーティリティ機能を提供するためのステートメント
これらのステートメントを組み合わせることで、複雑なバッチ処理を効率的に実行することができる。
JCLの例
以下は、JCLの例である。
1. 簡単なバッチ処理
//JOB ジョブ名
//EXEC PGM=プログラム名,PARM='パラメータ'
//DD DSN=データセット名,DISP=SHR
//SYSOUT DD SYSOUT=*
このJCLは、”プログラム名”というプログラムを実行するジョブを定義している。プログラムはパラメータ"パラメータ"
を受け取り、データセット"データセット名"
を読み込む。出力結果は標準出力装置に送信される。
2. 条件分岐
//JOB ジョブ名
//IF CONDITION1 THEN
// EXEC PGM=プログラム1
//ELSE
// EXEC PGM=プログラム2
//ENDIF
このJCLは、条件CONDITION1
が真であればプログラム1
を実行し、偽であればプログラム2
を実行するジョブを定義している。
3. ループ処理
//JOB ジョブ名
//DO i = 1, 10
// EXEC PGM=プログラム名,PARM=i
//ENDDO
このJCLは、プログラム名
を1から10まで10回実行するジョブを定義している。
4. メッセージ処理
//JOB ジョブ名
//EXEC PGM=プログラム名
//MSGabend=abend処理
このJCLは、プログラム名
実行中にabendが発生した場合、abend処理
を実行するジョブを定義している。
5. セキュリティ
//JOB ジョブ名
//EXEC PGM=プログラム名,REGION=4M
//RACF RACLIST=許可リスト
このJCLは、プログラム名
を実行する際に4MBのメモリ領域を使用し、許可リストに登録されたユーザーのみ実行できるように設定している。
6. ユーティリティ機能
//JOB ジョブ名
//IEBGENER DD DSN=出力データセット名,VOL=SER=ボリュームID
このJCLは、IEBGENERユーティリティを使用して、出力データセット出力データセット名
をボリュームボリュームID
に作成するジョブを定義している。
上記は、JCLのほんの一例である。JCLは、様々な機能を組み合わせることで、複雑なバッチ処理を効率的に実行することができる。
JCLとCOBOLの違い
JCLとCOBOLは、メインフレームコンピュータで使用されるプログラミング言語であるが、以下の異なる役割を持つ。
1. 使用環境
JCLは、メインフレーム上でジョブと呼ばれる一連の処理を制御するための言語である。一方、COBOLは、メインフレームだけでなく、オープン環境でも使用可能な汎用プログラミング言語である。
2. 機能
JCLは、ジョブの開始、終了、およびその間の処理の流れを制御する機能を備えている。一方、COBOLは、データ処理や計算処理など、様々な処理を行うためのプログラムを作成するための機能を備えている。
3. プログラミング方法
JCLは、自由形式で記述する。一方、COBOLは、厳密なフォーマットに従って記述する必要がある。
4. 処理速度
JCLは、COBOLよりも処理速度が速い。これは、JCLがOSとの密接な連携によって処理を行うためである。
5. 用途
JCLは、主にバッチ処理の制御に使用される。一方、COBOLは、バッチ処理だけでなく、オンライン処理にも使用される。
まとめ
JCLは、メインフレームコンピュータでバッチ処理を行うために不可欠な言語である。JCLを理解することで、メインフレームコンピュータを効率的に活用することができる。