メインページ > 工学 > 情報技術 > プログラミング > COBOL

COBOL(コボル)は、1959年に事務処理用に開発されたプログラミング言語です。 名前は「Common Business Oriented Language」(共通事務処理用言語)に由来します。 FortranLispとともに最も古いプログラミング言語の1つですが、 それ故、多くのソフトウェア資産の蓄積があり、2022年の今日でも現役のプログラミング言語として使用されています。

COBOLの特徴

編集

COBOLの特徴を簡単なコード例とともに示します。以下は、COBOLのいくつかの特徴を示す基本的なコードスニペットです。

  1. データ定義の明確さ
    この例では、Employee-Recordというデータ構造を定義しています。各フィールドはPIC(Picture)クラウスを使用してデータの型と桁数を指定しています。
    IDENTIFICATION DIVISION.
    PROGRAM-ID. SampleProgram.
    
    DATA DIVISION.
    WORKING-STORAGE SECTION.
    01 Employee-Record.
       05 Employee-ID      PIC 9(5).
       05 Employee-Name    PIC X(20).
       05 Employee-Salary  PIC 9(7)V99.
    
    PROCEDURE DIVISION.
    
  2. 構造化プログラミング
    COBOLは構造化プログラミングをサポートしており、IF文を通じて条件分岐を行います。
    IF Employee-Salary > 50000
        DISPLAY 'High Salary'.
    ELSE
        DISPLAY 'Low Salary'.
    
  3. データベースへのアクセス
    上記の例では、COBOLがデータベースへのアクセスを可能にするためのSQL文を使用しています。
    EXEC SQL
       DECLARE EmployeeCursor CURSOR FOR
          SELECT Employee-Name, Employee-Salary
          FROM EmployeeTable
          WHERE Department = 'IT'.
    
    EXEC SQL
       OPEN EmployeeCursor.
    
    PERFORM UNTIL SQLCODE NOT = 0
       EXEC SQL
          FETCH NEXT FROM EmployeeCursor
          INTO :Employee-Name, :Employee-Salary
       END-EXEC.
    
       DISPLAY 'Employee: ' Employee-Name 'Salary: ' Employee-Salary.
    END-PERFORM.
    
    EXEC SQL
       CLOSE EmployeeCursor.
    

簡単なCOBOLプログラム

編集

以下は簡単なCOBOLのプログラムです。

hello.cbl
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
PROCEDURE DIVISION.
DISPLAY "Hello World 12345!".
STOP RUN.
実行結果
 Hello World!
オンラインのコンパイル・実行環境
paiza.IO の様な、オンラインのコンパイル・実行環境であればウェブブラウザーだけで、COBOLのプログラムをコンパイル・実行できます。 上の例の、hello.cbl のようなリンク先を開くと、ウェブブラウザー上でコンパイル・実行することが出来ます。

環境構築

編集

GnuCobol

編集

GnuCOBOL(旧OpenCOBOL、短期間GNU Cobolとして知られていました)は、COBOLのフリーな実装です。 GnuCOBOLは、ネイティブのCコンパイラを使用するCへのトランスコンパイラです。

GNU/Linuxの場合

編集

ディストリビューションにより、パッケージマネージャとパッケージ体系に違いがありますが、例えば Fedora Linux では、

$ sudo dnf install gnucobol
$ cobc --version
cobc (GnuCOBOL) 3.1.2.0
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Keisuke Nishida, Roger While, Ron Norman, Simon Sobisch, Edward Hart
Built     Jan 26 2021 00:00:00
Packaged  Dec 23 2020 12:04:58 UTC
C version "11.0.0 20210123 (Red Hat 11.0.0-0)"
loading standard configuration file 'default.conf'
で導入およびバージョンの確認できます。

FreeBSDの場合

編集

FreeBSD Ports/Packages Collection の、ports/lang/gnucobol にあるので、

% sudo make -C /usr/ports/lang/gnucobol all install clean

でビルドしインストールできます。 また

% sudo pkg install gnu-cobol-3.1.2_1

でビルド済みパッケージをインストールできますが、GnuCOBOL自身のバージョンアップやportsのパッチレベルの更新で gnu-cobol-3.1.2_1の部分は変わるので、

% pkg search cobol
gnu-cobol-3.1.2_1              Open-source COBOL compiler

の様に、最初に最新のパッケージ名を確認してください。

