COBOLのコンパイル9ステップ

COBOLプログラミング初心者ガイドCOBOL
この記事は約16分で読めます。

 

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

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

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

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

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

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

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

はじめに

COBOL(Common Business Oriented Language)は、ビジネスとファイナンスの分野で広く使われているプログラミング言語です。

その特徴は、英語に近い文法を有し、読みやすく書きやすい点にあります。

この記事では、COBOLの基本から始め、プログラムの作成、コンパイル、そして実行までを段階的に解説します。

初心者の方でもステップバイステップで学べるように構成していますので、COBOLの世界への第一歩としてお役立てください。

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

COBOLプログラミングを始める前に、基本的な概念と言語の構造について理解することが重要です。

COBOLは、主にレコード処理に特化しており、データベースやビジネスアプリケーションでの使用に適しています。

COBOLプログラムは、DIVISION, SECTION, PARAGRAPHという階層的な構造で構成され、各部分が特定の機能を持っています。

○COBOL言語の特徴

COBOL言語の最大の特徴は、その可読性にあります。

英語に似た構文で書かれているため、プログラミング経験が少ない人でも理解しやすいです。

例えば、ADD A TO B GIVING C.というコードは、AとBを加算してその結果をCに代入するという意味です。

このように、COBOLは直感的なコード記述が可能で、ビジネスのロジックを表現するのに適しています。

○環境設定

COBOLを始めるためには、適切な開発環境のセットアップが必要です。

多くの場合、COBOLコンパイラとしてはIBMのMainframe、Micro Focusなどが知られていますが、無料かつオープンソースのコンパイラも存在します。

例えば、GNU Cobolは広く使用されているオプションの一つです。

開発環境のセットアップには次のステップを踏みます。

  1. 自分のニーズに合ったCOBOLコンパイラを選びます。GNU Cobolなど無料のものから始めることができます。
  2. 選んだコンパイラの公式サイトからインストール手順に従ってセットアップします。
  3. エディタやIDE(統合開発環境)をセットアップします。Visual Studio CodeやEclipseにはCOBOL用のプラグインが用意されており、効率的なコーディングが可能です。

こうして環境が整えば、COBOLプログラミングの基礎を学び、実際のプログラムの作成に移ることができます。

●COBOLの基本構文

COBOLのプログラミングでは、明確な構文が重要な役割を果たします。

基本的な構文には、IDENTIFICATION DIVISION, ENVIRONMENT DIVISION, DATA DIVISION, PROCEDURE DIVISIONが含まれます。

これらの区分はプログラムの異なる部分を表し、それぞれ特定の目的を持っています。

IDENTIFICATION DIVISIONではプログラムの名前や作者などの情報を記述し、ENVIRONMENT DIVISIONでは実行環境に関する設定を行います。

DATA DIVISIONでは使用するデータの構造を定義し、PROCEDURE DIVISIONで実際の処理手順を記述します。

○データ型と変数の宣言

COBOLにおけるデータ型には、数値(NUMERIC)、文字列(ALPHABETIC、ALPHANUMERIC)などがあります。

変数の宣言はDATA DIVISION内で行われ、変数のタイプやサイズを指定します。

例えば、01レベルの変数宣言で、名前を20文字まで格納できる文字列型の変数を宣言するには次のように記述します。

DATA DIVISION.
WORKING-STORAGE SECTION.
01 名前 PIC X(20).

このコードでは、名前という変数が定義され、20文字のアルファベットまたは数字を格納できます。

PIC X(20)は、固定長の文字列型データを表しています。

○基本的な入出力操作

COBOLにおける入出力操作は、ファイルやデータベース、画面へのデータの読み書きを含みます。

例えば、ユーザーからの入力を受け取るにはACCEPT文を使用し、データを画面に表示するにはDISPLAY文が用いられます。

PROCEDURE DIVISION.
画面表示.
    DISPLAY 'あなたの名前は何ですか?'.
ユーザー入力.
    ACCEPT 名前.

この例では、ユーザーに名前の入力を促し、入力された名前を名前変数に格納しています。

○条件文とループの使い方

条件文とループは、プログラムの流れを制御するために不可欠です。

COBOLではIF文を使って条件分岐を行い、PERFORM文を用いてループ処理を実装します。

ここでは、条件分岐とループの基本的な使い方を表す例を挙げます。

PROCEDURE DIVISION.
条件分岐の例.
    IF 名前 = '山田' THEN
        DISPLAY 'こんにちは、山田さん!'
    ELSE
        DISPLAY 'あなたの名前は山田ではありません。'.
