COBOLの壁?レコード記述項のレベル番号の役割と使い方をマスター!

2025年4月8日火曜日

COBOL

COBOLのプログラムに初めて挑戦したとき、「レコード記述項」や「レベル番号」って何だか数字の暗号みたいに見えませんか?

01や77が並んでいて、「どれを使えばいいの?」「順番を間違えたらどうなるの?」と、頭の中がぐるぐるしてしまう方も多いはずです。

この記事では、COBOLにおけるレベル番号の意味と使い方を、数字のルールに悩まされている初心者の方にもわかるように、具体例と図を使ってやさしく解説します。

01〜49、66、77、88などの番号がどう違うのか、どんな場面で登場するのか、そしてどうやってデータ構造をきれいに組み立てるのかがスッキリわかります。

「数字の意味がわからないまま雰囲気で書いてた…」なんて人も、読んだあとには「なるほど、こういうことだったのか!」と納得できるはずです。

COBOLのレベル番号、今日こそモヤモヤを解消しませんか?


COBOLのレコード記述項とは?データ整理の基本

COBOLのプログラムでは、まず「どんなデータを扱うのか」を決める必要があります。

そのとき登場するのが「レコード記述項」です。ざっくり言えば、データを入れる“箱”を決める場所です。

例えば「社員の名前」「年齢」「所属部署」といった情報を使いたいなら、それぞれのデータ用に「名前の箱」「年齢の箱」を用意しないといけません。

しかも、ただ箱を並べるだけじゃ足りません。「このデータは誰のものか?」や「どんな種類なのか?」といったルールもちゃんと決める必要があります。

イメージとしては、レコード記述項はプログラムが扱う情報の“設計図”のようなものです。適当に書くと、データがごちゃごちゃしてプログラムが正しく動かなくなることもあります。

安心してください。慣れれば、レゴブロックを組み立てる感覚で使いこなせるようになります。

COBOLレコード記述項の主役!レベル番号の役割

「レコード記述項」では、ただデータの箱を作るだけでなく、どの箱が親で、どの箱が子か、つまり「データの関係性」をはっきりさせる必要があります。

そこで登場するのが「レベル番号」です。これはデータ項目に付ける“背番号”のようなもので、数字が小さいほど上の階層、大きいほど下の階層になります。

たとえばこんな感じです。

 01 社員情報 05 氏名 05 年齢 05 所属部署 

「社員情報」という大きな箱の中に、「氏名」「年齢」「所属部署」という小さな箱が入っているイメージです。

これを住所にたとえると、01が「都道府県」、05が「市区町村」くらいの細かさ。番号を使うことで、データがどうつながっているかをプログラムに分かりやすく伝えることができます

間違って番号を変えると、子が親を飛び越えて勝手に独立してしまったりして、プログラムの中で迷子になります。

最初は数字のルールに戸惑うかもしれませんが、意味がわかると案外スッキリしますよ。

最重要!基本となるレベル番号「01」と「02~49」

COBOLでレコード記述項を書くとき、まず出てくるのが「01」と「02~49」のレベル番号です。

「01」はレコードのスタート地点を表す番号で、データ全体の名前を決める“見出し”のような役割があります。

一方「02~49」は、その中身を細かく分けるための番号です。数字が大きくなるにつれて、階層が一段ずつ深くなります。まるで親がいて、その子どもがいて、さらに孫がいる…という家系図のようなイメージです。

それぞれの役割を知っておくと、データの構造を間違えずに組み立てられるようになります。

レコード定義の始まりを示す「01レベル」

「01」はレコード全体のスタートを意味する番号です。COBOLでは、01レベルが“このデータグループの名前は○○ですよ”と宣言する場所になります。

主に使われるのは、WORKING-STORAGE SECTIONやFD節です。プログラムがどんな情報を扱うかをここで定義します。

実際のコードを見てみましょう。

WORKING-STORAGE SECTION.
01 社員情報.
   05 社員番号     PIC X(6).
   05 氏名         PIC A(20).
   05 所属部署     PIC A(10).

この例では「社員情報」がレコードの名前です。01レベルでそれを定義しておき、その下にある05レベルで項目を分けています。

この「01」があるからこそ、下の項目たちが「社員情報」という一つのまとまりに属しているとわかるようになります。

データの階層構造を作る「02~49レベル」

「02~49」のレベル番号は、データを細かく階層に分けたいときに使います。

数字が小さいと親、大きいと子という関係ができます。見た目ではインデント(字下げ)で階層がわかりやすくなるように書くのが基本です。

では、部署情報をもう少し細かくしてみます。

01 社員情報.
   05 社員番号     PIC X(6).
   05 氏名         PIC A(20).
   05 所属部署.
      10 部署コード   PIC 9(3).
      10 部署名       PIC A(15).

このように「所属部署」の中に、部署コードと部署名が入っています。「05」と「10」のように、番号が進むごとに一段深くなっているのが分かります。

ここでの「所属部署」は集団項目、「部署コード」や「部署名」は基本項目になります。集団項目は、複数のデータをひとまとめにするための「箱」のような存在です。

