「プログラムをただ動かすだけ」から「自在に制御する」レベルへ引き上げる熱量だぜ。
「EXEC文のPARM(引数)って、どうやってプログラムに渡せばいいんだ?」
「COND指定が複雑すぎて、意図した通りにステップがスキップされない……」
もしお前がJCLの「実行制御」で頭を抱えているなら、この道場へようこそ。
ここはプログラムに命を吹き込み、戦場(システム)を支配するための**「指令センター」**だ。
俺はIT格闘家のじいじ。27年の現場経験で、不適切なREGIONサイズでABEND(異常終了)を叩き出した現場や、条件判定ミスで後続処理が暴走した大事故を何度も見てきた。
EXEC文は、プログラムという「格闘家」に**「いつ、どんな条件で、どんな指示(PARM)を持って出撃するか」**を命じる戦術指令だ。ここを極めれば、ジョブの動きを自由自在にコントロールできるようになる。
この記事では、
- EXEC文の基本構造とPGM・PROCの使い分け
- プログラムを操る「PARM(引数)渡し」の実戦テクニック
- 若手が最も苦手とする「COND(条件判定)」の完全理解
これらを、27年選手の俺が現場のリアルなサンプルと共に叩き込むぜ。
読み終える頃には、お前はジョブを意図通りに操る「戦術家」へと進化しているはずだ。
準備はいいか? 実行(EXEC)のゴングを鳴らすぜ!

EXEC文の役割:ジョブステップの起動
EXEC文は、一つのジョブの中で「一仕事(ステップ)」を定義するコマンドだ。
プログラムを直接叩く PGM 指定と、定型処理を呼び出す PROC 指定の2パターンがあるが、基本はどちらも「実行環境のセットアップ」だ。

パラメータ別:深掘り解説
PARM / PARMDD(プログラムへの引数)
プログラムに動的なデータ(日付や処理モードなど)を渡すためのパラメータだ。
z/OS 2.1以降の進化
これまでは「最大100文字」という鉄の掟があった。これを1文字でも超えると、JCLエラーになるか、最悪なのは「勝手に後ろが切り捨てられる」というバグを生むことだった。
現代の仕様では PARMDD パラメータを使えば、DD文(ファイル指定)経由で100文字を超える長いパラメータを安全に渡せるようになった。これは「今の現場」では必須の知識だぜ。
REGION(使用メモリの確保)
プログラムが動くための「土俵(メモリ空間)」の広さを決める。
じいじの眼
REGION=0M を指定すると「システムが許す限りの最大値」を確保する。
「とりあえず0M」にする現場も多いが、これは資源管理の観点からは感心しない。異常なメモリ消費(ループやメモリリーク)を即座に検知できるよう、必要最小限+αを指定するのが、27年戦ってきた俺の「流儀」だ。
COND(実行条件のコントロール)
「前のステップが失敗したら、このステップは動かさない」といった制御を行う。
最大の罠「逆転論理」
JCLのCONDは**「条件が成立したらスキップ(実行しない)」**という、初心者泣かせのロジックだ。
COND=(4,LT) は「4が前のRCより小さい(4 < RC)」なら実行を飛ばすという意味になる。
※ 現代のz/OS 2.1環境なら、後述する「IF文」で書くほうが、保守する人間(戦友)に優しいぜ。

【実践】サンプルJCLで学ぶEXEC文
このサンプルは、3つのステップを通して、最新仕様のパラメータがどう動くかを実演したものだ。そのままテスト環境で試せる構成にしてあるぜ。
//SAMPLEJB JOB (ACCT),'JIJI-LOG',CLASS=A,MSGCLASS=H
//*-----------------------------------------------------------*
//* STEP01: 標準的なPARM指定とREGIONの例
//*-----------------------------------------------------------*
//STEP01 EXEC PGM=PROG01,
// REGION=64M,
// PARM='MODE=BATCH,DATE=20260514'
//STEPLIB DD DSN=USER.LOADLIB,DISP=SHR
//OUTDD DD SYSOUT=*
//*
//*-----------------------------------------------------------*
//* STEP02: z/OS 2.1以降のPARMDD(100文字超え対応)
//*-----------------------------------------------------------*
//STEP02 EXEC PGM=PROG02,REGION=128M,
// PARMDD=PARMIN
//PARMIN DD *
TYPE=REPORT,ID=001,USER=JIJI,
OPTION=DETAILED,COMMENT=LONG_PARAMETER_OVER_100_CHARACTERS_IS_NOW_AVAILABLE,
TARGET=ALL_MAIN_FRAME_ENGINEERS
/*
//*
//*-----------------------------------------------------------*
//* STEP03: IF文による実行制御(CONDパラメータの現代版)
//*-----------------------------------------------------------*
// IF (STEP01.RC = 0 AND STEP02.RC <= 4) THEN
//STEP03 EXEC PGM=PROG03,TIME=5
//SYSOUT DD SYSOUT=*
// ELSE
//* 前のステップが異常終了した際の後始末ステップ
//ERRORSTP EXEC PGM=ERRLOG
//SYSOUT DD SYSOUT=*
// ENDIF
【解説:ここがポイント!】
- STEP01: 基本の形。REGIONでメモリの境界線を引き、100文字以内のPARMで指示を出している。
- STEP02: PARMDD の実演。下部の PARMIN DD * 内に書いた長尺テキストが、そのままプログラムにデプロイされる。
- STEP03: COND を使わず IF-THEN-ELSE で制御。これなら「RCが0、かつSTEP02が4以下なら実行」と、一目でロジックがわかるだろ?
関連記事:





コメント