【入門編】ON SIZE条件による数値オーバーフローの監視 – PL/Iの基本構文とデータ制御実践ガイド

PL/Iの世界へようこそ!数値オーバーフローを華麗にさばく「ON SIZE」の魔法

こんにちは。メインフレームの深淵を覗き込んでいる皆さん、ようこそ。
JavaやCOBOLでバリバリ開発してきた方にとって、PL/Iという言語は少し「古風で頑固な職人」のように見えるかもしれません。確かに、`DCL`だの`OPTIONS(MAIN)`だの、独特のキーワードが並ぶと身構えてしまいますよね。

でも安心してください。PL/Iは、実は非常に論理的で、プログラマの意図を汲み取ろうと努力する「賢い言語」なんです。今日は、基幹システムの現場で避けては通れない、「数値オーバーフロー」と、それを監視する「ON SIZE条件」について、一緒に紐解いていきましょう。

そもそも、PL/Iの「数値」って何が怖いの?

COBOL経験者なら「PIC 9(05)」といった定義でデータの桁数を厳密に管理することに慣れているはずです。しかし、PL/Iの数値型(FIXED DECIMALやFIXED BINARYなど)は、計算の過程で「あ、この桁数じゃ足りないから、勝手に調整しておいたよ!」という親切心(おせっかい)を発揮することがあります。

この「おせっかい」の結果、上位桁が切り捨てられてしまったり、想定外のデータ欠損が発生したりすると、夜中のバッチ処理でデータが狂う……という悪夢が待っています。これを防ぐための強力な武器が「ON SIZE」です。

基本の型:ON SIZE条件の書き方

PL/Iでは、エラーが発生した際に「どう対応するか」を、プログラムの冒頭や処理のブロック内にあらかじめ宣言しておくことができます。これを「ONユニット」と呼びます。

1
/ メインプログラムの構造 /
TEST_PROGRAM: PROC OPTIONS(MAIN);

/ SIZEエラー(桁あふれ)が発生した時の動きを定義 /
ON SIZE BEGIN;
PUT SKIP LIST(‘警告: 数値が溢れました!計算を中断します。’);
/ ここでログを出したり、異常終了コードをセットしたりします /
SIGNAL ERROR; / 異常終了へ誘導 /
END;

DCL VAL1 FIXED DEC(5) INIT(99999);
DCL VAL2 FIXED DEC(5) INIT(2);
DCL RESULT FIXED DEC(5);

/ ここで99999 2 を計算しようとすると、5桁に収まらない! /
RESULT = VAL1 VAL2;

PUT SKIP LIST(‘結果は: ‘ || RESULT);

END TEST_PROGRAM;

このコードのポイント

  • ON SIZE BEGIN … END; :これが「見張り番」です。計算中にオーバーフローが発生した瞬間、制御がここに飛び込んできます。
  • SIGNAL ERROR; :単に無視するのではなく、意図的に「異常事態である」とシステムに伝えるのが、基幹システム開発におけるプロの作法です。

なぜ「SIZE」を意識する必要があるのか?

Javaなどの言語では、型が溢れると例外(Exception)が投げられるのが一般的ですが、PL/Iは歴史が長いため、「計算自体は完遂させる(ただし切り捨てる)」という挙動がデフォルトになっているケースが多いのです。

特に、マイグレーションの現場では要注意です。
古いCOBOL資産からPL/Iへ移行する際、計算精度の微妙な違いで「COBOLならエラーになっていたのに、PL/Iだと静かにデータが壊れる」という事態が多発します。だからこそ、開発者が明示的に「桁あふれを許すな!」と宣言してあげる必要があるのです。

初学者のための「怖くない」ヒント

PL/Iのコードを眺めていると、`DCL`や`FIXED`といった単語が並び、圧倒されるかもしれません。でも、一つずつ分解すれば簡単です。

1. DCL(Declare):単なる「変数の宣言」です。Javaの `int` や `String` と同じです。
2. FIXED DEC(5):これは「10進数で最大5桁まで扱える箱」を用意した、という意味です。
3. ON SIZE:これは「もしこの箱から溢れるような事態が起きたら、あらかじめ決めたルールを実行してね」という契約です。

現場のスペシャリストからのアドバイス

実務では、すべての計算箇所に個別にONユニットを書く必要はありません。基幹システムの場合、共通のインクルードファイル(%INCLUDE)を使って、エラーハンドリングを一元管理するのが一般的です。

「プログラム全体で計算エラーがあったら、まずはログを出して管理者へ通知する」という仕組みを最初に作ってしまえば、あとはメインの業務ロジックを書くだけ。PL/Iは、一度枠組みを作ってしまえば、非常に保守しやすく安定した言語なんです。

終わりに:恐れずに向き合おう

数値オーバーフローは、システムの「ほころび」です。PL/IのON SIZE条件は、そのほころびを未然に防ぐための強力なセーフティネットです。

最初は呪文のように見える構文も、実は「データの安全を守るための知恵」が詰まっているだけ。ぜひ、怖がらずに `ON SIZE` を使って、堅牢なプログラムを書いてみてくださいね。

また次の記事では、PL/I特有の「構造体(STRUCTURE)」の美しい定義方法についてお話しします。これもまた、メインフレームの醍醐味ですよ。それでは、良いプログラミングライフを!

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