JCLで何ができる?JCLのコマンド8選とOSとの関係性を解説!

最終更新日:2026年8月4日

JCLって何?

JCL(Job Control Language)を学ぶエンジニアのイメージ

JCLは、汎用機でプログラムを動作させるために記述するスクリプト言語です。Job Control Languageの略語であり、その名称の通りジョブを制御する言語です。

汎用機ではCOBOLやFORTRANなどの言語を使ってプログラミングしますが、これらの言語は実行前にコンパイルという作業が必要です。JCLは別途コンパイルを行わなくても、すぐに実行できる言語です。

スクリプト言語とコンパイラ言語の違い

JCLやBASICなどのスクリプト言語はコンパイルせずに実行でき、プログラミングも比較的容易です。JCLも含む「スクリプト言語」と呼ばれるプログラミング言語は、「インタープリタ型言語」に分類されます。

インタープリタ型言語 vs コンパイラ型言語 比較
項目 インタープリタ型(JCL等) コンパイラ型(COBOL等)
実行前処理 不要(そのまま実行) コンパイル(翻訳)が必要
実行速度 1命令ずつ変換するため低速 変換済みのため高速
デバッグ 即時実行で確認しやすい コンパイルエラーで事前検出
用途 ジョブ制御・バッチ処理定義 業務ロジックの実装
代表例 JCL・Python・Ruby・Bash COBOL・FORTRAN・C言語・Java

JCL言語は何ができる?

JCLは汎用機向けのスクリプト言語ですが、実際にどのような処理を担っているのでしょう。汎用機を使って行われる業務処理の核となる処理は、COBOLやFORTRANなどのコンパイラ型言語を使って実装されています。

ここでは、JCLでできることと実現できないことをそれぞれ紹介します。

JCL言語でできること:バッチ処理

バッチ処理とは、画面からプログラム処理を指示する「オンライン処理」と異なり、決められたタイミングで、決められた手順でプログラムを実行する処理のことです。時間がかかる処理は、誰もコンピュータを使っていない夜中に「バッチ処理」として処理させます。

JCLでバッチ処理の流れる順番を記述しておけば、たとえ夜中で人間の手を介すことができなくても、順番通りに処理を流していけます。

JCL言語でできないこと:ジョブストリームの自動的な制御

JCLでバッチ処理を制御できると紹介しましたが、「夜中に」実行するとか「サーバー起動時に」実行するといった、時間やタイミングを指定して自動実行させることはJCLの制御範囲から外れます。

実行順序をJCLで定義し、実行のタイミングは別途スケジューラーを設定して制御することになります。

JCLの基本構文サンプル

JCLは決まった構文(JCLステートメント)に従って記述します。以下は、JOBカード・EXECステートメント・DDステートメントを組み合わせた基本的なJCLサンプルです。

//MYJOB JOB CLASS=A,MSGCLASS=X,NOTIFY=&SYSUID
//* コメント: このジョブはデータセットのコピーを実行します
//STEP01 EXEC PGM=IEBGENER
//SYSPRINT DD SYSOUT=*
//SYSUT1 DD DSN=MYDATA.INPUT,DISP=SHR
//SYSUT2 DD DSN=MYDATA.OUTPUT,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSIN DD DUMMY

このJCLの構造と読み方は以下の通りです。

  • 1行目(JOBカード):ジョブ名(MYJOB)・実行クラス・メッセージ出力先を指定
  • 2行目(COMMENTステートメント)://*から始まるコメント行
  • 3行目(EXECステートメント):ステップ名(STEP01)と実行プログラム(IEBGENER)を指定
  • 4〜9行目(DDステートメント):入力・出力データセットを定義

JCLの各行は必ず//から始まり、コメント行は//*、コマンド行は//名前 動詞 パラメーターの形式で記述します。

JCLのコマンド8選

JCLはバッチ処理のように処理の流れをひと固まりとして定義するときに使われることから、使用されるコマンドも「定番」といえる多用されるものがあります。

ここでは、JCLの中でよく使われる8つのコマンドを、コマンドの意味と記述形式について紹介していきます。

