この連載について
COBOLと聞くと「古い言語」「もう使われていない」というイメージを持つ人も多いだろう。
しかし実際には、金融機関や官公庁の基幹システムの多くが今もCOBOLで動いており、新人SEとして配属先で最初に読むコードがCOBOLだった、というケースは珍しくない。
この連載では、COBOLに初めて触れる新人SE向けに、全3回でCOBOLの基本を身につけることを目指す。
- COBOLに触れてみる(環境構築〜Hello, World!) ← 今回
- 変数とデータの型(PIC句・ACCEPT)
- 条件分岐と繰り返し(IF・PERFORM)
COBOLが今も使われている理由
COBOL(COmmon Business Oriented Language)は1959年に登場した、業務処理向けのプログラミング言語である。銀行の勘定系システムや、行政の基幹システムなど、「絶対に止められないシステム」の多くが、今もCOBOLで書かれたまま稼働し続けている。
新しい言語に書き換えるにはコストもリスクも大きいため、保守・改修を担う人材が今も必要とされている。つまりCOBOLは「過去の言語」ではなく、「現役で動き続けている言語」なのだ。
環境を準備する
今回は環境構築の手間を減らすため、GitHub Codespacesを使う。ブラウザさえあれば、ローカル環境に何もインストールせずにCOBOLを実行できる。
GitHubアカウントを持っていることを前提に、
- リポジトリを開き、
CodeボタンからCodespacesタブを選択する Create codespace on mainをクリックする- 数十秒待つと、ブラウザ上にVS Code風の開発環境が立ち上がる
この時点で用意されるのは、Ubuntuのベース環境と、COBOL用のVS Code拡張機能だけである。COBOLのコンパイラである GnuCOBOL は、続けてご自分でインストールすることになる。
なぜ自動インストールにしないのか
.devcontainer/devcontainer.json には、起動時に自動でコマンドを実行させる仕組み(postCreateCommand)が用意されている。
今回はあえてこれを使わず、GnuCOBOLのインストールを手動にしている。理由は2つある。
- 新規リポジトリでも既存リポジトリへの追記でも、同じ手順で済ませたいから。
すでに動いているCodespaceに後からdevcontainer.jsonを追加・変更しても、それだけでは反映されない。反映させるにはコンテナのリビルドという操作が必要になり、新人SEにはやや説明のコストが高い。手動インストールに統一すれば、この違いを意識せずに済む。 - 何が起きているかを見えるようにしておきたいから。
自動化に頼りきると、「クリックしたら動いた」で終わってしまう。最初の1回くらいは、自分の手でインストールコマンドを打ち、何が入っているのかを確認しておく方がよい。
ターミナルを開き、以下を実行する。
sudo apt-get update
sudo apt-get install -y gnucobol4.devcontainer/devcontainer.json にはOSイメージとVS Code拡張機能の指定だけが書かれている。
00_01_hello-cobol/
└── .devcontainer/
└── devcontainer.json ← 「どのOSを使うか」「どの拡張機能を入れるか」を書いた設定ファイルVS CodeやCodespacesは、リポジトリを開くときにこの.devcontainerフォルダを探し、中のdevcontainer.jsonを読み込んで環境を組み立てる。今回のようにコマンドのインストール指示までは書かず、あえて手元に残しておくという書き方もできる、ということは覚えておくとよいだろう。
はじめてのCOBOLプログラム
さっそく、画面に文字を表示するプログラムをつくってみよう。
*> ============================================
*> 00_01_hello-cobol
*> はじめてのCOBOLプログラム
*> ============================================
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO-COBOL.
AUTHOR. Rocky-Seven.
PROCEDURE DIVISION.
MAIN-PROCEDURE.
*> 画面に固定の文字列を表示するだけの処理
DISPLAY "Hello, COBOL!".
DISPLAY "新人SEのためのCOBOL入門 第1回".
STOP RUN.Python や JavaScript などと比べると、見慣れない大文字の単語がたくさん出てくる。
まずは次の2つだけ覚えておこう。
- IDENTIFICATION DIVISION:プログラムの名前や作者などを書く場所
- PROCEDURE DIVISION:実際の処理を書く場所
COBOLでは、処理内容を「DIVISION(部)」という大きなブロックに分けて書くのが特徴だ。
今回はこの最小構成だけを使う。
COBOLの書式のお約束(桁位置とコメント)
昔のCOBOLの参考書を開くと、「A領域」「B領域」といった桁位置の指定を目にすることがある。これはパンチカードで1行80桁が固定だった時代の名残で、行のどの位置に何を書くかにルールがあった。
| 桁 | 名称 | 役割 |
|---|---|---|
| 1〜6 | 順序番号領域 | 行番号を書く場所(現在はほぼ使われない) |
| 7 | 標識領域 | * でコメント行、- で前行からの継続行を表す |
| 8〜11 | A領域 | DIVISION・SECTION名、01・77レベルの項目名などの「見出し」はここから書き始める |
| 12〜72 | B領域 | それ以外の文(PROCEDURE DIVISION内の処理など)はここに書く |
| 73〜80 | 識別領域 | コンパイラは無視する |
これが固定形式(Fixed-format)と呼ばれる書き方である。現場で動いている既存コードの多くは今もこの形式で書かれているため、読み書きの両方で知っておく必要がある。
一方、COBOL 2002以降は自由形式(Free-format)もサポートされており、GnuCOBOLでも>>SOURCE FREEディレクティブや-freeオプションを使えば、桁位置を気にせず自由にインデントできる。この記事のサンプルコードも自由形式で書いている。
コメントの書き方も形式によって異なる。
- 固定形式:7桁目に
*を置く(例:* これはコメントである) - 自由形式:
*>を行のどこにでも置ける(例:DISPLAY "X". *> これはコメントである)
先ほどのhello.cobの冒頭にあった*>のブロックは、自由形式のコメント記法にあたる。
今後、他人のコードや参考書のサンプルを読むときは、「固定形式か自由形式か」をまず見分けるとよい。
コンパイルして実行する
ターミナルで以下を実行する。
cobc -x hello.cob
./hello次のように表示されれば成功だ。
Hello, COBOL!
新人SEのためのCOBOL入門 第1回cobc はGnuCOBOLのコンパイラコマンドである。-x オプションを付けることで、実行可能ファイルを生成する。他の言語で言う「ビルド」に近い作業だが、COBOLではこの一手間が必須となる。
まとめ
- COBOLは今も金融・官公庁などの基幹システムで現役稼働している
- GitHub Codespacesを使えば、ローカルへのインストールなしでCOBOLを試せる
- 今回は、GnuCOBOLのインストールはあえて手動にし、新規・既存どちらのリポジトリでも同じ手順で済むようにしている
- IDENTIFICATION DIVISIONとPROCEDURE DIVISIONの最小構成でプログラムは動く
- 短いプログラムであっても、「何のための処理か」をコメントで残す習慣は早いうちから持っておくとよい
次回は、変数を使ってデータを扱う方法と、キーボードからの入力を受け取る方法を扱う。
関連記事
リポジトリ
- Rocky-Seven/cobol-learning –
00_01_hello-cobol/


コメント