Blog

COBOLと日本語COBOL ~温故知新シリーズ1~

はじめまして、cocone connectのサーバエンジニアのYです。

今回より「温故知新シリーズ」と称して、この令和の時代に枯れた技術について語っていこうと思います。

第一弾は「COBOLと日本語COBOL」となります。

そもそもCOBOLって何?

過去を遡ると、アセンブラやFORTRANなど様々なプログラミング言語がありました。
ただ、これらの言語は人間が理解するには困難な言語でした。

そんな中、「事務処理用の高級言語」として開発されたのがCOBOL(Common Business Oriented Language)です。

 

2021年10月現在のプログラミング言語ランキング23位!
ランキングはこちら

 

その他の特徴は以下の通り

  • 当時ではあまりなかった、英語に近い記述コードでプログラミングすることができる
  • 他のプログラミング言語よりも比較的読みやすい
  • 事務処理用として開発されたため、計算処理にも向いている
  • 今は当たり前だけど、10進数演算を定義することができる
  • 事務処理に必須の帳票出力が容易
  • 印刷時に調整する右寄せや空白などを自動的に行える

 

これらは汎用系(ホスト系)と呼ばれ、今現在でも金融系(銀行や証券)をはじめとして、政府機関でも広く使われるシステムで動いています。

記述方法と注意点

4つの記載箇所

COBOLは変数やファイルの宣言をする場所が予め決まっています。

4つのDIVISIONに分かれており、決められたDIVISION内で宣言や記述を行わないとコンパイルが通りません。

 

– 見出し部

プログラム名や作成者、更新履歴等を記載します。

000010 IDENTIFICATION DIVISION.
000020 PROGRAM-ID. TEST001.
000030 AUTHOR. TARO-TEST.
000040 DATE-WRITTEN. 2021/11/15.
000050 DATE-COMPILED. 2021/11/15.

– 環境部

コンパイルするコンピュータ(SOURCE-COMPUTER)、実行するコンピュータ(OBJECT-COMPUTER)等を記載します。

000070 ENVIRONMENT DIVISION.
000080 CONFIGURATION SECTION.
000090 SOURCE-COMPUTER. MYCOMPUTER.
000100 OBJECT-COMPUTER. MYCOMPUTER.
000110 INPUT-OUTPUT SECTION.
000120 FILE-CONTROL.
000130 SELECT IN-FILE ASSIGN TO ID01
000140 ORGANIZATION IS LINE SEQUENTIAL.
000150 SELECT OUT-FILE ASSIGN TO OD01
000160 ORGANIZATION IS LINE SEQUENTIAL.

– データ部

入出力ファイルのレイアウトやプログラム内で使用する変数、外部から受け取る引数を記載します。

000180 DATA DIVISION.
000190 FILE SECTION.
000200 FD IN-FILE.
000210 01 IN-RECORD.
000220 03 IN-SYOHIN-CODE PIC X(6).
000230 03 IN-SYOHIN-NAME PIC X(30).
000240 03 IN-SYOHIN-TANKA PIC 9(8).
000250 WORKING-STORAGE SECTION.
000260 77 WRK-COUNT PIC 9(2).
000270 LINKAGE SECTION.
000280 REPORT SECTION.
000290 SCREEN SECTION.

– 手続き部

処理内容を記載します。

000310 PROCEDURE DIVISION.
000320 PERFORM TEST-PROC.
000350*
000360 STOP RUN.
000370*
000380 TEST-PROC SECTION.
000390*
000400 MOVE 100 TO WRK-COUNT.
000410 MOVE “ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZA”
000420-“BCDEFGHIJKLMNOPQRSTUVWXYZ” TO WRK-ALPHA.
000430 OPEN INPUT IN-FILE.
000440 PERFORM INFILE-READ-PROC.
000450*
000460 INIT-PROC-EXIT.
000470*
000480 EXIT.
12345678901234567890123456789012345678901234567890123456789012345678901234567890

コーディング時の注意点

上記のDIVISION以外では以下の注意点があります。

  • 文末はピリオドにする
  • 1行に80文字まで記載することができる
  • 80文字の中で、更に細かく記載できる領域が決まっている
    • 一連番号領域(1~6カラム)
      • プログラム行を識別するために使用する
      • 後に修正のため行が追加される可能性があるため、新規のプログラムを作成する際は10や100飛ばしで記載する
    • 標識領域(7カラム目)
      • 通常のコーディング時は空白のままにする
      • コメントを付ける場合や前の行から文字列が続いている場合は特定の文字を記述する
        • *(アスタリスク)
          • コメント行とし、以下のカラム記述を前行からの続きとみなす
          • 上記の410~420行目を参照
        • /(スラッシュ)
          • COBOLソースコード印刷時にここで改頁される
    • A領域(8~11行目)
      • 各部や節の見出し(xx DIVISIONや yy SECTION)、段落の見出し等を記述する
    • B領域(12~72カラム)
      • 命令文等の各段落を構成する文を記述する
      • ピリオドも必ずこの範囲内に収める
    • プログラム識別領域(73~80カラム)
      • すべてコメントとして扱われる
      • プログラム翻訳時には無視される

 

ハマりどころ

デバッグがしにくい

今はわかりませんが、当時はローカルのPCでは動かせなかったため、テスト用の汎用機へ反映しないと動きが確認できませんでした。

 

今の言語と変数の代入が逆

cやJava等であれば以下の記載でaに100が入ります

a = 100;

COBOLでは以下の記載でaに100が入ります。

MOVE 100 TO a.

この感じに慣れるまでとても混乱しました。(私だけかもしれません)

 

複数の項目をまとめて比較できる。

Java等であれば以下の記載となる比較ですが、

if (a == 1 || a == 2 || a == 3 || a == 4) {
	System.out.println(a);
}

COBOLでは以下になります。

IF ( A = 1 OR 2 OR 3 OR 4)
	DISPLAY A
END-IF.

 

日本語COBOLとは

その名の通り日本語で記述するプログラミング言語でYPS/COBOLと呼ばれ、富士通さんが開発したものです。

プログラマでなくてもソースコードが読めるため、仕様書とプログラムの一体化という観点から採用されました。(うろ覚え)

COBOLと日本語COBOLの代入は以下のように異なっています。

MOVE A TO B.
A を B に入れる。

こちら、それぞれの変数と、「を」や「に入れる」という予約語もさることながら、それぞれの間は全角のスペースです。

ゼンカクです。

ゼンカクでないとCOBOLへのジェネレートができませんでした。びっくり。

ちなみに、変数も全角文字でないとダメでしたが今のは大丈夫なのかな。

 

除算は商と剰余をまとめて実行できます。

A を B で割り商を C 余りを D に入れる

文章を間違えるとジェネレートできません。文章は全て予約語です。

終わりに

どんな言語にも一長一短あり、日本語COBOLは日本人には読みやすいかもしれませんね。
故きを温ね新しきを知ることで、今一度初心に返り、楽しんでプログラミングできる一助になればと思います。

 


 

cocone connectでは一緒に働く仲間を募集中です。

ご興味のある方は、こちらのリンクからぜひご応募ください。

 

cocone connect株式会社 採用情報

https://recruit.jobcan.jp/coconeconnect

cocone connect株式会社 公式サイト

https://connect.cocone.co.jp/

 

また、ココネでも一緒に働く仲間を募集中です。

ご興味のある方は、ぜひこちらの採用特設サイトをご覧ください。

https://www.cocone.co.jp/recruit/contents/

Category

Tag

%d人のブロガーが「いいね」をつけました。