次のプロジェクトのために最近はCOBOLの勉強をしています。今どきCOBOLなの?って思われるかもしれませんが、昔から続いているプロジェクトだとCOBOLってことも多いようです。※SI業界で話題の某銀行とはまったく関係ない仕事です。

ちなみに、私の周りでは、新しく開発するシステムの場合はJavaが多い印象です。やっぱり技術者の数が多いですからね。Rubyとかは人を集めにくくて、あまり使われないのかな。

好きなことして生きていく

CentOS7にフリーなCOBOL開発環境を作りました

もしかしたらCentOSよりもUbuntuの方が簡単なのかもしれないけど、OSのインストーラのISOファイルを持っていたのがCentOS7だったので、CentOS7で環境を作りました。COBOL開発環境構築手順を書きます。CentOS7は最小限のOSインストールにしてます。

1.CentOS7に開発ツール(Development tools)をインストール
GnuCOBOLはソースからインストールする必要があるので、makeできるように開発ツールをyumでインストールします。
$ sudo yum install Development tools

2.必要なライブラリをインストールします。
$ sudo yum install gmp-devel db4 db4-devel ncurses-devel

3.フリーのCOBOLである、GnuCOBOL(昔はOpenCOBOLという名前だったようです)をCentOS7にインストールします。
ソースをダウンロードしてインストールします。
$ wget http://downloads.sourceforge.net/project/open-cobol/gnu-cobol/1.1/gnu-cobol-1.1.tar.gz
$ tar zxvf gnu-cobol-1.1.tar.gz
$ cd gnu-cobol-1.1
$ ./configure

ここで、下記のエラーが出てしまいました。
configure: error: Berkeley DB db.h is missing or has incompatible version

db.hが見つからないかバージョンが合っていないようです。なので、/etc/profileを編集して、db.hとBerkeley DBのライブラリのパスを指定します。
$ sudo vi /etc/profile
下記を末尾に追記する
export CPPFLAGS="-I/usr/include/libdb4"
export LDFLAGS="-L/lib64/libdb4"
export LD_LIBRARY_PATH="/lib64/libdb4"

環境変数を再読み込みします。
$ source /etc/profile

再度、GnuCOBOLのインストールをする。
$ ./configure
$ make
$ sudo make install

4.サンプルのCOBOLプログラムを書いてみる。(HTML上表示されてませんが、hello.cobの各行の先頭7文字は半角スペースが入っています)
$ cd ~
$ vi hello.cob
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE-01.
ENVIRONMENT DIVISION.
DATA DIVISION.
PROCEDURE DIVISION.
MAIN.
DISPLAY "Hello world!" UPON CONSOLE.
STOP RUN.

コンパイルします。
$ cobc -x hello.cob

実行してみる。
$ ./hello

こんなエラーが発生してしまいました。libcob.soが見つからなくてロードできなかったようです。
./hello: error while loading shared libraries: libcob.so.1: cannot open shared object file: No such file or directory

libcob.soをLD_LIBRARY_PATHに追加します。
$ sudo vi /etc/ld.so.conf.d/gnu-cobol-1.1.conf
下記を書き込む
/usr/local/lib

LD_LIBRARY_PATHの設定を再読み込みします。
$ sudo ldconfig

もう一度サンプルプログラムを実行する。
$ ./hello
Hello world!

これで、ようやく「Hello world!」と表示されました。めでたしめでたし。

COBOLを使ってみた感想

EclipseのようなフリーのIDEが無いので、vimやサクラエディタでコーディングしているのですが、手で書く量が多くて面倒ですね。JavaでEclipseが色々と入力支援してくれるのに慣れていた私にはきついです。効率も落ちそうですよ。

あと、Linux上のCOBOLだと、普通は文字コードがUTF-8なので、日本語の全角文字が3バイトです。なので文字列の変数の定義でも、全角一文字分でPIC X(3)としないといけなくて、帳票的なプログラムだと混乱してしまいそうです。。。

COBOLでは大したことできないし、難易度はそんなに高く無いので、がんばって覚えたいと思いますよ。