この記事ではCOBOLプログラム構成の基礎となる「4つの部」について、どこよりも分かりやすく解説します。
なんだか古めかしい? いえいえ、COBOLの構造を知れば、プログラムの世界がグッと身近になりますよ!
この記事では、COBOLプログラムの心臓部とも言える4つのブロック、「見出し部」「環境部」「データ部」「手続き部」が、それぞれどんな役割を持っているのか、どんな順番で書くのか、その基本ルールをバッチリ解説していきます。
読み終わる頃には、「なるほど、COBOLってこうなってるのか!」とスッキリするはず。さあ、一緒にCOBOLの世界を探検しましょう!
この記事を読むと、こんなことが分かります。
- COBOLプログラムの基本的な骨組み
- 4つの部の名前とそれぞれの役割
- プログラムを書く上での基本的な順序ルール
- 各部で最低限書くべきことのイメージ
COBOLプログラム構成の基本!なぜ「4つの部」が重要なのか?
COBOLっていう言語は、結構きっちりした性格なんです。
プログラムを書くときに、「ここはこういう情報を書く場所」「次はこれを書く」みたいに、構成(書き方のルール)がカッチリ決まっています。
その中でも、プログラム全体を大きく4つのブロックに分けて書く、というのが一番の基本ルール。
これが今回お話しする「4つの部(Division)」と呼ばれるものです。
なぜこんな風に分かれているかというと、
- プログラムのどこに何が書いてあるか分かりやすくなる(可読性)
- 後から修正したり、機能を追加したりしやすくなる(保守性)
- 誰が書いてもある程度同じような形になる(標準化)
といった理由があります。特に昔の大規模なシステム開発では、たくさんの人が関わるので、こういうルールがとても役立ったんですね。
ですから、COBOLを学ぶ上で、まずこの「4つの部」を理解することは、避けて通れない、いわば登竜門なんです。ここをしっかり押さえれば、COBOLの理解がグッと深まりますよ!
COBOLプログラムを構成する「4つの部」とは?その全体像と順序
それでは、その「4つの部」をご紹介しましょう!以下の4つのブロックから成り立っています。
- 見出し部 (IDENTIFICATION DIVISION)
- 環境部 (ENVIRONMENT DIVISION)
- データ部 (DATA DIVISION)
- 手続き部 (PROCEDURE DIVISION)
大切なのは、必ずこの順番で書かなければいけない、というルールです。
順番を間違えると、コンピュータが「???」となってしまい、プログラムは動きません。
イメージとしては、こんな感じの構成になっています。
プログラム全体 │ ├── 1. 見出し部 (IDENTIFICATION DIVISION.) │ └── プログラム自身の情報を書く │ ├── 2. 環境部 (ENVIRONMENT DIVISION.) │ └── プログラムが動く環境や使うファイルを書く │ ├── 3. データ部 (DATA DIVISION.) │ └── プログラムで使うデータ(変数など)を書く │ └── 4. 手続き部 (PROCEDURE DIVISION.) └── プログラムの実際の処理内容を書く
各部の名前の後に「.」(ピリオド)が付いているのもポイントです。これもCOBOLのお作法なんです。
① 見出し部 (IDENTIFICATION DIVISION) - プログラムの顔!COBOLプログラムの自己紹介エリア
まず最初のブロックは「見出し部」です。
名前の通り、このプログラムが「どんなプログラムなのか」という自己紹介をする部分です。
プログラムの名前や、誰がいつ作ったのか、といった情報を書く場所になります。
人間でいうと、名札や名刺みたいなものですね。
たくさんのプログラムの中から、「君はどのプログラムだっけ?」とならないように、最初に名乗っておくわけです。
この見出し部の中で、絶対に書かなくてはいけないのが `PROGRAM-ID` です。
PROGRAM-ID
: プログラムに名前を付ける必須項目
PROGRAM-ID` は、そのプログラム固有の名前を付けるための、見出し部における最重要かつ必須の項目です。
ここにプログラム名を記述します。これが無いと、「名前のないプログラムなんて!」とコンピュータに怒られてしまいます(コンパイルエラーになります)。
書き方はこんな感じです。
IDENTIFICATION DIVISION. PROGRAM-ID. SAMPLE-PROGRAM.
上の例では、「SAMPLE-PROGRAM」という名前を付けています。
プログラム名は、英数字とハイフン(-)が使えますが、先頭をハイフンにできない、などのちょっとしたルールがあります。まずは半角英大文字とハイフンで作る、と覚えておくと良いでしょう。そして、最後にピリオド「.」を忘れずに!
その他の記述項目(AUTHOR, DATE-WRITTEN など)
PROGRAM-ID` 以外にも、見出し部にはいくつか書ける項目があります。
AUTHOR.
(作成者名)INSTALLATION.
(所属など)DATE-WRITTEN.
(作成日)DATE-COMPILED.
(コンパイルした日) ※これはコンパイラが自動で入れることが多いSECURITY.
(機密区分)
これらは、プログラムの管理情報として記述されますが、現代の多くのCOBOL環境では、`PROGRAM-ID` 以外は書いても書かなくても、プログラムの動作には影響しません。(コメントとして扱われることが多いです)
必須ではありませんが、誰がいつ作ったプログラムなのかを残しておくのは、後々のために良い習慣と言えますね。
IDENTIFICATION DIVISION. PROGRAM-ID. KEISAN-PROGRAM. AUTHOR. YAMADA-TARO. DATE-WRITTEN. 2025/04/14. *> DATE-COMPILED はコンパイラが自動で記述する場合が多い
② 環境部 (ENVIRONMENT DIVISION) - プログラムと外部世界を繋ぐ!COBOLプログラムの実行環境定義
2番目のブロックは「環境部」です。
ここは、プログラムがどんな「環境」で動くのか、そしてファイルなどの「外部」のリソースとどう繋がるのか、といった情報を記述する場所です。
例えば、
- このプログラムは、どの種類のコンピュータで動かすの?
- プログラムの中で「仕入データ」って名前で使いたいファイルは、実際にはどのファイルのこと?
といった、プログラムとその外の世界(ハードウェアやファイルシステム)との「橋渡し」の役割を担っています。
この環境部は、大きく2つの「節(Section)」に分かれることがあります。
CONFIGURATION SECTION.
(構成節)INPUT-OUTPUT SECTION.
(入出力節)
ただし、ファイルを使わないような簡単なプログラムだと、環境部自体が不要なケースもあります。
CONFIGURATION SECTION
: コンピュータ環境を指定
構成節では、このプログラムを開発したコンピュータ(SOURCE-COMPUTER`)と、実際に動かすコンピュータ(
OBJECT-COMPUTER`)の種類などを指定します。
また、通貨記号の変更など、プログラム内で使う特殊な文字や機能を定義する `SPECIAL-NAMES` という段落もあります。
ENVIRONMENT DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER. FUJITSU-GS. * 例:開発したコンピュータ OBJECT-COMPUTER. FUJITSU-GS. * 例:動かすコンピュータ SPECIAL-NAMES. CURRENCY SIGN IS '¥'. * 例:通貨記号を円マークに
最近の環境ではあまり細かく書かなくても良い場合も多いですが、プログラムが特定の実行環境に依存することを示す場所、と理解しておきましょう。
INPUT-OUTPUT SECTION
: ファイルの指定と関連付け
入出力節は、特にプログラムがファイル(データを保存しておく入れ物)を読み書きするときに重要になります。
中でも `FILE-CONTROL` 段落では、プログラムの中で使う「ファイルの名前(論理ファイル名)」と、コンピュータ上にある「実際のファイル(物理ファイル)」を結びつける設定を行います。
その結びつけを行うのが SELECT`句
です。
ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT SHOHIN-MASTER ASSIGN TO 'C:\DATA\SHOHIN.DAT'. * ↑プログラム内で使う「SHOHIN-MASTER」という名前のファイルは、 * 実際には Cドライブの DATAフォルダにある SHOHIN.DAT ファイルですよ、 * という関連付けをしている。
このように、SELECT` でプログラム内のファイル名を宣言し、
ASSIGN TO` で実際のファイル名を指定します。これで、プログラムはどのファイルを扱えばよいか分かるようになります。
③ データ部 (DATA DIVISION) - プログラムの材料置き場!COBOLプログラムで使うデータを定義
3番目のブロックは「データ部」です。ここは、プログラムが処理を行うために必要な「データ」を置いておく場所、いわば「材料置き場」や「作業スペース」のような役割を果たします。
プログラムの中で使う、
- 計算結果を入れておく変数(数値や文字を入れる箱)
- 固定のメッセージ(「計算結果は」のような文字)
- ファイルから読み込んだデータを入れておく領域
- 画面や帳票に出力するデータの形
といった、ありとあらゆる「データ」の種類(数字か文字かなど)や大きさ(何桁かなど)を、あらかじめここで定義しておきます。
データ部も、扱うデータの種類によっていくつかの「節(Section)」に分かれます。
FILE SECTION.
(ファイル節:ファイルレコードの構造を定義)WORKING-STORAGE SECTION.
(作業場所節:プログラム内部で使う変数や定数を定義)LINKAGE SECTION.
(連絡節:他のプログラムとデータをやり取りする場合に定義)
初心者のうちは、特に WORKING-STORAGE SECTION`
をよく使うことになるでしょう。
FILE SECTION
: ファイルレコードのデータ構造を定義
ファイル節は、環境部の `INPUT-OUTPUT SECTION` で `SELECT`句を使って指定したファイルを扱う場合に、そのファイルの中にデータがどのような形式で格納されているか(レコード構造)を定義する場所です。
ファイルの「設計図」を書くイメージですね。
まず FD` (ファイル記述項)
でファイル全体の情報を書き、続けてレベル番号(01, 02, 03...)を使ってレコード内の各項目(フィールド)の名前、型、桁数を定義します。
DATA DIVISION. FILE SECTION. FD SHOHIN-MASTER. * 環境部でSELECTしたファイル名を指定 01 SHOHIN-RECORD. * レコード全体の名前 (01レベル) 02 SHOHIN-CODE PIC 9(5). * 商品コード (数字5桁) 02 SHOHIN-NAME PIC X(20). * 商品名 (文字20桁) 02 TANKA PIC 9(7). * 単価 (数字7桁)
上記例では、「SHOHIN-RECORD」というレコードの中に、「SHOHIN-CODE」(数字5桁)、「SHOHIN-NAME」(文字20桁)、「TANKA」(数字7桁)という3つの項目がある、と定義しています。`PIC` は PICTURE句の略で、データの型と桁数を指定します。
WORKING-STORAGE SECTION
: プログラム内部で使う変数や定数を定義
作業場所節は、プログラムが計算したり、データを一時的に保存したりするために使う、内部的な作業用の変数や定数を定義する場所です。ファイルとは直接関係なく、プログラムのロジックの中で自由に使うデータを置きます。
例えば、カウンター変数、合計金額を溜める変数、画面に表示するメッセージなどを定義します。
ここでもレベル番号と PIC`句 ( PICTURE句 )
を使って定義します。`PIC 9` は数字、`PIC X` は文字を表すことが多いです。
DATA DIVISION. WORKING-STORAGE SECTION. 77 WS-COUNTER PIC 9(3) VALUE 0. * カウンター用変数(数字3桁、初期値0) 77 WS-MESSAGE PIC X(30) VALUE 'HELLO COBOL WORLD!'. * メッセージ用変数 01 WS-GOUKEI-KIN. * 合計金額をまとめるグループ項目 02 SEISU-BU PIC 9(8). * 整数部 (数字8桁) 02 SHOSU-BU PIC 9(2). * 小数部 (数字2桁)
レベル番号77は、他の項目と関連のない独立した項目を定義するときによく使われます。01レベルは、関連する項目をまとめるグループとして定義できます。
④ 手続き部 (PROCEDURE DIVISION) - プログラムの心臓部!COBOLプログラムの処理内容を記述
最後の4番目のブロックが「手続き部」です。
ここは、まさにプログラムの「心臓部」! データ部で用意した材料(データ)を使って、実際に行う処理(手続き)を順番に書いていく場所です。
計算したり、条件によって処理を変えたり、ファイルからデータを読み込んだり、結果を画面や帳票に出力したり、といったプログラムの「動き」は、すべてこの手続き部に記述します。
COBOLの命令(動詞と呼ばれます)を使って、コンピュータに「あれやって、これやって」と指示を出していきます。主な命令には、以下のようなものがあります。
MOVE
: データを移動(コピー)するADD
: 数値を足し算するSUBTRACT
: 数値を引き算するMULTIPLY
: 数値を掛け算するDIVIDE
: 数値を割り算するDISPLAY
: データを画面に表示するACCEPT
: キーボードからの入力を受け付けるIF
: 条件によって処理を分岐するPERFORM
: 特定の処理(段落)を繰り返し実行したり、呼び出したりするREAD
: ファイルからデータを読み込むWRITE
: ファイルへデータを書き込むOPEN
: ファイルを使用可能な状態にするCLOSE
: ファイルの使用を終了するSTOP RUN
: プログラムの実行を終了する
簡単な例を見てみましょう。
PROCEDURE DIVISION. MAIN-PROCESS. * データ部で定義した WS-MESSAGE を画面に表示する DISPLAY WS-MESSAGE. * データ部で定義した WS-COUNTER に 1 を加える ADD 1 TO WS-COUNTER. * プログラムの実行を終了する STOP RUN.
このように、命令を使って処理を記述していきます。MAIN-PROCESS.` のように、処理のまとまりに「段落名(Paragraph)」を付けて管理することも一般的です。
STOP RUN`
そして、プログラムの処理を完全に終わらせる命令が
まとめ
お疲れ様でした! COBOLプログラムの基本構成である「4つの部」について、なんとなくイメージが掴めましたでしょうか?
もう一度おさらいすると、
- 見出し部 (IDENTIFICATION DIVISION): プログラム自身の紹介
- 環境部 (ENVIRONMENT DIVISION): プログラムの実行環境やファイルとの接続
- データ部 (DATA DIVISION): プログラムで使うデータの定義
- 手続き部 (PROCEDURE DIVISION): プログラムの実際の処理内容
という役割分担になっていて、必ずこの順番で書く、というのが鉄則でしたね。
この4つの部の構造をしっかり理解しておけば、これからCOBOLのコードを読んだり、自分で書いたりするときに、どこに何が書かれているのか、次に何を書けばいいのか、迷うことがグッと減るはずです。
まずはこの骨組みを頭に入れて、次は手続き部で使う命令(動詞)を一つずつ見ていくと、もっとCOBOLが面白くなりますよ!
自信を持って、COBOL学習を進めていってくださいね!
【関連記事】
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。