COBOLレベル番号完全ガイド!01から77までの一貫した使い分けとデータ構造
生徒
「COBOLのプログラムを見ていると、数字の01や05、77などがたくさん出てくるのですが、これは何の意味があるんですか?」
先生
「それはレベル番号と呼ばれるものです。コンピュータにデータの入れ物の大きさを教えたり、親子関係を作って整理したりするために使います。」
生徒
「数字によって役割が決まっているんですか?初心者でも間違えずに使い分けるコツを知りたいです!」
先生
「もちろんです。レベル番号の一貫した使い分けをマスターすれば、読みやすいプログラムが書けるようになりますよ。基本から丁寧に解説しますね。」
1. レベル番号とは?データの階層構造を理解する
COBOLにおけるレベル番号とは、データの「階層(かいそう)」や「まとまり」を表現するための数字です。プログラミング未経験の方には少し難しく聞こえるかもしれませんが、家の中の整理整頓をイメージすると分かりやすくなります。
例えば、「住所」という大きな箱の中に、「郵便番号」「都道府県」「市区町村」という小さな箱が入っている様子を想像してください。このとき、「住所」が親で、その中身が子供という関係になります。COBOLでは、この親子関係を数字を使って表現します。数字が小さいほど大きなまとまり(親)を指し、数字が大きくなるほどその中の細かい項目(子)を指す仕組みになっています。
レベル番号を正しく使うことで、コンピュータは「どこからどこまでが一つのグループなのか」を正確に判断できるようになります。これは事務処理計算を得意とするCOBOLにおいて、帳票作成や顧客管理を行うために非常に重要な基礎知識となります。
2. 最も重要な「01」レベルと「集団項目」の役割
レベル番号の中で最も基本となるのが「01」です。01レベルは、一つの独立したデータの塊の始まりを意味します。これを「最上位レベル」と呼びます。すべてのデータ構造は、この01から始まらなければなりません。
01レベルには、大きく分けて二つの使い方があります。一つは、その中にさらに細かい項目を持つ「集団項目(しゅうだんこうもく)」としての役割です。もう一つは、それ単体で完結する「基本項目(きほんこうもく)」としての役割です。基本的には、関連する複数のデータを一つに束ねるために01を使用します。
例えば、社員情報を管理する場合、氏名や年齢、入社年月日をバラバラに定義するのではなく、「社員情報」という01レベルの大きな枠組みを作り、その中に各項目を配置するのが一般的です。これにより、プログラムの中で「社員情報を丸ごとコピーする」といった便利な操作が可能になります。
01 EMPLOYEE-RECORD.
05 EMPLOYEE-ID PIC X(05).
05 EMPLOYEE-NAME PIC N(10).
05 BIRTH-DATE.
10 BIRTH-YEAR PIC 9(04).
10 BIRTH-MONTH PIC 9(02).
10 BIRTH-DAY PIC 9(02).
3. 階層を作る「02から49」レベルの使い方
01レベルの中にさらに細かい項目を作りたいときは、02から49までの数字を使います。一般的には、5飛び(05、10、15...)や10飛びで数字を割り当てることが多いです。これは、後から新しい項目を追加したくなったときに、数字の間に余裕を持たせておくためです。
この数字の大きさ自体に厳密な意味はありませんが、「親よりも大きな数字を子に使う」というルールは絶対です。例えば、05レベルの項目の下にさらに細かい項目を作りたい場合は、10レベルを使用します。このように、数字を大きくしていくことで、データの階層を深くしていくことができます。
パソコンを触ったことがない方でも、学校のクラス名簿を想像すれば納得できるはずです。「1年A組(01レベル)」の中に「男子(05レベル)」と「女子(05レベル)」があり、さらに「男子」の中に「出席番号1番(10レベル)」がいる、というようなピラミッド構造を数字で表現しているのです。これにより、複雑なデータも整理整頓された状態で扱うことができます。
01 SALES-DATA.
05 PRODUCT-CODE PIC X(10).
05 SALES-AMOUNT PIC 9(08).
05 UPDATE-INFO.
10 UPDATE-DATE PIC 9(08).
10 UPDATE-TIME PIC 9(06).
4. 独立した項目を定義する「77」レベルの特殊性
レベル番号の中には、少し特殊な数字があります。それが「77」レベルです。77レベルは、他のデータと一切関係を持たない、完全に独立した項目を定義するときに使います。集団項目(親)になることもできませんし、他の項目の子になることもできません。
昔のプログラミングでは、計算用の一時的な変数(計算の途中の値をちょっと置いておく場所)などに77レベルがよく使われていました。しかし、現代のプログラミング規約では、77レベルをあまり使わないように推奨されることもあります。なぜなら、01レベルで定義しても同じことができるからです。一貫性を持たせるために、すべての変数を01レベルから始めるというルールを採用している現場も少なくありません。
とはいえ、古いプログラムのメンテナンス(修正作業)では、今でも77レベルを目にすることが多々あります。「これは一人ぼっちで頑張っている独立したデータなんだな」と理解しておけば、コードを読むときに迷わなくて済みます。初心者のうちは、無理に77を使わず、まずは01と05などの組み合わせに慣れるのが上達の近道です。
WORKING-STORAGE SECTION.
77 WK-COUNTER PIC 9(04) VALUE ZERO.
77 WK-TOTAL-SUM PIC 9(09) VALUE ZERO.
01 WK-DISPLAY-AREA.
05 WK-TITLE PIC X(20) VALUE "SUMMARY REPORT".
5. 一貫した使い分けのためのコーディング規約
レベル番号を使う際に最も大切なのは、自分勝手な数字を使わずに「チームのルール(コーディング規約)」を守ることです。例えば、「階層は必ず01、05、10、15という風に5刻みで書く」というルールがあれば、それに従います。これにより、誰が書いても同じ見た目のプログラムになります。
一貫性がないプログラムは、非常に読みづらくなります。ある場所では01の次が02なのに、別の場所では05になっていると、読んでいる人は「何か特別な意味があるのかな?」と混乱してしまいます。プログラミングは、コンピュータに命令を出す作業であると同時に、人間同士のコミュニケーションツールでもあります。未来の自分や、一緒に働く仲間のために、分かりやすく整えられた数字の使い分けを意識しましょう。
また、インデント(字下げ)も併せて行うのが一般的です。レベル番号が大きくなるにつれて、右側に少しずつずらして書くことで、視覚的にも「これが子項目だな」と一目でわかるようになります。整理整頓されたコードは、ミスを減らし、不具合(バグ)を見つけやすくしてくれます。
6. データ型(PIC句)との組み合わせ方
レベル番号で構造を決めたら、次は「PIC(ピクチャ)句」を使って、その入れ物にどのような種類のデータが入るかを指定します。これも未経験の方には聞き慣れない言葉ですが、単なる「型番」のようなものです。数字を入れるなら「9」、文字を入れるなら「X」を使います。
集団項目(親となるレベル番号)には、このPIC句を書きません。なぜなら、集団項目は「中身の合計サイズ」が自動的にその大きさになるからです。一方で、末端の項目(これ以上分割されない最小単位のレベル番号)には、必ずPIC句を書いて、具体的な桁数(けたすう)を指定する必要があります。
これを忘れると、コンピュータは「この箱には何が入るの?」と困ってしまい、エラーを出してしまいます。レベル番号で形を作り、PIC句で性質を決める。この二つのセットが、COBOLのデータ定義の鉄則です。しっかり覚えておきましょう。
01 CUSTOMER-CARD.
05 CUST-ID PIC 9(05).
05 CUST-NAME PIC N(20).
05 CUST-ADDRESS PIC X(50).
05 CUST-RANK PIC X(01).
7. 実行結果から見るレベル番号の効果
実際にレベル番号を使ってデータを定義し、画面に表示させたときの動きを確認してみましょう。集団項目を表示させると、その中に含まれるすべての項目が連結されて一度に表示されます。これがレベル番号による階層化の便利な点です。
例えば、日付という大きな項目の中に年、月、日がある場合、「日付」を指定するだけで「20260310」という風にまとめて取り出すことができます。もちろん、特定の「月」だけを取り出して計算に使うことも可能です。このように、全体としても部分としてもデータを扱える柔軟性が、レベル番号によってもたらされます。
以下の実行結果例を見て、どのようにデータが管理されているかイメージを膨らませてみてください。プログラムが正しく動いたときの喜びは、プログラミング学習の大きなモチベーションになります。
DISPLAY-OUTPUT:
SHAIN-CODE: 12345
SHAIN-NAME: 山田 太郎
FULL-RECORD: 12345山田 太郎
8. 初心者が間違えやすいポイントと解決策
よくある間違いの一つに、レベル番号の順序を逆にしてしまうことがあります。例えば、05レベルの下に01レベルを書いてしまうようなケースです。これは「子供の中に親を入れる」という不自然な状態なので、コンピュータは受け付けてくれません。必ず01から始まり、必要に応じて数字を大きくしていく流れを意識してください。
また、レベル番号の「一貫性」を保つために、エディタ(プログラムを書くためのソフト)の補助機能を活用するのも良い方法です。最近のツールでは、レベル番号の不整合を自動でチェックしてくれるものもあります。しかし、まずは自分の頭の中で「このデータはどのグループに属しているか」を整理する癖をつけることが大切です。
最後に、難しい用語が出てきても怖がらないでください。COBOLは50年以上も使われ続けている、非常に人間にとって読みやすい言語です。レベル番号の仕組みも、一度理解してしまえばパズルのように楽しく組み立てられるようになります。一歩ずつ、着実に学んでいきましょう。