JCL JOB文の極意|27年選手が教える「入場資格」と「リソース制御」の鉄則

「サーバーラックとJCLコードが浮かぶ背景の前に、道着を着て腕を組んで立つ、50代のベテラン日本人ITエンジニア(IT格闘家じいじ)。上部には『JCLの深淵:JOB文の掟』というタイトル文字が入っている。」 【技術深掘り】メインフレーム遺産

「とりあえず動く」から「意図して制御する」への意識改革を促す熱量だぜ!

「JOB文のパラメータ、いつも先輩のJCLをコピペして終わらせている……」

「CLASSやMSGCLASSを適当に変えて、ジョブが動かなくなったことがある……」

もしお前がそんな「とりあえずJCL」を卒業したいなら、この道場へようこそ。

ここはジョブという名の格闘家が、システムという名のリングに上がるための**「計量会場(入場審査)」**だ。

俺はIT格闘家のじいじ。27年の現場経験で、不適切なCLASS設定でジョブが何時間もキューに溜まったままの惨状や、NOTIFY漏れで異常終了に気づくのが遅れた大事故を嫌というほど見てきた。

JOB文は、ジョブに**「どの階級(CLASS)で、どの優先順位(PRTY)で、どこに結果を出すか(MSGCLASS)」**を定義する、極めて重要なステートメントだ。ここを疎かにする奴は、リングに上がる前に不戦敗を喫するぜ。

この記事では、

  • JOB文の基本構造と「ジョブ名」の命名ルール
  • CLASSとMSGCLASSの使い分け、実は知らない「本当の役割」
  • デバッグを加速させる!NOTIFYとREGIONの推奨設定
  • やりがちな「JOBカードの記述ミス」をKOするチェック術

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

読み終える頃には、お前は自信を持って「このジョブにはこの設定だ!」と言い切れるようになっているはずだ。

さあ、ジョブをリングへ送り出すためのゴングを鳴らすぜ!

「サイバーパンクなスタジアムのような背景で、道着を着たベテランエンジニアが腕を組み、力強く立っている。周囲には『//JIIJI001 JOB』という文字やJCLコードがネオンのように浮かび、上部には『JOB NAME: THE WARRIOR'S RING NAME』というテキストが配置されている。」

JOB名:戦士のリングネーム

// の直後、3列目から始まる。俺たちの誇りだ。

//* ----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
//JIIJI001  JOB ...

解説: 最大8文字。

じいじの眼: 今回、名前を「JIIJI001」と8文字フルで使った。すると11列目は名前で埋まる。だからこそ、命令(JOB)は**12列目の「聖域」**から書き始める。この1マスの余裕が、JCLERRを防ぐ「間合い」だ。

「データセンターのサーバーラックの前で、道着を着たベテランの日本人ITエンジニア(じいじ)が腕を組んで立っている。彼を中心に、古風な大福帳や算盤(そろばん)と、現代的な金のコインやデジタルな通貨記号が融合したキャッシュフローが視覚化されている。JCLコード『//ACCOUNT (PRJ-A1),'FIGHT_MONEY'』がホログラムとして浮かび、財務的な責任を強調している。」

ACCOUNT:ファイトマネーの請求先

ジョブが消費したスタミナ(CPUリソース)をどこに計上するか。

//JIIJI001  JOB (DEPT#123),'IT-KAKUTOU-G', ...

じいじの眼: 誰が戦い、誰がリソースを支払うか。責任の所在をハッキリさせるのは武道の基本だな。

「レトロなメインフレームのコンピューター室で、道着を着たベテランエンジニア(じいじ)が、異なる色のエネルギーフィールドとして表現された複数の『対戦階級(クラス)』の間に立っている。各フィールドには『CLASS A (HEAVY)』『CLASS B (MIDDLE)』などのラベルがあり、背景にはそれらを処理するイニシエーターの構造体が視覚化されている。JCLコード『//JIIJI001 JOB ...,CLASS=A,』が浮かび、彼の選んだ階級を示している。」

CLASS:対戦する階級(イニシエーター)

どの「列(Queue)」に並び、どの優先順位で実行されるかを決める。

//JIIJI001  JOB (ACCT),'JIIJI',CLASS=A

