「不自由さ」を「美学」に変える、じいじらしい熱い導入だ!
「1カラムのズレが、システム全体を沈黙させる……」
「カンマの後に打った、たった一つの空白が、深夜のオンコールを呼び出す……」
もしお前が、JCLという古めかしく、不自由な構文を「過去の遺物」だと思っているなら、その認識を今すぐリブート(再起動)してくれ。
俺はIT格闘家のじいじ。
27年間、メインフレームという巨大なシステムの心臓部でJCLを叩き続けてきた。パンチカード時代の名残である「80列固定形式」という鉄の掟。一見すると不自由極まりないこの言語には、実はリソースへの敬意と、確実な実行への執念が詰まっているんだ。
JCLを制する者は、システムを制す。
この構文を完璧に制御できるようになったとき、お前のエンジニアとしての地肩は、クラウドでもAIでも通用する強固なものになっているはずだ。
この記事では、
- 物理構造:1文字、1カラムのミスも許さない「80列と空白」の掟
- JOB文:システムリソースを全権掌握する「司令塔」の定義
- EXEC文:プログラムを召喚し、条件分岐(COND)を操る論理学
- DD文:リソースのマッピングと、お片付け(RLSE)の美学
- 継続行の作法:深夜のデバッグを防ぐ「カンマの後の沈黙」
これらを、俺の27年のログから抽出した「ベストプラクティス」として伝授するぜ。
準備はいいか? メインフレームの深淵へ、ブート(起動)のゴングを鳴らすぜ!

物理構造:厳格なる「80列」の世界と空白の掟
現代のプログラミング言語は「フリーフォーマット」が主流だが、JCLはパンチカード時代の「80列固定形式」という鉄の掟に支配されている。この「不自由さ」を理解することこそが、メインフレームエンジニアへの第一歩だ。
- 1〜2列目(//): すべてのJCLの開始合図。
- 3〜10列目(名前フィールド): ジョブ名、ステップ名、DD名を最大8文字で記述する。
- 名前の直後(区切り): 名前の直後には、必ず**1つ以上の空白(スペース)**が必要だ。
- 12列目以降(命令フィールド):
JOB、EXEC、DDといった「動詞」を記述する。

JOB文:システムリソースの「全権掌握」と戦略的定義
JCLの先頭に君臨するJOB文は、単なるラベルではない。そのジョブがシステム全体にどれだけの負荷をかけるのか、どのような優先順位で処理されるべきかをOSに宣言する「司令塔」だ。
【JCLサンプル:JOB文の標準構成】
----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
//JIIJIO01 JOB (ACCT#),'SUGINO-H',CLASS=A,MSGCLASS=X,
// REGION=4M,TIME=(0,10),NOTIFY=&SYSUID,
// TYPRUN=SCAN
- REGION:メモリの防衛線 プログラムが使用する「仮想ストレージ」の上限を指定する。
リスク:REGION=0M(制限なし)は、バグったプログラムがLPAR(論理分割環境)全体の メモリを食いつぶすリスクがある。必要最小限のREGIONを見極めるのがプロの作法だ。 - TYPRUN=SCAN:戦う前の疎通確認 実際に動かさず構文チェックだけを行う。本番デプロイ前にこれで
JCLERRをデバッグしておくことで、運用チームからの信頼は不動のものになる。

EXEC文:プログラムの「召喚」と条件分岐
JOBという枠組みの中で、具体的な処理(ステップ)を呼び出すのが EXEC 文だ。
【JCLサンプル:EXEC文と条件分岐】
----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
//STEP010 EXEC PGM=MYPROG1,REGION=4M,
// PARM='DEBUG,2026-05-07',
// COND=(4,LT)
- COND=:逆説の論理学
COND=(4,LT)は「4 小なり 戻り値(RC)」の意。つまりRC=8ならこのステップをスキップする。この独特のロジックを正確に制御できてこそ、複雑なジョブフローを構築できる。

DD文:リソースの「マッピング」と後処置
最も障害が発生しやすく、エンジニアの腕が試されるのが DD 文だ。
【JCLサンプル:DD文の精密設定】
----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
//SYSUT2 DD DSN=USER.SUGINO.DATA,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,VOL=SER=VOL001,
// SPACE=(TRK,(10,5),RLSE)
- DISPの三段構え:
DISP=(NEW,CATLG,DELETE)は、**「成功したら登録し、失敗したら消せ」**という命令だ。異常終了時にファイルを残すと、再実行時にNOT CATLGD 2エラーを引き起こす。 - SPACEのRLSE: 使い終わった後に余った領域をOSに返却する。限られたストレージを分け合うメインフレームの世界における「お片付け」の美学だ。

継続行の作法:カンマの後に「沈黙」を
1行に入り切らないパラメータを次行に書くとき、JCLには特有の「呼吸」がある。
- カンマ(
,)で終わらせる。 - 次行の1〜2カラム目に
//を書く。 - 4〜16カラム目の間から記述を再開する。
[最重要デバッグポイント] カンマの後にスペースを1つでも入れると、OSはそこで「命令が終わった」と誤認する。この**「見えない空白」**こそが、深夜のバッチ障害で数時間を奪う最大の敵だ。
結び:構文を制する者は、システムを制す
JCLの構文は、1文字、1カラムのズレも許されないパズルだ。だが、この「不自由な自由」を使いこなせるようになったとき、君のエンジニアとしての地肩は、いかなる最新プラットフォームでも通用する強固なものになっているだろう。
クロージング文案:エンジニアの「次なるステップ」へ
この記事を最後まで読んでくれた同志へ。
JCLという、一見すると無機質な文字列の羅列。しかし、その1行1行、1カラム1カラムには、先人たちが積み上げてきた「リソースへの敬意」と「確実な実行への執念」が宿っている。
27年という月日が流れても、私がこうしてJCLと向き合い、キーボードを叩き続ける理由。それは、この「基本の積み重ね」こそが、いかなる最新技術をも凌駕するエンジニアの地肩を作ると確信しているからだ。
次は、現場で誰もが一度は冷や汗を流す「ABEND(異常終了)」との戦い方、そのデバッグの極意について語ろう。
Status: JCLマスターライブラリ第1章・完。
「さあ、次のデバッグを始めようか。」








コメント