COBOLとは?復活!人気プログラム言語の理由!

教養・雑学

みなさんは、COBOLをご存知でしょうか?
コンピュータに組み込むプログラム言語で、古くから主に会社業務の事務向けのアプリケーションソフトの開発に使用されてきました。

世にオフィスコンピュータや汎用機などが普及されたころから、COBOLでアプリケーションソフトの開発が盛んになってきました。

ソフトウェアの技術者といえば、COBOLを使用する技術者が圧倒的に多い時代もありました。
それだけ、需要も多かったのです。
COBOLの歴史と実際どのように使われてきたのかを触れてみたいと思います。

また近年、COOBLの人気も高まってきています。
その人気についても、考えていきたいと思います。

COBOLの歴史

1959年、アメリカのコンピュータ関連会社やり利用者が集まった団体CODASYL(the Conference on Data Systems Languages)でCOBOL(Common Business Oriented Language)が開発されました。

翌年の1960年4月にCOBOL60が誕生しています。
実際COBOLが世の中で産声をあげたのが、この頃です。

以後、改定を繰り返して、日本では、日本工業規格(JIS)のJIS COBOLが誕生しました。
日本では、COBOLはJIS COBOLが使用されています。
COBOLの特徴は、事務処理を行うための機能が装備されていることです。

COBOLは科学技術計算向けFORTRANなどの言語と同様に高級プログラミング言語の位置づけとなっています。
コンピュータのメカニズムでは、エンドユーザー(人間)に近いポジションになります。

COBOLといえば、コボラー(COBOLを使用してソフト開発をする人)としばしば呼ばれます。
あまり、パットしない印象なので、年より臭い言語の印象でもあります。

日本でも昭和の時代から、銀行や保険会社の事務系ソフトの開発といえば、COBOLを使用してきています。

60年以上の歴史があります。
我々がまだ、幼い頃からCOBOLの歴史があることに、感嘆せざるを得ないです。

COBOLの種類

COBOLは、これまでにオフィスコンピュータ、汎用コンピュータで使用されてきました。
COBOLには、いくつかの種類があります。

オフィスコンピュータですと、有名なのが富士通のKシリーズでのCOBOL-Gです。
近年、オフィスコンピュータの姿は、どの企業からもほとんど姿はありません。
その他ですと、汎用系COBOLとオープン系COBOLがあります。

汎用系(大型)COBOLは、現在もJIS COBOLの第3次規格改定版のCOBOL85で姿を残しています。
銀行や保険業界などでは、PL1と並び、汎用系で使用されています。

オープン系COBOLは、UNIXをサーバーにクライアント接続された端末で使用します。
代表的なのが、Pro-COBOLです。

COBOLとOracleデータベースを組み合わせて、システム開発を行うのが定番のシステム構成です。
COBOLのロジックに埋め込みSQLを記述するのが特徴です。

COBOLの仕様に関しては、一般的にはそんな違いはありません。
ただ汎用系の方が、開発規模が大きいので、同じCOBOLを利用しているからといっても、経験業務によって業務が振り分けられます。

言語だけにこだわれば、使用機種によってCOBOLを使い分けができれば、ユニークな使い方になるのではないでしょうか

COBOLの仕様

COBOLは、コンパイラ言語です。
実行前には必ずコンパイルを行います。

コンパイラがコンパイルを行うと、実行形式のファイルができあがります。
その実行形式のファイルを汎用系であれば、JCL(Job Control Language)で実行させます。

UNIXであれば、シェル言語に記述して実行させます。
同様な実行方法になります。

COBOLを実際に使いこなすには、簡易言語とよばれる、実行時に使用する言語もマスターしなければなりません。

インタプリタ言語とは違い、COBOL単独では何も動作しません

COBOLの文法

文法の基本的な部分をご紹介しています。

COBOLのプログラムの構成
COBOLは、見出し部(IDENTIFICATION DIVISON)データ部(DATA DIVISION)環境部(ENVIROMENT DIVISION)手続き部(PROCEDURE DIVISION)4つの部から構成されています

それぞれの部で記述する内容について解説いたします。

データ部では、プログラムで扱う入出力ファイルのこと(ファイルの項目や属性)を記述します。
手続き部では、実際の処理のロジックを記述します。

(ア) 見出し部(IDENTIFICATION DIVISION)
プログラム名やプログラマー名を記述します。

(イ) データ部(DATA DIVISION)
プログラムで扱う入出力ファイルのこと(ファイルの項目や属性)を記述します。

(ウ) 環境部(ENVAIRONMENT DIVISION)
どのような外部記憶装置と使用するのかを記述します。