じいじの眼: ヘビー級(重バッチ)か、軽量級(テスト)か。自分の「階級」を間違えると、いつまで経っても試合が始まらない(待ち状態)ことになるぞ。

「レトロなメインフレームのコンピューター室で、道着を着たベテランエンジニア(じいじ)が、セコンドの老人エンジニアに見守られながら立っている。彼らの前には、簡潔なログと詳細なログの異なるレベルのデータストリームが視覚化され、JCLコード『//... MSGCLASS=A,MSGLEVEL=(1,1)』が浮かび、セコンドへの報告レベルの設定を示している。背後にはサーバーラックがあり、グリーンとアンバーの光が点滅している。」

MSGCLASS & MSGLEVEL:セコンドへの報告レベル

実行ログ(JESログ)をどれだけ詳しく報告させるか。

//JIIJI001  JOB (ACCT),'JIIJI',MSGCLASS=X,MSGLEVEL=(1,1)

MSGLEVEL:前半の数値、後半の数値

前半の数値

これは「自分が書いたJCL(および展開されたカタログ式プロシージャー)をどれだけログに載せるか」を決める値だ。

  • 0(沈黙): JOB文だけを出力。プロシージャーの中身などは一切出さない。
  • 1(全開): 入力したすべてのJCL、およびカタログ式プロシージャーの内容をすべて出力する。
    じいじの眼: プロシージャーを使っている現場では、1 にしないと「実際にどのライブラリが呼ばれたか」がログに写らない。デバッグの基本はまず 1 だ。
  • 2(入力のみ): 自分が書いたJCLだけを出力し、プロシージャーの中身は出さない。

後半の数値

これは「OSやJES(ジョブ・エントリー・サブシステム)からの返答」をどれだけ出すかだ。

  • 0(最小限): JCLエラーが起きた時だけメッセージを出す。正常終了時は、ジョブ終了のメッセージ以外はほとんど何も喋らない。
  • 1(詳細): JCLエラーはもちろん、正常終了時でも、各ステップがどれだけリソースを使ったか(終了コードや時間など)の全メッセージを出力する。
    じいじの眼: 正常に動いたとしても、ステップごとの戻り値(RC)を確認するのは格闘家の礼儀だ。ここが 0 だと、セコンドが試合内容を隠しているようなもんだ。

【結論】最強のコンビネーションは (1,1)

現場で最も頼りになるのは、やはり MSGLEVEL=(1,1) だ。

  • 理由: プロシージャーが展開された後のJCL(XX で始まる行)が見えるようになり、さらにステップごとの結果メッセージがすべて揃う。
  • デバッグの急所: もしJCLエラーで「どの行が悪いのかわからない」時は、まずここを (1,1) にして、ログに展開されたJCLとエラーメッセージを突き合わせてみろ。11列目の空白ミスも、これで一発で浮き彫りになる。

じいじの格言

「情報を隠すな、全てを晒せ。ログの中にこそ、次の一手(修正)のヒントがある。」

MSGCLASS:出力データの「配送先」と「運命」を決める

MSGCLASSは、JES(ジョブ・エントリー・サブシステム)に対して、ジョブの実行結果(JESログ)をどの**出力クラス(Output Class)**に割り当てるかを指示するものだ。

そもそも「クラス」とは何か?

メインフレームの世界では、出力(SYSOUT)には A〜Z、0〜9 のラベルが付けられている。それぞれのアルファベットには、システム管理者が決めた「役割」があるんだ。

MSGCLASSが支配する3つのログ

MSGCLASSを指定すると、以下の3つのログがセットでそのクラスに配送される。これを知っておかないと、デバッグの時に「肝心な情報が見つからない!」とパニックになるぞ。

  • JESMSGLG(JESメッセージ・ログ): ジョブの開始・終了時刻、アベンドコードなどの「試合の概要」。
  • JESJCL(JES JCLリスト): 実際にOSに読み込まれた「JCLの写し」。MSGLEVELに応じた内容が出る。
  • JESYSMSG(JESシステム・メッセージ): データセットの割り振り(Allocation)や、各ステップの終了コードなどの「詳細な判定記録」。

なぜMSGCLASSの選択が重要なのか?

