JCLの条件実行(CONDパラメータ)の基礎をやさしく解説!初心者でも分かる実行制御の仕組み
生徒
「JCLって、ジョブの中で実行するかどうかを条件で決められるって聞いたんですけど、本当ですか?」
先生
「はい、本当です。JCLにはCONDパラメータという機能があって、ジョブステップを実行するかスキップするかを制御できます。」
生徒
「なんだか難しそうですが、具体的にどういうことなんですか?」
先生
「では、日常生活に例えて説明しながら、使い方を見ていきましょう。」
1. JCLと条件実行とは?
まず、JCL(Job Control Language)は、メインフレーム(大型コンピュータ)でバッチ処理のジョブを実行するための「手順書」のようなものです。どのプログラムをどの順番で動かすか、どのデータセットを使うかといった情報を、人間が読める形で指定することで、ジョブを自動的に流すことができます。
その中で「条件実行」と呼ばれるしくみは、あるステップの実行結果を見て、次のステップを実行するかスキップするかを決める考え方です。たとえば「前の処理が正常なら次へ進む」「エラーが出たら後続処理はやめる」といった流れを、JCLのジョブステップ単位で制御できます。複数のステップを組み合わせてジョブ全体を設計するとき、この条件実行の考え方を知っているかどうかで、JCLの読みやすさや運用のしやすさが大きく変わってきます。
イメージしやすいように、日常生活に置き換えてみましょう。「もし野菜が切れていなければ、切る作業を行う」「もう切れていれば、切る作業はスキップする」「もし洗濯物が少なければ、今日は洗濯機を回さない」といった判断は、まさに条件実行と同じ考え方です。前の状態や結果を見て、次にやること・やらないことを決めているわけです。
JCLでも同じように、ひとつひとつのジョブステップは「料理の手順」や「家事の段取り」のような役割を持っています。まずどのプログラムを実行するかを指定し、その結果に応じて次のステップを動かすかどうかを決めることで、メインフレーム上のバッチ処理を安全かつ効率よく進めることができます。
//JOB001 JOB (ACCT),'SIMPLE JOB'
//STEP1 EXEC PGM=PROGA
//STEP2 EXEC PGM=PROGB
このように、ジョブの中にはSTEP1、STEP2といった複数のジョブステップが並びます。ここに「どの結果のときに次を実行するか」「どんな場合は次を飛ばすか」という条件実行の考え方を組み合わせることで、実際の業務に合わせた柔軟なジョブ制御が行えるようになります。以降の章では、この条件実行を具体的に実現するために使われるCONDパラメータについて、順番に見ていきます。
2. CONDパラメータの基本
CONDパラメータは、JCLのジョブステップに指定して、そのステップを実行するかどうかを決めます。終了コード(Return Code)という数値を使って判断します。終了コードは、前のステップが正常終了したか、エラーで終わったかを示す値です。
書式は以下の通りです。
//ステップ名 EXEC PGM=プログラム名,COND=(比較値,比較演算子,ステップ名)
- 比較値:終了コードと比較する数値。
- 比較演算子:EQ(等しい)、NE(等しくない)、GT(より大きい)など。
- ステップ名:比較対象となる前のステップ。
3. 簡単な例
例えば、ステップAの終了コードが4より大きければステップBをスキップする、という条件はこう書きます。
//STEPB EXEC PGM=MYPROG,COND=(4,LT,STEPA)
この場合、「STEP A の終了コードが4より小さい(LT = Less Than)」なら、STEPBはスキップされます。
日常で言えば「テストの点数が80点未満なら、遊びに行くのをやめて勉強する」という感じです。
4. CONDパラメータの逆の意味に注意
プログラミング初心者が混乱しやすいのは、CONDパラメータの条件が「スキップ条件」だということです。つまり、条件が「真」になったら、そのステップは実行されません。
これは、「もし雨が降っていたらピクニックを中止する」というルールに似ています。雨が降っている(条件が真)なら、中止(スキップ)です。
5. よく使う比較演算子
- EQ:Equal(等しい)
- NE:Not Equal(等しくない)
- GT:Greater Than(より大きい)
- LT:Less Than(より小さい)
- GE:Greater or Equal(以上)
- LE:Less or Equal(以下)
6. 実際のJCL例と解説
//JOB001 JOB (ACCT),'TEST JOB'
//STEPA EXEC PGM=PROGA
//STEPB EXEC PGM=PROGB,COND=(4,LT,STEPA)
//STEPC EXEC PGM=PROGC
この例では、まずPROGAが実行されます。その終了コードが4より小さい場合、STEPBはスキップされ、次のSTEP Cに進みます。
7. CONDパラメータを使うメリット
CONDパラメータを使うことで、不要な処理を省略し、ジョブの実行時間やリソースの節約が可能です。例えば、前のステップがエラーになったら後続の処理を止めることで、誤った結果を広げずに済みます。
銀行のシステムや大規模なバッチ処理では、こうした条件制御が非常に重要です。
8. ポイント整理
JCLのCONDパラメータは、ジョブステップの実行可否を終了コードで判断する仕組みで、条件が成立するとそのステップはスキップされます。スキップ条件という点を覚えておけば、混乱せずに使いこなせます。
まとめ
JCLの条件実行を総合的に振り返ろう
JCLにおける条件実行は、大型コンピュータのジョブ制御を理解する上で欠かせない重要な仕組みであり、特にCONDパラメータは多くの実務現場で頻繁に利用される制御方式として知られています。今回の記事では、終了コードを用いた条件判定、スキップ条件の考え方、比較演算子の基礎、日常生活の例えなどを通して、初心者でも理解しやすい流れで解説してきました。特にCONDが「実行条件」ではなく「スキップ条件」であるという点は、多くの初学者がつまずきやすい要素であり、この理解が深まることでジョブの流れを正確に制御できるようになります。 また、JCLは見慣れない記号やキーワードが多く、複雑に見えるものの、CONDPパラメータは「前のステップがどんな状態だったか」「その結果を見て次のステップを実行するかどうか」というシンプルな判断基準で動作しています。終了コードがどのように返され、どの条件式によってステップがスキップされるのかを細かく理解することで、ジョブ全体の構成を安全かつ効率的に設計できるようになります。特に大規模システムでは、無駄な処理を避けたり、異常終了をきっかけに誤った後続処理を防ぐために、条件制御が極めて重要です。この仕組みを正しく使えると、ジョブの信頼性が大幅に向上し、システム運用の安定にも寄与します。 また、CONDパラメータを利用した実際のJCLコードの読み方や、比較演算子の意味を理解することで、既存のジョブ修正や問題調査にも役立ちます。特にスキップ条件を誤って設定すると、意図した処理が実行されなかったり、逆に不要なステップが走ってしまったりするため、条件の書き方は極めて重要です。今回の例のように、比較値や演算子の意味を正しく理解し、終了コードの取り扱いを把握することで、より安全なジョブ設計が可能になります。
サンプルプログラムで振り返る
ここで記事の内容を踏まえ、CONDパラメータを含むサンプルJCLをもう一度まとめます。
//JOB200 JOB (ACCT),'SAMPLE JOB'
//CHKSTEP EXEC PGM=CHECKPGM
//RUNSTEP EXEC PGM=MAINPGM,COND=(8,LE,CHKSTEP)
//ENDSTEP EXEC PGM=FINPGM
このサンプルでは、CHKSTEPの終了コードが8以下の場合、RUNSTEPがスキップされ、ENDSTEPに進む動作を表しています。実務では、チェック処理やエラー判定を行うステップの終了コードを基準に、後続ステップの実行可否を柔軟に管理します。CONDがスキップ条件であることを意識しながら読み解くと、ジョブ全体の流れが非常に明確になります。
生徒
「CONDパラメータって、条件が真になるとスキップされるってところが特に大事なんですね。」
先生
「そうですね。多くの人が最初は“条件が真なら実行される”と考えてしまうんですが、JCLでは逆の意味になるので注意が必要です。」
生徒
「終了コードの数値が基準になるっていうのも分かりやすかったです。前のステップの結果によって次の処理を変えるって、実際のシステムでも重要ですよね。」
先生
「はい。特に大規模バッチでは、エラーが起きた後に無駄な処理を続けないためにもCONDはとても役立ちます。」
生徒
「比較演算子もEQ、NE、GT、LTなどいろいろありましたね。実際のコードを読めるようになりたいです。」
先生
「今回のまとめで使ったサンプルを何度も読みながら理解すれば、自然と書けるようになりますよ。慣れるほど便利に感じるはずです。」
生徒
「ありがとうございます!次はもっと複雑な条件にも挑戦してみます!」