COBOLのグループ項目とエレメンタリ項目の違いをやさしく解説!初心者でもすぐわかるデータの基本
生徒
「先生、COBOLでデータをまとめたり分けたりする方法ってあるんですか?」
先生
「あるよ。COBOLでは『グループ項目』と『エレメンタリ項目』という形でデータを整理できるんだ。」
生徒
「その2つって何が違うんですか?どっちを使えばいいんでしょうか?」
先生
「それじゃあ、グループ項目とエレメンタリ項目の違いについて、やさしく説明していくね!」
1. COBOLにおけるデータ項目とは?
COBOL(コボル)では、プログラムの中で使う情報のことを「データ項目」と呼びます。データ項目は、文字や数字といった情報(データ)を入れる箱のようなものです。
このデータ項目には、細かい情報をひとつずつ扱う「エレメンタリ項目」と、いくつかの項目をまとめてひとつにした「グループ項目」の2種類があります。
たとえば、人の情報(名前、生年月日、住所など)をCOBOLで表すとき、それぞれを別々の箱に入れるのがエレメンタリ項目、全体をまとめるのがグループ項目です。
2. エレメンタリ項目とは?
エレメンタリ項目(Elementary Item)は、それだけで意味を持つひとつのデータです。たとえば、「名前」「年齢」「電話番号」など、それぞれ単独で扱えるデータを指します。
エレメンタリ項目は、PIC(ピクチャ)句を使って、どんなデータなのか(文字列か数字か、何桁かなど)を詳しく指定します。
例として、名前と年齢をエレメンタリ項目で表すと、次のようになります。
01 NAME PIC A(20).
01 AGE PIC 9(3).
PIC A(20)は、アルファベット(A)を20文字まで入れられるという意味です。PIC 9(3)は、3桁の数字を扱えるという意味です。
3. グループ項目とは?
グループ項目(Group Item)は、複数のエレメンタリ項目をひとまとめにしたデータ項目です。
たとえば「名前」「年齢」「電話番号」など、ひとりの人物に関する情報をまとめて管理したいときに使います。
グループ項目にはPIC句を指定しません。中に含まれる項目それぞれにPIC句を書きます。
グループ項目の例を見てみましょう。
01 PERSON-INFO.
05 NAME PIC A(20).
05 AGE PIC 9(3).
05 PHONE PIC X(10).
PERSON-INFOがグループ項目です。その中にNAMEやAGEなどのエレメンタリ項目が入っています。
4. グループ項目とエレメンタリ項目の違いを身近な例で理解しよう
簡単なたとえ話で違いを見てみましょう。
- エレメンタリ項目は「リンゴ」「バナナ」「みかん」といったひとつひとつの果物
- グループ項目はそれらをまとめた果物かご(フルーツバスケット)
つまり、果物ひとつひとつがエレメンタリ項目で、それらをまとめて入れておくのがグループ項目です。
プログラムで処理するときも、「果物かごごと渡す」ようにデータを一括管理できます。
5. DISPLAYで出力して違いを見てみよう
実際にCOBOLで出力してみると、グループ項目はまとめて表示できます。
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 PERSON-INFO.
05 NAME PIC A(10) VALUE "TARO".
05 AGE PIC 99 VALUE 25.
05 PHONE PIC X(10) VALUE "0123456789".
PROCEDURE DIVISION.
DISPLAY "個別出力:".
DISPLAY NAME.
DISPLAY AGE.
DISPLAY PHONE.
DISPLAY "まとめて出力:".
DISPLAY PERSON-INFO.
STOP RUN.
このプログラムを実行すると、以下のように表示されます。
個別出力:
TARO
25
0123456789
まとめて出力:
TARO 250123456789
グループ項目PERSON-INFOは、すべての中身をつなげてまとめて表示しています。
6. どんなときにグループ項目を使うの?
グループ項目は、次のようなときに使うと便利です。
- 複数の項目をまとめて処理したいとき
- 読みやすく整理されたデータ構造を作りたいとき
- ファイルに書き込むときなど、ひとまとめで扱いたいとき
逆に、エレメンタリ項目は、個別の値にアクセスして処理したいときに向いています。
7. レベル番号にも注目しよう
COBOLでは、データ項目の階層をレベル番号で表します。数字が小さいほど上の階層になります。
01が最上位(グループ項目に使う)05や10などがその中の項目(エレメンタリ項目)に使われる
このレベル番号によって、グループとエレメンタリの関係が明確に整理されます。
まとめ
COBOLで扱うデータは、ひとつひとつの細かな情報をそのまま扱うだけでなく、意味のつながりを意識しながら整理できるようになっている。とくにグループ項目とエレメンタリ項目の違いは、初めて学ぶ人がつまずきやすい部分でもあるが、考え方はとても素直で、現実世界の管理方法と同じように理解できる。つまり、ひとりの人物を丸ごと扱うときにはグループ項目、名前や年齢だけを取り出して処理したいときにはエレメンタリ項目というかたちで使い分けるだけでよい。こうした整理ができていることで、大きなシステムでも情報を見失わずに扱えるようになり、複数の処理をまとめて扱うときにも迷わずに済む。とくに、データをファイルに書き込んだり、帳票を作成したり、連携データを生成したりするときには、グループ項目の便利さがよくわかる。複数の情報をまとめて一度に処理できるので、プログラム全体の見通しも良くなるし、無駄な記述が減ることで誤りの防止にもつながる。 また、レベル番号で階層が整理されているおかげで、複雑な項目が増えていってもどこに何が含まれているのか迷わない。01から始まり、05や10といった番号が並ぶだけで、構造がひと目で理解できる。これは長い歴史のある言語だからこそ磨かれてきた知恵でもあり、他の言語の構造体やクラスとは違った独特の味わいがある。古い言語というイメージを持たれがちだが、データ管理の考え方は驚くほどしっかりしており、何十年たった今でも多くの業務システムで使われている理由がよくわかる。 もし、ひとつずつの項目だけでプログラムを組もうとすると、画面表示や帳票、ファイル入出力などで同じ処理を何度も書くことになる。ところが、グループ項目をうまく使えば、その作業が驚くほど短くなる。たとえば、名前、住所、電話番号、年齢をまとめた項目をひとつ用意しておけば、DISPLAYでまとめて表示したり、ファイルに書き込んだり、受け渡しに使ったりと幅広く活用できる。エレメンタリ項目をひとつずつ扱う場面ももちろんあるが、それは細かい処理をしたいときや、計算や変換を行う場面になる。こうした柔軟な選択肢が、COBOLのデータ定義の強さと言える。 実際の業務システムでは、社員情報、取引情報、売上データ、顧客情報など、多種多様なデータが扱われる。グループ項目はそのような複雑な情報を整理整頓し、ひとまとまりの情報を自然な形で扱えるようにしてくれる。もし、ひとりの社員に対して10項目以上の情報があるとしても、それらを01のグループ項目にまとめることで、ひとりのデータとして認識しやすくなる。さらに、グループ項目はネスト構造にもできるため、住所をさらに県、市町村、番地などに細かく分け、それをまとめて住所項目として保持することも可能になる。その柔軟性が、シンプルな文法の中に上手く溶け込んでいる点は、COBOLが長く使われ続けてきた理由のひとつでもある。 ここでもう一度、簡単なサンプルを振り返ってみよう。
01 CUSTOMER-DATA.
05 CUST-NAME PIC A(20) VALUE "HANAKO".
05 CUST-AGE PIC 9(3) VALUE 20.
05 CUST-PHONE PIC X(10) VALUE "08012345678".
PROCEDURE DIVISION.
DISPLAY "顧客情報まとめて出力:".
DISPLAY CUSTOMER-DATA.
このように、文字列、数字、記号などが混ざっていても、グループ項目であれば一度に扱える。個別に取り出したいときは、CUST-NAMEやCUST-AGEだけを指定すればよく、必要に応じて柔軟な処理ができる。大規模なプログラムほど、この便利さが大きく感じられるはずだ。
生徒
「グループ項目とエレメンタリ項目って、思ったより簡単ですね。全部ひとつずつ覚えないといけないのかなと思っていました。」
先生
「むずかしい名前だけど、やっていることは身近な整理整頓と同じなんだよ。ひとつずつ分ければエレメンタリ、まとめればグループ。これを意識するだけでCOBOLのデータ定義はずっと理解しやすくなる。」
生徒
「たとえば、社員データや商品データをまとめて扱うときに便利ってことですね?」
先生
「そうだね。まとめて入出力したり、連携処理で一括渡ししたり、帳票に出したりと応用は多いよ。数字や名前など細かい値だけを使うときはエレメンタリ項目を読めばいいし、全体を扱うときはグループ項目を参照すればいい。」
生徒
「なるほど…。レベル番号も、その階層を見やすくするためにあるんですね。」
先生
「そのとおり。慣れてくると、01を見た瞬間に『ひとまとまりのデータなんだな』と感じられるようになるよ。COBOLのデータ定義は歴史が長い分、読みやすい工夫がたくさんあるんだ。」
生徒
「勉強前よりずっと理解できました。次のCOBOLの学習も楽しみです!」