メインフレームの世界へようこそ!PL/Iの「OPTIONS(MAIN)」が教えてくれるプログラムの始まり方
こんにちは!これまでJavaやCOBOLの世界でバリバリ活躍されてきた皆さん、ようこそメインフレームの世界へ。
「PL/I?何だか古めかしくて難しそう…」そんなふうに身構える必要は全くありません。PL/Iは、COBOLの事務処理能力と、C言語のようなエンジニアリングの柔軟性を併せ持つ、非常に「懐の深い」言語です。
今日は、そんなPL/Iの扉を開く最初の一歩、「OPTIONS(MAIN)」という少し不思議な呪文について紐解いていきましょう。
—
1. プログラムの「入り口」をどうやって見つけるのか?
Javaなら`public static void main(String[] args)`、COBOLなら`PROCEDURE DIVISION`がプログラムの開始点ですよね。
PL/Iにおいても、「ここからプログラムを動かしてください!」とOS(z/OS)に伝えるための目印が必要です。それが `OPTIONS(MAIN)` です。
コードで見てみましょう
/i
MYPROG: PROCEDURE OPTIONS(MAIN);
/ ここがプログラムの実行開始地点(エントリーポイント)です /
PUT SKIP LIST(‘こんにちは、PL/Iの世界へ!’);
END MYPROG;
見ての通り、非常にシンプルです。`MYPROG` という名前のプロシージャ(手続き)に、`OPTIONS(MAIN)` という属性を付けることで、OSは「ああ、ここから走らせればいいんだな」と理解するわけです。
—
2. なぜ「OPTIONS」なんてわざわざ書くの?
「最初から全部メインでいいじゃないか!」と思うかもしれませんが、PL/Iには事情があります。
PL/Iは、一つのソースファイルの中に、いくつもの小さな「パーツ(プロシージャ)」を詰め込める言語です。一つのファイルの中に、処理A、処理B、計算Cといった複数の関数を並べて書くことができます。
その中で、「どれか一つだけが、OSから呼ばれる『最初の入り口』だよ」と指定してあげる必要がある。だからこそ、`OPTIONS(MAIN)` という特別なフラグが必要なんですね。
—
3. OSが裏側でやってくれている「お膳立て」
`OPTIONS(MAIN)` を指定すると、PL/Iのコンパイラは、あなたのプログラムが走り出す前に、舞台裏でかなり大変な「お膳立て」をしてくれます。
- 実行環境の初期化: メモリ(ストレージ)の確保や、ファイル操作の準備。
- 引数の受け渡し: JCL(ジョブ制御言語)の `PARM` で渡されたパラメータを、プログラムで扱いやすい形に整形してくれます。
これらを自分たちでゼロから書かなくていいのは、実はメインフレームならではの贅沢な環境なんですよ。
—
4. 初学者が戸惑いやすい「データ宣言」の小話
さて、少しだけ先の話をしましょう。PL/Iには `DECLARE`(略して `DCL`)という宣言文がありますが、最初はこれに驚くかもしれません。
/i
DCL MY_NUMBER FIXED BIN(31); / 31ビットの整数型 /
DCL MY_TEXT CHAR(20) VAR; / 可変長の文字列 /
COBOLの `PIC X(20)` に慣れていると、`CHAR(20) VAR` といった書き方は新鮮に映るはずです。PL/Iは「型」の定義が非常に柔軟で、計算機科学の理論に基づいた設計がなされています。
「なぜこんなに種類があるの?」と思うかもしれませんが、これは当時のエンジニアたちが「メモリを1バイトでも節約して、かつ高速に処理させたい!」と知恵を絞った結果なんです。この「職人気質」こそが、PL/Iが40年以上経っても現役である理由の一つです。
—
まとめ:怖がらなくて大丈夫です
PL/Iの `OPTIONS(MAIN)` は、単なるおまじないではありません。「このプログラムの顔(メイン)はここですよ」と宣言する、堂々たる旗印のようなものです。
もし現場で古いコードを読んでいて、`OPTIONS(MAIN)` を見つけたら、「ああ、ここから物語が始まるんだな」と優しく声をかけてあげてください。
最初は記号の多さに圧倒されるかもしれませんが、一度そのロジックを掴めば、PL/Iはあなたの強力な武器になります。また次の記事で、現場で役立つ「PL/Iの深淵」を一緒に覗いていきましょう!
—
もし何か特定のコードでエラーに悩まされていたり、この構文はどういう意味?といった疑問があれば、いつでもコメントで教えてくださいね。現場の知見を総動員して回答します!

コメント