新人SEのためのCOBOL入門 第1回:COBOLに触れてみる(環境構築〜Hello, World!)

スポンサーリンク
COBOL

この連載について

COBOLと聞くと「古い言語」「もう使われていない」というイメージを持つ人も多いだろう。
しかし実際には、金融機関や官公庁の基幹システムの多くが今もCOBOLで動いており、新人SEとして配属先で最初に読むコードがCOBOLだった、というケースは珍しくない。

この連載では、COBOLに初めて触れる新人SE向けに、全3回でCOBOLの基本を身につけることを目指す。

  1. COBOLに触れてみる(環境構築〜Hello, World!) ← 今回
  2. 変数とデータの型(PIC句・ACCEPT)
  3. 条件分岐と繰り返し(IF・PERFORM)

COBOLが今も使われている理由

COBOL(COmmon Business Oriented Language)は1959年に登場した、業務処理向けのプログラミング言語である。銀行の勘定系システムや、行政の基幹システムなど、「絶対に止められないシステム」の多くが、今もCOBOLで書かれたまま稼働し続けている。

新しい言語に書き換えるにはコストもリスクも大きいため、保守・改修を担う人材が今も必要とされている。つまりCOBOLは「過去の言語」ではなく、「現役で動き続けている言語」なのだ。

環境を準備する

今回は環境構築の手間を減らすため、GitHub Codespacesを使う。ブラウザさえあれば、ローカル環境に何もインストールせずにCOBOLを実行できる。
GitHubアカウントを持っていることを前提に、

  1. リポジトリを開き、Code ボタンから Codespaces タブを選択する
  2. Create codespace on main をクリックする
  3. 数十秒待つと、ブラウザ上にVS Code風の開発環境が立ち上がる

この時点で用意されるのは、Ubuntuのベース環境と、COBOL用のVS Code拡張機能だけである。COBOLのコンパイラである GnuCOBOL は、続けてご自分でインストールすることになる。

なぜ自動インストールにしないのか

.devcontainer/devcontainer.json には、起動時に自動でコマンドを実行させる仕組み(postCreateCommand)が用意されている。
今回はあえてこれを使わず、GnuCOBOLのインストールを手動にしている。理由は2つある。

  1. 新規リポジトリでも既存リポジトリへの追記でも、同じ手順で済ませたいから。
    すでに動いているCodespaceに後からdevcontainer.jsonを追加・変更しても、それだけでは反映されない。反映させるにはコンテナのリビルドという操作が必要になり、新人SEにはやや説明のコストが高い。手動インストールに統一すれば、この違いを意識せずに済む。
  2. 何が起きているかを見えるようにしておきたいから。
    自動化に頼りきると、「クリックしたら動いた」で終わってしまう。最初の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〜11A領域DIVISION・SECTION名、01・77レベルの項目名などの「見出し」はここから書き始める
12〜72B領域それ以外の文(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の最小構成でプログラムは動く
  • 短いプログラムであっても、「何のための処理か」をコメントで残す習慣は早いうちから持っておくとよい

次回は、変数を使ってデータを扱う方法と、キーボードからの入力を受け取る方法を扱う。

関連記事

リポジトリ

コメント

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