COBOLの手続き部を使った10の初心者向けステップ

COBOLプログラミングの手順を丁寧に説明する図COBOL
この記事は約18分で読めます。

 

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

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

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

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

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

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

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

はじめに

この記事では、COBOLプログラミングの基本から応用まで、特に手続き部に焦点を当てて、初心者にも分かりやすく解説します。

COBOL(Common Business-Oriented Language)はビジネス向けプログラミング言語として1950年代に開発されました。

その構造は、ビジネスでの実用性に重点を置いたもので、現在でも金融機関や政府機関で広く使用されています。

この記事を通して、COBOLの基礎知識を身につけ、手続き部の使い方を学ぶことで、COBOLプログラミングの世界に入るための一歩を踏み出しましょう。

●COBOLとは

COBOLは、その名の通り「商業目的に特化した言語」です。

英語に近い構文を持ち、その可読性の高さから初学者でも比較的理解しやすい言語とされています。

COBOLは主にビジネスのデータ処理、特に大量のデータを取り扱う際に強みを発揮します。

銀行の取引処理や政府のデータベース管理など、重要な業務で幅広く活用されています。

○COBOLの歴史と特徴

COBOLの歴史は古く、1950年代にアメリカ国防総省の支援を受けて開発されました。

その目的は、異なるメーカーのコンピューター間でのプログラムの互換性を高めることにありました。

これは、当時のコンピューター業界において非常に重要な課題でした。

COBOLの設計は、事業用のアプリケーション開発に適したものであり、その後数十年にわたって多くのビジネスで使用され続けています。

COBOLの特徴は、その英語に近い文法と構造にあります。

例えば、COBOLプログラムは「DIVISION」と呼ばれる4つの主要部分(Identification, Environment, Data, Procedure)に分かれており、これによりプログラムは非常に構造化された形を持っています。

この構造化は、プログラムの可読性と保守の容易さを高める助けとなっています。

特に「手続き部(Procedure Division)」は、プログラムの動作を定義する部分であり、ここでは具体的な処理の流れやアルゴリズムが記述されます。

この部分の理解はCOBOLプログラミングにおいて非常に重要であり、本記事ではこの手続き部に焦点を当てて、初心者でも理解しやすいように詳細に解説していきます。

●手続き部の基本

COBOLプログラミングにおける手続き部は、プログラムの中心となる部分であり、ここで具体的な処理の流れや操作が記述されます。

手続き部は、プログラムが実行すべき具体的なタスクや手順を定義し、これによりプログラムが意図した通りに動作することを保証します。

手続き部の理解は、COBOLプログラミングにおける核心的な部分であり、これをマスターすることで、より効果的で効率的なプログラムを作成することができます。

○手続き部とは何か

手続き部は、COBOLプログラムの「DIVISION」の一つであり、プログラムが実行するべき具体的な命令を記述する場所です。

ここには、データの操作、計算、条件分岐、ループ処理など、プログラムに必要なあらゆる手順が含まれます。

手続き部は、プログラムがどのように動作すべきか、どのような処理を行うべきかを具体的に指定するため、プログラムの動作を決定する重要な役割を果たします。

例えば、ある数値の合計を計算するプログラムを考えてみましょう。

この場合、手続き部には数値の読み込み、加算、結果の表示といった一連の手順が記述されます。

これにより、プログラムは指定された数値を正確に加算し、結果をユーザーに提示することができます。

○手続き部の構造

手続き部の構造は、一連の「セクション」と「パラグラフ」で構成されます。セクションは手続き部内の大きな単位であり、関連する処理をまとめてグループ化します。

各セクションは一つ以上のパラグラフから構成され、パラグラフは具体的な命令の集合体です。

プログラムはこれらのパラグラフを順に実行することで、全体の処理を行います。

たとえば、データの読み込み、処理、出力といった一連の処理を行うプログラムでは、それぞれの処理を個別のセクションに分けて記述することができます。

データ読み込みセクションではファイルからのデータ読み込みに関する命令を、処理セクションでは読み込んだデータに対する計算や加工に関する命令を、出力セクションでは結果の表示に関する命令を記述します。

このようにセクションとパラグラフを適切に構成することで、プログラムはより明確で理解しやすい構造を持つことができます。

●手続き部の使い方

COBOLの手続き部では、プログラムが実行する具体的な手順や命令を記述します。

これには変数の宣言、条件分岐、ループ処理、入出力処理などが含まれます。

手続き部を効果的に使用することで、プログラムは指定されたタスクを正確に実行できるようになります。

このセクションでは、基本的なサンプルコードを用いて、手続き部の使い方を詳しく説明します。

○サンプルコード1:変数の宣言

COBOLでは、プログラム内で使用する変数を事前に宣言する必要があります。

