メインフレームの心臓部、「PL/I」のPROCEDUREとENDを攻略しよう!
こんにちは。長年、IBMメインフレームの深淵でシステムアーキテクトとして格闘してきた者です。
「PL/I(Programming Language One)」という名前を聞いて、身構えてしまう方も多いかもしれませんね。JavaやCOBOLを経てこの世界に足を踏み入れた方にとって、PL/Iは少し古風で、ルールが厳しい職人のような言語に見えることでしょう。でも大丈夫。PL/Iは非常に論理的で、一度コツを掴めばこれほど頼りになる相棒はいません。
今回は、PL/Iプログラムの最小単位であり、すべての始まりである「PROCEDURE」と、それを締めくくる「END」という最も重要な作法について、じっくり紐解いていきましょう。
—
1. PROCEDUREは「プログラムの入り口」
Javaでいえば `public static void main`、COBOLでいえば `PROCEDURE DIVISION` に相当するのが、PL/Iの PROCEDUREブロック です。
PL/Iでは、プログラムの実行はこの「PROCEDURE」から始まります。特に、そのプログラムがバッチ処理の開始点となる場合は、`OPTIONS(MAIN)` という特別な魔法の言葉を添えます。「これがこのプログラムの顔ですよ、ここから動かしてください」というOSへの合図ですね。
基本のコード例
1
/ プログラムの最小構成例 /
HELLO_WORLD: PROCEDURE OPTIONS(MAIN);
/ ここに処理を記述します /
PUT SKIP LIST(‘こんにちは、PL/Iの世界へ!’);
END HELLO_WORLD;
ここで注目してほしいのが、`HELLO_WORLD:` というラベルです。これはプロシージャの名前です。この名前を `END` の後ろにも書くことで、「ここから始まって、ここで終わる」という対応関係をコンパイラに明確に伝えます。この「名前のペアリング」が、PL/Iの厳格でありながらも美しい作法なのです。
—
2. 「END」という名の境界線
PL/Iを触り始めの時期、最もよく遭遇するエラーが「END不足」です。
Javaなら波括弧 `{ }` でブロックを囲みますが、PL/Iにはそれがない代わりに、`PROCEDURE` で開いた扉を `END` で閉じるという明確な意志が必要です。
- BEGIN/END: 処理のまとまりを作る
- PROCEDURE/END: プログラムやサブルーチンの単位を作る
もし、`PROCEDURE` の数と `END` の数が合っていないと、コンパイラは冷徹にもコンパイルエラーを吐き出します。最初は面倒に感じるかもしれませんが、これは「入れ子の構造が崩れているよ」と教えてくれる親切なアラートなんです。
—
3. PL/Iの「データ宣言」を優しく解説
PL/Iのデータ宣言は、COBOLのように「何文字か」という定義だけでなく、メモリ上での持ち方を細かく指定できます。これが初学者を少し驚かせる部分かもしれません。
例えば、数値ひとつとってもこんな風に書きます。
1
DCL COUNTER FIXED BIN(31); / 32ビットの整数型 /
DCL AMOUNT DEC FIXED(9,2); / 9桁、小数点以下2桁の固定小数点 /
- DCL (DECLARE): 「変数を宣言しますよ」という合図です。
- FIXED BIN: コンピュータが計算しやすい二進数形式。
- DEC FIXED: 人間が見やすい十進数形式(金額計算などにはこちらが必須ですね)。
「なぜこんなに種類があるの?」と思うかもしれません。それは、メインフレームが限られたリソースの中で、いかに効率よく計算し、いかに正確にデータを保持するかを最優先に設計されているからです。この「無駄のないデータ構造」こそが、数十年動き続ける基幹システムの安定感の秘密なんですよ。
—
4. 今日から意識してほしい「作法のコツ」
最後に、実務でトラブルを未然に防ぐためのアドバイスを一つ。
「ENDの後に、必ず対応する名前を書きましょう。」
コンパイラは、`END;` だけで許してくれることもありますが、大規模なプログラムになると、どれがどの `END` か分からなくなります。
1
MAIN_PROC: PROCEDURE OPTIONS(MAIN);
/ 処理… /
SUB_PROC: PROCEDURE;
/ サブ処理… /
END SUB_PROC; / どこを閉じたか明記する /
END MAIN_PROC; / ここで全体が終わる /
こうして名前を添えてあげるだけで、コードの可読性が劇的に上がり、修正時のミスも激減します。機械のためではなく、未来の自分自身のために記述する――これが、一流のメインフレームアーキテクトの嗜みです。
—
いかがでしたか?
PL/Iは少し厳格ですが、その分、書いた通りに動く「誠実な言語」です。まずは `PROCEDURE` と `END` の対応関係を意識しながら、小さなプログラムから動かしてみてください。
もし分からないことがあれば、いつでも聞いてくださいね。一緒にレガシーシステムの荒波を乗り越えていきましょう!

コメント