「とりあえず動く」から「意図して制御する」への意識改革を促す熱量だぜ!
「JOB文のパラメータ、いつも先輩のJCLをコピペして終わらせている……」
「CLASSやMSGCLASSを適当に変えて、ジョブが動かなくなったことがある……」
もしお前がそんな「とりあえずJCL」を卒業したいなら、この道場へようこそ。
ここはジョブという名の格闘家が、システムという名のリングに上がるための**「計量会場(入場審査)」**だ。
俺はIT格闘家のじいじ。27年の現場経験で、不適切なCLASS設定でジョブが何時間もキューに溜まったままの惨状や、NOTIFY漏れで異常終了に気づくのが遅れた大事故を嫌というほど見てきた。
JOB文は、ジョブに**「どの階級(CLASS)で、どの優先順位(PRTY)で、どこに結果を出すか(MSGCLASS)」**を定義する、極めて重要なステートメントだ。ここを疎かにする奴は、リングに上がる前に不戦敗を喫するぜ。
この記事では、
- JOB文の基本構造と「ジョブ名」の命名ルール
- CLASSとMSGCLASSの使い分け、実は知らない「本当の役割」
- デバッグを加速させる!NOTIFYとREGIONの推奨設定
- やりがちな「JOBカードの記述ミス」をKOするチェック術
これらを、27年選手の俺が現場のリアルな知恵と共に叩き込む。
読み終える頃には、お前は自信を持って「このジョブにはこの設定だ!」と言い切れるようになっているはずだ。
さあ、ジョブをリングへ送り出すためのゴングを鳴らすぜ!

JOB名:戦士のリングネーム
// の直後、3列目から始まる。俺たちの誇りだ。
//* ----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
//JIIJI001 JOB ...
• 解説: 最大8文字。
• じいじの眼: 今回、名前を「JIIJI001」と8文字フルで使った。すると11列目は名前で埋まる。だからこそ、命令(JOB)は**12列目の「聖域」**から書き始める。この1マスの余裕が、JCLERRを防ぐ「間合い」だ。

ACCOUNT:ファイトマネーの請求先
ジョブが消費したスタミナ(CPUリソース)をどこに計上するか。
//JIIJI001 JOB (DEPT#123),'IT-KAKUTOU-G', ...
• じいじの眼: 誰が戦い、誰がリソースを支払うか。責任の所在をハッキリさせるのは武道の基本だな。

CLASS:対戦する階級(イニシエーター)
どの「列(Queue)」に並び、どの優先順位で実行されるかを決める。
//JIIJI001 JOB (ACCT),'JIIJI',CLASS=A
• じいじの眼: ヘビー級(重バッチ)か、軽量級(テスト)か。自分の「階級」を間違えると、いつまで経っても試合が始まらない(待ち状態)ことになるぞ。

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) は「すべて報告せよ」という命令だ。負けた(エラー)時に、なぜ負けたのかを分析できない格闘家は二流だ。

REGION:スタミナの上限(メモリ確保)
プログラムが使用できる「仮想メモリ」の最大量だ。
//JIIJI001 JOB (ACCT),'JIIJI',REGION=4M
• じいじの眼: 0M は「スタミナ無制限」だが、暴走すればシステム全体を道連れにする。自分のロジックに見合ったスタミナを見極める……これこそがベテランの技術だ。

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はただの数字じゃない。他のジョブ(戦友)たちへの思いやりであり、暴走を防ぐ最後のブレーキだ。」

NOTIFY:試合結果の速報
ジョブが終わった時に、指定したユーザーに通知を飛ばす。&SYSUIDはジョブを実行したユーザーへの速報だ!
//JIIJI001 JOB (ACCT),'JIIJI',NOTIFY=&SYSUID
• じいじの眼: 勝っても負けても、結果はすぐに受け止める。その「即応性」がデバッグのスピードを上げるんだ。

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という「闘技場」全体のルールと心構えを、もう一度復習しておこうぜ。
基本の構えを制する者が、試合を制するんだ!




コメント