これは、データ項目の型やサイズを定義することで、プログラムがデータを正しく処理できるようにするためです。

ここでは、数値と文字列の変数を宣言する基本的なサンプルコードを紹介します。

IDENTIFICATION DIVISION.
PROGRAM-ID. SampleProgram.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NUMERIC-VARIABLE PIC 9(4).
01 STRING-VARIABLE PIC A(10).

PROCEDURE DIVISION.
    BEGIN.
        MOVE 1234 TO NUMERIC-VARIABLE.
        MOVE "Hello" TO STRING-VARIABLE.
        DISPLAY NUMERIC-VARIABLE.
        DISPLAY STRING-VARIABLE.
    END.
END PROGRAM SampleProgram.

このコードでは、NUMERIC-VARIABLEという名前の数値型変数と、STRING-VARIABLEという名前の文字列型変数を宣言しています。

数値変数は4桁の数値を、文字列変数は最大10文字の文字列を格納できます。

その後、PROCEDURE DIVISIONでこれらの変数に値を代入し、DISPLAY文を使用して画面に表示しています。

○サンプルコード2:基本的な入出力

COBOLでは、ユーザーからの入力を受け取り、結果を出力する処理も重要です。

下記のサンプルコードは、ユーザーから入力を受け取り、それを加工して出力する基本的な例です。

IDENTIFICATION DIVISION.
PROGRAM-ID. InputOutputProgram.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 USER-INPUT PIC A(20).

PROCEDURE DIVISION.
    BEGIN.
        DISPLAY "Enter your name: ".
        ACCEPT USER-INPUT.
        DISPLAY "Hello, " USER-INPUT "!".
    END.
END PROGRAM InputOutputProgram.

このプログラムでは、USER-INPUTという変数を宣言し、ユーザーから最大20文字の入力を受け取ることができます。

ACCEPT文を使ってユーザーからの入力を受け取り、DISPLAY文で画面に表示しています。

このように、COBOLではACCEPTDISPLAYを使って基本的な入出力処理を行うことができます。

○サンプルコード3:条件分岐の実装

COBOLプログラミングでは、条件に応じて異なる処理を行う条件分岐が重要な役割を果たします。

下記のサンプルコードは、数値を判定し、その数値が特定の条件を満たすかどうかに基づいて異なるメッセージを表示する例です。

IDENTIFICATION DIVISION.
PROGRAM-ID. ConditionalExample.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NUMBER PIC 9(2).

PROCEDURE DIVISION.
    BEGIN.
        MOVE 10 TO NUMBER.
        IF NUMBER > 5 THEN
            DISPLAY "Number is greater than 5."
        ELSE
            DISPLAY "Number is less than or equal to 5."
        END-IF.
    END.
END PROGRAM ConditionalExample.

このコードでは、NUMBERという変数に10を代入し、IF文を使用してその値が5より大きいかどうかを判定しています。

この条件が真であれば、「Number is greater than 5.」と表示し、そうでなければ「Number is less than or equal to 5.」と表示します。

○サンプルコード4:ループ処理

ループ処理は、同じ処理を繰り返し実行する際に使用されます。

下記のサンプルコードは、特定の回数だけメッセージを表示する簡単なループ処理の例です。

IDENTIFICATION DIVISION.
PROGRAM-ID. LoopExample.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 COUNTER PIC 9(2) VALUE 0.

PROCEDURE DIVISION.
    PERFORM VARYING COUNTER FROM 1 BY 1 UNTIL COUNTER > 5
        DISPLAY "This is loop number " COUNTER
    END-PERFORM.
END PROGRAM LoopExample.

この例では、COUNTERという変数を使用し、その値が1から始まり5まで1ずつ増加するループを作成しています。

PERFORM文とVARYING句を使うことで、COUNTERが5を超えるまで「This is loop number」とともにカウンターの現在値を表示します。

●手続き部の応用例

COBOLの手続き部では、基本的な機能を超えた応用的なプログラミングが可能です。

ファイル操作やサブルーチンの使用など、より複雑な処理を行うためのテクニックを学ぶことで、COBOLプログラミングのスキルをさらに高めることができます。

ここでは、そのような応用例をいくつか紹介します。

○サンプルコード5:ファイル操作

COBOLでは、ファイルからデータを読み込み、それを処理し、結果をファイルに書き出すという一連の操作が重要です。

下記のサンプルコードは、テキストファイルからデータを読み込み、加工して別のファイルに出力する例です。

IDENTIFICATION DIVISION.
PROGRAM-ID. FileOperation.
DATA DIVISION.
FILE SECTION.
FD INPUT-FILE.
01 INPUT-RECORD PIC A(100).
FD OUTPUT-FILE.
01 OUTPUT-RECORD PIC A(100).

WORKING-STORAGE SECTION.
01 EOF-FLAG PIC X VALUE 'N'.

