【入門編】DIRECTファイルとKEYEDアクセスの内部構造 – PL/Iの基本構文とデータ制御実践ガイド

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」= 失敗時のハンドリングは、プログラムの「優しさ」です。

皆さんが今向き合っているそのコードも、一つずつ紐解けば必ず理解できるはずです。メインフレームという巨大なシステムを動かしているのは、結局のところ、こういった一行一行の積み重ねなのですから。

また分からないことがあれば、いつでも聞きに来てくださいね。現場の知見をたっぷり詰め込んで、また解説します。一緒に頑張りましょう!

タイトルとURLをコピーしました