COBOLのJCL連携で学ぶJES2とJES3の基礎知識!ジョブ管理の仕組みを初心者向けに解説
生徒
「COBOLのJCLを勉強していると、JES2やJES3という言葉が出てきます。これはCOBOLの機能なんですか?」
先生
「JES2やJES3はCOBOLの命令ではありません。メインフレームでJCLによって投入されたジョブを受け付けて、実行や出力などを管理する仕組みです。」
生徒
「JCLを書いたあと、実際にCOBOLプログラムが動くまでを管理してくれるということですか?」
先生
「そのように考えると分かりやすいです。ジョブを受け付け、実行できる状態になるまで待たせたり、実行後のメッセージや出力を管理したりします。」
生徒
「JES2とJES3にはどのような違いがあるのか、初心者でも分かるように教えてください。」
先生
「では、まずジョブとは何かを確認してから、JCLとJESの関係、ジョブが実行される流れ、JES2とJES3の考え方を順番に見ていきましょう。」
1. JES2とJES3を理解する前にジョブとは何かを知ろう
COBOLとJCLの連携を学習するときに重要になる言葉がジョブです。メインフレームでは、コンピュータに実行してもらう仕事のまとまりをジョブとして扱います。例えば、売上データを読み込んで集計する処理、給与を計算する処理、請求データを作成する処理などをジョブとして実行できます。
初心者の場合は、会社の受付に仕事の依頼書を提出する場面を想像すると分かりやすいでしょう。COBOLプログラムが実際に仕事をする担当者だとすると、JCLはどの担当者に何をしてもらうのかを書いた作業依頼書のようなものです。そして、その依頼書を受け付けて順番を管理し、実行へつなげる役割に関係するのがJESです。
JESはJob Entry Subsystemの略です。ジョブをシステムへ受け入れ、処理するための重要なサブシステムです。JCLによってジョブを投入したからといって、必ずその瞬間にCOBOLプログラムが実行されるわけではありません。システムには複数のジョブが存在するため、実行可能になるまで待つ場合があります。
そのため、COBOLによるバッチ処理を理解するときは、COBOLプログラムだけを見るのではなく、JCLによってどのようにジョブが定義され、JESによってどのように管理されるのかを理解することが大切です。
2. JCLとJESの関係を初心者向けに理解しよう
JCLはJob Control Languageの略で、日本語ではジョブ制御言語と呼ばれます。JCLには、実行するプログラム、使用するデータセット、処理結果の出力先など、ジョブを実行するために必要な情報を記述します。
JCLの基本的な構成を見ると、JESとの関係も理解しやすくなります。例えば、次のJCLではJOBステートメントでジョブを定義し、EXECステートメントで実行するプログラムを指定しています。
//JOB001 JOB CLASS=A,MSGCLASS=X
//STEP01 EXEC PGM=SAMPLE01
//SYSOUT DD SYSOUT=*
JOB001はジョブ名です。STEP01はジョブの中にある処理単位の名前です。そしてPGM=SAMPLE01によって、実行対象となるプログラムを指定しています。
このようなJCLをシステムへ投入すると、ジョブはJESによって受け付けられます。JESはジョブに関する情報を管理し、システムで実行するための処理につなげます。実行後に作成されるシステムメッセージや出力についても、JESの管理が関係します。
つまり、JCLとJESには役割の違いがあります。JCLはジョブをどのように実行するのかを記述するものであり、JESは投入されたジョブを受け付けて管理する仕組みです。初心者は、この2つを同じものだと考えないようにすると理解しやすくなります。
また、COBOLもJCLとは別の役割を持っています。COBOLには計算や条件分岐、ファイル処理などの業務処理を書きます。JCLではそのCOBOLプログラムを実行するための環境を指定し、JESはジョブ全体の受付や実行に関する管理を担当します。
3. JES2とは何かを初心者向けに解説
JES2は、メインフレームのz/OS環境でジョブを管理するために使われるJob Entry Subsystemです。COBOLを使ったバッチ処理のJCLを学習していると、JES2という名前を目にすることがあります。
JES2は、投入されたジョブの受付、実行を待っているジョブの管理、実行後に作られる出力の管理など、ジョブを運用するための重要な役割を持っています。
会社の受付に例えると、たくさんの部署から仕事の依頼書が提出されている状態を考えることができます。受付では依頼書を受け取り、どのような仕事なのかを確認し、処理できる状態になるまで管理します。処理が終わったあとには結果も管理します。JES2も、メインフレーム上で大量のジョブを効率よく扱うための仕組みと考えると理解しやすいでしょう。
例えば、次のような簡単なJCLを投入したとします。
//SALES01 JOB CLASS=A,MSGCLASS=X
//STEP01 EXEC PGM=SALES
//INPUT01 DD DSN=COMPANY.SALES.DATA,DISP=SHR
//SYSOUT DD SYSOUT=*
このJCLではSALES01というジョブを定義し、SALESというプログラムを実行するよう指定しています。入力データとして売上データセットを使用する構成です。
ジョブを投入すると、JES2がジョブを受け付けます。その後、ジョブは実行条件が整うまで管理され、実行へ進みます。処理が終了すると、実行時に作成されたメッセージや出力を確認できます。
そのため、COBOLプログラムの処理内容が正しくても、ジョブが実行されなかった場合には、プログラムだけではなくJCLやジョブの状態を確認することが重要です。JES2によるジョブ管理の基礎を知っておくと、COBOLのバッチ処理全体を理解しやすくなります。
4. ジョブが投入されてから実行されるまでの基本的な流れ
JES2によるジョブ管理を理解するには、JCLを投入してから処理結果を確認するまでの大きな流れを知っておくと便利です。細かな動作はシステム構成や運用方法によって異なりますが、初心者はまず、受付、待機、実行、出力という流れをイメージすると分かりやすくなります。
最初に利用者がJCLを投入します。投入されたジョブはJESによって受け付けられ、ジョブを識別するための情報が管理されます。この段階では、仕事の依頼書が受付へ届いた状態だと考えることができます。
次に、ジョブは実行できる条件が整うまで待つことがあります。メインフレームでは多数のジョブが同時に管理されているため、すべてを好きな順番で直ちに実行できるとは限りません。JCLで指定されるクラスやシステム側の設定などが、ジョブの扱いに関係します。
実行できる状態になると、ジョブの処理が進みます。ジョブの中には複数のジョブステップを記述することができ、それぞれのステップで異なるプログラムを実行することもできます。
例えば、次のJCLでは2つの処理を順番に記述しています。
//DAILY01 JOB CLASS=A,MSGCLASS=X
//STEP01 EXEC PGM=CHECK01
//SYSOUT DD SYSOUT=*
//STEP02 EXEC PGM=UPDATE01
//SYSOUT DD SYSOUT=*
この例では、1つのジョブの中にSTEP01とSTEP02があります。ジョブは仕事全体、ジョブステップはその仕事を構成する個別の作業だと考えると理解しやすくなります。
実行後には、処理結果やシステムからのメッセージなどを確認します。プログラムが正常に終了したのか、JCLに問題がなかったのかを調べるときに、ジョブの出力情報は重要な手掛かりになります。
JCLを使ってジョブを投入する
JESがジョブを受け付けて管理する
実行できる状態になるまで待機する場合がある
ジョブのステップが実行される
実行後のメッセージや出力を確認する
5. JOBステートメントのCLASSとMSGCLASSを理解しよう
JES2によるジョブ管理を学ぶときに、JCLのCLASSやMSGCLASSという指定を目にすることがあります。どちらもアルファベットで似ているため、初心者は混同しやすい部分です。
CLASSは、ジョブをどのクラスとして扱うのかを指定するために使用します。クラスごとの具体的な扱いはシステムの設定によって異なります。そのため、CLASS=Aだから必ず特定の処理になるというように、文字だけから意味を決めつけることはできません。
MSGCLASSは、ジョブに関するメッセージなどの出力クラスを指定するために使われます。実際にどのように出力が扱われるかについても、システム側の設定や運用方法が関係します。
例えば、次のようなJOBステートメントがあります。
//BATCH01 JOB CLASS=A,MSGCLASS=X
//STEP01 EXEC PGM=BATCHPGM
//SYSOUT DD SYSOUT=*
初心者の段階では、CLASS=Aはジョブのクラスに関係する指定、MSGCLASS=Xはジョブのメッセージなどの出力クラスに関係する指定と整理しておくと分かりやすいでしょう。
重要なのは、CLASSやMSGCLASSの具体的な意味が、利用するメインフレーム環境の設定によって変わるという点です。実際の業務でJCLを作成したり修正したりするときは、既存のJCLやシステムの運用ルールを確認する必要があります。
JCLのサンプルだけを見てCLASSやMSGCLASSの値を暗記するのではなく、JESによるジョブ管理や出力管理と関係する指定であり、環境ごとの設定があることを理解しておくことが大切です。
6. JES2でジョブの状態や出力を確認する理由
COBOLプログラムをJCLから実行したとき、画面にすぐ処理結果が表示されるとは限りません。バッチ処理では、投入したジョブが現在どのような状態なのかを確認したり、処理終了後の出力を確認したりする作業が重要になります。
例えば、JCLを投入したのに期待したデータが作成されていない場合、すぐにCOBOLプログラムの計算処理が間違っていると判断するのは早すぎます。ジョブがまだ実行されていない可能性や、JCLの段階で問題が発生している可能性もあります。
実際のメインフレーム環境では、ジョブ名やジョブを識別する情報を手掛かりとして状態を確認します。また、ジョブの実行後にはスプールに保持される出力を確認することがあります。
スプールは初心者には分かりにくい言葉ですが、処理するデータや出力を一時的に保持し、効率よく扱うための仕組みだと考えると理解しやすくなります。ジョブから出力されたメッセージなどを確認するときにも、スプールに関する知識が役立ちます。
例えば、プログラムから標準的な出力を行うため、JCLに次のようなDDステートメントが記述されている場合があります。
//SYSOUT DD SYSOUT=*
SYSOUTを利用した出力はJESの出力管理と関係します。COBOLのDISPLAYによる内容やシステムからの情報などを調べる際には、ジョブの出力を確認することが問題調査の基本になります。
そのため、COBOLのバッチ処理では、ソースコードを読めるだけでなく、JCLを読み、投入したジョブの状態と出力を確認するという流れを理解することも大切です。
7. JES3とは何かとJES2との違いを理解しよう
JES3も、JES2と同じくジョブの受付や処理を管理するために使われてきたJob Entry Subsystemです。ただし、JES2とJES3は内部の設計や複数システムにおけるジョブ管理の考え方などに違いがありました。
初心者向けに大きく整理すると、JES2はそれぞれのシステムを中心にジョブ処理を管理する考え方を持ち、JES3は複数のシステムをより中央集中的に管理する考え方を持っていた点が代表的な違いとして挙げられます。
JES3では、複数のシステムで構成される環境において、ジョブをどこで実行するのかなどを中央側から管理する仕組みが特徴でした。このため、JES2とJES3は同じJESという名前でも、ジョブの管理方式や運用の考え方が完全に同じというわけではありません。
ただし、現在のz/OSを学習する場合には注意点があります。JES3は従来のIBMメインフレーム環境で利用されてきた仕組みですが、現在のz/OSでは従来のJES3は現行機能として提供されていません。そのため、新しいz/OS環境の学習ではJES2を中心に理解し、JES3については既存資料や過去のシステムを理解するための基礎知識として整理すると分かりやすくなります。
古いCOBOLシステムの設計書、運用資料、メインフレームに関する書籍などではJES3という用語が登場することがあります。そのため、現在利用している環境がJES2であっても、JES3という名前と基本的な役割を知っておくことには意味があります。
8. JES2とCOBOLバッチ処理の関係を整理しよう
COBOL、JCL、JES2という3つの用語が同時に登場すると、初心者にはそれぞれの役割が分かりにくく感じられます。しかし、仕事を依頼する場面に置き換えると整理しやすくなります。
COBOLプログラムは、実際の業務処理を担当します。売上金額を計算する、顧客データを読み込む、条件に応じてデータを編集する、ファイルへ結果を書き込むといった処理はCOBOLプログラムの役割です。
JCLは、そのCOBOLプログラムをどのように実行するのかを指定します。どのプログラムを実行するのか、どの入力データセットを使うのか、どこへ出力するのかなどを記述します。
そしてJES2は、JCLによって投入されたジョブを受け付け、ジョブの実行や出力に関する管理を行います。つまり、COBOLが仕事をする担当者、JCLが仕事の依頼書、JES2が依頼書を受け付けて仕事の流れを管理する受付や管理担当だと考えると、それぞれの役割を区別できます。
例えば、毎日の売上データを集計するCOBOLプログラムがある場合、COBOL側には売上データを読み込んで金額を計算する処理を記述します。JCL側にはそのプログラムを実行するためのEXECステートメントや入力ファイルのDDステートメントなどを記述します。そのJCLをジョブとして投入すると、JES2によるジョブ管理の仕組みを通して処理されます。
この関係を理解しておくと、問題が起きた場所も切り分けやすくなります。計算結果がおかしいのであればCOBOLプログラムを確認し、使用するデータセットの指定がおかしいのであればJCLを確認します。ジョブがどのような状態にあるのかを知りたい場合は、JESによるジョブ管理や出力を確認します。
9. JES2によるジョブ管理で初心者が覚えておきたいポイント
JES2によるジョブ管理を理解すると、COBOLプログラムを作成してから実際にバッチ処理として実行されるまでの流れが見えやすくなります。初心者の段階では、JES2の細かな内部構造をすべて暗記するよりも、まずジョブがどのように扱われるのかという大きな流れを理解することが重要です。
最初に覚えておきたいのは、JCLを投入した瞬間にCOBOLプログラムが必ず実行されるわけではないということです。投入されたジョブはJES2によって受け付けられ、実行できる状態になるまで管理されます。複数のジョブが存在するメインフレームでは、このようなジョブ管理の仕組みが重要になります。
次に、ジョブとジョブステップを区別します。ジョブは処理全体のまとまりであり、その中にSTEP01やSTEP02など複数のジョブステップを持たせることができます。EXECステートメントを見ることで、それぞれのステップでどのプログラムが実行されるのかを確認できます。
また、ジョブが終了したあとには出力を確認する習慣も重要です。処理が終わったという事実だけではなく、どのようなメッセージが出ているのか、各ステップがどのように終了したのかを確認することで、正常終了したのか、問題が発生したのかを判断するための情報を得られます。
JCLのCLASSやMSGCLASSについては、値そのものを丸暗記するのではなく、システム側の設定と関係していることを理解しておきます。業務で使用する値は、所属するシステムの運用ルールや既存JCLを確認することが基本です。
JES3については、JES2と同じJob Entry Subsystemの仲間として長く利用されてきた仕組みですが、現在のz/OS環境を扱う場合は従来のJES3が現行機能ではない点も知っておく必要があります。一方で、古いCOBOLシステムや過去の設計資料を読む場面ではJES3という名称が登場する可能性があるため、JES2との考え方の違いを基礎知識として持っておくと資料を理解しやすくなります。
COBOLのJCL連携では、COBOLだけを学習してもバッチ処理全体の動きを理解することはできません。COBOLが業務処理を担当し、JCLがプログラムの実行方法やデータセットなどを指定し、JES2が投入されたジョブを管理するという役割分担を理解することが重要です。
特に実際の業務システムでは、プログラムの障害だけではなく、JCLの指定やジョブの実行状態を確認する場面があります。JES2によるジョブの受付、待機、実行、出力という基本的な流れを理解しておけば、COBOLバッチ処理がメインフレーム上でどのように動いているのかを、プログラム単体ではなくシステム全体の視点から捉えやすくなります。
まとめ
COBOLを使ったメインフレームのバッチ処理を理解するうえで、JCLとJES2の関係は重要な基礎知識です。COBOLプログラムだけを見ていると、作成したプログラムがどのように実行され、実行を待っているジョブがどのように管理され、処理結果をどこで確認するのかが分かりにくいことがあります。そこで、COBOL、JCL、JES2の役割を分けて考えることが大切です。
COBOLは、売上計算、給与計算、顧客データの更新、ファイルの読み書きなど、実際の業務処理を記述するためのプログラミング言語です。一方、JCLはJob Control Languageの略で、どのプログラムを実行するのか、どのデータセットを利用するのか、処理結果をどこへ出力するのかといった実行条件を指定します。そしてJES2は、JCLによってシステムへ投入されたジョブを受け付け、実行や出力に関係する管理を行います。
COBOLとJCLとJES2の役割を整理しよう
初心者がCOBOLのJCL連携を学ぶときは、会社で仕事を依頼する場面に置き換えると分かりやすくなります。COBOLプログラムは実際に作業を行う担当者、JCLは担当者へ渡す作業依頼書、JES2は依頼書を受け付けて仕事の流れを管理する受付担当のような存在です。
例えば、売上データを集計するCOBOLプログラムがあったとしても、そのプログラムだけでは、どの売上データを読み込んで実行するのか分かりません。JCLのEXECステートメントで実行するプログラムを指定し、DDステートメントで入力データセットや出力先などを指定します。そのJCLをジョブとして投入すると、JES2によるジョブ管理の仕組みを通して処理されます。
//SALES01 JOB CLASS=A,MSGCLASS=X
//STEP01 EXEC PGM=SALES
//INPUT01 DD DSN=COMPANY.SALES.DATA,DISP=SHR
//SYSOUT DD SYSOUT=*
この例では、SALES01がジョブ名です。STEP01はジョブの中にあるジョブステップで、SALESというプログラムを実行するように指定しています。INPUT01では入力として使用するデータセットを指定しています。このようなJCLを投入すると、JES2がジョブを受け付け、実行に関する管理を行います。
ここで重要なのは、JCLを投入した瞬間にCOBOLプログラムが必ず実行されるわけではないことです。メインフレームでは多数のジョブが管理されているため、ジョブは実行できる状態になるまで待つことがあります。そのため、JCLを投入したあとに結果がすぐに表示されなくても、必ずしもCOBOLプログラムに問題があるとは限りません。
JES2によるジョブ管理の基本的な流れ
JES2によるジョブ管理では、まずJCLによってジョブがシステムへ投入されます。JES2は投入されたジョブを受け付け、ジョブに関する情報を管理します。その後、ジョブは実行できる条件が整うまで待機する場合があります。実行できる状態になるとジョブの処理が進み、終了後にはメッセージや出力などを確認できます。
初心者は、ジョブの流れを受付、待機、実行、出力という順序で覚えておくと理解しやすくなります。実際のシステムではさらに細かな処理がありますが、COBOLのJCL連携を学ぶ最初の段階では、この大きな流れを理解することが重要です。
JCLを使ってジョブをシステムへ投入する
JES2が投入されたジョブを受け付ける
実行可能になるまでジョブが管理される
ジョブに記述されたジョブステップが実行される
実行後のメッセージや出力を確認する
この流れを理解すると、COBOLプログラムを作成してからバッチ処理として実行されるまでを、プログラム単体ではなくシステム全体として考えられるようになります。特に実務では、プログラムの処理内容だけでなく、ジョブが実行されたのか、どのステップまで進んだのか、どのようなメッセージが出力されたのかを確認することが重要です。
ジョブとジョブステップの違いを理解しよう
JCLを読むときには、ジョブとジョブステップの違いも理解しておく必要があります。ジョブは仕事全体のまとまりで、ジョブステップはジョブの中にある個別の処理単位です。1つのジョブの中に複数のジョブステップを記述し、それぞれで別のプログラムを実行することもできます。
例えば、最初にデータを確認し、そのあとにデータを更新する処理であれば、次のように複数のステップを持つJCLを考えることができます。
//DAILY01 JOB CLASS=A,MSGCLASS=X
//STEP01 EXEC PGM=CHECK01
//SYSOUT DD SYSOUT=*
//STEP02 EXEC PGM=UPDATE01
//SYSOUT DD SYSOUT=*
このJCLでは、DAILY01という1つのジョブの中にSTEP01とSTEP02があります。STEP01ではCHECK01を実行し、STEP02ではUPDATE01を実行する構成です。JES2によるジョブ管理を理解するときは、ジョブ全体と、その中にある個別のジョブステップを分けて考えると、JCLの構造が分かりやすくなります。
障害が発生した場合にも、どのジョブで問題が発生したのかだけではなく、どのジョブステップで問題が発生したのかを確認することが重要です。複数のプログラムを順番に実行するJCLでは、ジョブステップごとの処理内容を把握することで問題の場所を絞り込みやすくなります。
CLASSとMSGCLASSは環境の設定と関係する
JOBステートメントでは、CLASSやMSGCLASSという指定を目にすることがあります。CLASSはジョブのクラスに関係する指定で、MSGCLASSはジョブに関するメッセージなどの出力クラスに関係する指定です。
//BATCH01 JOB CLASS=A,MSGCLASS=X
//STEP01 EXEC PGM=BATCHPGM
//SYSOUT DD SYSOUT=*
ここで初心者が注意したいのは、CLASS=AやMSGCLASS=Xという文字だけを見て、すべてのシステムで同じ意味になると考えないことです。具体的なクラスの扱いは、利用しているメインフレームの設定や運用方法によって異なります。
そのため、実際の業務でJCLを作成したり変更したりするときは、既存のJCLやシステムの運用ルールを確認することが基本です。サンプルの値をそのまま暗記するのではなく、CLASSはジョブの管理、MSGCLASSはメッセージなどの出力管理と関係する指定であることを理解しておくとよいでしょう。
SYSOUTとスプールの関係も覚えておこう
JES2を学習するときには、ジョブの出力を確認する考え方も重要です。バッチ処理では、プログラムを実行した結果が一般的な画面操作のようにその場ですべて表示されるとは限りません。ジョブから出力されたメッセージなどは、スプールに保持される出力として確認することがあります。
スプールとは、処理する情報や出力を一時的に保持し、効率よく扱うための仕組みです。初心者の場合は、処理結果やメッセージを一時的に置いておく場所というイメージから理解すると分かりやすくなります。
JCLでは、次のようなSYSOUTの指定を見ることがあります。
//SYSOUT DD SYSOUT=*
SYSOUTを使った出力は、JESによる出力管理と関係しています。COBOLプログラムの実行結果を調査するときには、プログラムのソースコードだけを見るのではなく、ジョブの出力やシステムからのメッセージを確認することが大切です。
例えば、期待していたデータが作成されなかった場合、COBOLの計算処理に間違いがあるとは限りません。ジョブがまだ実行されていない場合や、JCLの指定に問題がありプログラムの実行まで進んでいない場合も考えられます。ジョブの状態と出力を確認することで、問題がCOBOL側にあるのか、JCL側にあるのか、それ以前のジョブ管理に関係しているのかを整理しやすくなります。
JES2とJES3の違いを整理しよう
JES2とJES3は、どちらもジョブの受付や処理を管理するJob Entry Subsystemとして使われてきた仕組みです。ただし、ジョブを管理するための設計や、複数のシステムを扱うときの考え方には違いがありました。
初心者向けに大きく整理すると、JES2はそれぞれのシステムを中心としてジョブ処理を管理する考え方を持っています。一方、従来のJES3は複数のシステムをより中央集中的に管理する考え方を持っていました。そのため、JES2とJES3は名前が似ていても、内部の管理方式まで同じというわけではありません。
現在のz/OSを学習するときは、JES2を中心としてジョブ管理の仕組みを理解することが重要です。従来のJES3については、古いCOBOLシステムの設計書や過去の運用資料などを読む際に名称が登場することがあります。そのため、JES3という仕組みが存在し、JES2とはジョブ管理の考え方に違いがあったことを知っておくと、既存資料を読みやすくなります。
ジョブが動かないときは役割を分けて考えよう
COBOLのバッチ処理で問題が発生した場合は、COBOL、JCL、JES2の役割を分けて考えると原因を整理しやすくなります。例えば、ジョブは正常に実行されたものの計算結果がおかしい場合は、COBOLプログラムの処理内容を確認します。
プログラムへ渡される入力データセットが想定と異なる場合は、JCLのDDステートメントなどを確認します。一方、JCLを投入したのにジョブが実行されていない場合は、ジョブの状態を確認する必要があります。実行後に問題が起きている場合は、ジョブの出力やメッセージを確認することで原因を調査します。
このように、COBOLプログラムだけを見て問題を探すのではなく、JCLによる実行条件とJES2によるジョブ管理まで含めて考えることが、メインフレームのバッチ処理を理解するポイントです。JCLを投入する、JES2が受け付ける、実行可能になるまで管理される、ジョブステップが実行される、処理後の出力を確認するという流れを頭の中でつなげておくと、実際の業務システムも理解しやすくなります。
JES2の細かな内部構造を最初からすべて覚える必要はありません。まずは、JES2がJCLで投入されたジョブの受付や実行、出力に関係する管理を担当していることを理解します。そして、JOBステートメント、EXECステートメント、DDステートメント、CLASS、MSGCLASS、SYSOUTなどのJCLの記述と結び付けながら覚えていくと、COBOLのJCL連携とジョブ管理の全体像が見えやすくなります。
COBOLが業務処理を担当し、JCLが実行方法を指定し、JES2が投入されたジョブを管理するという役割分担は、COBOLのバッチ処理を理解するための基本です。ジョブとジョブステップの違い、ジョブが投入されてから実行されるまでの流れ、スプールと出力の考え方、JES2とJES3の違いを整理しておくことで、メインフレーム上でCOBOLプログラムがどのように実行されているのかを理解しやすくなります。
生徒
「JES2はCOBOLの命令ではなくて、JCLで投入したジョブを管理する仕組みなんですね。」
先生
「そのとおりです。COBOLは業務処理を記述するプログラミング言語で、JCLはプログラムの実行方法などを指定します。そしてJES2は、投入されたジョブの受付や実行、出力に関係する管理を行います。」
生徒
「JCLを投入したら、すぐにCOBOLプログラムが実行されるとは限らないんですか?」
先生
「はい。投入されたジョブはJES2によって受け付けられ、実行できる状態になるまで管理される場合があります。メインフレームでは多数のジョブを扱うため、このような管理が必要になります。」
生徒
「ジョブとジョブステップも違うんですよね。」
先生
「違います。ジョブは仕事全体のまとまりで、ジョブステップはその中にある個別の処理です。1つのジョブに複数のEXECステートメントがあれば、複数のジョブステップでプログラムを実行する構成にできます。」
生徒
「CLASSとMSGCLASSは、文字の意味をそのまま暗記すればいいですか?」
先生
「値だけを暗記するのではなく、CLASSはジョブのクラス、MSGCLASSはメッセージなどの出力クラスに関係すると理解しましょう。具体的な扱いはシステムの設定によって異なるため、実務では運用ルールや既存のJCLを確認します。」
生徒
「スプールという言葉もJES2と関係しているんですね。」
先生
「はい。ジョブの実行後にメッセージや出力を確認するときに関係します。バッチ処理では、プログラムを実行することだけでなく、実行後の出力を確認することも重要です。」
生徒
「JES2とJES3は、どちらも同じようにジョブを管理する仕組みだったんですか?」
先生
「どちらもJob Entry Subsystemですが、ジョブ管理の設計や複数システムを扱う考え方などに違いがありました。現在のz/OSを学ぶ場合はJES2を中心に理解し、JES3は過去のシステムや資料を読むための基礎知識として押さえておくと分かりやすいです。」
生徒
「COBOLのプログラムが動かないときも、COBOLだけを調べればよいわけではないんですね。」
先生
「その点が大切です。計算処理がおかしい場合はCOBOL、データセットなどの指定を確認するときはJCL、ジョブの状態や実行後の出力を確認するときはJES2によるジョブ管理というように、役割を分けて考えると原因を整理しやすくなります。」
生徒
「JCLを投入して、JES2が受け付けて、実行されて、最後に出力を確認するという流れで考えると分かりやすいです。」
先生
「その流れを理解しておけば、COBOLのJCL連携をプログラム単体ではなく、メインフレームのバッチ処理全体として捉えられるようになります。」