階層が深くなると、それだけ柔軟にデータ構造を作れるようになりますが、レベル番号のつけ方を間違えると、全体のバランスが崩れてしまいます。

だからこそ、番号とインデントはセットで意識して使うのがコツです。

特殊な役割を持つレベル番号たち

COBOLのレベル番号といえば「01」や「05」が定番ですが、ちょっとクセのある番号たちも存在します。

それが「66」「77」「88」の3つです。使う場面は限られますが、知っておくとCOBOLの仕組みがグッとわかりやすくなります。

「へぇ、そんな番号もあるんだ」と思った方、大丈夫です。ここから順番に解説していきます。意味さえ分かれば、使い方も自然に見えてきます。

データ項目名を変更する「66レベル」(RENAMES句)

「66レベル」は、既にあるデータ項目に別の名前をつけて再利用したいときに使います。キーワードは「RENAMES」です。

一度定義した項目の一部分だけをまとめて、違う名前で扱えるようになります。

ちょっとややこしく見えるかもしれませんが、例えばこんなときに便利です。

01 氏名情報.
   05 姓        PIC A(10).
   05 名        PIC A(10).
   05 ミドルネーム PIC A(10).

66 フルネーム RENAMES 姓 THRU 名.

この例では、「姓」から「名」までを「フルネーム」という新しい名前でまとめ直しています。

「ミドルネーム」は含めたくない、でも「姓と名だけまとめて扱いたい」といったニーズにちょうど合います。

ただし、最近のCOBOLではこの機能をあまり使わない傾向にあります。複雑になりすぎると、逆に読みにくくなってしまうためです。

独立した基本項目を定義する「77レベル」

「77レベル」は、階層構造に属さない“ひとりぼっち”のデータ項目を作るときに使います

例えば、作業用の変数やカウンターなど、他のデータとは関係なく使いたい場面です。

77 合計金額       PIC 9(5)V99.
77 カウンター     PIC 9(3).

「01」などの親を持たず、いきなりレベル番号と項目名が出てくるのが特徴です。使い方としてはとてもシンプルです。

使える場所は「WORKING-STORAGE SECTION」だけに限定されています。

ちょっとした計算や一時的な情報の保存にぴったりな存在です。

条件名と条件値を定義する「88レベル」(条件名条件)

「88レベル」は、データの値に“わかりやすい名前”をつけるための番号です。これがあると、IF文が一気に読みやすくなります。

たとえば「性別コード」が1なら男性、2なら女性というデータがあったとします。

01 性別コード    PIC 9(1).
   88 男性       VALUE 1.
   88 女性       VALUE 2.

このように88レベルで条件名を定義すると、プログラム内ではこんな風に書けます。

IF 男性
   DISPLAY '男性です'.
END-IF.

数字を比較するよりも直感的に読み取れますし、コードの意味がパッと見てわかるようになります。

条件をたくさん使う処理では、とても役立つ記述方法です。

COBOLレコード記述項のレベル番号:書き方のルールと注意点

レベル番号は数字を並べればいいだけ…と思っていると、意外なところでミスが起きます。

基本的なルールを知っておくことで、スムーズにデータ構造を組み立てられるようになります。

以下のポイントをチェックしてみてください。

  • レベル番号は「01〜49」「66」「77」「88」のいずれかのみ使用可
  • 同じ階層に属する項目は、同じレベル番号を使う
  • 階層を深くする場合は、レベル番号を大きくする(例:05の下には10など)
  • 番号は連続である必要はない(05の次が10でもOK)
  • インデントをそろえることで構造が視覚的に分かりやすくなる
  • 「77」は階層に属さないので、01や05の下に置かない
  • 「88」は、必ず他の項目(親)にぶら下がって使う

番号を適当に付けると、コンパイルエラーの原因になります。見た目の整理と構造の意味づけ、両方を意識しましょう。

まとめ:レベル番号を理解してCOBOLデータ定義をマスターしよう

  • 「01」はレコードのスタート地点。全体の名前を定義する
  • 「02〜49」は階層構造を作る番号。親子関係を表現する
  • 「66」はデータ項目に別名をつけたいときに使用
  • 「77」は階層を持たない単独項目。カウンターなどに便利
  • 「88」は値に名前をつけることでIF文などが読みやすくなる
  • レベル番号は数字のルールとインデントのバランスが命

レベル番号が理解できれば、COBOLのデータ定義はもう怖くありません。

次はファイル操作や演算処理にも挑戦して、ステップアップしていきましょう。

レベル番号の使いこなし、もうバッチリですね!

【関連記事】

>> 今さら聞けない「COBOLとは?」

このブログを検索

  • ()

自己紹介

自分の写真
リモートワークでエンジニア兼Webディレクターとして活動しています。プログラミングやAIなど、日々の業務や学びの中で得た知識や気づきをわかりやすく発信し、これからITスキルを身につけたい人にも役立つ情報をお届けします。 note → https://note.com/yurufuri X → https://x.com/mnao111

QooQ