PROCEDURE DIVISION.
    OPEN INPUT INPUT-FILE.
    OPEN OUTPUT OUTPUT-FILE.
    PERFORM UNTIL EOF-FLAG = 'Y'
        READ INPUT-FILE INTO INPUT-RECORD
            AT END MOVE 'Y' TO EOF-FLAG
        END-READ
        IF EOF-FLAG = 'N'
            MOVE INPUT-RECORD TO OUTPUT-RECORD
            WRITE OUTPUT-RECORD
        END-IF
    END-PERFORM.
    CLOSE INPUT-FILE.
    CLOSE OUTPUT-FILE.
END PROGRAM FileOperation.

このコードでは、INPUT-FILEからデータを読み込み、その内容をOUTPUT-FILEに書き出しています。

ファイルの終わりに達したかどうかを判断するためにEOF(End of File)フラグを使用しています。

○サンプルコード6:サブルーチンの使用

サブルーチン(またはサブプログラム)は、繰り返し使用される処理を一箇所にまとめ、プログラム全体の効率と可読性を向上させるために使用されます。

下記のサンプルコードは、特定の処理を行うサブルーチンの使用例です。

IDENTIFICATION DIVISION.
PROGRAM-ID. SubroutineExample.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NUM PIC 9(2).

PROCEDURE DIVISION.
    MOVE 10 TO NUM.
    CALL 'Subroutine' USING NUM.
    DISPLAY "Processed number: " NUM.
    STOP RUN.

SUBROUTINE.
    PROCEDURE DIVISION USING NUM.
        COMPUTE NUM = NUM * 2.
    END PROGRAM Subroutine.

この例では、Subroutineという名前のサブルーチンを定義し、そこで数値を2倍にする処理を行っています。

メインプログラムからCALL文を使ってサブルーチンを呼び出し、処理された結果を表示しています。

サブルーチンを使用することで、プログラムの構造を明確にし、再利用可能なコードを作成することができます。

○サンプルコード7:配列処理

COBOLでの配列処理は、一連の関連データを効率的に扱うために重要です。

配列を使用することで、複数のデータ項目を単一の変数名で管理し、繰り返し処理を簡単に行うことができます。

下記のサンプルコードは、配列を使用して複数の数値データを処理する例です。

IDENTIFICATION DIVISION.
PROGRAM-ID. ArrayExample.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NUMBERS PIC 9(2) OCCURS 5 TIMES.

PROCEDURE DIVISION.
    MOVE 1 TO NUMBERS(1).
    MOVE 2 TO NUMBERS(2).
    MOVE 3 TO NUMBERS(3).
    MOVE 4 TO NUMBERS(4).
    MOVE 5 TO NUMBERS(5).
    PERFORM VARYING I FROM 1 BY 1 UNTIL I > 5
        DISPLAY "Number " I " is " NUMBERS(I)
    END-PERFORM.
END PROGRAM ArrayExample.

このコードでは、NUMBERSという配列に5つの数値を格納し、それらを順番に表示しています。

OCCURS句を使って配列を定義し、PERFORMループを使用して配列の各要素にアクセスしています。

○サンプルコード8:データベースへのアクセス

COBOLはデータベースへのアクセスにも対応しており、特にビジネスアプリケーションにおいてその機能は非常に重要です。

下記のサンプルコードは、データベースからデータを読み込み、処理する基本的な構造を表しています。

IDENTIFICATION DIVISION.
PROGRAM-ID. DatabaseAccess.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 DB-RECORD.
    05 DB-FIELD-1 PIC X(10).
    05 DB-FIELD-2 PIC 9(4).
FILE SECTION.
FD DATABASE-FILE.
01 DATABASE-RECORD PIC X(100).

PROCEDURE DIVISION.
    OPEN INPUT DATABASE-FILE.
    READ DATABASE-FILE INTO DATABASE-RECORD.
    MOVE DATABASE-RECORD TO DB-RECORD.
    DISPLAY DB-FIELD-1.
    DISPLAY DB-FIELD-2.
    CLOSE DATABASE-FILE.
END PROGRAM DatabaseAccess.

この例では、データベースファイルDATABASE-FILEからデータレコードDATABASE-RECORDを読み込み、その内容をワーキングストレージセクション内のレコードDB-RECORDに移動しています。

データベースからのデータは、必要に応じてさらに詳細なフィールドに分割され、処理されます。

○サンプルコード9:エラー処理

エラー処理は、プログラムの安定性と信頼性を保証するために不可欠です。

COBOLにおいても、エラーが発生した際の適切な処理を記述することで、プログラムの堅牢性を高めることができます。

ここでは、エラーが発生した場合に特定の処理を行うサンプルコードを紹介します。

IDENTIFICATION DIVISION.
PROGRAM-ID. ErrorHandling.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 FILE-STATUS PIC 9(2).
01 DATA-RECORD PIC X(100).