バージョンを確認
% cobc -V
cobc (GnuCOBOL) 3.1.2.0
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Keisuke Nishida, Roger While, Ron Norman, Simon Sobisch, Edward Hart
Built     Nov 12 2022 15:48:13
Packaged  Dec 23 2020 12:04:58 UTC
C version "FreeBSD Clang 14.0.5 (https://github.com/llvm/llvm-project.git llvmorg-14.0.5-0-gc12386ae247c)"
% _

コマンドラインでのコンパイルと実行

編集

簡単なCOBOLプログラムのソースコードを hello.cbl という名前で保存し、コンパイルし実行してみよう。

 % cobc -x hello.cbl
 % ls
 hello  hello.cbl
 % ./hello
 Hello World 12345!
  1. 実行ファイル hello を得るためにCOBOLコンパイラ cobc に −x をつけてコンパイル
    • -x をつけないとシェアードライブラリが出来、これは実行できません。
  2. 確認してみると
  3. hello が出来ている
  4. 早速実行すると
  5. 正しく表示

COBOLの正書法

編集

COBOLの正書法には、自由書式正書法と固定書式正書法の2種類があります。

それぞれの正書法には以下のような特徴があります。

固定形式正書法
一連番号領域、標識領域、プログラム記述領域など、行内の文字位置によって使い方が明確に定義されている書き方です。
自由書式正書法
一連番号領域や標識領域がなく、プログラムは行のどの位置にも書くことが出来ます。

処理系によっては、コマンドラインオプションなどで正書法の切り替えが可能な場合があるので、詳しくは使用している処理系のマニュアルを参照してください。

COBOLプログラムの構成

編集

COBOLプログラムのトップレベルの構成

編集

COBOLプログラムのトップレベルは

  • 見出し部(IDENTIFICATION DIVISION)
  • 環境部(ENVIRONMENT DIVISION)
  • データ部(DATA DIVISION)
  • 手続き部(PROCEDURE DIVISION)

の4つのパートから構成され、順序もこの順序である必要があります。

見出し部(IDENTIFICATION DIVISION)

編集

IDENTIFICATION DIVISIONは、COBOLプログラムの最初のパートで、 プログラム名、作成者、作成日などのプログラム保守情報を含みます。 これらは、見出し部の段落として記述します。

IDENTIFICATION DIVISION.
PROGRAM-ID. SampleProgram.
AUTHOR. YourName.

環境部(ENVIRONMENT DIVISION)

編集

ENVIRONMENT DIVISIONは、COBOLプログラムの2番目のパートで、 作成するプログラムをコンパイルして実行するコンピュータの名前、環境変数の受け渡しに関する情報、プログラムとの間で読み書きするファイルの名前と種類を定義します。

ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-PC.

データ部(DATA DIVISION)

編集

DATA DIVISIONはCOBOLプログラムの3番目のパートで、これまでのDIVISIONはCOBOLプログラムを構築するためのメタデータで、 DATA DIVISIONからが実際にプログラムを構築していくところだと言えます。 DATA DIVISIONでは、入出力ファイルの配置、データ項目(変数)、外部プログラムとのインタフェース(引数)など、プログラムで扱うすべてのデータを定義します。

DATA DIVISION.
WORKING-STORAGE SECTION.
01 Employee-Name PIC X(30).
01 Employee-Age  PIC 9(3).

FILE SECTION.
01 Employee-File.
   05 Employee-ID      PIC 9(5).
   05 Employee-Salary  PIC 9(7)V99.

手続き部(PROCEDURE DIVISION)

編集

PROCEDURE DIVISIONは、COBOLプログラムの最後のパートで、プログラムが実行する処理を記述します。

PROCEDURE DIVISION.
    DISPLAY 'Enter employee name: '.
    ACCEPT Employee-Name.
    DISPLAY 'Enter employee age: '.
    ACCEPT Employee-Age.

    IF Employee-Age > 30
        DISPLAY 'Senior Employee'
    ELSE
        DISPLAY 'Junior Employee'.

前3つのDIVISIONとは異なり、手続き部には定義された節や段落の様な既定の構造はありません。 節や段落は、プログラマが必要に応じて作成します。

