JCLで何ができる?JCLのコマンド8選とOSとの関係性を解説!
JCLって何?
JCLは、汎用機でプログラムを動作させるために記述するスクリプト言語です。Job Control Languageの略語であり、その名称の通りジョブを制御する言語です。
汎用機ではCOBOLやFORTRANなどの言語を使ってプログラミングしますが、これらの言語は実行前にコンパイルという作業が必要です。JCLは別途コンパイルを行わなくても、すぐに実行できる言語です。
スクリプト言語とは?
JCLやBASICなどのスクリプト言語はコンパイルせずに実行でき、プログラミングも比較的容易です。JCLも含む「スクリプト言語」と呼ばれるプログラミング言語は、「インタープリタ型言語」に分類されます。
「インタープリタ言語」に対し、コンパイルを必要とするプログラミング言語は「コンパイラ型言語」に分類されます。
インタープリタ型言語
インタープリタ型言語に分類されるプログラミング言語は、「コンパイル」というプログラミング言語からコンピュータが理解できるコードへの変換作業が不要で、コード変換しながら実行される言語です。
インタープリタ型言語を実行すると、1命令ごと機械語へコード変換し、実行していくというイメージです。1命令ずつ「変換」「実行」が繰り返されるので、実行すべき命令が多いプログラムには向いていません。
コンパイラ型言語
コンパイラ型言語に分類されるプログラミング言語は、実行前にあらかじめ「コンパイル」という作業が必要になる言語です。
「コンパイル」は、プログラミング言語からコンピュータが理解できるコードへの翻訳作業で、翻訳結果として「実行モジュール」と呼ばれるオブジェクトが生成されます。実行時に変換作業がいらないので、インタープリタ型に比べて早く処理できます。
JCL言語は何ができる?
JCLは汎用機向けのスクリプト言語ですが、実際にどのような処理を担っているのでしょう。汎用機を使って行われる業務処理の核となる処理は、COBOLやFORTRANなどのコンパイラ型言語を使って実装されています。
ここでは、JCLできることと実現できないことをそれぞれ紹介します。
JCL言語でできること:パッチ処理
バッチ処理とは、画面からプログラム処理を指示する「オンライン処理」と異なり、決められタイミングで、決められた手順でプログラムを実行する処理のことです。時間がかかる処理は、誰もコンピュータを使っていない夜中に「バッチ処理」として処理させます。
JCLでバッチ処理の流れる順番を記述しておけば、たとえ夜中で人間の手を介すことができなくても、順番通りに処理を流していけます。
JCL言語でできないこと:ジョブストリームの自動的な制御
JCLでバッチ処理を制御できると紹介しましたが、「夜中に」実行するとか「サーバー起動時に」実行するといった、時間やタイミングを指定して自動実行させることはJCLの制御範囲から外れます。
実行順序をJCLで定義し、実行のタイミングは別途スケジューラーを設定して制御することになります。
JCLのコマンド8選
JCLはバッチ処理のように処理の流れをひと固まりとして定義するときに使われることから、あまり難しい記述もなく、使用されるコマンドも「定番」といえる多用されるものがあります。
ここでは、JCLの中でよく使われる8つのコマンドを、コマンドの意味と記述形式について紹介していきます。
JCLのコマンド1:EXEC
EXECは、プログラムを実行させるコマンドです。
形式)
//ステップ名 EXEC PGM=実行プログラム,PARM=…
EXECステートメントは、ステップ名を記述しステップの名前を割り当てます。EXECステートメントにより、ジョブストリームが開始されます。続いて、実行プログラム名を含む、必要なパラメーターを指定します。
EXECのパラメーターでは、仮想記憶の割当量やCPU使用の最大時間なども指定できます。
JCLのコマンド2:DD
DDは、データの集合体を識別するために定義するコマンドです。
形式)
//データ定義名 DD [DSN=xxx,DISP=xxx,UNIT=xxx,VOL=xxx,SPACE=xxx,DSORG=xxx,DCB=xxx,…]
DDステートメントでデータ定義名を設定します。DDステートメントの各種パラメーターでは、データ実行前の処置や装置情報などの情報を指定します。
JCLのコマンド3:JOB
JOBはJOB名を割り当て、ジョブの開始を宣言するコマンドです。
形式)
//JOB名 JOB CLASS=xx,MSGCLASS=xx,REGION=xx,…
JOBステートメントからジョブが開始され、以降が実際にジョブで実行する処理となります。JOBステートメントの各種パラメーターを指定して、仮想領域のサイズや実行タイプ、実行結果の出力先などをコントロールできます。
JCLのコマンド4:SET
SETはジョブの中で使用する初期値を設定するコマンドです。すでに値が設定されているパラメーター変数の値を変更する際にも使えます。
形式)
//[name] SET パラメーター名=xxx
SETステートメントで、EXECのパラメーター値をあらかじめ設定しておき、JCLの中でEXECに続き初期値を設定した変数を指定して実行できます。初期値を、JCL文の冒頭でまとめて記述しておくことで、メンテナンス性が向上します。
JCLのコマンド5:COMMENT
JCL文の中でコード記述やパラメーターに注釈を残したいときに使えるのが、コメントのステートメントです。注釈を入れるコメントステートメントは「*」を使います。
形式)
//* comment
JCL文の中で「//*」から始まる行は、1行すべて注釈行として扱われ、実行時の翻訳対象から外されます。実行コードからは外されますが、出力リストには注釈として出力されます。
JCLのコマンド6:INCLUDE
INCLUDEはジョブに組み込むJCLステートメントを指定するコマンドです。
形式)
//[name] INCLUDE MEMBER=xxxx
INCLUDEステートメントで指定できるのは、PDSと呼ばれる区分データ・セットとPDSEと呼ばれる拡張区分データ・セット のいずれかのメンバーです。
JCLのコマンド7:XMIT
XMITはノード間でストリーム・レコードを伝送するコマンドです。
形式)
//[name] XMIT parameter[,parameter]…
XMITステートメントでは、コマンドの後に複数のパラメーターとコメントを記述できます。パラメーターでは、伝送を停止するまでの後続のレコードすべての宛先を指定できます。その他、伝送を停止する区切り文字と制御ステートメント用の置換文字を指定できます。
JCLのコマンド8:ENDCNTL
ENDCNTLは、プログラム制御の終わりを宣言するコマンドです。ENDCTLは、CNTLステートメントで始まるプログラム制御ステートメントに続けて記述します。
形式)
//[name] ENDCNTL [注釈]
ENDCNTLステートメントは、1つのプログラムだけでなく、複数プログラムを制御することもできます。ジョブ・ステップ内やカタログ式プロシージャーなどの中に記述できるステートメントです。
OSとJCLとの関係性5選
JCLは、メインフレームとも呼ばれる汎用機で使われるインタープリタ型言語です。汎用機のOSはメーカーによって異なります。汎用機で使われるJCLも、各OSによってコマンドが異なったり記述形式が異なったりする部分があります。
ここでは、JCLを理解するうえで重要なポイントとなるOSの種類を紹介します。
JCLとの関係性1:VSE系
VSE系に分類されるOSを使っているのは、IBM社製の「DOS/VSE」、「VSE/ESA」、「z/VSE」などです。VSE系で使われるJCLは、JCSと呼ばれています。
JCSはJob Control Statementの略語で、JCLとは構文も機能も異なります。
JCLとの関係性2:GCOS系
GCOS系に分類されるOSを使っているのは、Bull(フランス)の「GCOS」やNECの「ACOS」などです。
GCOSというOSは、General Comprehensive Operating Systemの略で、米国のメーカーがメインフレーム用に開発した多機能が売りのOSです。JCLも多機能で、シェルスクリプトに近い形で記述できます。
JCLとの関係性3:MVS系
MVSはIBM社製の汎用機で使われているOSで、MVS系のOSに分類されるのは、IBM社製の汎用機のほか、富士通や日立製作所の汎用機があります。
MVS系に分類されるOSの特徴は、仮想記憶機能の持ち方にあります。MVS系のOSのもとでは、異なるアドレス空間を使って実行が可能です。
ここまで一般的なJCLとして紹介してきたものが、MVS系のOSで使われるJCLです。
JCLとの関係性4:MCP
MCPはUNISYS社製の汎用機「Clear Path Server」で使われているOSです。同じUNISYS社製の「Clear Path Server」でも、「Clear Path Server OS2200シリーズ」では異なるOSを搭載しています。
MCPでは、JCLに代わる言語としてWFL(Work Flow Language)を使っています。
JCLとの関係性5:OS2200
OS2200はUNISYS社製の汎用機「Clear Path Server OS2200シリーズ」のOSです。UNISYS社製の「Clear Path Server」とは異なるOSです。
「Clear Path Server」に搭載されているMCPというOSでは、JCLに代わる言語としてWFLが使われていますが、OS2200ではECLが使われています。UNISYS社製のOS1100でもECLが使われています。
JCLについて理解しよう!
JCLは汎用機という特殊なコンピュータで必要になる言語です。パソコンで動作する言語に比べ、特殊性が高いので、メインフレームを扱うシステムエンジニアや情報処理を学んでいる学生でないと、存在感の薄い言語といえます。
JCLは汎用機が全盛だった時代には必須だった言語で、コンピュータと言語の変遷を学ぶうえで理解しておきたい言語です。JCLを理解し、コンピュータとプログラミング言語の変遷を体感してみましょう。