JCLとは?
JCL(Job Control Language)はIBM z/OSメインフレーム上でバッチジョブを記述するためのスクリプト言語です — どのプログラムを実行し、どのデータセットを読み書きし、どれだけCPUとメモリを確保し、失敗時にどう反応するかを記述します。夜間にメインフレームに触れるビジネス取引があれば、それを実行したのはJCLジョブです。
- プラットフォーム
- IBM z/OS
- 目的
- バッチジョブの記述
- 実行
- JES2 / JES3
- 典型ファイル
- PDS内のJCLメンバー
目的:夜間にz/OSに何をさせるかを伝える
z/OSは2種類の仕事を実行します:オンライン取引(CICSやIMS経由)とスケジュールバッチです。バッチジョブは日次締め、請求処理、レポート生成、利息計算、アクチュアリモデルなど重作業を担います。JCLはそれらのジョブをオペレーターがシステムに記述する手段です。
JCLジョブの構造
JCLジョブには3種類の正準的なステートメントがあります。
- //JOB — ジョブカード。誰が投入し、どれだけリソースを使えるかを示します。
- //EXEC — ステップ。実行するプログラム(またはカタログ化されたプロシージャ)を指定します。
- //DD — データ定義。ステップのデータセット入力または出力を記述します。
1つのファイルを読んでもう1つに書き出すCOBOLプログラムを実行する最小のJCLジョブは次のようになります:
//PAYROLL JOB (ACCT123),'PAYROLL',CLASS=A,MSGCLASS=X //STEP1 EXEC PGM=PAYCALC //INFILE DD DSN=PROD.EMPLOYEE.MASTER,DISP=SHR //OUTFILE DD DSN=PROD.PAYROLL.OUTPUT,DISP=(NEW,CATLG,DELETE), // SPACE=(CYL,(10,5)),DCB=(RECFM=FB,LRECL=132) //SYSOUT DD SYSOUT=*
JCLが近代化しにくい理由
JCLは一見単純ですが、真の複雑さは触れる先にあります:
- 本番の1つのJCLメンバーが5つのカタログ化プロシージャを呼び出し、それらがさらに20のプログラムを呼び出すことがあります。
- データセットにはJCLで表現されない意味が宿ります — ファイルが何であるかはコピーブック、オペレーターの頭の中、あるいはどこにも文書化されていないかもしれません。
- 運用現場の慣行(どの戻り値が重要か、再実行時にどのユーティリティを呼ぶか)はほとんど文書化されません。
だからJCLの知見は組織資産として扱われます。シニアスケジューラーを失うことは、20年間安定して回ってきた特定の夜間バッチチェーンを理解する唯一の人物を失うことを意味します。
HypercubicはJCLとどう連携するか
HopperはJCLを書いて投入し、JESを監視してジョブ失敗に対応します — シニアオペレーターと同じインタフェースでz/OSを操作します。HyperDocsは各JCLメンバーが触れるプログラム、データセット、コピーブックを対応付け、監査対応可能な依存関係グラフを生成します。HyperTwinはJCLファイルが決して明示しない「このジョブが実際に何をしているか、そしてなぜか」という暗黙知を捕捉します。