メインフレームの入り口、PL/Iの世界へようこそ!―JCLとプログラムを繋ぐ「入り口」の仕組み
こんにちは。基幹システムの現場で長年、メインフレームの深淵と戯れてきたシステムアーキテクトです。
JavaやCOBOLの経験がある方にとって、メインフレームの世界は少し「閉鎖的で難解」に見えるかもしれませんね。特にPL/Iは、C言語のような柔軟性とCOBOLのようなビジネスライクな側面を併せ持つ、非常に面白い言語です。「なんだか構文が独特で怖そう…」と感じている方もいるかもしれませんが、大丈夫です。今日は、その最初の一歩である「プログラムの構造」と、外部データとのやり取りについて、少しだけ紐解いてみましょう。
—
1. PL/Iの「戸籍」―PACKAGEとPROCEDURE
Javaであれば `public class`、COBOLであれば `IDENTIFICATION DIVISION` に相当するものとして、PL/Iには `PROCEDURE` があります。
1
/ プログラムの入り口はここから始まります /
MY_PROGRAM: PROCEDURE OPTIONS(MAIN);
/ 処理ロジックをここに書きます /
PUT SKIP LIST(‘こんにちは、PL/Iの世界へ!’);
END MY_PROGRAM;
ここでのポイントは、`OPTIONS(MAIN)` という記述です。これはOS(z/OS)に対して、「このプログラムがバッチ実行の起点(メインエントリーポイント)ですよ」と教えるための魔法の言葉です。
また、大規模なシステムでは `PACKAGE` を使うこともありますが、まずは「`PROCEDURE` という箱の中にロジックを詰め込み、`END` で蓋をする」というイメージで捉えてください。COBOLのように厳密なセクション分けが少ない分、自由度が高いのがPL/Iの魅力であり、同時に「書き手の癖」が出やすい理由でもあります。
—
2. JCLとPL/Iの「橋渡し」―SYSINとSYSPRINT
皆さんが一番戸惑うのが、JCL(ジョブ制御言語)の `DD` 文と、プログラム内の `FILE` 属性の紐付けではないでしょうか。
Javaでファイルをオープンする際、パス名を直接書きますよね? メインフレームは違います。プログラム内には「論理的な名前(DD名)」だけを書き、具体的なファイルの実体(データセット名やボリューム)は、実行時のJCL側で指定するのです。
これが「疎結合」の極みです。プログラムを修正せずに、実行時のJCLを書き換えるだけで読み込むファイルを差し替えられる。この柔軟性こそ、基幹システムが何十年も動き続けている秘密の一つです。
紐付けの例:
JCL側で以下のように定義されているとします。
//SYSIN DD
(ここにデータが入力される)
/
//SYSPRINT DD SYSOUT=
これをPL/Iで受け取るのは、驚くほどシンプルです。
1
/ 入力用ファイルと出力用ファイルを宣言 /
DCL SYSIN FILE INPUT RECORD;
DCL SYSPRINT FILE OUTPUT STREAM;
OPEN FILE(SYSIN);
OPEN FILE(SYSPRINT);
/ あとは READ や PUT でやり取りするだけです /
—
3. 実践!動的な制御と「おまじない」
現場では、JCL側の指定を動的に変えたいケースがよくあります。そんな時、PL/Iでは `ENVIRONMENT` 属性を活用します。
1
/ ファイルの性質を定義する「おまじない」のようなもの /
DCL MY_FILE FILE RECORD INPUT
ENVIRONMENT(F RECSIZE(80));
/
- F: 固定長レコード (Fixed)
- RECSIZE(80): 1レコードが80バイトですよ、という指定
/
もし、実行時に「ファイルが見つからない!」というエラー(S013異常終了など)が発生した場合は、まずはJCLのDD名がプログラム内の `FILE` 名と一致しているか、そして `DSN`(データセット名)が正しいかを疑ってください。
現場ではよくあるトラブルですが、一つずつ紐解けば必ず原因が見つかります。
—
最後に:怖がる必要はありません
PL/Iは、確かに古い言語です。しかし、その設計思想は非常に論理的で、一度コツを掴めばこれほど書きやすい言語はありません。
- `PROCEDURE` は箱。
- `FILE` はJCLとの架け橋。
- `ENVIRONMENT` はそのファイルの素性を教えるプロフィール。
この3つのイメージさえ持っていれば、どんなレガシーなコードに出会っても怖くはありません。もし、コンパイルエラーや実行時異常にぶつかったら、それはメインフレームがあなたに「もっと対話しようよ」と語りかけているサインです。
これからも、メインフレームの技術を一緒に楽しく紐解いていきましょう。何か具体的なエラーや、現場で詰まっているコードがあれば、いつでも相談してくださいね。皆さんの移行プロジェクトが成功することを心より応援しています!