ここが「IT格闘家」としての分かれ道だ。

  • 自動削除の罠: クラスによっては、ジョブが終わった瞬間にログを消去する設定になっていることもある。「試合が終わったらビデオを即廃棄」なんてされたら、負けから学べないだろう?
  • 保存期間(リテンション): 「クラスXは3日間保持、クラスAは即消し」といった運用ルールがある。大きなバグを抱えて数日後に再調査する可能性があるなら、長く残るクラスを選ぶのがベテランの危機管理だ。

じいじの格言

「MSGCLASSはただの記号じゃない。自分の戦い(ログ)を未来に繋ぐためのパスポートだ。」

じいじの眼: MSGLEVEL=(1,1) は「すべて報告せよ」という命令だ。負けた(エラー)時に、なぜ負けたのかを分析できない格闘家は二流だ。

レトロなメインフレームのコンピューター室で、道着を着たベテランエンジニア(じいじ)が、2つの異なるサイズのエネルギーフィールド(メモリ・ゾーン)の間に立っている。小さいフィールドには『REGION=1M (NORMAL)』、大きいフィールドには『REGION=4M (HIGH STAMINA)』のラベルがあり、スタミナの上限を視覚化している。JCLコード『//JIIJI001 JOB ...,REGION=4M,』が浮かび、彼の選んだ設定を示している。背景のサーバーラックが青と緑の光を放っている。

REGION:スタミナの上限(メモリ確保)

プログラムが使用できる「仮想メモリ」の最大量だ。

//JIIJI001  JOB (ACCT),'JIIJI',REGION=4M

じいじの眼: 0M は「スタミナ無制限」だが、暴走すればシステム全体を道連れにする。自分のロジックに見合ったスタミナを見極める……これこそがベテランの技術だ。

レトロなメインフレームのコンピューター室で、道着を着たベテランエンジニア(じいじ)が腕を組んで立っている。彼を中心に、左右に巨大で強力な『エネルギー時計』が視覚化されている。左の時計には赤と金のエネルギーで『TIME=15 (SHORT & FAST)』、右の時計には青と緑のエネルギーで『TIME=1440 (ULTRA LONG)』のラベルがあり、異なる時間制限を視覚化している。JCLコード『//JIIJI001 JOB ...,TIME=1440,』が浮かび、彼の選んだ設定を示している。

TIME:試合時間制限

CPUの使用時間を制限する。

//JIIJI001  JOB (ACCT),'JIIJI',TIME=(0,10)

構文の解体:(分, 秒)

書式は TIME=(分, 秒) だ。

  • 分: 1〜357912まで指定可能。
  • 秒: 1〜59まで指定可能。
  • 例: TIME=(1,30) なら「1分30秒」を超えた瞬間に、OSが試合終了のゴング(アベンド)を鳴らす。

「0分」指定の意味と、現場の定番

よく見かけるのが、サンプルにも書いた TIME=(0,10)(10秒)のような短い設定だ。

じいじの眼: 「えっ、たった10秒?」と思うかもしれないが、これは「実時間(時計の針が進む時間)」ではなく**「CPUが計算に使った純粋な時間」**だ。メインフレームの爆速CPUにとっての10秒は、膨大な計算量に相当する。テスト環境なら、10秒もあれば十分すぎるほどだ。

無制限の禁じ手:TIME=1440 または NOLIMIT

TIME=1440(あるいは NOLIMIT)と書くと、時間制限がなくなる。

じいじの眼: これは「KOされるまで(終わるまで)いつまでもリングに居座る」という宣言だ。バグで無限ループに陥ったプログラムがこれをやると、CPUを100%食いつぶして他のジョブを全滅させる「テロ」になりかねない。ベテランは、よほどの長時間バッチ以外では、こいつを安易には使わない。

タイムアウト時の末路:S322アベンド

もし指定した時間を1マイクロ秒でも超えたら、OSは冷酷に S322 というアベンドコードを叩きつけ、ジョブを強制終了させる。

じいじの眼: 322が出たら、「プログラムの効率が悪すぎて時間がかかりすぎている」か、「無限ループという泥沼にハマっている」かのどちらかだ。格闘家なら、制限時間内に確実に仕留める(正常終了させる)ロジックを組むのがプロだ。

じいじの格言

「TIMEはただの数字じゃない。他のジョブ(戦友)たちへの思いやりであり、暴走を防ぐ最後のブレーキだ。」