ループの例.
    PERFORM VARYING カウンタ FROM 1 BY 1 UNTIL カウンタ > 5
        DISPLAY 'ループ: ' カウンタ
    END-PERFORM.

この例では、まず名前変数が’山田’かどうかを判定し、それに応じて異なるメッセージを表示しています。

次に、カウンタ変数を用いたループを5回実行し、その度にカウンタの値を表示しています。

●COBOLプログラムの作成

COBOLプログラムを作成する際には、事前に学んだ基本構文やデータ型の知識を活用します。

実際のプログラミングでは、具体的な課題を解決するためのアルゴリズムを考え、それをCOBOLのコードに落とし込むプロセスが必要です。

ここでは、シンプルな計算プログラムからファイル操作、配列とループの活用まで、段階を踏んで解説します。

○サンプルコード1:シンプルな計算プログラム

初めてのCOBOLプログラムとして、簡単な足し算を行うプログラムを作成してみましょう。

このプログラムは、二つの数値をユーザーから入力して受け取り、それらの合計を計算して表示します。

IDENTIFICATION DIVISION.
PROGRAM-ID. SimpleCalculation.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 数値1 PIC 9(4).
01 数値2 PIC 9(4).
01 合計 PIC 9(5).

PROCEDURE DIVISION.
    DISPLAY '最初の数値を入力してください: '.
    ACCEPT 数値1.
    DISPLAY '次の数値を入力してください: '.
    ACCEPT 数値2.
    ADD 数値1 TO 数値2 GIVING 合計.
    DISPLAY '合計は: ' 合計.
    STOP RUN.

このプログラムでは、数値1数値2にユーザーが入力した数値を格納し、ADD文を使ってこれらを加算し、その結果を合計に格納しています。

最後に合計の内容を表示しています。

○サンプルコード2:ファイル操作の基本

次に、ファイルからデータを読み込み、処理を行う基本的なプログラムを見てみましょう。

このプログラムは、テキストファイルから一行ずつデータを読み込み、画面に表示するものです。

IDENTIFICATION DIVISION.
PROGRAM-ID. FileOperation.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
    SELECT 入力ファイル ASSIGN TO 'input.txt'.

DATA DIVISION.
FILE SECTION.
FD 入力ファイル.
01 入力レコード PIC X(80).

PROCEDURE DIVISION.
    OPEN INPUT 入力ファイル.
    READ 入力ファイル INTO 入力レコード AT END DISPLAY 'ファイルの終わりに到達しました。'.
    PERFORM UNTIL 入力レコード = SPACES
        DISPLAY 入力レコード
        READ 入力ファイル INTO 入力レコード AT END DISPLAY 'ファイルの終わりに到達しました。'
    END-PERFORM.
    CLOSE 入力ファイル.
    STOP RUN.

この例では、input.txtという名前のテキストファイルからデータを読み込んでいます。

ファイルから読み込んだデータは入力レコードに格納され、画面に表示されます。

○サンプルコード3:配列とループの活用

最後に、配列とループを活用したプログラムを作成します。

このプログラムでは、配列に格納された複数の数値の合計を計算します。

IDENTIFICATION DIVISION.
PROGRAM-ID. ArrayAndLoop.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 数値配列.
    05 数値 PIC 9(4) OCCURS 10 TIMES.
01 合計 PIC 9(5) VALUE ZERO.
01

 カウンタ PIC 9(2) VALUE ZERO.

PROCEDURE DIVISION.
    PERFORM VARYING カウンタ FROM 1 BY 1 UNTIL カウンタ > 10
        ADD 数値(カウンタ) TO 合計
    END-PERFORM.
    DISPLAY '合計は: ' 合計.
    STOP RUN.

このプログラムでは、数値配列という配列に10個の数値を格納し、PERFORMループを使ってこれらの数値の合計を合計に加算しています。

最後に合計値を表示しています。

●COBOLプログラムのコンパイル

COBOLプログラムの開発が完了したら、次の重要なステップはコンパイルです。

コンパイルとは、人間が書いたソースコードをコンピュータが理解できる機械語に変換するプロセスです。

このプロセスを正しく行うことで、プログラムが実行可能な形になります。

○コンパイルの基本

COBOLプログラムをコンパイルするためには、まず適切なCOBOLコンパイラが必要です。

GNU CobolやIBM COBOLなど、さまざまなコンパイラが利用可能です。