PROCEDURE DIVISION.
    OPEN INPUT SOMEFILE
        AT END DISPLAY "File not found."
    MOVE 0 TO FILE-STATUS.
    READ SOMEFILE INTO DATA-RECORD
        AT END MOVE 1 TO FILE-STATUS.
    IF FILE-STATUS = 1
        DISPLAY "End of file reached."
        CLOSE SOMEFILE
    ELSE
        CONTINUE.
    END-IF.
END PROGRAM ErrorHandling.

このコードでは、ファイルを開く際と読み込み処理の際にエラーが発生したかどうかをチェックし、エラーが発生した場合には適切なメッセージを表示しています。

○サンプルコード10:モジュラーなコードの記述

モジュラーなコードの記述は、プログラムの保守性と再利用性を向上させます。

関連する処理をモジュールとして分割し、必要に応じてそれぞれのモジュールを組み合わせることで、より効率的なプログラミングが可能になります。

IDENTIFICATION DIVISION.
PROGRAM-ID. ModularCode.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NUM-A PIC 9(2).
01 NUM-B PIC 9(2).
01 RESULT PIC 9(4).

PROCEDURE DIVISION.
    MOVE 10 TO NUM-A.
    MOVE 20 TO NUM-B.
    CALL 'ADD-MODULE' USING NUM-A NUM-B RESULT.
    DISPLAY "Addition result: " RESULT.
    STOP RUN.

ADD-MODULE.
    PROCEDURE DIVISION USING NUM-A NUM-B RESULT.
        ADD NUM-A TO NUM-B GIVING RESULT.
    END PROGRAM ADD-MODULE.

この例では、ADD-MODULEというモジュールを用いて2つの数値の加算を行い、結果をメインプログラムに返しています。

モジュールを別々に記述することで、それぞれの部分が独立し、再利用や保守が容易になります。

●注意点と対処法

COBOLプログラミングではいくつかの重要な注意点があり、これらを理解し適切に対処することでエラーの未然防止と効率的なプログラミングが可能になります。

データ型とサイズの管理、命名規則の遵守、構文の厳格さなどが特に重要です。

これらの点を踏まえることで、コードの正確性、可読性、保守性を向上させることができます。

○COBOLの特有の注意点

COBOLではデータ型と変数のサイズがプログラムの正確性に大きく影響します。

適切なサイズの数値型の使用や変数、プログラムの命名におけるCOBOL特有の規則の遵守が求められます。

また、COBOLの構文は非常に厳格であるため、命令の書式やプログラム構造に注意が必要です。

○よくあるエラーとその解決策

COBOLプログラミングにおいてよくあるエラーには、構文エラー、データ型の不一致、ファイル操作のエラーなどがあります。

これらのエラーは、コードの丁寧な確認、適切なデータ型の使用、ファイルの存在チェックやアクセス権限の確認、適切なエラーハンドリングによって解決できます。

これらの解決策を適用することで、実行時のエラーを減少させ、プログラムの安定性を高めることが可能です。

●COBOLのカスタマイズ方法

COBOLプログラムのカスタマイズは、プログラムの拡張性と柔軟性を高めるために重要です。

既存のCOBOLプログラムをカスタマイズする際には、プログラムの基本構造を理解し、必要に応じて効果的に変更することが求められます。

また、新しい要求に応じて効率的にコードを再利用し、機能を追加することで、プログラムの価値を高めることが可能です。

○既存コードの拡張

既存のCOBOLプログラムを拡張する際には、コードの構造を保ちつつ、新しい要求に合わせて変更を加える必要があります。

たとえば、新しいビジネスルールを組み込む、または既存の処理をより効率的にするための変更などが含まれます。

こうした変更は、プログラムの整合性を保ちつつ、新しい機能を確実に組み込むことが重要です。

○新しい機能の統合

COBOLプログラムに新しい機能を統合する際には、既存のコードとの互換性を考慮しながら、新しい要求に応える形で機能を追加します。

新しいデータベースへのアクセス方法の追加、新しいファイルフォーマットのサポート、新しいビジネスロジックの実装などが考えられます。

これらの機能の統合は、既存のプログラムフローに影響を与えずに行うことが望まれます。

まとめ

この記事では、COBOLプログラミングの手続き部に関する幅広い側面を詳細に解説しました。

COBOLは歴史あるプログラミング言語でありながら、現代のビジネスニーズにも対応できる柔軟性を持っています。

この記事を通じて、COBOLの基礎をしっかりと学び、さまざまなシナリオでの応用能力を身につけることができたはずです。

プログラミングは常に進化していますが、基本に忠実であることの重要性は変わりません。

今後もCOBOLの学習を続け、より深い知識と技術を身につけていただければと思います。