COBOLにおいて、FortranのSubroutineやC言語の関数に相当する構文は、主に「サブルーチン」と「関数」です。以下に、それぞれの概要を説明します。

  1. サブルーチン(Subroutine):
    • COBOLにおいて、サブルーチンはプログラム内の再利用可能なブロックを指します。サブルーチンは、PERFORM文を使用して呼び出されます。サブルーチン内で実行される処理は、呼び出し元に戻るまで制御が戻りません。
    IDENTIFICATION DIVISION.
    PROGRAM-ID. MainProgram.
    
    DATA DIVISION.
    WORKING-STORAGE SECTION.
    01 Counter        PIC 9(3) VALUE 0.
    
    PROCEDURE DIVISION.
        PERFORM Display-Message THRU Display-Message.
        DISPLAY 'Back in the main program.'.
    
    Display-Message.
        ADD 1 TO Counter.
        DISPLAY 'Message number ' Counter.
    
    上記の例では、Display-Messageがサブルーチンとなり、これをPERFORM文で呼び出しています。
  2. 関数(Function):
    • COBOLにおいて、関数は一般的なプログラミング言語での関数と同様、特定の計算や処理を実行し、その結果を呼び出し元に返すものです。関数はFUNCTIONキーワードを使用して呼び出されます。
    IDENTIFICATION DIVISION.
    PROGRAM-ID. MainProgram.
    
    DATA DIVISION.
    WORKING-STORAGE SECTION.
    01 Value-A        PIC 9(3) VALUE 10.
    01 Value-B        PIC 9(3) VALUE 20.
    01 Result         PIC 9(3).
    
    PROCEDURE DIVISION.
        COMPUTE Result = Add-Values(Value-A, Value-B).
        DISPLAY 'The result is: ' Result.
    
    FUNCTION Add-Values.
        PARAMETERS Value-X, Value-Y.
        COMPUTE Add-Values = Value-X + Value-Y.
    
    上記の例では、Add-Valuesが関数となり、これをCOMPUTE文で呼び出しています。

COBOLのサブルーチンと関数は、プログラムの構造を明確にし、再利用性を高めるために使われます。

他言語のプログラマのCOBOLへの移行での注意点
他のプログラミング言語からCOBOLへの移行においては、特定のプログラマがCOBOLという異なる言語に適応するためのいくつかの注意点があります。

以下は、他の言語のプログラマがCOBOLに移行する際に留意すべき点です。

自然言語に近い文法
COBOLは英語に近い自然言語の文法を持つため、通常のプログラミング言語とは異なる表現があります。英文のような記述やDIVISION、SECTION、PARAGRAPHの概念に慣れる必要があります。
データ指向プログラミング
COBOLは主にデータ指向プログラミングに焦点を当てています。他のプログラミング言語でよく見られるオブジェクト指向プログラミングの概念とは異なります。データ構造やレコードの定義が特に重要です。
ビジネスアプリケーションの特性
COBOLは主にビジネスアプリケーションの開発に使用されており、金融や保険などの分野で広く利用されています。ビジネスルールの理解や、大規模なデータ処理、バッチ処理の概念について理解が必要です。
移植性の懸念
COBOLは主にメインフレームやミッドレンジコンピュータ上で実行されることが多いです。他の言語と異なる実行環境に適応するために、COBOLが実行されるプラットフォームに関する理解が必要です。
標準ライブラリの習得
COBOLの標準ライブラリは、ビジネスアプリケーションに特有の機能を提供します。他のプログラミング言語の標準ライブラリとは異なるため、これを理解し、活用することが必要です。
ツールや開発環境の違い
COBOL用の開発ツールや統合開発環境は他の言語とは異なるものがあります。これらのツールや環境に慣れる必要があります。
COBOLは長寿で広く使用されている言語ですが、他の言語からの移行者にとっては新しい概念や文法に適応する過程があるかもしれません。十分なトレーニングと実践が必要です。

COBOLの変遷

編集

COBOL(Common Business-Oriented Language)は、ビジネスアプリケーション向けに開発されたプログラミング言語で、1959年にアメリカ国防総省の委員会が設立したCODASYL(Conference on Data Systems Languages)委員会によって設計されました。以下に、COBOLの変遷について簡単に説明します。

