1. 導入:なぜ88レベルを使うのか?
COBOL開発の現場で、皆さんは「IF WS-SEX = ‘1’」といった記述を何度も書いていませんか?一見シンプルですが、この「’1’」が何を意味するのか、後から見た人がすぐに理解するのは意外と難しいものです。
88レベル(条件名)は、特定のデータ値に対して「名前」を付ける機能です。これを使うことで、プログラムの可読性が劇的に向上し、修正時のミスを減らすことができます。保守性の高いコードを書くための、ベテランの必須テクニックです。
2. 基礎知識:88レベル(条件名)とは?
COBOLのデータ定義(Working-Storage Section)において、88レベルは「データ項目そのもの」ではなく、その直前に定義されたデータ項目の「状態」を定義するものです。
例えば、「性別コード」というデータ項目に対し、「’1’なら男性」「’2’なら女性」という定義を紐付けます。これにより、プログラムのロジック部分では、具体的な値(’1’や’2’)を意識することなく、意味のある名前(MALEやFEMALE)で条件判断ができるようになります。
3. 実装と解決策
88レベルを定義する際は、以下のルールを守りましょう。
・88レベルは、対象となるデータ項目のすぐ下に記述する。
・領域B(8桁目以降)から記述を開始する。
・VALUE句を使って、その名前が指し示す値を指定する。
これを行うことで、Procedure Division(手続き部)でのIF文が「IF MALE」のように直感的な記述に変わります。
4. サンプルプログラム
以下のコードをコピーして、コンパイル・実行してみてください。88レベルがいかにコードをスッキリさせるか実感できるはずです。
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE88.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-SEX-CODE PIC X.
- ここで88レベルを定義します。’1’という値にMALEという名前を付けます
88 IS-MALE VALUE ‘1’.
- ‘2’という値にFEMALEという名前を付けます
88 IS-FEMALE VALUE ‘2’.
PROCEDURE DIVISION.
- テスト用に値をセット
MOVE ‘1’ TO WS-SEX-CODE.
- 88レベルを使った条件判定(可読性が高い!)
IF IS-MALE
DISPLAY ‘男性として処理します。’
ELSE IF IS-FEMALE
DISPLAY ‘女性として処理します。’
ELSE
DISPLAY ‘性別不明です。’
END-IF.
STOP RUN.
5. 応用・注意点:現場での活用と落とし穴
応用:範囲指定も可能
88レベルは単一の値だけでなく、範囲指定も可能です。
例:88 IS-ADULT VALUE 20 THRU 99.
このように定義すれば、「IF IS-ADULT」と書くだけで20歳以上99歳以下を判定できます。
注意点:値の重複に注意
88レベルを定義する際、同じデータ項目に対して同じ値を二重定義しないよう注意してください。また、88レベルは「その値を保持しているか」を判定する専用のものです。値をセットする(MOVEする)ことはできませんので、あくまで「状態チェック用」として使い分けてください。
88レベルを使いこなすことで、プログラムは「仕様書に近い記述」へと進化します。ぜひ次回のコーディングから取り入れてみてください。

コメント