COBOL(Common Business Oriented Language)は、1959年に開発された、主に事務処理向けに設計されたプログラミング言語です。その名の通り、「共通の事務処理指向言語」として、金融、保険、官公庁などの基幹システムで現在も稼働し続けています。
現代のプログラミング言語とは異なる独特の構文を持つCOBOLですが、そのシンプルで可読性の高い(英語に近い)記述は、事務処理の信頼性と保守性の高さに寄与しています。この記事では、COBOLの基本的なプログラム構造から、データ定義、主な命令文まで、その構文の概要を分かりやすく解説します。
1. COBOLプログラムの基本的な構造
COBOLプログラムは、大きく分けて**4つの部(DIVISION)**から構成されています。これらは特定の順番で記述され、それぞれがプログラムの異なる側面を定義します。
- IDENTIFICATION DIVISION(標識部)
- プログラムの識別情報(プログラム名、作成者、作成日など)を記述します。
PROGRAM-ID.
が必須で、プログラム名を定義します。
- ENVIRONMENT DIVISION(環境部)
- プログラムが動作する外部環境(使用するファイルやデバイスなど)に関する情報を記述します。
- 主に
CONFIGURATION SECTION
(コンピュータの構成情報)とINPUT-OUTPUT SECTION
(入出力ファイルに関する情報)から構成されます。
- DATA DIVISION(データ部)
- プログラムが扱うすべてのデータ(変数、定数、ファイルレコードの構造など)を定義します。
- COBOLで最も特徴的で重要な部分の一つです。
- PROCEDURE DIVISION(手続き部)
- プログラムの実際の処理ロジック(命令文)を記述します。
- 他の言語の「main関数」や「処理ブロック」に相当し、データ部で定義されたデータを使って計算や入出力などの操作を行います。
これらの部は、さらに「節(SECTION)」や「段落(PARAGRAPH)」に細分化されることがあります。
記述例(基本構造)
COBOL
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO-WORLD.
AUTHOR. YOUR-NAME.
DATE-WRITTEN. 2023/10/27.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. YOUR-COMPUTER.
OBJECT-COMPUTER. YOUR-COMPUTER.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-MESSAGE PIC X(20) VALUE 'Hello, COBOL World!'.
PROCEDURE DIVISION.
MAIN-ROUTINE.
DISPLAY WS-MESSAGE.
STOP RUN.
この例では、HELLO-WORLD
というプログラムが、WS-MESSAGE
という変数に格納された文字列を表示し、終了するというシンプルな処理を行っています。
2. DATA DIVISION:データの定義と表現
COBOLのデータ部は、その強力な事務処理能力を支える非常に重要な要素です。データは「レベル番号」という概念を使って階層的に定義されます。
レベル番号
データの階層構造を表す2桁の数字です。
01
:最上位のグループ項目(レコード全体など)02
~49
:グループ項目や基本項目77
:独立項目(どのグループにも属さない単一のデータ項目)88
:条件名(特定のデータ値に名前を付ける)
PICTURE句(PICTURE節)
データの型、桁数、書式を定義するために使用します。PIC
と省略されることが多いです。
- 文字データ(英数字):
X
PIC X(10)
:10桁の英数字項目
- 数字データ:
9
PIC 9(5)
:5桁の符号なし整数PIC S9(5)
:5桁の符号付き整数(Sは符号を表す)PIC 9(3)V99
:整数部3桁、小数部2桁の数字(Vは小数点位置を表すが、データ中には含まれない)
- 編集済み数字データ(表示用):
Z
,.
,,
などPIC ZZZ9.99
:上位ゼロを空白にし、小数点とカンマを付加して表示
- 使用法(USAGE句): データが内部でどのように表現されるかを指定します。省略すると
DISPLAY
(文字形式)が適用されます。DISPLAY
: 文字形式(人間が読める形式)COMP
(COMPUTATIONAL): 2進数形式(CPUのレジスタで計算しやすい形式)COMP-3
(COMPUTATIONAL-3): パック10進数形式(COBOLの真骨頂。数字2桁を1バイトで表現し、最後に符号。小数点以下も正確に表現でき、計算誤差が生じにくい)
記述例(DATA DIVISION)
COBOL
DATA DIVISION.
WORKING-STORAGE SECTION.
* 独立項目 (レベル番号 77)
77 WS-AMOUNT-A PIC S9(5)V99 COMP-3 VALUE +123.45.
77 WS-AMOUNT-B PIC S9(5)V99 COMP-3 VALUE +67.89.
77 WS-TOTAL PIC S9(6)V99 COMP-3.
77 WS-DISPLAY-TOTAL PIC Z(6).99.
* グループ項目と基本項目 (レベル番号 01, 05)
01 WS-EMPLOYEE-RECORD.
05 WS-EMP-ID PIC 9(5).
05 WS-EMP-NAME PIC X(20).
05 WS-EMP-SALARY PIC S9(7)V99 COMP-3.
3. PROCEDURE DIVISION:処理の記述
手続き部は、データ部で定義されたデータを使って、実際の処理ロジックを記述する場所です。英語に近い記述で、比較的直感的に理解しやすいのが特徴です。
主な命令文(ステートメント)
- 入出力文
DISPLAY 変数名
:画面にデータを出力します。デバッグやシンプルなメッセージ表示によく使われます。ACCEPT 変数名
:キーボードからデータを入力します。
- 算術演算文
ADD A TO B GIVING C
:AとBを足してCに格納します。SUBTRACT A FROM B GIVING C
:BからAを引いてCに格納します。MULTIPLY A BY B GIVING C
:AとBを掛けてCに格納します。DIVIDE A BY B GIVING C REMAINDER D
:AをBで割り、商をC、余りをDに格納します。COMPUTE 変数 = 式
:より複雑な算術式を記述できます(例:COMPUTE WS-AREA = WS-RADIUS ** 2 * WS-PI
)。
- データ転送文
MOVE 送り出し項目 TO 受け取り項目
:送り出し項目の内容を受け取り項目にコピーします。COBOLで最も頻繁に使われる命令の一つです。データ型の変換(数字→文字)や編集も自動的に行われます。
- 制御文
IF 条件 THEN ... ELSE ... END-IF
:条件分岐を行います。PERFORM 段落名
:指定された段落(サブルーチン)を実行し、呼び出し元に戻ります。PERFORM UNTIL 条件 ... END-PERFORM
:条件が真になるまで処理を繰り返します(ループ)。GO TO 段落名
:指定された段落に無条件でジャンプします(現代ではあまり推奨されません)。STOP RUN
:プログラムを終了します。
記述例(PROCEDURE DIVISION)
上記のDATA DIVISION
の例と組み合わせて、計算処理を行う例を見てみましょう。
COBOL
PROCEDURE DIVISION.
MAIN-ROUTINE.
* WS-AMOUNT-A と WS-AMOUNT-B を加算し、WS-TOTAL に格納
ADD WS-AMOUNT-A TO WS-AMOUNT-B GIVING WS-TOTAL.
* WS-TOTAL の値を表示用に編集し、WS-DISPLAY-TOTAL に格納
MOVE WS-TOTAL TO WS-DISPLAY-TOTAL.
* 結果を表示
DISPLAY '合計金額: ' WS-DISPLAY-TOTAL.
* WS-TOTAL が 200 を超えるかどうかの条件分岐
IF WS-TOTAL IS GREATER THAN 200
DISPLAY '合計金額は200を超えています。'
ELSE
DISPLAY '合計金額は200以下です。'
END-IF.
* プログラムを終了
STOP RUN.
4. ファイル処理
COBOLは事務処理の中心であるファイル処理に非常に長けています。ENVIRONMENT DIVISION
でファイルを定義し、DATA DIVISION
でファイルレコードの構造を定義した後、PROCEDURE DIVISION
で以下の命令を使って操作します。
OPEN INPUT ファイル名
:ファイルを読み込み用に開くOPEN OUTPUT ファイル名
:ファイルを書き込み用に開くREAD ファイル名 INTO レコード変数
:ファイルから1レコード読み込むWRITE レコード変数 FROM データ変数
:ファイルに1レコード書き込むCLOSE ファイル名
:ファイルを閉じる
5. COBOLのコードフォーマット
COBOLのコードは、かつてはパンチカードの時代から受け継がれた固定長フォーマットに従っていました。
- 1桁目~6桁目: シーケンス番号(行番号)
- 7桁目: 標識領域(
*
はコメント行、-
は継続行) - 8桁目~11桁目 (A領域): 部、節、段落名、データ部のレベル番号(01, 77)、特殊レジスタなどの開始位置
- 12桁目~72桁目 (B領域): ほとんどの命令文やデータ定義の記述開始位置
- 73桁目~80桁目: 識別領域(プログラム名などを記述するが、コンパイラには影響しない)
現代のCOBOL環境では、この固定長フォーマットは柔軟になっていますが、古いプログラムを扱う際にはこのルールを知っておくことが重要です。
まとめ
COBOLは、その独特な4部構成、厳密なデータ定義(PICTURE句、レベル番号、USAGE句)、そして英語に近い直感的な手続き部の命令文によって、事務処理に特化した高い信頼性と保守性を提供してきました。特に「パック10進数(COMP-3)」による正確な数値計算能力は、金融機関などの基幹システムで不可欠な要素です。
現代のプログラミング言語とは異なる側面が多いですが、COBOLの基本構文を理解することは、今なお社会の重要なインフラを支える基幹システムの仕組みを理解する上で非常に役立ちます。