PL/Iの世界へようこそ!「予約語がない」という衝撃と、VSAMアクセスを攻略する極意
こんにちは。メインフレームの世界へようこそ。
JavaやCOBOLといった現代的な言語に慣れ親しんだ方にとって、PL/Iは時に「古めかしく、掴みどころがない言語」に見えるかもしれません。しかし、PL/IはIBMのメインフレームが培ってきた知見が凝縮された、非常に合理的で力強い言語です。
今日は、PL/Iを触り始めたばかりの方が必ず一度は頭を抱える「識別子の自由度」と、基幹システムの心臓部である「VSAMファイルへのKEYEDアクセス」について、現場の空気感とともに紐解いていきましょう。
—
1. 「予約語がない」という驚きの仕様
まず、PL/Iを触って驚くのが「予約語(Reserved Words)」の概念が希薄なことでしょう。Javaなら`if`や`class`は変数名に使えませんが、PL/Iの世界では、それさえも変数名として定義できてしまいます。
/ PL/Iではこんな定義も「一応」許されてしまいます /
DCL IF FIXED BIN(31);
DCL THEN CHAR(10);
IF = 10;
THEN = ‘HELLO’;
一見すると「なんて無秩序なんだ!」と思われるかもしれませんが、これはコンパイラが文脈(コンテキスト)を見て、それが「命令」なのか「変数」なのかを判断しているからです。とはいえ、可読性を下げるので真似は厳禁ですよ。現場では「予約語のように見える単語は避ける」のが、トラブルを未然に防ぐプロの嗜みです。
—
2. VSAM KSDSとKEYEDアクセスのイメージ
さて、ここからが本題です。メインフレームで最も一般的なVSAMファイル(KSDS: Key Sequenced Data Set)を想像してください。これは、辞書のようなものです。
- KSDS: キー(索引)によって順番に並んでいる(辞書の単語のよう)。
- RRDS: 相対レコード番号(スロット番号)で直接アクセスする(コインロッカーの番号のよう)。
PL/Iでこれらを操作する際、`DIRECT`属性と`KEYED`属性を使います。
KEYEDアクセスの基本
`KEYED`を指定すると、ファイルに対して「キーを指定して読み書きするぞ」と宣言することになります。ここでよく使うのが `KEY`、`KEYTO`、そして `GENKEY` です。
- KEY: 「このキーのデータをくれ」と指定する。
- KEYTO: 「読み込んだデータのキーをここに入れておいてくれ」と変数に代入する。
- GENKEY: 「前方一致検索」を行う。例えば「123」で指定すれば「12300」も「12399」もヒットする、という便利な機能です。
—
3. 実践コード:KEYEDアクセスとON KEY条件
検索が失敗したとき、システムが異常終了しては困りますよね。そこで登場するのが `ON KEY` です。これは「キーが見つからなかったらどうするか」を定義する、PL/I特有の強力な例外処理です。
/ VSAMファイルをDIRECTかつKEYEDで開く /
DCL VSAM_FILE FILE RECORD DIRECT KEYED ENV(VSAM);
DCL RECORD_AREA CHAR(100);
DCL SEARCH_KEY CHAR(5) INIT(‘12345’);
DCL KEY_VAL CHAR(5);
/ 検索失敗時のアクションを定義 /
ON KEY(VSAM_FILE) BEGIN;
PUT SKIP LIST(‘警告:指定されたキーが見つかりませんでした。’);
/ ここでフラグを立てて後続処理を制御します /
END;
/ 指定したキーでレコードを読み込む /
READ FILE(VSAM_FILE) INTO(RECORD_AREA) KEY(SEARCH_KEY);
/ KEYTOを使って、読み込んだレコードのキーを取得する例 /
READ FILE(VSAM_FILE) INTO(RECORD_AREA) KEYTO(KEY_VAL);
現場で役立つアドバイス
`ON KEY` ブロックの中で複雑な処理を書きすぎないのがコツです。「フラグを立てて、`READ`した直後にそのフラグをチェックする」というシンプルな設計にすると、後からコードを見たときに非常に分かりやすくなります。
—
4. 最後に:怖がる必要はありません
PL/Iは、他の言語に比べて自由度が高すぎるゆえに「何でもできてしまう」ことが難しさに繋がっています。しかし、一度この「コンパイラに語りかけるような」記述スタイルに慣れると、これほど柔軟でメインフレームの性能を引き出せる言語は他にありません。
- 「予約語がない」= 自由だが、名前付けは慎重に。
- 「KEYEDアクセス」= 辞書を引く感覚で。
- 「ON KEY」= 失敗時のハンドリングは、プログラムの「優しさ」です。
皆さんが今向き合っているそのコードも、一つずつ紐解けば必ず理解できるはずです。メインフレームという巨大なシステムを動かしているのは、結局のところ、こういった一行一行の積み重ねなのですから。
また分からないことがあれば、いつでも聞きに来てくださいね。現場の知見をたっぷり詰め込んで、また解説します。一緒に頑張りましょう!