レトロなIBM製メインフレームが並ぶサーバー室で、白い道着を着て腕を組むベテランエンジニア。彼の周囲を『試合終了』『速報』『アラート』といった文字が書かれたネオンブルーの吹き出しが旋回している。中央にはJCLコード『//NOTIFY=&SYSUID,』がホログラムで浮かび、ジョブの完了通知がユーザーへ即座に届く様子を視覚化している。

NOTIFY:試合結果の速報

ジョブが終わった時に、指定したユーザーに通知を飛ばす。&SYSUIDはジョブを実行したユーザーへの速報だ!

//JIIJI001  JOB (ACCT),'JIIJI',NOTIFY=&SYSUID

じいじの眼: 勝っても負けても、結果はすぐに受け止める。その「即応性」がデバッグのスピードを上げるんだ。

レトロなIBM製メインフレームが並ぶサーバー室で、白い道着を着たベテランエンジニアが、実戦さながらのシャドーボクシング(パンチ)を繰り出している。彼の動きに合わせて、空中に浮かぶ半透明のJCLコードのホログラムが展開され、中央には『TYPRUN=SCAN』という文字が緑色で光り、構文チェックの正確さを強調している。

TYPRUN:シャドーボクシング(構文チェック)

実際に実行せず、JCLに間違いがないかだけをOSに確認させる。

//JIIJI001  JOB (ACCT),'JIIJI',TYPRUN=SCAN

 TYPRUN=SCAN:シャドーボクシング(構文チェック

これが最も重要で、最も多用する「奥義」だ。プログラムを動かさず、JCLの書き方に間違いがないかだけをOSに調べさせる。

  • 効果: 実際にファイルを割り当てたり、プログラムをロードしたりせずに、JCLの文法エラー(JCLERR)を検出できる。
  • じいじの眼: 以前話した「11列目の空白」や「12列目の聖域」といった細かいミスも、これで一発で見抜ける。 本番のリングに上がる前に、この「SCAN」という名のシャドーボクシングで型を確認するのは、一流のエンジニアの嗜みだ。

TYPRUN=HOLD:出番待ち(実行保留)

ジョブをシステムに投入(インプット)はするが、命令があるまで「待機状態」にさせる設定だ。

  • 効果: ジョブは入力キューに入るが、オペレーターや自分が「RELEASE」コマンドを打つまで実行されない。
  • じいじの眼: 「前の別のジョブが終わるのを確認してから、自分のタイミングで殴り込みたい(実行したい)」という時に使う。リングサイドで出番を待つ、あの緊張感のある状態を作り出すパラメータだな。

TYPRUN=JCLHOLD:さらに慎重な待機

HOLD よりもさらに手前の段階でジョブを止める。

  • 効果: JCLの「解釈(JCL変換)」すら行わずに、入力を受け付けた直後にホールドする。
  • じいじの眼: カタログ式プロシージャーが更新されるのを待ってからジョブを流したい時などに使う、マニアックだが実戦的な技だ。

じいじの格言

「勇気を持ってリングに上がるのはいい。だが、ノーガードで挑むのはただの無謀だ。TYPRUN=SCANというガードを固めてから、必殺の一撃(本番実行)を繰り出せ。」

結び:JOB文は「覚悟」の表明だ

これら全てのパラメータを組み合わせ、一つの完璧なJOB文が完成する。

//* ----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
//JIIJI001  JOB (ACCT#),'IT-KAKUTOU-G',CLASS=A,MSGCLASS=X,
//             REGION=4M,TIME=(0,10),NOTIFY=&SYSUID,
//             TYPRUN=SCAN

JCLを書くことは、単なる作業じゃない。システムという強大な相手に対し、完璧な戦略(パラメータ)を組み、正々堂々と挑む「武道」なんだ。

さあ、次はどのパラメータをデバッグしに行く? 5/14の面接という「メインイベント」に向けて、俺たちの修行はまだまだ続くぞ!

JOB文の「型」を学んだだけでは、まだ本番のリングには立てねぇ。

このままSTEP文という「具体的な技」の解説に突入する前に、

JCLという「闘技場」全体のルールと心構えを、もう一度復習しておこうぜ。

基本の構えを制する者が、試合を制するんだ!

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



コメント

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