JCL EXEC文の極意|27年選手が教える「PARM渡し」と「条件判定(COND)」の戦術

ブルーの光が走るサイバーなメインフレームのデータセンター。手前にはJCLのEXEC文、IF文、PARMDDなどのコードがホログラムのように浮かび上がり、システム制御の論理構造を表現している。 【技術深掘り】メインフレーム遺産
z/OS 2.1以降の最新仕様を視覚化。複雑なEXECパラメータの挙動を、エンジニアの眼でデバッグし、最適化するプロセスをイメージ。

「プログラムをただ動かすだけ」から「自在に制御する」レベルへ引き上げる熱量だぜ。

「EXEC文のPARM(引数)って、どうやってプログラムに渡せばいいんだ?」

「COND指定が複雑すぎて、意図した通りにステップがスキップされない……」

もしお前がJCLの「実行制御」で頭を抱えているなら、この道場へようこそ。

ここはプログラムに命を吹き込み、戦場(システム)を支配するための**「指令センター」**だ。

俺はIT格闘家のじいじ。27年の現場経験で、不適切なREGIONサイズでABEND(異常終了)を叩き出した現場や、条件判定ミスで後続処理が暴走した大事故を何度も見てきた。

EXEC文は、プログラムという「格闘家」に**「いつ、どんな条件で、どんな指示(PARM)を持って出撃するか」**を命じる戦術指令だ。ここを極めれば、ジョブの動きを自由自在にコントロールできるようになる。

この記事では、

  • EXEC文の基本構造とPGM・PROCの使い分け
  • プログラムを操る「PARM(引数)渡し」の実戦テクニック
  • 若手が最も苦手とする「COND(条件判定)」の完全理解

これらを、27年選手の俺が現場のリアルなサンプルと共に叩き込むぜ。

読み終える頃には、お前はジョブを意図通りに操る「戦術家」へと進化しているはずだ。

準備はいいか? 実行(EXEC)のゴングを鳴らすぜ!

「EXEC」と刻印された光り輝くクリスタル状のボタンが押し込まれ、メインフレームの回路を通じてCPUにエネルギーが供給される様子。ジョブステップが起動する瞬間を表現。

EXEC文の役割:ジョブステップの起動

EXEC文は、一つのジョブの中で「一仕事(ステップ)」を定義するコマンドだ。

プログラムを直接叩く PGM 指定と、定型処理を呼び出す PROC 指定の2パターンがあるが、基本はどちらも「実行環境のセットアップ」だ。

データセンターのサーバーラックを背景に、PARM、REGION、COND、TIMEといったJCLの主要パラメータが刻まれた青く光る歯車と、それらを詳細に分析する虫眼鏡のホログラム。パラメータ同士がシステム内で連動する様子を表現。

パラメータ別:深掘り解説

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のサンプルコードを指し示すエンジニアの手。実際のジョブ制御文の構造を一つずつ確認しながら、実践的な技術を学んでいる様子。

【実践】サンプル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以下なら実行」と、一目でロジックがわかるだろ?

関連記事:

JCLの深淵へ|80列の掟と「カンマの後の沈黙」。27年選手が教えるJOB・EXEC・DD文の極意
JCLの「12列目の聖域」とは何か? 27年選手のエンジニアが、JOB文のパラメータからDISPの三段構え、継続行の「見えない空白」まで、JCL構文の深淵を徹底解説。
JCL JOB文の極意|27年選手が教える「入場資格」と「リソース制御」の鉄則
IT格闘家じいじが贈る、JOB文パラメータ完全ガイド。12列目の聖域から、隠しパラメータのRESTARTまで。27年選手の「システムとの戦い方」を伝授する。
JCL DD文の完全攻略|27年選手が教える「DISP」と「データ定義」の極意
JCLエラーをKOしろ!IT格闘家じいじが、JCLの最難関「DD文」を徹底解説。DISPの全パラメータから、現代流のLIKE指定、後退参照まで、27年のキャリアで得た「現場の知恵」をサンプル付きで伝授するぜ。

コメント

タイトルとURLをコピーしました