本文へスキップ
BecomeCoder

COBOLコース · 第10章 実務のCOBOL ― パック10進・帳票・メインフレーム · レッスン51

メインフレームとJCLの触り ― バッチジョブが起動される世界

ローカル実施

導入

第1章で「COBOLはメインフレームで動いている」と説明しました。ここでは、そのメインフレームでCOBOLプログラムが実際にどう起動されるのか、JCL という仕組みに軽く触れておきます。

説明

JCL(Job Control Language) は、IBMのメインフレーム(z/OSなど)で、「どのプログラムを、どんな入出力ファイルで、どんな順序で実行するか」を指定するための言語です。COBOLプログラム自体とは別の、「実行の段取り」を記述する言語だと考えてください。

//BATCHJOB JOB (ACCT),'DAILY BATCH',CLASS=A
//STEP1    EXEC PGM=CALCINT
//SALESIN  DD DSN=PROD.SALES.MASTER,DISP=SHR
//SALESOUT DD DSN=PROD.SALES.UPDATED,DISP=(NEW,CATLG)
//STEP2    EXEC PGM=PRTRPT
//RPTIN    DD DSN=PROD.SALES.UPDATED,DISP=SHR
//RPTOUT   DD SYSOUT=*
  • //BATCHJOB JOB ... … 「これはジョブ(1つのまとまった実行単位)である」という宣言。ジョブ名や実行に使う課金アカウントなどを指定。
  • //STEP1 EXEC PGM=CALCINT … 1つ目の実行ステップとして、CALCINT というプログラム(第9章で学んだような、コンパイル済みのCOBOLプログラム)を実行する。
  • //SALESIN DD DSN=...DD(Data Definition)文で、プログラムが使うファイルを実際のデータセット(メインフレーム上のファイル)と結び付ける。第7章で学んだ SELECT ... ASSIGN TO に対応する概念です。
  • //STEP2 EXEC PGM=PRTRPT … 1つ目のステップの出力を受けて、2つ目のプログラムを実行する(複数のステップを順番につなげられる)。
flowchart LR
    J["ジョブ投入<br/>(JCLを実行)"] --> S1["STEP1<br/>PGM=CALCINT<br/>(利息計算のCOBOLプログラム)"]
    S1 --> S2["STEP2<br/>PGM=PRTRPT<br/>(帳票印刷のCOBOLプログラム)"]
    S2 --> DONE["ジョブ完了<br/>結果をログ・帳票として出力"]

夜間バッチでは、こうしたJCLで定義された何十・何百ものジョブが、スケジューラによって決まった時刻に自動的に投入され、順番に実行されていきます。第7章で学んだ「マスターファイルの更新」のような処理も、実際の現場ではこのJCLの1ステップとして起動されるCOBOLプログラムです。

COBOLのコード自体を書く技術者と、JCLでジョブの流れを設計・運用する技術者は、役割が分かれていることも多いですが、保守エンジニアとして基幹システムに関わる以上、「自分の書いたCOBOLプログラムが、どんなJCLから、どんな入出力ファイルを与えられて起動されるのか」という全体の文脈を理解しておくことは、とても重要です。

試すには

上のJCLの例を読み、「STEP1でどのプログラムが動き、STEP2でどのプログラムが動くか」「STEP1の出力ファイルが、STEP2の入力ファイルとしてどう使われているか」を自分の言葉で説明してみましょう。