みなさま、日々お疲れ様です!大窪です!
前回の記事(【言語紹介】COBOLって知ってますか???)を読んでいただいた方から

言語別にできることを詳しく知りたい!

JCLについてもっと詳しく知りたい!
といったご要望をいただきました。
正直そこまで説明するとキリがないなぁ~っと思いつつも
「知りたい!」ということでしたので、できる限り説明していきたいと思います。
ですが、JCLの詳細などはもっと理解しないと説明できないので
今回は実際にJCLとCOBOLを作って説明したいと思います。
JCLとCOBOLが完成するまでの道のり
全体構造の把握(JCLどうしよっか)
システムを作る際には、必ず要望をもとに何をどうすればいいのか考えます。
今回の要望は…

「ライコン君に清潔で皮をむいたりんごを渡して!」
です。
要望をもとに全体構造を考えていきます。
今回の場合は、以下のように考えました。
-
- りんごを用意する。 ※購入手順は今回の対象外とする
- 皮むき器(包丁でも代用OK)を用意する。 ※すでに持っているものとする
- 石鹸を用意する。
- 水と石鹸で手を洗う。 ※水はすでに存在するものとする
- 皮むき器を使用してりんごの皮をむく。 ※むく=りんごから-1gを計算する
- ライコン君にりんごを渡す。
1~6までの各手順(工程ともいいます)をもとにJCLだったり、
プログラム(COBOL)が作られます。
全体構造をゼロから考えられはしなくても、
きちんと把握(理解)できるようになることが重要です。
※現場では、COBOL初心者でもここから入ることになります
たとえば、正確に把握できていない場合は以下のようになります。
-
- 石鹸で手を洗う。
- 皮むき器を使用してりんごの皮をむく。
- ライコン君にりんごを渡す。
何が違うでしょうか??
主に「りんごの用意」、「皮むき器の用意」、「石鹸の用意」が不足しています。
COBOLというのはC#などとは違って全てを記述する必要のあるプログラミング言語です。
実際にCOBOLでプログラミングするとなるとかな~り細かく整理しないとエラーだったり、意図したとおりの結果にならなかったりします。 ※※ここかなり重要!※※
JCLでの段取り決め
全体構造が把握できたら、JCLでどのように処理すべきか考えていきます。
「ライコン君にりんごを渡す」までを例にすると以下になります。
1.りんごを用意する。 ※購入手順は今回の対象外とする
⇒ STEP010:データ準備
2.皮むき器(包丁でも代用OK)を用意する。 ※すでに持っている
⇒ STEP020:データ準備
3.石鹸を用意する。
⇒ STEP030:データ準備
4.水と石鹸で手を洗う。 ※水はすでに存在するものとする
⇒ STEP040:データ処理
5.皮むき器を使用してりんごの皮をむく。 ※むく=りんごから-1gを計算する
⇒ STEP050:データ処理
6.ライコン君にりんごを渡す。
⇒ STEP060:転送処理
7.最後
⇒ STEP900:終了処理(りんご、皮むき器、石鹸などを片付ける)
STEPXXXは、基本的に10づつずらして宣言します。
理由は、例えばSTEP010~STEP020の間に追加で処理すべきことが増えたときに間に処理をいれるためです。現場によってはルールが違います。
段取りが決まると、どこをCOBOLプログラミングしなければいけないかがわかります。
今回は「4.水と石鹸で手を洗う。」と「5.皮むき器を使用してりんごの皮をむく。」が対象です。
※データ準備などは、JCL側でユーティリティ(EXCELでいうところの関数)を使って処理します
いざ、COBOLプログラミング!
段取りまで決まったらプログラミングしていきます。
以下は「4.水と石鹸で手を洗う。」として作成したCOBOLソースです。
コードの途中ですが全コード載せても意味がないので今回は割愛します!
前回、コードの説明はしてないのでCOBOLプログラムの意味が全くわからないと思います。
今回はJCLとCOBOLが連携していることをお伝えしたいので、コードのサンプルを途中まで載せて次(JCLとCOBOLの関係性)で説明します。
いったん同じように「皮むき器を使用してりんごの皮をむく。」もコーディングを行います。
(こちらも割愛)
JCLとCOBOLの関係性
実際にサンプルとして私が書いたコードをもとに説明していきたいと思います。
赤枠部分、青枠部分を確認ください。
※なお、コンパイル等していないコードですので誤りがあるかもしれません
■JCL↓
■COBOL↓
赤枠部分が「ZZTE0001」となっています。
これは動かすプログラムを定義していて、
JCL側で「ZZTE0001」を実行するようになっています。
青枠部分の「IN01、IN02、OT01」がJCL側で
- IN01(入力1つ目)
- IN02(入力2つ目)
- OT01(出力1つ目)
を定義しています。
あくまでJCLと同一名とする必要があるだけです。
説明したのはほんの一部だけですが、
JCLとCOBOLが連携していることを把握できたら問題ありません。
まとめ
今回お伝えしたかったのは、
- 全体構造の把握は初現場からあり得る
- 全体構造を把握した上でないとCOBOLコーディングできない
- JCLとCOBOLは連携している
以上となります!
今回は専門的な内容も入ってきているので、
詳細な説明を省略している部分が多くなってしまいました。
もっと詳しく知りたい部分がある方はコメントくださいね!
コメント