こんにちは。メインフレームの深淵へようこそ。
「PL/I? なんだか古めかしくて難解そう……」と身構えていませんか? 大丈夫です。JavaやCOBOLという素晴らしい武器を持つ皆さんなら、その「基礎体力」ですぐに馴染めます。今日は、IBMメインフレームの心臓部とも言える「直接アクセスファイル(VSAM)」を、PL/Iでどう料理するか、その極意をお話ししましょう。
—
1. PL/Iの「顔」を理解する:プログラムの基本構造
まずは、PL/Iの背骨を見てみましょう。Javaでいうクラス、COBOLでいうプログラム構成に相当します。
1
/ プログラムの始まりはPACKAGEで括るのが現代の定石です /
MY_PROGRAM: PACKAGE OPTIONS(MAIN);
/ メイン処理の手続き(プロシージャ) /
MAIN_PROC: PROCEDURE OPTIONS(MAIN);
/ ここに宣言部や処理を書いていきます /
PUT SKIP LIST(‘システム稼働開始!’);
END MAIN_PROC;
END MY_PROGRAM;
PL/Iの面白いところは、記述が非常に自由で、かつ「強力な制御」ができる点です。`OPTIONS(MAIN)`は、OSに対して「ここから実行を開始してくれ!」と伝えるための司令塔の役割を果たします。
—
2. KEYED属性:ファイルという名の「図書館」のインデックス
さて、本題の「KEYED属性」です。
皆さんは普段、データベースのテーブルを `SELECT FROM table WHERE id = ‘A001’` のように検索しますよね。メインフレームのVSAMファイルにおいて、この「ID」に相当するのがキー(KEY)です。
`KEYED`属性を宣言するということは、ファイルに対して「君はインデックスを持っているから、指定された場所へ直接ジャンプできるね?」と許可を与えるようなものです。
ファイル宣言のコード例
1
/ KEYED属性をつけて、キーを使った直接アクセスを可能にします /
DCL VSAM_FILE FILE RECORD INPUT KEYED
ENV(VSAM); / VSAMを使うよ、という環境指定 /
この`KEYED`があるおかげで、私たちは「先頭から順番に全部読む(シーケンシャル)」のではなく、「ピンポイントでレコードを抜き出す」ことができるようになります。
—
3. 直接アクセスと「KEY条件」の恐怖(そして克服)
キーを指定して読み込むとき、PL/Iのコードはこんなにシンプルです。
1
/ キー’A001’のレコードを読み込む /
READ FILE(VSAM_FILE) INTO(MY_RECORD_AREA) KEY(‘A001’);
ですが、現場で一番怖いのが「キーが見つからない場合」です。JavaならNullが返るかもしれませんが、PL/Iは「例外(ON条件)」という仕組みでこれに対処します。
KEY条件のハンドリング
ファイル操作中に「キーがない!」「キーが重複した!」という異常が発生すると、プログラムは即座に停止しようとします。それを防ぐのが`ON KEY`ステートメントです。
1
/ もしキー指定で失敗したら、この処理を実行してね /
ON KEY(VSAM_FILE) BEGIN;
PUT SKIP LIST(‘エラー発生:そのキーは存在しませんでした’);
/ 必要に応じてプログラムを正常終了させる処理などを記述 /
END;
/ 読み込み実行 /
READ FILE(VSAM_FILE) INTO(DATA_AREA) KEY(‘B999’);
—
4. なぜPL/Iが「怖くない」と言えるのか
PL/Iを触っていると、「昔の言語だから不親切なんじゃないか?」と思うことがあるかもしれません。でも実際は逆です。
- 型宣言が非常に詳細: `FIXED BINARY(31)`のように、メモリをどう使うかまで細かく制御できるため、バグの予兆を事前に叩き潰せます。
- ON条件の柔軟性: プログラムのフローと「例外処理」を切り離して記述できるため、ロジックが非常にクリーンに保てます。
COBOLの「堅牢さ」と、C言語のような「ポインタ操作による自由度」、そしてJavaの「構造化プログラミング」の思想を混ぜ合わせたような不思議な魅力。それがPL/Iです。
最後に:現役アーキテクトからのアドバイス
実務でレガシーなソースコードを覗くとき、`ON`条件がどこに書かれているか、まずは探してみてください。そこには、先人たちが「もしもの事態」にどう備えたかという、物語のような知恵が詰まっています。
直接アクセスは、メインフレームにおける「超特急」です。`KEYED`属性をマスターして、基幹システムのデータを自在に操る楽しさを、ぜひ味わってください。
もし「ここのコンパイラ挙動がどうしても理解できない!」といった泥沼にハマったら、いつでも相談してくださいね。メインフレームの荒波を一緒に乗り越えていきましょう。
