「COBOLを勉強したいけど、どこから手をつければいいかわからない」
「基本的な構文を知りたいけど、専門用語が多くて難しそう」
そんな悩みを持っていませんか?
COBOLは1959年に誕生した歴史ある言語ですが、今でも金融機関や政府機関の基幹システムで現役で活躍しています。英語に近い構文で書かれているため、実は初心者にも理解しやすい言語なんです。
この記事では、COBOLの基本構文を初心者の方でも分かるように、順を追って丁寧に解説していきます。プログラムの書き方の基本をマスターして、COBOLプログラマーへの第一歩を踏み出しましょう。
COBOLとは?基本を知ろう
まず、COBOLの基本的な特徴を理解しておきましょう。
COBOLの正式名称と誕生の背景
COBOLは「Common Business Oriented Language(共通事務処理用言語)」の略称です。
1959年にアメリカで開発されたこの言語は、当時難解だったプログラミング言語を、もっと人間にとって理解しやすくするために作られました。
開発の目的
- 事務処理用のプログラムを効率よく開発する
- 英語に近い文法で誰でも読み書きできるようにする
- 様々なコンピューターで動作する(移植性が高い)
COBOLが今も使われている理由
60年以上前の言語が今も使われているのには、明確な理由があります。
金融機関での利用
世界中の金融取引の約80%がCOBOLで処理されているとも言われています。ATMの取引の95%がCOBOL製システムで動いているんです。
高い信頼性
長年の実績があり、バグが少なく安定して動作します。お金を扱うシステムには欠かせない特性ですね。
移行コストの問題
既存の大規模システムを別の言語で作り直すには、莫大な費用と時間がかかります。そのため、今後もCOBOLは使い続けられると考えられています。
COBOLの主な特徴
1. 英語に近い構文
「MOVE 100 TO TOTAL」(100をTOTALに移動する)のように、英語の文章のように書けます。
2. 事務処理・計算処理が得意
大量のデータを高速に処理でき、金額計算も正確に行えます。
3. 10進数での表現
COBOLは数値を10進数で扱うため、金額の計算で誤差が生じにくい仕組みになっています。
4. ファイル処理に強い
大量のデータをファイルに書き込んだり、読み込んだりする処理が得意です。
COBOLプログラムの基本構造
COBOLプログラムは、必ず4つの部(DIVISION)で構成されています。この構造を理解することが、COBOL習得の第一歩です。
4つの部(DIVISION)の概要
COBOLプログラムは、次の順番で4つの部を記述します。
- 見出し部(IDENTIFICATION DIVISION)
プログラムの基本情報を書く場所 - 環境部(ENVIRONMENT DIVISION)
プログラムの動作環境を定義する場所 - データ部(DATA DIVISION)
使用するデータや変数を定義する場所 - 手続き部(PROCEDURE DIVISION)
実際の処理を書く場所
見出し部は必須ですが、他の3つの部は省略することもできます。ただし、実際のプログラムではほとんどの場合、4つの部すべてを使用します。
最もシンプルなCOBOLプログラムの例
まずは、画面に「Hello World」と表示するだけの簡単なプログラムを見てみましょう。
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
PROCEDURE DIVISION.
DISPLAY 'Hello World'.
STOP RUN.
プログラムの説明
IDENTIFICATION DIVISION.→ 見出し部の開始PROGRAM-ID. HELLO.→ プログラム名を「HELLO」と指定PROCEDURE DIVISION.→ 手続き部の開始DISPLAY 'Hello World'.→ 画面に「Hello World」と表示STOP RUN.→ プログラムを終了
このように、COBOLは英語の文章のように読めることが特徴です。
見出し部(IDENTIFICATION DIVISION)の書き方
見出し部は、COBOLプログラムで唯一必須の部です。プログラムを識別するための情報を記述します。
基本的な書き方
IDENTIFICATION DIVISION.
PROGRAM-ID. プログラム名.
AUTHOR. 作成者名.
DATE-WRITTEN. 作成日.
各段落の説明
PROGRAM-ID(必須)
プログラム名を指定します。これだけは必ず書かなければなりません。
- プログラム名は30文字以内
- 英文字、数字、ハイフン(-)、アンダーバー(_)が使用可能
- 先頭は必ず英文字で始める
AUTHOR(任意)
プログラムの作成者名を記述できます。
DATE-WRITTEN(任意)
プログラムを作成した日付を記述できます。
実際の記述例
IDENTIFICATION DIVISION.
PROGRAM-ID. CALC-SAMPLE.
AUTHOR. TARO-YAMADA.
DATE-WRITTEN. 2024-01-15.
環境部(ENVIRONMENT DIVISION)の書き方
環境部では、プログラムを実行するコンピューターの環境や、使用するファイルの情報を定義します。
環境部の基本構造
環境部には2つの節(SECTION)があります。
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
INPUT-OUTPUT SECTION.
CONFIGURATION SECTION(構成節)
プログラムをコンパイルする機種と実行する機種の情報を記述します。現在は省略されることが多いです。
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-PC.
OBJECT-COMPUTER. IBM-PC.
INPUT-OUTPUT SECTION(入出力節)
プログラムで使用するファイルの情報を定義します。ファイルを扱う場合は必ず記述が必要です。
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT ファイル名
ASSIGN TO 実際のファイル名
ORGANIZATION IS LINE SEQUENTIAL.
記述例
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT SYAIN-FILE
ASSIGN TO 'SYAIN.TXT'
ORGANIZATION IS LINE SEQUENTIAL.
この例では、「SYAIN.TXT」という実際のファイルを、プログラム内で「SYAIN-FILE」という名前で扱うことを宣言しています。
ファイルを使わない場合
ファイルを使わない簡単なプログラムでは、環境部全体を省略できます。
IDENTIFICATION DIVISION.
PROGRAM-ID. SIMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NUM PIC 9(3) VALUE 100.
PROCEDURE DIVISION.
DISPLAY WS-NUM.
STOP RUN.
データ部(DATA DIVISION)の書き方
データ部は、プログラムで使用する変数やファイルの構造を定義する非常に重要な部分です。
データ部の基本構造
データ部には複数の節(SECTION)があります。
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
LOCAL-STORAGE SECTION.
LINKAGE SECTION.
FILE SECTION(ファイル節)
ファイルの内容を定義します。環境部で宣言したファイルの構造を、ここで詳しく記述します。
FILE SECTION.
FD ファイル名.
01 レコード名.
05 項目名1 PIC X(10).
05 項目名2 PIC 9(5).
WORKING-STORAGE SECTION(作業領域節)
プログラム内で使用する変数を定義します。最もよく使われる節です。
WORKING-STORAGE SECTION.
01 WS-NAME PIC X(20) VALUE 'TANAKA'.
01 WS-AGE PIC 9(3) VALUE 25.
01 WS-SALARY PIC 9(7) VALUE 3000000.
LOCAL-STORAGE SECTION(局所領域節)
WORKING-STORAGE SECTIONと似ていますが、プログラムが実行されるたびに変数が初期化される点が異なります。
LINKAGE SECTION(連絡節)
外部のプログラムからデータを受け取る場合に使用します。
データ項目の定義方法(PIC句)
COBOLでは、データ項目を定義する際に「PIC句」を使います。これは「PICTURE句」の略で、データの型と桁数を指定するものです。
主なデータ型
| 記号 | 意味 | 例 |
|---|---|---|
| X | 英数字(文字と数字) | PIC X(10) = 10文字 |
| A | 英字のみ | PIC A(5) = 5文字(アルファベットのみ) |
| 9 | 数字のみ | PIC 9(5) = 5桁の数値 |
記述例
01 WS-NAME PIC X(20). *> 20文字の英数字
01 WS-CODE PIC X(8). *> 8文字の英数字
01 WS-COUNT PIC 9(3). *> 3桁の数値(0〜999)
01 WS-PRICE PIC 9(7). *> 7桁の数値(0〜9999999)
01 WS-RATE PIC 9(3)V9(2). *> 小数点付き数値(例:123.45)
Vは小数点の位置を示す記号で、実際には小数点文字は表示されません。
レベル番号による階層構造
COBOLの特徴的な機能として、データを階層構造で定義できます。
01 WS-EMPLOYEE.
05 WS-EMP-ID PIC 9(5).
05 WS-EMP-NAME PIC X(20).
05 WS-EMP-ADDR.
10 WS-POSTAL PIC X(7).
10 WS-CITY PIC X(20).
10 WS-STREET PIC X(30).
レベル番号の意味
- 01:最上位のグループ項目
- 05:01の下位項目
- 10:05の下位項目
このように、住所情報を「郵便番号」「市区町村」「番地」に分けて定義できます。階層化することで、データ構造が分かりやすくなります。
VALUE句による初期値設定
変数を定義する際に、初期値を設定できます。
WORKING-STORAGE SECTION.
01 WS-COMPANY PIC X(20) VALUE 'ABC Corporation'.
01 WS-YEAR PIC 9(4) VALUE 2024.
01 WS-TAX-RATE PIC 9V99 VALUE 0.10.
プログラム開始時に、これらの変数には指定した値が自動的に設定されます。
手続き部(PROCEDURE DIVISION)の書き方
手続き部は、実際の処理を記述する部分です。プログラムのメインロジックがここに書かれます。
手続き部の基本構造
PROCEDURE DIVISION.
段落名.
実行文1.
実行文2.
実行文3.
STOP RUN.
手続き部では、段落(PARAGRAPH)を自由に定義して、その中に実行文を記述します。
段落(PARAGRAPH)の使い方
段落は、処理をまとめる単位です。段落名の後にピリオドを付けて定義します。
PROCEDURE DIVISION.
MAIN-PROCEDURE.
PERFORM INITIALIZE-DATA.
PERFORM CALCULATE-TOTAL.
PERFORM DISPLAY-RESULT.
STOP RUN.
INITIALIZE-DATA.
MOVE 0 TO WS-TOTAL.
MOVE 0 TO WS-COUNT.
CALCULATE-TOTAL.
ADD 100 TO WS-TOTAL.
ADD 1 TO WS-COUNT.
DISPLAY-RESULT.
DISPLAY 'Total: ' WS-TOTAL.
DISPLAY 'Count: ' WS-COUNT.
このように処理を段落に分けることで、プログラムが読みやすくなります。
基本的な命令文
COBOLで頻繁に使う命令文を見ていきましょう。
DISPLAY文(画面表示)
画面に文字や変数の値を表示します。
DISPLAY '文字列'.
DISPLAY 変数名.
DISPLAY '文字列' 変数名.
使用例
DISPLAY 'Hello World'.
DISPLAY WS-NAME.
DISPLAY 'Name: ' WS-NAME.
DISPLAY 'Age: ' WS-AGE ' years old'.
ACCEPT文(入力受付)
キーボードからデータを入力してもらいます。
ACCEPT 変数名.
使用例
WORKING-STORAGE SECTION.
01 WS-INPUT-NAME PIC X(20).
PROCEDURE DIVISION.
DISPLAY 'Enter your name: '.
ACCEPT WS-INPUT-NAME.
DISPLAY 'Hello, ' WS-INPUT-NAME '!'.
STOP RUN.
MOVE文(代入)
変数に値を代入したり、変数の値を別の変数にコピーしたりします。
MOVE 値 TO 変数名.
MOVE 変数1 TO 変数2.
使用例
MOVE 100 TO WS-NUM.
MOVE 'TOKYO' TO WS-CITY.
MOVE WS-PRICE TO WS-TOTAL.
MOVE ZEROS TO WS-COUNT. *> 0で初期化
MOVE SPACES TO WS-NAME. *> 空白で初期化
四則演算の命令文
COBOLには、四則演算それぞれに専用の命令文があります。
加算(ADD文)
ADD 数値1 TO 変数.
ADD 数値1 TO 数値2 GIVING 変数.
使用例:
ADD 10 TO WS-TOTAL. *> WS-TOTAL = WS-TOTAL + 10
ADD WS-PRICE TO WS-TOTAL. *> WS-TOTAL = WS-TOTAL + WS-PRICE
ADD 100 TO 200 GIVING WS-SUM. *> WS-SUM = 100 + 200
減算(SUBTRACT文)
SUBTRACT 数値 FROM 変数.
SUBTRACT 数値1 FROM 数値2 GIVING 変数.
使用例:
SUBTRACT 5 FROM WS-STOCK. *> WS-STOCK = WS-STOCK - 5
SUBTRACT 10 FROM 100 GIVING WS-NUM. *> WS-NUM = 100 - 10
乗算(MULTIPLY文)
MULTIPLY 数値 BY 変数.
MULTIPLY 数値1 BY 数値2 GIVING 変数.
使用例:
MULTIPLY 2 BY WS-PRICE. *> WS-PRICE = WS-PRICE * 2
MULTIPLY 10 BY 5 GIVING WS-RESULT. *> WS-RESULT = 10 * 5
除算(DIVIDE文)
DIVIDE 変数 BY 数値.
DIVIDE 数値1 BY 数値2 GIVING 変数.
DIVIDE 数値1 BY 数値2 GIVING 商 REMAINDER 余り.
使用例:
DIVIDE WS-TOTAL BY 3. *> WS-TOTAL = WS-TOTAL / 3
DIVIDE 100 BY 4 GIVING WS-RESULT. *> WS-RESULT = 100 / 4
DIVIDE 17 BY 5 GIVING WS-QUO REMAINDER WS-REM. *> 商=3, 余り=2
COMPUTE文(計算式)
複雑な計算式を書く場合は、COMPUTE文が便利です。
COMPUTE 変数 = 計算式.
使用例
COMPUTE WS-TOTAL = WS-PRICE * WS-QTY.
COMPUTE WS-TAX = WS-PRICE * 0.10.
COMPUTE WS-AVG = (WS-NUM1 + WS-NUM2 + WS-NUM3) / 3.
COMPUTE WS-RESULT = (100 + 50) * 2 - 10.
COMPUTE文では、演算子(+、-、*、/)を使って数式を書けるので、複雑な計算も分かりやすく記述できます。
INITIALIZE文(初期化)
変数を初期値にリセットします。
INITIALIZE 変数名.
使用例
INITIALIZE WS-NAME. *> 文字列はスペースに
INITIALIZE WS-COUNT. *> 数値は0に
INITIALIZE WS-RECORD. *> グループ項目全体を初期化
STOP RUN文(プログラム終了)
プログラムを終了します。手続き部の最後に必ず書きます。
STOP RUN.
条件分岐の書き方
プログラムでは、条件によって処理を分ける必要がよくあります。
IF文の基本
IF 条件式
実行文1
実行文2
END-IF.
使用例
IF WS-AGE >= 20
DISPLAY 'Adult'
END-IF.
IF WS-SCORE >= 60
DISPLAY 'Pass'
ELSE
DISPLAY 'Fail'
END-IF.
比較演算子
| 記号 | 意味 | 別の書き方 |
|---|---|---|
| = | 等しい | EQUAL TO |
| > | より大きい | GREATER THAN |
| < | より小さい | LESS THAN |
| >= | 以上 | GREATER THAN OR EQUAL TO |
| <= | 以下 | LESS THAN OR EQUAL TO |
| NOT = | 等しくない | NOT EQUAL TO |
使用例
IF WS-NUM = 100
DISPLAY 'Equal to 100'
END-IF.
IF WS-PRICE > 1000
DISPLAY 'High price'
END-IF.
IF WS-NAME = 'TANAKA'
DISPLAY 'Welcome, Tanaka-san'
END-IF.
複数条件の組み合わせ
AND(かつ)やOR(または)を使って、複数の条件を組み合わせられます。
IF WS-AGE >= 20 AND WS-AGE < 65
DISPLAY 'Working age'
END-IF.
IF WS-CODE = 'A' OR WS-CODE = 'B' OR WS-CODE = 'C'
DISPLAY 'Valid code'
END-IF.
EVALUATE文(多岐分岐)
複数の選択肢から処理を選ぶ場合は、EVALUATE文が便利です。
EVALUATE 変数
WHEN 値1
実行文1
WHEN 値2
実行文2
WHEN 値3
実行文3
WHEN OTHER
その他の場合の実行文
END-EVALUATE.
使用例
EVALUATE WS-GRADE
WHEN 'A'
DISPLAY 'Excellent'
WHEN 'B'
DISPLAY 'Good'
WHEN 'C'
DISPLAY 'Average'
WHEN 'D'
DISPLAY 'Below average'
WHEN OTHER
DISPLAY 'Invalid grade'
END-EVALUATE.
繰り返し処理の書き方
同じ処理を何度も実行する場合は、繰り返し処理を使います。
PERFORM文(基本)
段落を実行する際に使用します。
PERFORM 段落名.
使用例
PROCEDURE DIVISION.
MAIN-PARA.
PERFORM SUB-PARA.
STOP RUN.
SUB-PARA.
DISPLAY 'This is a sub paragraph'.
PERFORM TIMES(回数指定)
指定した回数だけ繰り返します。
PERFORM 段落名 回数 TIMES.
使用例
PROCEDURE DIVISION.
PERFORM SHOW-MESSAGE 5 TIMES.
STOP RUN.
SHOW-MESSAGE.
DISPLAY 'Hello!'.
このプログラムは「Hello!」を5回表示します。
PERFORM UNTIL(条件指定)
条件が満たされるまで繰り返します。
PERFORM 段落名 UNTIL 条件式.
使用例
WORKING-STORAGE SECTION.
01 WS-COUNT PIC 9(3) VALUE 1.
PROCEDURE DIVISION.
PERFORM COUNT-UP UNTIL WS-COUNT > 10.
STOP RUN.
COUNT-UP.
DISPLAY 'Count: ' WS-COUNT.
ADD 1 TO WS-COUNT.
このプログラムは、1から10までの数字を表示します。
PERFORM VARYING(カウンタ付き)
カウンタ変数を使った繰り返し処理です。
PERFORM VARYING カウンタ FROM 開始値 BY 増分 UNTIL 条件式
実行文
END-PERFORM.
使用例
WORKING-STORAGE SECTION.
01 WS-I PIC 9(3).
PROCEDURE DIVISION.
PERFORM VARYING WS-I FROM 1 BY 1 UNTIL WS-I > 5
DISPLAY 'Loop count: ' WS-I
END-PERFORM.
STOP RUN.
COBOLのコーディングルール
COBOLには独特のコーディングルールがあります。正しく理解して書きましょう。
固定形式と自由形式
COBOLには2つの書き方があります。
固定形式(伝統的な書き方)
カラム(桁)の位置を意識して記述します。
- 1〜6桁:行番号(現在はほとんど使わない)
- 7桁:標識領域(コメント行の場合は
*を書く) - 8〜11桁:A領域(DIVISIONやSECTIONを書く)
- 12〜72桁:B領域(実行文や変数定義を書く)
自由形式(現代的な書き方)
桁数を気にせず、他の言語と同じように書けます。ただし、コンパイラが自由形式に対応している必要があります。
コメントの書き方
プログラムの説明をコメントとして残せます。
固定形式の場合
7桁目に*または/を書くと、その行全体がコメントになります。
* これはコメント行です
DISPLAY 'Hello'.
自由形式の場合*>以降がコメントになります。
DISPLAY 'Hello'. *> 画面に表示
ピリオドの重要性
COBOLでは、文の終わりに必ずピリオド(.)を付けます。これを忘れるとエラーになります。
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE.
PROCEDURE DIVISION.
DISPLAY 'Test'.
STOP RUN.
すべての部の名前、段落名、実行文の最後にピリオドが必要です。
予約語の大文字・小文字
COBOLの予約語(DISPLAY、MOVE等)は、大文字でも小文字でも構いません。慣例的に大文字で書くことが多いです。
*> どちらも正しい
DISPLAY 'Hello'.
display 'Hello'.
Display 'Hello'.
ただし、チーム内で統一したスタイルを守ることが大切です。
変数名の命名規則
- 30文字以内
- 英文字、数字、ハイフン(-)、アンダーバー(_)が使用可能
- 先頭は必ず英文字
- COBOLの予約語は使用不可
良い例
WS-EMPLOYEE-NAMEWS-TOTAL-PRICEINPUT-FILE-NAME
悪い例
123-NAME(先頭が数字)DISPLAY(予約語)A+B(記号が使えない)
実践:計算プログラムを作ってみよう
ここまで学んだ知識を使って、実際にプログラムを作ってみましょう。
例題:税込価格を計算するプログラム
商品の本体価格を入力すると、消費税込みの価格を計算して表示するプログラムです。
IDENTIFICATION DIVISION.
PROGRAM-ID. TAX-CALC.
AUTHOR. BEGINNER.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-PRICE PIC 9(7) VALUE 0.
01 WS-TAX-RATE PIC 9V99 VALUE 0.10.
01 WS-TAX-AMOUNT PIC 9(7) VALUE 0.
01 WS-TOTAL PIC 9(8) VALUE 0.
PROCEDURE DIVISION.
MAIN-PARA.
DISPLAY '============================'.
DISPLAY ' Tax Calculation Program'.
DISPLAY '============================'.
DISPLAY ' '.
DISPLAY 'Enter product price: '.
ACCEPT WS-PRICE.
PERFORM CALCULATE-TAX.
PERFORM DISPLAY-RESULT.
STOP RUN.
CALCULATE-TAX.
COMPUTE WS-TAX-AMOUNT = WS-PRICE * WS-TAX-RATE.
COMPUTE WS-TOTAL = WS-PRICE + WS-TAX-AMOUNT.
DISPLAY-RESULT.
DISPLAY ' '.
DISPLAY '--- Calculation Result ---'.
DISPLAY 'Product price: ' WS-PRICE ' yen'.
DISPLAY 'Tax amount: ' WS-TAX-AMOUNT ' yen'.
DISPLAY 'Total price: ' WS-TOTAL ' yen'.
プログラムの流れ
- タイトルを表示
- 本体価格を入力してもらう
- 消費税額を計算(本体価格 × 0.10)
- 税込価格を計算(本体価格 + 消費税額)
- 結果を表示
例題:成績判定プログラム
点数を入力すると、合格・不合格と評価を表示するプログラムです。
IDENTIFICATION DIVISION.
PROGRAM-ID. SCORE-JUDGE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-SCORE PIC 9(3) VALUE 0.
01 WS-RESULT PIC X(10) VALUE SPACES.
01 WS-GRADE PIC X(1) VALUE SPACE.
PROCEDURE DIVISION.
MAIN-PROCEDURE.
DISPLAY 'Enter your score (0-100): '.
ACCEPT WS-SCORE.
IF WS-SCORE > 100
DISPLAY 'Invalid score!'
STOP RUN
END-IF.
PERFORM JUDGE-RESULT.
PERFORM CALCULATE-GRADE.
PERFORM DISPLAY-RESULT.
STOP RUN.
JUDGE-RESULT.
IF WS-SCORE >= 60
MOVE 'Pass' TO WS-RESULT
ELSE
MOVE 'Fail' TO WS-RESULT
END-IF.
CALCULATE-GRADE.
EVALUATE TRUE
WHEN WS-SCORE >= 90
MOVE 'A' TO WS-GRADE
WHEN WS-SCORE >= 80
MOVE 'B' TO WS-GRADE
WHEN WS-SCORE >= 70
MOVE 'C' TO WS-GRADE
WHEN WS-SCORE >= 60
MOVE 'D' TO WS-GRADE
WHEN OTHER
MOVE 'F' TO WS-GRADE
END-EVALUATE.
DISPLAY-RESULT.
DISPLAY '--- Result ---'.
DISPLAY 'Score: ' WS-SCORE.
DISPLAY 'Result: ' WS-RESULT.
DISPLAY 'Grade: ' WS-GRADE.
プログラムの特徴
- 入力チェック(100点超えは無効)
- 60点以上で合格判定
- 点数に応じてA〜Fの評価を付ける
- 段落に処理を分けて構造化
よくある間違いとその対処法
初心者が陥りやすいミスを紹介します。
ピリオドの付け忘れ
間違い
DISPLAY 'Hello'
STOP RUN
正しい
DISPLAY 'Hello'.
STOP RUN.
各文の最後には必ずピリオドを付けましょう。
PIC句の書き間違い
間違い
01 WS-NUM PIC 9(3)V9(2). *> 小数点以下2桁
MOVE 123.456 TO WS-NUM. *> 桁数が合わない
正しい
01 WS-NUM PIC 9(3)V9(3). *> 小数点以下3桁
MOVE 123.456 TO WS-NUM.
データの桁数とPIC句の定義を一致させましょう。
変数の初期化忘れ
間違い
01 WS-TOTAL PIC 9(5).
ADD 100 TO WS-TOTAL. *> 初期値が不定のため結果も不定
正しい
01 WS-TOTAL PIC 9(5) VALUE 0.
ADD 100 TO WS-TOTAL. *> 0 + 100 = 100
または
01 WS-TOTAL PIC 9(5).
INITIALIZE WS-TOTAL. *> 0に初期化
ADD 100 TO WS-TOTAL.
IF文のEND-IF忘れ
間違い
IF WS-NUM > 10
DISPLAY 'Large'.
DISPLAY 'Done'. *> 条件に関係なく実行される
正しい
IF WS-NUM > 10
DISPLAY 'Large'
END-IF.
DISPLAY 'Done'.
IF文は必ずEND-IFで閉じましょう。
COBOL学習の次のステップ
基本構文を理解したら、次のステップに進みましょう。
さらに学ぶべき内容
ファイル処理
COBOLの得意分野であるファイルの読み書きを学びます。
- 順ファイル(SEQUENTIAL)
- 索引ファイル(INDEXED)
- 相対ファイル(RELATIVE)
テーブル処理(配列)
複数のデータをまとめて扱う方法です。
- OCCURS句による配列定義
- 表(テーブル)の操作
- SEARCH文による検索
ソート処理
大量のデータを並べ替える機能です。
- SORT文の使い方
- INPUT PROCEDURE、OUTPUT PROCEDUREの活用
サブプログラム
プログラムを分割して、再利用可能にします。
- CALL文による呼び出し
- パラメータの受け渡し
データベース連携
DB2などのデータベースと連携する方法です。
- SQL文の埋め込み
- カーソル処理
実践的な学習方法
1. 小さなプログラムをたくさん書く
簡単なプログラムを何度も作って、構文に慣れましょう。
2. エラーメッセージを理解する
コンパイルエラーが出たら、メッセージをよく読んで原因を突き止めます。
3. 既存のプログラムを読む
実際のCOBOLプログラムを読んで、構造を理解しましょう。
4. 仕様書を書く
プログラムを作る前に、何を作るか日本語で整理する習慣をつけます。
おすすめの練習問題
初級
- 2つの数値を入力して、四則演算の結果を表示
- 名前と年齢を入力して、来年の年齢を計算
- 3つの数値の平均を計算
中級
- 1から100までの合計を計算
- 九九の表を表示
- 西暦から和暦に変換
上級
- 簡単な在庫管理システム
- 成績処理システム(複数人分)
- 給与計算システム
まとめ:COBOL基本構文のポイント
COBOLの基本構文について、重要なポイントをおさらいしましょう。
プログラム構造の4つの部
- 見出し部(IDENTIFICATION DIVISION)- プログラムの識別情報
- 環境部(ENVIRONMENT DIVISION)- 動作環境とファイル定義
- データ部(DATA DIVISION)- 変数とデータ構造の定義
- 手続き部(PROCEDURE DIVISION)- 実際の処理
データ定義の基本
- PIC句でデータ型と桁数を指定(X=英数字、A=英字、9=数字)
- レベル番号で階層構造を表現
- VALUE句で初期値を設定
基本的な命令文
- DISPLAY:画面表示
- ACCEPT:入力受付
- MOVE:値の代入
- ADD、SUBTRACT、MULTIPLY、DIVIDE:四則演算
- COMPUTE:計算式
- IF〜END-IF:条件分岐
- PERFORM:繰り返し処理
コーディングルール
- 文の最後には必ずピリオド
- 予約語は大文字推奨(必須ではない)
- 変数名は30文字以内、先頭は英文字
- コメントは
*(固定形式)または*>(自由形式)
COBOLは英語に近い構文で書かれているため、他の言語と比べて読みやすく理解しやすい特徴があります。最初は独特の書き方に戸惑うかもしれませんが、基本構文をしっかり押さえれば、確実にステップアップできますよ。
この記事で学んだ内容を基に、まずは簡単なプログラムから作り始めてみてください。実際に手を動かすことが、COBOL習得への最短ルートです。
金融機関や政府機関など、重要なシステムで今も現役で活躍しているCOBOL。その基本をマスターして、貴重なCOBOLプログラマーとしての道を歩んでいきましょう!

コメント