(エ) 手続き部(PROCEDURE DIVISION)
ここからが、プログラムの処理を記述する部分になります。
外部記憶装置やデータを使用し、どのような操作をするのかを記述します。

COBOLのプログラミングルール
プログラミング=コーディングです。
コーディングのルールについて解説します。

COBOLのコーディングルールのことを正書法(reference format)といいます。
コーディングは、1~80カラム(桁)内に記述します。

【1~6カラムまでの一連番号領域】
エディターでは、行番号が表示されています。

【7カラム目の標識領域】
アスタリスク(*)やスラッシュ(/)を記述すると、注釈行と判断されます。
ハイフォン(-)は、前の行の続きを示します。

【8~11カラムをA領域】
部、説、段落、レベル指示(FD句、SD句)、レベル番号の01、プログラムの終わり(END PROGRAM)は、A領域から記述します。

【12~72カラムB領域】
A領域から記述しなければならないもの以外の文は、B領域から記述します。

※実際のCOBOLのプログラムは、A領域とB領域に記述します。

【73~80カラムを注記領域】
何も記述しませんが、メモ書きなどに使用できます。

COBOLのプログラムロジック

COBOLのプログラムロジックは、初心者でも読みやすく命令語も英語の形式で理解しやすいことが、人気の理由だったようです。

実際の簡単なプログラムを例に解説をします!
売上データを集計して、集計データとしてまとめるプログラムです。

