読み込み中...

【COBOL入門】ADD文を使いこなす10のステップ

COBOLプログラミングの基礎を学ぶ初心者向けのイラスト COBOL
この記事は約21分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

COBOLとは、企業や政府機関で広く利用されているプログラミング言語の一つです。

この記事では、初心者向けにCOBOLプログラミングの基礎から始め、特に「ADD文」という基本的な演算命令を使ったプログラミングの方法を詳細に解説します。

COBOLの基本から始めて、徐々に応用へと進むことで、プログラミングの基本的な概念を理解し、実際のコードを書く力を身につけることができます。

●COBOLプログラミングの基本

COBOL(Common Business-Oriented Language)は、1959年に開発されたビジネス向けの高水準プログラミング言語です。

その名の通り、ビジネスアプリケーションの開発に特化しており、特に金融機関や政府機関での利用が多いのが特徴です。

COBOLは、その構文が英語に近いため、プログラミング初心者にも理解しやすく、また大規模なデータ処理に強いという特長を持っています。

○COBOLとは何か?

COBOLは、企業の経理や人事、在庫管理などの業務システムで広く使用されている言語です。

一般的なプログラミング言語と比べて記述が冗長な傾向がありますが、

その分、プログラムの意図が読み取りやすいという利点があります。

また、長期間にわたってシステムが使用されることが多いため、安定性とメンテナンスの容易さが求められます。

○COBOLプログラミングの歴史と特徴

COBOLは、その誕生以来60年以上にわたって使用され続けています。

この長い歴史の中で、様々なバージョンが登場し、現代のコンピューティング環境に合わせた機能が追加されてきました。

COBOLの特徴としては、分かりやすい英語風の構文、強力なファイル処理機能、高い移植性などが挙げられます。

また、大量のデータを効率的に処理できる点も、ビジネスアプリケーションにおいて重要な役割を果たしています。

○COBOL開発環境の設定

COBOLプログラミングを始めるには、まず開発環境を設定する必要があります。

COBOLのコンパイラや統合開発環境(IDE)は多数存在し、オープンソースのものから商用のものまで幅広い選択肢があります。

例えば、GNU Cobolは無料で利用できるオープンソースのコンパイラで、Linux、Windows、Mac OSなど、多くのプラットフォームで使用することができます。

開発環境の設定は、使用するコンピュータのOSや利用するIDEに応じて異なりますが、基本的にはコンパイラのインストールと設定、エディタの準備が必要です。

ここで、GNU Cobolのインストール方法と簡単な設定例を紹介します。

