「JCLの変数(シンボリック・パラメータ)って、書き方が独特で分かりにくい……」
「ピリオド(.)の連結ルールが複雑で、実行するたびにエラーが出て嫌になる……」
メインフレームの現場で、こんな風に立ち止まっている若手エンジニアは多いはずだ。だが、安心してくれ。その悩み、今日ここで**KO(ノックアウト)**してやるぜ。
俺はIT格闘家のじいじ。
27年間、メインフレームというリングで戦い続けてきたエンジニアだ。
JCLの変数は、使いこなせば「日付取得の自動化」や「運用コスト削減」を瞬時に実現する最強の必殺技になる。だが、ピリオド一つの打ち忘れという「現場の罠」にハマれば、深夜の呼び出しやデバッグ地獄に引きずり込まれる諸刃の剣でもあるんだ。
この記事では、
- JCL変数の基礎から「システムシンボリック」の活用法
- 実戦で差がつく!IDCAMS(SYSIN)への変数流し込み(EXPORT文)
- 27年選手が教える「ピリオド連結」と「現場の罠」回避術
これらを、俺の27年の経験を武器に、実戦サンプルを交えて直伝するぜ。
お前が手動の書き換え作業から解放され、スマートにJCLを操る「IT格闘家」への第一歩を踏み出すためのガイドだ。
準備はいいか? 変数マスターへのゴングを鳴らすぜ!

システム標準装備:一線級の武器リスト
OS(z/OS)が最初から持っている「システムシンボリック」だ。日本の現場なら、ローカル時刻を示す**「L」付き**を使うのが鉄則だぜ。
| 変数名(シンボリック) | 叩き出される値(例) | 現場での主な用途 |
|---|---|---|
| &SYSUID. | JIJI01 | 個人用データセットの識別・テスト用 |
| &LYYYYMMDD. | 20260504 | 日次処理のバックアップ名(西暦4桁) |
| &LHHMMSS. | 153005 | 同一日の重複防止(時分秒まで刻む) |
| &LWDAY. | MON, TUE… | 曜日別の処理分岐、週末限定処理 |
| &LYYYY. | 2026 | 年度末更新、年次アーカイブ用 |
| &LMM. | 01 – 12 | 月次バッチ、月別ログ管理 |
| &LDD. | 01 – 31 | 日次ローテーション管理 |

必殺!3つの変数アプローチ
基本の「SET文」:オリジナル武器の錬成
ジョブの先頭で定義して、JCL全体で使い回す。
// SET ENV=PROD
// SET BASE=MY.APP.DATA
//STEP1 EXEC PGM=MYPROG
//OUTDD DD DSN=&BASE..&ENV..D&LYYYYMMDD.,DISP=(NEW,CATLG)
※ピリオドが2つ(..)重なるのは、「変数の終わり」と「データセットの区切り」だ。JCLエラーの急所だからな!
継承の「PROC」:師匠から弟子への奥義
カタログド・プロシージャ(PROC)に値を渡す方法だ。これが一番現場で使われている。
【JCLサンプル(呼ぶ側)】
//RUNPROC EXEC MYPROC,MYVAL='REXX.LIB',RETRY=3
【PROC本体(MYPROC)】
//MYPROC PROC MYVAL='DEFAULT.LIB',RETRY=1 <-- 初期値も設定できる
//STEP1 EXEC PGM=MAINPROG
//LIBDD DD DSN=&MYVAL.,DISP=SHR
//SYSIN DD *
OPTION RETRY=&RETRY.
/*
極意!「SYSINへの流し込み」:EXPORT文
通常、変数はDD文などの「JCLの行」でしか使えねえ。だが、EXPORT 文を使えば、プログラムに渡す「制御カード(SYSIN)」の中でも変数が爆発するぜ!

【実戦サンプル:IDCAMSで変数を使いこなす】
//SYSINVAR JOB (ACCT),'JIJI-PUNCH'
// SET TARGET=OLD.DATA
// EXPORT SYMLIST=* <-- これが変数をSYSINに通す「パスポート」だ!
//*
//STEP1 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *,SYMBOLS=JCLONLY <-- ここで「JCLの変数を使うぜ」と宣言しろ!
DELETE &SYSUID..&TARGET..BACKUP
SET MAXCC = 0
/*
これを使えば、SQLの条件や各種ツールのパラメータを、JCLの先頭で一括管理できる。修正作業を「点」から「面」の攻撃に変えるんだ。

じいじの「現場の罠」回避術:変数編
罠1:ピリオド忘れのカウンター
&DSN.BAK と書くべきところを &DSNBAK と書くと、システムは「&DSNBAKなんて変数は知らん!」とブチ切れる。「変数の終わりはピリオド」、これをリズムで覚えろ。
罠2:JCL内でしか使えないと思い込むな
前述の EXPORT と SYMBOLS=JCLONLY を知らない若手は、わざわざ変数置換のためだけに別のステップを組んだりする。無駄なステップはスタミナの無駄だ。この合わせ技でKOしろ!

全変数を使いこなす「マシンガン連打」サンプル
これまでの技を全部盛り込んだ、最強のJCLだ。
//VARSTRIKE JOB (ACCT),'IT-MARTIAL-ARTS'
// EXPORT SYMLIST=*
// SET ENV=PRD
// SET APP=SALES
//*************************************************
//STEP1 EXEC PGM=REXXPROG
//INPUT DD DSN=&SYSUID..&APP..&ENV..IN,DISP=SHR
//OUTPUT DD DSN=&SYSUID..&APP..&ENV..D&LYYYYMMDD.,
// DISP=(NEW,CATLG),UNIT=SYSDA,SPACE=(CYL,10)
//SYSIN DD *,SYMBOLS=JCLONLY
START_DATE = &LYYYYMMDD.
USER_ID = &SYSUID.
ENVIRONMENT = &ENV.
/*
【じいじのデバッグ・ログ:最後に一言】
変数は、JCLに「魂」を吹き込む。
だがな、一番大事なのは「後から見る奴が迷わないこと」だ。
複雑すぎる変数の迷路を作るんじゃねえ。
関連記事:



コメント