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ファイルが決して明示しない「このジョブが実際に何をしているか、そしてなぜか」という暗黙知を捕捉します。

関連用語

COBOLメインフレーム、JES、データセット、コピーブック、VSAM、完全版の用語集をご覧ください。

よくある質問

JCLとは何の略ですか?
JCLはJob Control Languageの略です。IBM z/OSメインフレーム上でバッチジョブを記述するためのスクリプト言語で、どのプログラムを実行し、どの入力を読み、どこに出力を送るかを記述します。
JCLはプログラミング言語ですか?
一般的な意味ではありません。JCLはジョブ記述言語で、z/OSにジョブが必要なリソースと実行するプログラムを伝えますが、ビジネスロジックはJCLが呼び出すCOBOL、PL/I、アセンブラのプログラム側にあります。
なぜJCLは難しいとされるのですか?
構文が厳密で容赦がなく(桁と句読点に敏感)、エラーメッセージは難解で、本番環境にはシニアオペレーターの頭の中だけに存在する現場固有の慣行が満載だからです。
JCLメンバーとは何ですか?
JCLメンバーはPDS(区分データセット)またはPDSEに格納された名前付きJCLファイルです。シャップは本番JCLを名前で投入可能なメンバーのライブラリとして整理します — メインフレーム版のスクリプトディレクトリに相当します。
HypercubicはJCLにどう役立ちますか?
Hopperはオペレーターと同じインタフェースでz/OSを操作し、JCLを書き、JESにジョブを投入し、出力を監視します。HyperDocsは各JCLメンバーが触れるプログラム、データセット、コピーブックを対応付けます。HyperTwinは各本番ジョブが実際に何をしているのか、そしてなぜかという暗黙知を捕捉します。
JCLとは?Job Control Language解説 — Hypercubic - Hypercubic