1. 導入:なぜ「CLASS指定」が重要なのか
現場でシステム開発をしていると、「入力データが数字と特定の記号のみで構成されているかチェックしたい」という要件によく遭遇します。これまでのCOBOLでは、一文字ずつループで回してNUMERIC判定や文字コード判定を繰り返す……といった煩雑なコーディングをしがちでした。しかし、CLASS指定を使えば、独自の文字セットを定義し、たった一行のIF文で判定が完了します。コードの可読性が劇的に向上し、保守の手間も減る、まさにベテランの知恵と言える手法です。
2. 基礎知識:CLASS句とは何か
COBOLには、データの属性を判定するための「クラス条件」という仕組みがあります。通常、NUMERIC(数字)やALPHABETIC(英字)といった標準的なクラスはよく使われますが、SPECIAL-NAMES段落で独自の文字集合を定義することで、業務特有のバリデーションルールを作成できます。
「このフィールドは数字とハイフン、そしてアスタリスクしか許容しない」といった特定のルールを「名前」として定義しておくことで、プログラムのロジック部分を「意味のある言葉」で記述できるようになるのです。
3. 実装と解決策
実装の手順は簡単です。
1. CONFIGURATION SECTIONのSPECIAL-NAMES段落にて、CLASS句を使用して独自の文字集合に名前を付けます。
2. 判定したいデータ項目に対して、IF文で「IS クラス名」と記述するだけです。
これにより、複雑なロジックを隠蔽し、宣言的かつ直感的なバリデーションを実現できます。
4. サンプルプログラム
以下に、数字とハイフンのみを許可する「MY-VALID-DATA」というクラスを定義したサンプルコードを記載します。
IDENTIFICATION DIVISION.
PROGRAM-ID. CLASS-TEST.
CONFIGURATION SECTION.
SPECIAL-NAMES.
- 数字とハイフンのみを許可するクラスを定義
CLASS MY-VALID-DATA IS ‘0’ THRU ‘9’ ‘-‘ .
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-INPUT-DATA PIC X(10).
PROCEDURE DIVISION.
- テストデータの代入
MOVE “123-456” TO WS-INPUT-DATA.
- 独自クラスによるバリデーション判定
IF WS-INPUT-DATA IS MY-VALID-DATA
DISPLAY “入力値は正常です: ” WS-INPUT-DATA
ELSE
DISPLAY “許可されていない文字が含まれています: ” WS-INPUT-DATA
END-IF.
STOP RUN.
5. 応用・注意点
この手法を用いる際の注意点は、「定義した文字セット以外の文字が一つでも含まれていれば偽(FALSE)となる」という点です。例えば、空白(スペース)も許可したい場合は、クラス定義に「’ ‘」を追加することを忘れないでください。
また、この定義はプログラム単位での有効範囲となるため、複数のプログラムで共通のバリデーションを行いたい場合は、COPY句を使って定義を共通化するのが現場での定石です。複雑な正規表現を駆使する前に、まずはCOBOL本来の強力な機能であるCLASS指定を活用し、堅牢で読みやすいプログラムを目指しましょう。

コメント