初期の開発(1959年 - 1960年代)
COBOLは、ビジネスアプリケーションのニーズに対応するために開発されました。この時期、主にメインフレームコンピュータで使用され、COBOLプログラムはバッチ処理やファイル処理に利用されました。
COBOL 60
COBOLはANSI(American National Standards Institute)やISO(International Organization for Standardization)によって標準化され、これによって異なるベンダー間でのプログラムの互換性が向上しました。
1959年に初めてCOBOLが発表され、その初版として知られています。しかし、このバージョンはあまり広く使われませんでした。
COBOL 61 (Revised COBOL 60)
COBOL 60の修正版として、1961年に発表されました。これはCOBOLの最初の主要なリリースで、いくつかの文法の変更や追加が行われました。
COBOL 65
1965年にはCOBOL 65が発表され、新しい機能や拡張が導入されました。
COBOL 68
1968年にCOBOL 68が登場し、いくつかの機能が改訂され、新しい機能も導入されました。このバージョンは標準規格として広く受け入れられました。
COBOL 74
1974年に発表され、COBOL 68をベースにしていくつかの変更や追加が行われました。これにより、ファイル操作などが改善されました。
COBOL 85
1985年にはCOBOL 85が発表されました。これは大規模なリファクタリングが行われ、構造化プログラミングや新しいデータ型の導入などが含まれました。COBOL 85はANSIとISOによって標準化されました。
COBOL 2002
COBOL 2002は、2002年に登場しました。このバージョンでは、オブジェクト指向プログラミングのサポートやXMLの処理などが追加されました。
COBOL 2014
2014年に発表されたCOBOL 2014では、新しい機能や改訂が導入され、モダンな開発環境に対応するための取り組みが行われました。

これらのバージョンは、COBOLの進化を示しています。それぞれの規格で新しい機能や改善が導入され、COBOLは長い間にわたって広く利用され続けています。

改廃された技術

編集

COBOLの改廃された技術や利用が推奨されない技術は、言語の標準化、現代的なプログラミング手法の導入、保守性の向上などによって置き換えられてきました。以下に、代表的な技術を示します。

ALTER文

編集
  • サポート開始年: COBOL-60
  • サポート終了年: COBOL 2002で非推奨
廃止または衰退の理由
プログラムの流れを動的に変更する機能であり、保守性が著しく低下し、スパゲッティコードの原因となるため。
代替技術
EVALUATE文や構造化プログラミング手法の使用が推奨されます。

ENTER文

編集
  • サポート開始年: COBOL-60
  • サポート終了年: COBOL 85で廃止
廃止または衰退の理由
他言語との連携のために使用されていましたが、標準化された呼び出し規約の登場により不要となりました。
代替技術
CALL文による標準的なサブプログラム呼び出しが推奨されます。

NOTE段落

編集
  • サポート開始年: 初期のCOBOL
  • サポート終了年: COBOL 2002で非推奨
廃止または衰退の理由
コメントとして使用されていましたが、より明確な方法が導入されました。
代替技術
アスタリスク(*)で始まるコメント行や>>による固定形式のコメントが推奨されます。

EXAMINE文

編集
  • サポート開始年: COBOL-60
  • サポート終了年: COBOL 85で廃止
廃止または衰退の理由
文字列操作機能として限定的で、より強力な代替手段が導入されました。
代替技術
INSPECT文による文字列操作が推奨されます。

GO TO文(プロシージャ外への分岐)

編集
  • サポート開始年: COBOL-60
  • サポート終了年: 現在も使用可能だが強く非推奨
廃止または衰退の理由
プログラムの構造を複雑にし、デバッグや保守を困難にするため。
代替技術
PERFORM文や構造化プログラミング手法の使用が推奨されます。

TRANSFORM文

編集
  • サポート開始年: 初期のCOBOL方言
  • サポート終了年: 標準COBOLでは採用されず
廃止または衰退の理由
ベンダー固有の機能であり、移植性に問題があったため。
代替技術
INSPECT文やSTRING/UNSTRING文による文字列操作が推奨されます。

固定形式プログラム記述

編集
  • サポート開始年: COBOL-60
  • サポート終了年: 現在も使用可能だが新規開発では非推奨
廃止または衰退の理由
パンチカードの制約に基づく古い形式で、可読性と保守性に問題があります。
代替技術
フリー形式のプログラム記述形式が推奨されます。
  • サポート開始年: 初期のCOBOL
  • サポート終了年: COBOL 2002で非推奨
廃止または衰退の理由
例外処理として不十分で、より体系的な方法が導入されました。
代替技術
DECLARATIVES部や構造化された例外処理の使用が推奨されます。

DATA RECORDS句

編集
  • サポート開始年: COBOL-60
  • サポート終了年: COBOL 2002で非推奨
廃止または衰退の理由
ファイル記述において冗長で、より簡潔な方法が導入されました。
代替技術
RECORD句やモダンなファイル記述方法の使用が推奨されます。

脚註

編集