000010****************************************************************
000020* 売上集計プログラム *
000030****************************************************************
000040* 見出し部
000050****************************************************************
000060 IDENTIFICATION DIVISION.
000070 PROGRAM-ID. SAMPLE-PROGURAM.
000080 AUTHOR. T-YAMADA.
000090 DATE-WRITTIEN. 2021/04/01.
000100 DATE-COMLIED. 2021/04/01.
000110****************************************************************
000120* 環境部
000130****************************************************************
000140 ENVIRONMENT DIVISION.
000150 SOURCCE-COMPUTER. COMP-1.
000160 OBJECT-COMPUTER. COMP-1.
000170 INPUT-OUTPUT SECTION.
000180 FILE-CONTROL.
000190**************************************
000200* 入力ファイル
000210**************************************
000220 SELECT IN-FILE ASSIGN TO IN01
000230 ORGANIZATION IS LINE SEQUENTIAL.
000240**************************************
000250* 出力ファイル
000260**************************************
000270 SELECT IN-FILE ASSIGN TO OT01
000280 ORGANIZATION IS LINE SEQUENTIAL.
000290****************************************************************
000300* データ部
000310****************************************************************
000320 DATA DIVISION.
000330 FILE SECTION.
000340****************************************************************
000350* 入力ファイルの定義(売上ファイル)
000360****************************************************************
000370 FD IN-FILE.
000380 01 IN-REC.
000390 03 IN-URIAGE-KEY.
000400 05 IN-TOKUI-CODE1 PIC 9(005).
000410 05 IN-TOKUI-CODE2 PIC 9(003)
000420 03 IN-URIAGE-DAT.
000430 05 IN-SHOHIN-CODE PIC 9(003).
000440 05 IN-KINGAKU PIC 9(006).
000450 03 IN-URIGAE-DATE PIC X(008).
000460 03 FILLER PIC X(075).
000470****************************************************************
000480* 出力ファイルの定義(得意先別集計ファイル)
000490****************************************************************
000500 FD OT-FILE.
000510 01 OT-REC.
000520 03 OT-SYUUKEI-KEY.
000530 05 OT-TOKUI-CODE PIC 9(005).
000540 03 OT-SYUUKEI-DAT.
000550 05 OT-KINGAKU PIC 9(008).
000560 03 FILLER PIC X(077) VALUE SPACE.
000570**
000580* 作業領域の定義
000590**
000600 WORKING-STRAGE SECTION.
000610 77 CST-END PIC X(003) VALUE “END”.
000620* 000630 01 WORK-AREA.
000640 03 WK-STATUS PIC X(003).
000650 03 WK-NEW.
000660 05 WK-NEW-CODE PIC 9(005).
000670 03 WK-OLD.
000680 05 WK-OLD-CODE PIC 9(005).
000690 03 WK-IN-COUNT PIC 9(003).
000700 03 WK-OT-COUNT PIC 9(005).
000710 03 WK-GOUKEI PIC 9(008).
000720 03 WK-MSGAREA-IN.
000730 05 WK-INMSG PIC X(12) VALUE “ニュウリョクケンスウ= ”
000740 05 WK-IN-CT PIC ZZ,ZZ9.
000750 03 WK-MSGAREA-OT.
000760 05 WK-OTMSG PIC X(12) VALUE “シュツリョクケンスウ= ”
000770 05 WK-OT-CT PIC ZZ,ZZ9.
000780****************************************************************
000790* 手続き部
000800****************************************************************
000810 PROCEDURE DIVISION.
000820*
000830*初期処理
000840 PERFORM INT-PROC.
000850*主処理
000860 PERFORM MAIN-PROC UNTIL WK-AT-END = CST-END.
000870*終了処理
000880 PERFORM END-PROC.
000890*
000900 STOP RUN.
000910****************************************************************
000920* 初期処理
000930****************************************************************
000940 INT-PROC SECTION.
000950* 000960ファイルオープン
000970 OPEN INPUT IN-FILE
000980 OUTPUT OT-FILE.
000990変数の初期化
001000 MOVE SPACE TO WK-AT-END.
001010 MOVE ZERO TO WK-IN-CNT
001020 WK-OUT-CNT
001030 WK-GOUKEI.
001040 MOVE HIGH-VALUE TO WK-NEW
001050 WK-OLD.
001060*入力データの読み込み
001070 PERFORM FILE-READ-PROC.
001080*
001090 INT-PROC-EXIT.
001100 EXIT.
001110****************************************************************
001120* 主処理
001130****************************************************************
001140 MAIN-PROC SECTION.
001150*
001160 COMPUTE WK-GOUKEI = WK-GOUKEI + IN-KINGAKU.
001170 MOVE WK-NEW-CODE TO WK-OLD-CODE.
001180*
001190*入力データの読み込み
001200 PERFORM FILE-READ-PROC
001210 IF WK-NEW-CODE <> WK-OLD-CODE THEN
001220 PERFORM FILE-WRITE-PROC.
001230*
001240 MAIN-PROC-EXIT
001250 EXIT.
001260*
001270****************************************************************
001280* 終了処理
001290****************************************************************
001300 END-PROC SECTION.
001310*
001320 IF WK-IN-COUNT <> 0 THEN
001330 PERFORM FILE-WRITE-PROC.
001340ファイルクローズ
001350 CLOSE IN-FILE
001360 OT-FILE.
001370処理件数を表示
001380 MOVE WI-IN-COUNT TO WK-IN-CT.
001390 MOVE WI-OT-COUNT TO WK-OT-CT.
001400 DISPLAY WK-MSGAREA-IN UPON CONSOLE.
001410 DISPLAY WK-MSGAREA-OT UPON CONSOLE.
001420*
001430 END-PROC-EXIT
001440 EXIT.
001450* 001460****************************************************************
001470* 入力ファイルの読み込み
001480****************************************************************
001490 FILE-READ-PROC SECTION.
001500*
001520 READ IN-FILE
001530 AT END
001540 MOVE CST-END TO WK-AT-END
001550 NOT AT END
001560 MOVE IN-TOKUI-CODE1 TO WK-NEW-CODE
001570 ADD 1 TO WK-IN-COUNT.
001580 END-READ.
001590*
001600 FILE-READ-PROC-EXIT
001610 EXIT.
001620*
001630****************************************************************
001640* 出力ファイルへ書き込み
001650****************************************************************
001660 FILE-WRITE-PROC SECTION.
001670
001680 MOVE WK-OLD-CODE TO OT-TOKUI-CODE.
001690 MOVE WK-GOUKEI TO OT-KINGAKU.
001700*
001710 WRITE OT-REC.
001720 ADD 1 TO WK-OT-COUNT
001730*
001740合計をゼロクリア 001750 MOVE ZERO TO WK-GOUKEI. 001760
001770 FILE-WRITE-PROC-EXIT
001780 EXIT.
001790*

COBOLまとめ

世にコンピュータが普及しだした頃から、COBOLは、開発言語として親しまれてきました。
オフィスの事務用ソフトウェアを構築する上で、欠かせない存在でありました。

しかし、ハードウェアの最新化やOSの進化、インターネットの発展などで、開発言語もWEB向けの言語が主流となってきています。

もはやCOBOLは、銀行や保険会社などの汎用機向けの言語でしかなくなっているのが、現状です。
しかし、COBOLは、開発者からすれば、非常に慣れやすい言語なのです。

近年、COBOLもネット向けに開発がされてきました。

代表的なのが、富士通のNet COBOLです。
.NETでの開発言語でもあります。

おそらく、従来のメカニズムをWEBにするにも、JAVAやASP、C#などを使用するよりも
同じCOBOLのほうが移植に手間が少ないからでしょう。

そう思うと、親しみやすさや移植性やコストなどで、ますますCOBOL人気が各企業の中で強まるのではないでしょうか。
COBOLは、今後に期待できる言語として、復活を遂げたのです。

コメント

タイトルとURLをコピーしました