JCLのコマンド(ステートメント)8選 早見表
# コマンド 役割 使い方のポイント
1 EXEC プログラムを実行させる ジョブストリームの開始。PGM=実行プログラム名を指定
2 DD データセットを識別・定義する DSN/DISP/UNITなど多くのパラメーターを持つ
3 JOB ジョブの開始を宣言する JCLの最初に必ず記述。クラス・出力先等を設定
4 SET 初期値・変数を設定する JCL冒頭でまとめて定義するとメンテナンス性向上
5 COMMENT(//*) コメントを記述する //*から始まる行は全てコメント。実行対象外
6 INCLUDE 外部JCLステートメントを組み込む PDSまたはPDSEのメンバーを指定して流用できる
7 XMIT ノード間でストリームレコードを伝送する 複数のパラメーターで宛先・区切り文字を指定可能
8 ENDCNTL プログラム制御の終わりを宣言する CNTLステートメントの後に記述。複数PGMの制御も可能

JCLのコマンド1:EXEC

EXECは、プログラムを実行させるコマンドです。

//ステップ名 EXEC PGM=実行プログラム,PARM=…

EXECステートメントは、ステップ名を記述しステップの名前を割り当てます。EXECステートメントにより、ジョブストリームが開始されます。続いて、実行プログラム名を含む、必要なパラメーターを指定します。EXECのパラメーターでは、仮想記憶の割当量やCPU使用の最大時間なども指定できます。

JCLのコマンド2:DD

DDは、データの集合体を識別するために定義するコマンドです。

//データ定義名 DD [DSN=xxx,DISP=xxx,UNIT=xxx,VOL=xxx,SPACE=xxx,DSORG=xxx,DCB=xxx,…]

DDステートメントでデータ定義名を設定します。DDステートメントの各種パラメーターでは、データ実行前の処置や装置情報などの情報を指定します。

JCLのコマンド3:JOB

JOBはJOB名を割り当て、ジョブの開始を宣言するコマンドです。

//JOB名 JOB CLASS=xx,MSGCLASS=xx,REGION=xx,…

JOBステートメントからジョブが開始され、以降が実際にジョブで実行する処理となります。JOBステートメントの各種パラメーターを指定して、仮想領域のサイズや実行タイプ、実行結果の出力先などをコントロールできます。

JCLのコマンド4:SET

SETはジョブの中で使用する初期値を設定するコマンドです。すでに値が設定されているパラメーター変数の値を変更する際にも使えます。

//[name] SET パラメーター名=xxx

SETステートメントで、EXECのパラメーター値をあらかじめ設定しておき、JCLの中でEXECに続き初期値を設定した変数を指定して実行できます。初期値を、JCL文の冒頭でまとめて記述しておくことで、メンテナンス性が向上します。

JCLのコマンド5:COMMENT

JCL文の中でコード記述やパラメーターに注釈を残したいときに使えるのが、コメントのステートメントです。注釈を入れるコメントステートメントは「*」を使います。

//* comment

JCL文の中で「//*」から始まる行は、1行すべて注釈行として扱われ、実行時の翻訳対象から外されます。実行コードからは外されますが、出力リストには注釈として出力されます。

JCLのコマンド6:INCLUDE

INCLUDEはジョブに組み込むJCLステートメントを指定するコマンドです。

//[name] INCLUDE MEMBER=xxxx

INCLUDEステートメントで指定できるのは、PDSと呼ばれる区分データ・セットとPDSEと呼ばれる拡張区分データ・セット のいずれかのメンバーです。

JCLのコマンド7:XMIT

XMITはノード間でストリーム・レコードを伝送するコマンドです。

//[name] XMIT parameter[,parameter]…

XMITステートメントでは、コマンドの後に複数のパラメーターとコメントを記述できます。パラメーターでは、伝送を停止するまでの後続のレコードすべての宛先を指定できます。その他、伝送を停止する区切り文字と制御ステートメント用の置換文字を指定できます。

JCLのコマンド8:ENDCNTL

ENDCNTLは、プログラム制御の終わりを宣言するコマンドです。ENDCNTLは、CNTLステートメントで始まるプログラム制御ステートメントに続けて記述します。

//[name] ENDCNTL [注釈]

ENDCNTLステートメントは、1つのプログラムだけでなく、複数プログラムを制御することもできます。ジョブ・ステップ内やカタログ式プロシージャーなどの中に記述できるステートメントです。

OSとJCLとの関係性5選

JCLは、メインフレームとも呼ばれる汎用機で使われるインタープリタ型言語です。汎用機のOSはメーカーによって異なります。汎用機で使われるJCLも、各OSによってコマンドが異なったり記述形式が異なったりする部分があります。

ここでは、JCLを理解するうえで重要なポイントとなるOSの種類を紹介します。

JCLとの関係性1:VSE系

VSE系に分類されるOSを使っているのは、IBM社製の「DOS/VSE」、「VSE/ESA」、「z/VSE」などです。VSE系で使われるJCLは、JCSと呼ばれています。

JCSはJob Control Statementの略語で、JCLとは構文も機能も異なります。

JCLとの関係性2:GCOS系

GCOS系に分類されるOSを使っているのは、Bull(フランス)の「GCOS」やNECの「ACOS」などです。

GCOSというOSは、General Comprehensive Operating Systemの略で、米国のメーカーがメインフレーム用に開発した多機能が売りのOSです。JCLも多機能で、シェルスクリプトに近い形で記述できます。

JCLとの関係性3:MVS系

MVSはIBM社製の汎用機で使われているOSで、MVS系のOSに分類されるのは、IBM社製の汎用機のほか、富士通や日立製作所の汎用機があります。

MVS系に分類されるOSの特徴は、仮想記憶機能の持ち方にあります。MVS系のOSのもとでは、異なるアドレス空間を使って実行が可能です。ここまで一般的なJCLとして紹介してきたものが、MVS系のOSで使われるJCLです。

JCLとの関係性4:MCP

MCPはUNISYS社製の汎用機「Clear Path Server」で使われているOSです。同じUNISYS社製の「Clear Path Server」でも、「Clear Path Server OS2200シリーズ」では異なるOSを搭載しています。

MCPでは、JCLに代わる言語としてWFL(Work Flow Language)を使っています。

JCLとの関係性5:OS2200

OS2200はUNISYS社製の汎用機「Clear Path Server OS2200シリーズ」のOSです。UNISYS社製の「Clear Path Server」とは異なるOSです。

「Clear Path Server」に搭載されているMCPというOSでは、JCLに代わる言語としてWFLが使われていますが、OS2200ではECLが使われています。UNISYS社製のOS1100でもECLが使われています。

JCLを使うキャリア・将来性

JCLを扱うエンジニアは、メインフレーム(汎用機)を使う金融機関・保険会社・官公庁・大企業などに多く在籍しています。

メインフレームは「時代遅れ」と思われがちですが、金融系の基幹システムや大量データの夜間バッチ処理には現在も現役で使われており、JCLスキルを持つエンジニアへの需要は根強く残っています。

JCLエンジニアの特徴まとめ
項目 内容
主な活躍フィールド 金融機関・保険会社・官公庁・大規模製造業
使用するOS z/OS(IBM)・GCOS・MCP(OS別にJCL記法が異なる)
COBOLとの関係 JCLはCOBOLプログラムの実行を制御する役割。セットで習得する
将来性 有資格エンジニアが減少中のため、稀少スキルとして評価が高い傾向
関連スキル COBOL・JES2/JES3・TSO/ISPF・SDSF(スプール管理)

よくある質問(FAQ)

Q1. JCLはどのような企業で使われていますか?

主に金融機関(銀行・証券・保険)、官公庁、大手製造業などでメインフレーム(汎用機)を使って大量データのバッチ処理を行う企業で使われています。IBMのz/OSを中心に、富士通・日立製作所の汎用機でも使用されています。

Q2. JCLはCOBOLとどう違うのですか?

COBOLは業務ロジック(計算・集計・帳票出力など)を実装するプログラミング言語であるのに対し、JCLはそのCOBOLプログラムをどのように実行するか(いつ・どの順番で・どのデータを使って)を制御するジョブ制御言語です。汎用機システムでは両方の知識が必要になります。

Q3. JCLは初心者でも学べますか?

JCL自体の文法は比較的シンプルで、コマンド数も限られているため、基本的な構文は短期間で習得できます。ただし実際の業務ではOSの種類やデータセット管理の知識も必要なため、実際のメインフレーム環境で実践的に学ぶことが重要です。

Q4. JCLスキルの将来性はありますか?

JCLは「時代遅れ」と思われがちですが、金融システムや基幹系システムの多くはまだメインフレーム上で動作しており、JCLスキルを持つエンジニアは現在も高い需要があります。年々エンジニアが減少している希少スキルのため、保有者は評価されやすい傾向があります。

まとめ:JCLについて理解しよう!

JCLを含む汎用機システム開発を学ぶエンジニアのイメージ

JCLは汎用機という特殊なコンピュータで必要になる言語です。パソコンで動作する言語に比べ、特殊性が高いので、メインフレームを扱うシステムエンジニアや情報処理を学んでいる学生でないと、存在感の薄い言語といえます。

本記事のポイントをまとめます。

  • JCLとは:汎用機(メインフレーム)でプログラムを動作させるジョブ制御言語。Job Control Languageの略語
  • インタープリタ型:コンパイル不要で即実行できる言語分類。実行速度はコンパイラ型より低いが手軽
  • 主な用途:バッチ処理の実行順序・データセット定義・プログラム呼び出し制御
  • コマンド8種:JOB・EXEC・DD・SET・COMMENT・INCLUDE・XMIT・ENDCNTLが基本構文
  • OS依存性あり:MVS系・VSE系・GCOS系・MCPなどOSによって記述形式が異なる点に注意

JCLを理解することで、コンピュータとプログラミング言語の変遷を体感でき、メインフレームエンジニアとしてのキャリアの幅も広がります。

▼ アクロビジョンについて

👔

一緒に働きましょう

一人ひとりのキャリアに向き合い、
活躍できる現場をご紹介します。

採用サイトを見る →
💻

システム開発のご依頼・ご相談

コンサルティングから運用保守まで、
ワンストップで対応します。

まずはお気軽にご相談ください →