はじめに
「COBOLをAmazon EC2で動かす」というのは、この2025年、令和7年のネタとしては大変にレガシーなテーマに思えるかもしれません。
ただ、実際には企業システムの根幹を支えているCOBOLアプリケーションの延命や、レガシーモダナイゼーション (レガモダ) を考えるにあたって、AWSは "移行先にしたい" と思われている有力な選択肢の一つです。
本記事では、Amazon EC2上にCOBOLの実行環境を構築し、実際に初歩のアプリケーションを動かすまでの流れを紹介します。
これからCOBOLの環境をAWSに移行しようと考えている方や、その検証を始めたいと考えている方の参考になれば幸いです。
なお、著者である私自身も、この検証時が初めてCOBOLに手を出した瞬間であり、前提知識が殆どない状態からスタートしています。
そのため、本記事は私自身が一つ一つの物事をかなり丁寧に確認しながら、検証の実録のように書いたものとなっていますので、あらかじめご了承ください。
COBOL実行環境のセットアップ
今回はAWS上にUbuntuのEC2インスタンスを構築し、COBOL環境をインストールしていきます。
COBOL実行環境のインストール
まず、先人の文献を参考に apt-get
コマンドを実行して open-cobol
のインストールにトライしていきます。
しかし、なんとこれがいきなり失敗します。
$ sudo apt-get install open-cobol
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Package open-cobol is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
However the following packages replace it:
gnucobol4 gnucobol3
E: Package 'open-cobol' has no installation candidate
初手から暗雲が立ち込めますが、冷静にトラブルシューティングしていきます。
エラー文を読む限り open-cobol
は廃止 (obsolete) され、リポジトリから削除されたようです。
代わりに gnucobol4
または gnucobol3
をインストールするように指示されています。
今回は gnucobol4
をインストールしていきます。
$ sudo apt-get install gnucobol4
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Get:3 http://us-west-2.ec2.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libncurses-dev amd64 6.3-2ubuntu0.1 [381 kB]
Get:4 http://us-west-2.ec2.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libncurses5-dev amd64 6.3-2ubuntu0.1 [790 B]
Get:5 http://us-west-2.ec2.archive.ubuntu.com/ubuntu jammy/universe amd64 gnucobol4 amd64 4.0~early~20200606-6 [976 kB]
Fetched 1775 kB in 1s (1331 kB/s)
Selecting previously unselected package libcob5:amd64.
(Reading database ... 128933 files and directories currently installed.)
Preparing to unpack .../libcob5_4.0~early~20200606-6_amd64.deb ...
Unpacking libcob5:amd64 (4.0~early~20200606-6) ...
Selecting previously unselected package libcob5-dev:amd64.
Preparing to unpack .../libcob5-dev_4.0~early~20200606-6_amd64.deb ...
Unpacking libcob5-dev:amd64 (4.0~early~20200606-6) ...
Selecting previously unselected package libncurses-dev:amd64.
Preparing to unpack .../libncurses-dev_6.3-2ubuntu0.1_amd64.deb ...
Unpacking libncurses-dev:amd64 (6.3-2ubuntu0.1) ...
Selecting previously unselected package libncurses5-dev:amd64.
Preparing to unpack .../libncurses5-dev_6.3-2ubuntu0.1_amd64.deb ...
Unpacking libncurses5-dev:amd64 (6.3-2ubuntu0.1) ...
Selecting previously unselected package gnucobol4.
Preparing to unpack .../gnucobol4_4.0~early~20200606-6_amd64.deb ...
Unpacking gnucobol4 (4.0~early~20200606-6) ...
Setting up libncurses-dev:amd64 (6.3-2ubuntu0.1) ...
Setting up libcob5:amd64 (4.0~early~20200606-6) ...
Setting up libcob5-dev:amd64 (4.0~early~20200606-6) ...
Setting up libncurses5-dev:amd64 (6.3-2ubuntu0.1) ...
Setting up gnucobol4 (4.0~early~20200606-6) ...
Processing triggers for man-db (2.10.2-1) ...
Processing triggers for install-info (6.8-4build1) ...
Processing triggers for libc-bin (2.35-0ubuntu3.10) ...
Scanning processes...
Scanning linux images...
Running kernel seems to be up-to-date.
No services need to be restarted.
No containers need to be restarted.
No user sessions are running outdated binaries.
No VM guests are running outdated hypervisor (qemu) binaries on this host.
コマンドの実行に成功し、gnucobol4
がインストールできたようです。
COBOLコンパイラの実行確認
さて、COBOLコンパイラは cobc
というコマンドで呼び出すことができます。
cobc
が呼び出せるかどうかを確認してみます。
$ cobc --version
cobc (GnuCOBOL) 4.0-early-dev.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 Sep 14 2021 19:23:38
Packaged Jun 06 2020 20:56:36 UTC
C version "11.2.0"
正常に呼び出せたようです。
COBOLでHello, World!を実行
次に、Hello, World!を実行してみましょう。
まずは以下の通り hello.cob
を書いて保存します。
IDENTIFICATION DIVISION.
PROGRAM-ID. HelloWorld.
PROCEDURE DIVISION.
DISPLAY "Hello, World!".
STOP RUN.
次に以下のコマンドを打ってコンパイルします。
$ cobc -x -free hello.cob
何も出力されなければエラーなくコンパイルが完了しています。
それでは、COBOLプログラムを実行してみましょう。
$ ./hello
Hello, World!
「Hello, World!」 が無事表示されました。
これで、セットアップした環境にて、COBOLでプログラムを実行できることが確認できたと言えます。
COBOLの記法
今回「Hello, World!」を書くにあたって、先ほどのコードを書きました。
自由形式 (Free Format)
先ほどの記法は「自由形式」と呼ばれるものになります。
IDENTIFICATION DIVISION.
PROGRAM-ID. HelloWorld.
PROCEDURE DIVISION.
DISPLAY "Hello, World!".
STOP RUN.
この自由形式のコードをコンパイルするために、以下のコマンドを使用しました。
-free
オプションは、自由形式のコードをコンパイルするために使用するものです。
cobc -x -free hello.cob
固定形式 (Fixed Format)
自由形式に対して「固定形式」と呼ばれる記法があり、これがCOBOLの伝統的なコードの書き方です。
IDENTIFICATION DIVISION.
PROGRAM-ID. HelloWorld.
PROCEDURE DIVISION.
DISPLAY "Hello, COBOL!".
STOP RUN.
各行の特定の列(カラム)に意味があります。
カラム範囲 | 用途 | 内容例 |
---|---|---|
1〜6 | 行番号またはラベル(任意) |
000100 など |
7 | インジケータ(特殊記号の指示位置) |
(プログラム行)、 * (コメント行)、D (デバッグ行)、- (継続行)など |
8〜72 | 実際のコードを書く場所(有効領域) |
DISPLAY "HELLO". など |
73〜80 | パンチカード管理領域(無視される) | 通常は使用しない |
6列目までの行番号は、コンパイラで自動的に採番されるため、コーディングの際に意識する必要はありません。
上のコードでも、ブランクとなっています。
コンパイルする時は以下のコマンドを実行します。(-free
がないことが違い)
cobc -x hello.cob
まとめ
Amazon EC2でUbuntuの環境を用意して、COBOLの実行環境を gnucobol4
を使って構築し「Hello, World!」を実行できました。
Ubuntu上でCOBOLプログラムを実行できるようになり、AWSへの移行に向けたコード変換などを検証できる土壌が整ったと言えるでしょう。
参考文献
言わずもがな、先人の知恵を頼らなければインストールに挑むことはできません。
様々な文献を参考にして、インストールに挑戦しています。
貴重な知見を残してくださっていることに、心から感謝いたします。