□GNU Cobolのインストール

  1. GNU Cobolの公式ウェブサイト(https://gnucobol.sourceforge.io/)にアクセスします。
  2. ダウンロードセクションから、自分のシステムに合ったインストーラーをダウンロードします。
  3. ダウンロードしたインストーラーを実行し、指示に従ってインストールを完了させます。

□設定例

インストール後、テキストエディタを用いてCOBOLのコードを記述します。ここでは、シンプルなプログラムの例を紹介します。

この例では、画面に「Hello, COBOL!」と表示するプログラムを作成します。

IDENTIFICATION DIVISION.
PROGRAM-ID. Hello.
PROCEDURE DIVISION.
    DISPLAY 'Hello, COBOL!'.
    STOP RUN.

このコードをテキストファイルに保存し、.cobなどの拡張子で保存します。

その後、コマンドラインからGNU Cobolコンパイラを用いてコンパイルし、実行ファイルを生成します。

□コンパイルと実行

  1. コマンドラインを開きます。
  2. コンパイルするコードが保存されているディレクトリに移動します。
  3. cobc -x -o hello hello.cobと入力し、コンパイルを実行します。
  4. コンパイルが成功すると、実行ファイルhelloが生成されます。
  5. ./helloと入力し、プログラムを実行します。

実行すると、コンソールに「Hello, COBOL!」と表示されます。

これは、COBOLで記述された最も基本的なプログラムの一例ですが、このようにしてCOBOLのコードを書き、コンパイルして実行することができます。

●ADD文の基本

COBOLにおけるADD文は、数値の加算を行う基本的な命令です。

この命令は、単純な数値の足し算から、複数の数値の合計、さらには条件付きの加算処理まで、幅広い用途で使用されます。

ADD文の基本的な構文は直感的であり、初心者にも理解しやすいのが特徴です。

COBOLプログラミングにおいて、ADD文はデータ処理の基礎として非常に重要な役割を果たします。

○ADD文とは何か?

ADD文は、1つまたは複数の数値を別の数値に加えるために使用されるCOBOLの命令です。

この命令は、計算結果を格納する変数と、加算する数値(ソース)を指定します。

COBOLのADD文は、その明確な構文と、複数の数値を同時に加算できる柔軟性により、金融計算や統計データの処理など、様々な場面で活用されます。

○ADD文の構文と規則

COBOLのADD文の基本的な構文は次の通りです。

ADD 数値1 TO 数値2 GIVING 結果

ここで、数値1は加算される値、数値2は加算する対象の値、結果は加算の結果を格納する変数を指します。

加算する値は複数指定することができ、その場合はすべての値が加算されます。

また、GIVING節を省略すると、結果は直接数値2に格納されます。

例えば、次のコードでは変数NUM1NUM2の値を加算し、結果を変数TOTALに格納しています。

ADD NUM1, NUM2 GIVING TOTAL

この構文では、NUM1NUM2の合計がTOTALに代入されます。

このようにADD文は、数値の加算を簡潔かつ明確に表現することができるため、COBOLプログラミングにおいて広く使用されています。

○ADD文を使うメリット

ADD文を使用する最大のメリットは、そのシンプルさと明瞭さにあります。

特に、大規模な金融システムや企業の業務アプリケーションでは、多くの数値計算が必要とされます。

ADD文は、これらの計算を直感的かつ効率的に行うことを可能にします。

また、ADD文は複数の値を一度に加算することができるため、コードの可読性とメンテナンスの容易さを提供します。

さらに、条件付きの加算や、計算結果に基づいて異なる処理を行うような複雑なロジックも、COBOLの他の命令と組み合わせることで容易に実装することが可能です。

●ADD文の使い方

COBOLにおけるADD文の使い方は多岐にわたります。

基本的な加算から複雑な条件付きの加算まで、さまざまなシナリオで利用可能です。

ここでは、基本的な加算の方法を始め、複数の変数を用いた加算や条件付き加算の方法を表すサンプルコードを通じて、ADD文の使い方を詳しく解説します。

○サンプルコード1:基本的な加算

最も基本的なADD文の使用例は、単一の数値を別の数値に加えることです。

下記のサンプルコードでは、NUM1NUM2という2つの変数に格納された数値を加算し、結果をTOTALに格納します。

01 NUM1 PIC 9(4) VALUE 100.
01 NUM2 PIC 9(4) VALUE 200.
01 TOTAL PIC 9(4).

PROCEDURE DIVISION.
    ADD NUM1 TO NUM2 GIVING TOTAL.
    DISPLAY 'Total: ' TOTAL.

このコードは、NUM1の値(100)とNUM2の値(200)を加算し、結果(300)をTOTALに格納して表示します。

○サンプルコード2:複数の変数への加算

複数の変数にまたがる加算も、ADD文で簡単に行うことができます。

下記の例では、3つの変数NUM1NUM2NUM3の値を合計し、結果をTOTALに格納します。

01 NUM1 PIC 9(4) VALUE 100.
01 NUM2 PIC 9(4) VALUE 200.
01 NUM3 PIC 9(4) VALUE 300.
01 TOTAL PIC 9(4).

PROCEDURE DIVISION.
    ADD NUM1, NUM2, NUM3 GIVING TOTAL.
    DISPLAY 'Total: ' TOTAL.

このコードは、3つの数値の合計(600)をTOTALに格納し、表示します。

○サンプルコード3:条件付き加算

条件付き加算は、特定の条件下でのみ加算を行う場合に使用します。

例えば、ある条件が真の場合にのみ特定の値を加算するといった場合です。

下記のサンプルコードでは、NUM1NUM2の値を加算する前に、NUM1が特定の値以上であるかどうかをチェックします。

01 NUM1 PIC 9(4) VALUE 150.
01 NUM2 PIC 9(4) VALUE 200.
01 TOTAL PIC 9(4).

PROCEDURE DIVISION.
    IF NUM1 > 100 THEN
        ADD NUM1, NUM2 GIVING TOTAL
    END-IF.
    DISPLAY 'Total: ' TOTAL.

このコードでは、NUM1が100より大きい場合のみ、NUM1NUM2を加算します。

この場合、加算は行われ、TOTALは350と表示されます。

このように、条件付き加算を使用することで、プログラムの流れを柔軟に制御しながら、必要な計算を効率的に行うことができます。

○サンプルコード4:ループ内での加算

ループ構造を使用することで、繰り返し処理の中でADD文を用いた加算を行うことができます。

下記のサンプルコードでは、ループを用いて一連の数値を加算し、合計を計算します。

01 TOTAL PIC 9(4) VALUE ZERO.
01 I     PIC 9(4) VALUE ZERO.

PROCEDURE DIVISION.
    PERFORM VARYING I FROM 1 BY 1 UNTIL I > 10
        ADD I TO TOTAL
    END-PERFORM.
    DISPLAY 'Total: ' TOTAL.

このコードは、1から10までの数値を合計し、その結果をTOTALに格納します。

ループを使うことで、同じ処理を繰り返し行うことが容易になり、プログラムの効率性が向上します。

○サンプルコード5:配列を使用した加算

配列を使用することで、複数の数値を効率的に管理し、加算処理を行うことができます。

下記のサンプルコードでは、配列内の全要素を加算する方法を表しています。

01 NUMBERS PIC 9(4) OCCURS 10 TIMES.
01 TOTAL   PIC 9(4) VALUE ZERO.
01 I       PIC 9(4).

PROCEDURE DIVISION.
    PERFORM VARYING I FROM 1 BY 1 UNTIL I > 10
        MOVE I TO NUMBERS(I)
        ADD NUMBERS(I) TO TOTAL
    END-PERFORM.
    DISPLAY 'Total: ' TOTAL.

このコードでは、NUMBERS配列の各要素に1から10までの数値を代入し、その後、全要素を順に加算してTOTALに格納します。

配列を使うことで、複数の数値を一括で扱いやすくなります。

○サンプルコード6:サブルーチン内での加算

サブルーチン(または関数)を使うことで、加算処理をモジュール化し、再利用可能な形でコードを整理することができます。

下記のサンプルコードでは、加算処理をサブルーチンとして定義し、必要に応じて呼び出します。

01 NUM1   PIC 9(4) VALUE 100.
01 NUM2   PIC 9(4) VALUE 200.
01 TOTAL  PIC 9(4) VALUE ZERO.

PROCEDURE DIVISION.
    CALL 'ADD_NUMBERS' USING NUM1 NUM2 TOTAL.
    DISPLAY 'Total: ' TOTAL.

ADD_NUMBERS.
    ADD NUM1 TO NUM2 GIVING TOTAL.
    RETURN.

このコードでは、ADD_NUMBERSというサブルーチンがNUM1NUM2を受け取り、それらを加算してTOTALに結果を格納します。

サブルーチンを使用することで、加算処理をプログラムの他の部分から独立させ、コードの再利用性とメンテナンス性を高めることができます。

○サンプルコード7:ファイル処理との組み合わせ

ファイルからのデータ読み込みと加算を組み合わせることで、実際のアプリケーションに近い処理を実現できます。

下記のサンプルコードでは、ファイルから数値を読み込み、それらを加算して結果を表示します。

01 NUM    PIC 9(4).
01 TOTAL  PIC 9(4) VALUE ZERO.
01 FILE-STATUS PIC X(2).

SELECT DATA-FILE ASSIGN TO 'NUMBERS.DAT'
    ORGANIZATION IS LINE SEQUENTIAL.

OPEN INPUT DATA-FILE.

READ DATA-FILE INTO NUM AT END MOVE 'NO' TO FILE-STATUS.
PERFORM UNTIL FILE-STATUS = 'NO'
    ADD NUM TO TOTAL
    READ DATA-FILE INTO NUM AT END MOVE 'NO' TO FILE-STATUS
END-PERFORM.

CLOSE DATA-FILE.

DISPLAY 'Total: ' TOTAL.

このコードでは、NUMBERS.DATというファイルから数値を読み込み、それぞれをTOTALに加算します。

ファイルの終わりに達すると、ループから抜け出し、加算の結果を表示します。

○サンプルコード8:エラーハンドリングを含む加算

エラーハンドリングを加算処理に組み込むことで、異常が発生した場合に適切に対応することが可能です。

下記のサンプルコードでは、エラーが発生した場合にエラーメッセージを表示します。

01 NUM1   PIC 9(4) VALUE 100.
01 NUM2   PIC 9(4) VALUE ZERO.
01 TOTAL  PIC 9(4) VALUE ZERO.
01 DIVIDE-BY-ZERO OCCURS IF NUM2 IS ZERO.

PROCEDURE DIVISION.
    IF DIVIDE-BY-ZERO
        DISPLAY 'Error: Division by zero'
    ELSE
        ADD NUM1 TO NUM2 GIVING TOTAL
        DISPLAY 'Total: ' TOTAL
    END-IF.

このコードでは、NUM2が0の場合、除算エラー(0での除算)を防ぐためにエラーメッセージを表示し、加算処理は行われません。

このようにエラーハンドリングを行うことで、プログラムの安全性を高めることができます。

○サンプルコード9:レポート出力での加算

レポート出力時に加算処理を組み合わせることで、集計データの生成や報告書の作成が可能になります。

下記のサンプルコードでは、複数のデータを加算してレポートとして出力する方法を表しています。

01 SALES-DATA.
    05 MONTHLY-SALES PIC 9(6) OCCURS 12 TIMES.

01 TOTAL-SALES PIC 9(6) VALUE ZERO.
01 I PIC 9(2).

PROCEDURE DIVISION.
    PERFORM VARYING I FROM 1 BY 1 UNTIL I > 12
        ADD MONTHLY-SALES(I) TO TOTAL-SALES
    END-PERFORM.

    DISPLAY 'Total Annual Sales: ' TOTAL-SALES.

このコードでは、MONTHLY-SALESという配列に格納された月間の売上データを加算し、年間の合計売上をTOTAL-SALESに計算し表示します。

この方法を使用することで、データの集計とレポートの作成を簡単に行うことができます。

○サンプルコード10:データベース操作との組み合わせ

COBOLとデータベースを連携させることで、データベースからのデータ取得と加算処理を組み合わせることが可能です。

下記のサンプルコードでは、データベースからデータを取得し、加算処理を行います。

01 TOTAL-AMOUNT PIC 9(8) VALUE ZERO.
01 DB-STATUS PIC X(2).
01 RECORDS PIC 9(4) VALUE ZERO.

EXEC SQL
    DECLARE CURSOR FOR
    SELECT AMOUNT FROM PAYMENTS
END-EXEC.

EXEC SQL
    OPEN CURSOR
END-EXEC.

EXEC SQL
    FETCH CURSOR INTO :RECORDS
END-EXEC.

PERFORM UNTIL SQLCODE NOT EQUAL ZERO
    ADD RECORDS TO TOTAL-AMOUNT
    EXEC SQL
        FETCH CURSOR INTO :RECORDS
    END-EXEC
END-PERFORM.

EXEC SQL
    CLOSE CURSOR
END-EXEC.

DISPLAY 'Total Payments: ' TOTAL-AMOUNT.

このコードでは、PAYMENTSテーブルからAMOUNT列のデータを取得し、これらの金額をTOTAL-AMOUNTに加算します。

データベースとの連携により、実際のビジネスデータに基づいた加算処理を行うことができ、実用的なアプリケーションの開発が可能になります。

●ADD文の応用例

COBOLのADD文は、その基本機能を超えて多様な応用が可能です。

ここでは、実務での応用例やデータ処理の高度化、パフォーマンスの最適化について具体的な方法とサンプルコードを用いて説明します。

○実務でのADD文の応用

実務でのADD文の応用として、経理システムや在庫管理システムでの金額や数量の合計計算が考えられます。

例えば、月末における売上の合計や、倉庫内の商品の総数計算にADD文を活用することができます。

下記のサンプルコードは、月間売上を合計するプログラムの例です。

01 MONTHLY-SALES    PIC 9(7)V99 OCCURS 12 TIMES.
01 ANNUAL-SALES     PIC 9(9)V99 VALUE ZERO.
01 INDEX            PIC 9(2) VALUE 1.

PROCEDURE DIVISION.
    PERFORM VARYING INDEX FROM 1 BY 1 UNTIL INDEX > 12
        ADD MONTHLY-SALES(INDEX) TO ANNUAL-SALES
    END-PERFORM.

    DISPLAY 'Annual Sales: ' ANNUAL-SALES.

このコードでは、12ヶ月分の売上を順に合計し、年間の売上を計算しています。

○ADD文を使った高度なデータ処理

ADD文は、高度なデータ処理にも応用可能です。

たとえば、データ分析での平均値計算や、統計データの生成に利用できます。

01 SCORES           PIC 9(4) OCCURS 100 TIMES.
01 TOTAL-SCORES     PIC 9(6) VALUE ZERO.
01 AVERAGE          PIC 9(4)V99 VALUE ZERO.
01 NUM-OF-SCORES    PIC 9(3) VALUE 100.

PROCEDURE DIVISION.
    PERFORM VARYING INDEX FROM 1 BY 1 UNTIL INDEX > NUM-OF-SCORES
        ADD SCORES(INDEX) TO TOTAL-SCORES
    END-PERFORM.

    DIVIDE TOTAL-SCORES BY NUM-OF-SCORES GIVING AVERAGE.

    DISPLAY 'Average Score: ' AVERAGE.

このプログラムでは、100個のスコアの合計から平均値を計算しています。

○ADD文のパフォーマンス最適化

ADD文のパフォーマンスを最適化するためには、処理するデータの量を最小限に抑えることが重要です。

また、不必要なループや複雑な計算を避けることもパフォーマンス向上に寄与します。

例えば、複数のデータセットを加算する場合、それらを一度に処理するのではなく、必要に応じて部分的に加算する方法が考えられます。

01 LARGE-DATA-SET   PIC 9(9) OCCURS 1000 TIMES.
01 SUB-TOTAL        PIC 9(11) VALUE ZERO.
01 FINAL-TOTAL      PIC 9(12) VALUE ZERO.

PROCEDURE DIVISION.
    PERFORM VARYING INDEX FROM 1 BY 100 UNTIL INDEX > 1000
        ADD LARGE-DATA-SET(INDEX:100) TO SUB-TOTAL
        ADD SUB-TOTAL TO FINAL-TOTAL
        MOVE ZERO TO SUB-TOTAL
    END-PERFORM.

    DISPLAY 'Final Total: ' FINAL-TOTAL.

このプログラムは、1000個のデータセットを100個ずつ加算し、それらの小計を最終的な合計に加えています。

このように処理を分割することで、メモリ使用量の削減や処理速度の向上が期待できます。

●注意点と対処法

COBOLプログラミングにおいて、特にADD文を使用する際にはいくつかの注意点があります。

それらを理解し、適切な対処法を講じることで、エラーの発生を防ぎ、プログラムの安定性と効率を高めることができます。

○ADD文使用時の一般的なエラー

ADD文を使用する際の一般的なエラーには、データ型の不一致、オーバーフロー、未初期化変数の使用などがあります。

例えば、整数型の変数に小数点数を加算しようとすると、データ型の不一致によるエラーが発生します。

また、加算結果が変数の格納可能範囲を超える場合、オーバーフローエラーが生じる可能性があります。

これらの問題を避けるためには、変数のデータ型と範囲を正確に把握し、適切に管理することが重要です。

○エラー回避のためのベストプラクティス

エラーを回避するためのベストプラクティスとしては、次のような方法が挙げられます。

  • 変数のデータ型と範囲を事前に確認し、適切に定義する。
  • 加算する前に変数を適切に初期化する。
  • 大きな数値を扱う場合は、オーバーフローをチェックするためのコードを追加する。

例えば、次のようにオーバーフローをチェックするサンプルコードを考えることができます。

01 NUM1 PIC 9(4) VALUE 9999.
01 NUM2 PIC 9(4) VALUE 1.
01 RESULT PIC 9(4).
01 OVERFLOW-FLAG PIC X VALUE 'N'.

PROCEDURE DIVISION.
    ADD NUM1 TO NUM2 GIVING RESULT ON SIZE ERROR MOVE 'Y' TO OVERFLOW-FLAG.

    IF OVERFLOW-FLAG = 'Y'
        DISPLAY 'Error: Overflow occurred.'
    ELSE
        DISPLAY 'Result: ' RESULT.

このコードでは、オーバーフローが発生した場合にOVERFLOW-FLAG'Y'がセットされ、適切なエラーメッセージが表示されます。

○デバッグとトラブルシューティング

デバッグとトラブルシューティングにおいては、次の点が重要です。

  • エラーメッセージを正確に解析し、問題の根本原因を特定する。
  • デバッグツールやログ出力を活用して、プログラムの実行フローを追跡する。
  • テストケースを用いて、さまざまなシナリオでのプログラムの挙動を確認する。

特に、複雑なプログラムや大規模なデータを扱う場合、これらのデバッグ方法が効果的に機能します。

プログラムの小さな部分からテストを開始し、徐々に範囲を広げていくことで、効率的にエラーを特定し修正することが可能になります。

●COBOLのカスタマイズ方法

COBOLプログラミングにおけるカスタマイズは、特定のビジネスニーズや要件に合わせてコードを調整するプロセスです。

このプロセスは、既存のシステムを最大限に活用し、新しい要求に対応するために非常に重要です。

○COBOLコードのカスタマイズ技術

COBOLコードをカスタマイズする際の主な技術には、次のようなものがあります。

  • ビジネス要件に応じて、適切なデータ型や構造を定義し、変更する。
  • 特定の機能を実現するために新しいサブルーチンやモジュールを追加する。
  • より効率的または読みやすいコードにするために、既存のコードを再構成する。

例えば、特定の業務処理に特化した新しいサブルーチンを追加することで、既存のプログラムに新しい機能を組み込むことができます。

○ユーザー固有の要件に合わせた変更

各ビジネスにはユニークな要件があり、COBOLプログラムはこれらの要件に合わせてカスタマイズされる必要があります。

例えば、特定の業界固有の計算ルールやデータ処理の方法をプログラムに組み込むことが考えられます。

○カスタマイズ例とその応用

具体的なカスタマイズの例としては、金融機関での利息計算ルーチンのカスタマイズが挙げられます。

例えば、特定の顧客グループに対する利息計算方法を変更する必要がある場合、既存の計算ルーチンを修正し、新しい計算規則を反映させることができます。

まとめ

この記事では、COBOLプログラミングの基本から、ADD文の使い方、応用例に至るまで、幅広いトピックを網羅しました。

初心者にも理解しやすい形で、COBOLの概念、歴史、そして開発環境の設定方法について詳しく解説しました。

さらに、ADD文の基本的な構文や使い方、さまざまなサンプルコードを通して、その実用的な応用方法を具体的に紹介しました。

本記事が、COBOLに関心を持つ初心者から経験豊かなプログラマーに至るまで、多くの読者にとって有益な情報源となれば幸いです。