コンパイルは通常、コマンドラインインターフェースを通じて行われ、次のようなコマンドを使用します。

cobc -x -o myprogram myprogram.cob

このコマンドは、myprogram.cobというCOBOLプログラムをコンパイルし、実行可能なファイルmyprogramを生成します。

-xオプションは実行可能ファイルの生成を意味し、-oオプションは出力ファイル名を指定します。

○コンパイルエラーの読み方と対処法

コンパイル中にエラーが発生することがあります。

これらのエラーは、構文の間違いや型の不一致など、さまざまな原因によって生じます。

コンパイラはエラーメッセージを出力し、問題の原因を特定する手がかりを提供します。

例えば、変数が宣言されていない場合や構文が不正な場合には、明確なエラーメッセージが表示されます。

エラーが発生した場合は、まずエラーメッセージを注意深く読み、指摘されている行やコードを確認します。

その後、問題となっている部分を修正し、再度コンパイルを試みます。

時には、複数の試行錯誤が必要になることもありますが、根気よく問題を解決していきましょう。

○コンパイル成功後の実行方法

コンパイルが成功し、実行可能ファイルが生成された後は、プログラムを実行して動作を確認します。

コンパイルされたプログラムの実行は、通常、コマンドラインから直接行われます。

例えば、次のようにコマンドを入力することでプログラムを実行できます。

./myprogram

このコマンドは、myprogramという名前の実行可能ファイルを実行します。

プログラムが正しく動作するかどうかを確認し、必要に応じてデバッグや改善を行いましょう。

●COBOLプログラムのデバッグとテスト

プログラム開発において、デバッグとテストは非常に重要なプロセスです。

これらのステップを通じて、プログラムのバグを見つけ出し、修正し、期待通りの動作を保証します。

COBOLプログラムも例外ではなく、効果的なデバッグとテストが必要です。

○デバッグの基本

デバッグは、プログラム内のエラーや問題点を特定し、修正するプロセスです。

COBOLでのデバッグには、プログラムの実行中に変数の値を確認したり、特定のポイントで実行を一時停止したりする技術が含まれます。

多くのCOBOL開発環境には、デバッグを支援するツールが備わっています。

例えば、あるCOBOLプログラムが予期せず終了する場合、その原因を特定するためには、プログラムをステップごとに実行し、各ステップでの変数の値を確認します。

これにより、エラーが発生する直前の状態を把握し、問題の原因を突き止めることが可能になります。

○テストケースの作成と実行

プログラムの品質を保証するためには、適切なテストケースの作成と実行が不可欠です。

テストケースとは、プログラムが特定の入力に対して期待される出力を生成するかを確認するための手順です。

良いテストケースは、異なる種類の入力(正常な値、境界値、不正な値など)を考慮に入れて作成されます。

たとえば、ある計算プログラムに対して、正の数、負の数、ゼロ、非常に大きな数値など、さまざまな数値を入力して、期待される結果が得られるかどうかをテストします。

また、入力値が不正な場合(例えば、数値ではない文字列が入力された場合)にプログラムが適切にエラーを報告するかどうかも確認します。

これらのテストを通じて、プログラムがさまざまなシナリオで正確かつ効率的に動作することを確認します。

万全なテストを行うことで、最終的なプログラムが高い信頼性と安定性を持つようになります。

●COBOLの応用例

COBOLは、その堅牢さと信頼性の高さから、多岐にわたる分野で応用されています。

ここでは、特に注目されているデータベース接続とWebアプリケーションへの統合についての応用例を見ていきましょう。

○サンプルコード4:データベースへの接続

COBOLは、企業の大規模なデータベースシステムと連携するためにしばしば使用されます。

ここでは、COBOLを使用してデータベースに接続し、データを読み込むための基本的なコード例を紹介します。

IDENTIFICATION DIVISION.
PROGRAM-ID. DatabaseConnect.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 SQLCODE PIC S9(4) COMP.
01 EMPLOYEE-RECORD.
   05 EMPLOYEE-ID PIC X(10).
   05 EMPLOYEE-NAME PIC X(100).
PROCEDURE DIVISION.
    EXEC SQL CONNECT TO DATABASE END-EXEC.
    EXEC SQL SELECT EMPLOYEE_ID, EMPLOYEE_NAME INTO :EMPLOYEE-RECORD FROM EMPLOYEES WHERE EMPLOYEE_ID = '123' END-EXEC.
    IF SQLCODE = 0
        DISPLAY '従業員名: ' EMPLOYEE-NAME
    ELSE
        DISPLAY 'エラー発生: ' SQLCODE
    END-IF.
    EXEC SQL DISCONNECT DATABASE END-EXEC.
    STOP RUN.

このコードは、特定の従業員の情報をデータベースから取得しています。

EXEC SQL文を使用してSQLクエリを実行し、結果をEMPLOYEE-RECORDに格納しています。

○サンプルコード5:Webアプリケーションへの統合

近年、COBOLとWeb技術との統合が進んでいます。

COBOLプログラムをWebサービスとして公開することで、古いシステムと新しい技術の橋渡しが可能になります。

ここでは、COBOLプログラムをWebアプリケーションに統合するための概念的な例を紹介します。

IDENTIFICATION DIVISION.
PROGRAM-ID. WebIntegration.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WEB-REQUEST PIC X(1000).
01 WEB-RESPONSE PIC X(1000).
PROCEDURE DIVISION.
    ACCEPT WEB-REQUEST FROM WEB-APPLICATION.
    PERFORM SOME-PROCESSING USING WEB-REQUEST GIVING WEB-RESPONSE.
    DISPLAY WEB-RESPONSE TO WEB-APPLICATION.
    STOP RUN.

この例では、Webアプリケーションからのリクエストを受け取り、何らかの処理を行った後、結果をWebアプリケーションに返しています。

実際には、COBOLプログラムとWebアプリケーション間の通信には、HTTPプロトコルやSOAPなどのWebサービス技術が使用されます。

●COBOLプログラミングのベストプラクティス

COBOLプログラミングでは、高品質なコードを作成するためのベストプラクティスがいくつか存在します。

これらのプラクティスを適用することで、プログラムの保守性、可読性、効率性が向上し、長期的なプロジェクト成功に貢献します。

○コードの整理とコメントの重要性

良いCOBOLコードは、整理されており、適切なコメントが含まれています。整理されたコードは、構造が明確で、他の開発者が理解しやすいです。

また、コメントはコードの意図や複雑な処理の説明に役立ち、将来の保守作業を容易にします。

例えば、次のコードスニペットは、整理され、適切にコメントされています。

IDENTIFICATION DIVISION.
PROGRAM-ID. CommentExample.
* このプログラムは、従業員データを処理するためのものです。
DATA DIVISION.
WORKING-STORAGE SECTION.
01 EMPLOYEE-RECORD.
   05 EMPLOYEE-ID PIC X(10).
   05 EMPLOYEE-NAME PIC X(100).
* 以下のPROCEDURE DIVISIONは、従業員データを表示します。
PROCEDURE DIVISION.
    DISPLAY EMPLOYEE-NAME.
    STOP RUN.

この例では、各セクションの目的がコメントで説明されており、コードの読みやすさが向上しています。

○パフォーマンスと保守性の向上

COBOLプログラムのパフォーマンスと保守性を向上させるためには、効率的なアルゴリズムとコーディング技術の適用が重要です。

また、変更や拡張が容易なコード構造を心がけることで、プログラムの寿命が延び、将来的なコスト削減につながります。

例として、次のようなコードは、効率的なループ処理と明確な構造を持っています。

IDENTIFICATION DIVISION.
PROGRAM-ID. PerformanceExample.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 数値配列.
    05 数値 PIC 9(4) OCCURS 10 TIMES.
01 インデックス PIC 9(2) VALUE 1.
01 合計 PIC 9(5) VALUE ZERO.
PROCEDURE DIVISION.
* 配列内の数値の合計を計算します。
    PERFORM UNTIL インデックス > 10
        ADD 数値(インデックス) TO 合計
        ADD 1 TO インデックス
    END-PERFORM.
    DISPLAY '合計: ' 合計.
    STOP RUN.

このコードは、配列内の要素を効率的に処理し、可読性と保守性を確保しています。

まとめ

本記事を通して、COBOLプログラミングの基本から応用までを詳細に解説しました。

COBOLは古い言語ですが、その堅牢性と信頼性は今日でも多くの企業システムで価値を発揮しています。

初心者がCOBOLを学ぶ際には、まずその基本構造を理解し、基本的なデータ型、変数の宣言、入出力操作を習得することが重要です。

COBOLプログラミングは、その特有の特徴と歴史を持つ言語です。

これらの基本から応用、ベストプラクティスを理解し活用することで、初心者でもCOBOLの世界に深く入り込み、その魅力を十分に活かすことができるでしょう。