自主的20%るぅる

各々が自主的に好き勝手書くゆるふわ会社ブログ

CentOS 7にopensource COBOLをインストールしてみた

警告: 整合性のない脚注開始用の簡単コード:

この警告が見当違いであれば、管理画面の 全般設定 > 脚注の開始・終了用の簡単コード > 簡単コードの整合性を検査 にある構文検査の機能を無効にしてください。

整合性のない脚注開始用の簡単コード:

“実は私、エンジニア人生の最初の数年はCOBOLerとして過ごしていまして。AS/400”

暖かくなってきましたね(o゜▽゜)o

気がつけばもう4月。東京では桜もいい感じに満開で、仕事ほったらかしてお花見にでも行きたい気持ちになりますね。

さて、「春」と聞いて連想するものといえば……。そう、「COBOL」ですよね♪{[(|fnote_stt|)]}個人差があります{[(|fnote_end|)]}

というわけで、今回はCentOS 7にCOBOLの実行環境をインストールしてみようと思います☆

COBOLといっても……

さて、一口に「COBOLの実行環境」といってもいろいろありますよね。

有名どころだとGNUCobol(旧名:OpenCOBOL)でしょうか。GNUプロジェクトのひとつですね。

これを使っても良いのですが……。

OSSコンソーシアムさんのオープンCOBOLソリューション部会というところが、「opensource COBOL(OSS COBOL)」というプロダクトをリリースしているので、こちらを使うことにします。{[(|fnote_stt|)]}先のGnuCOBOL(OpenCOBOL)をベースとし、日本特有のビジネス環境に即したカスタマイズやメンテナンスを加えたもの……らしいです(‘-‘*){[(|fnote_end|)]}

というわけで、とりあえずコイツをインストールしてみることにしましょう。

インストールに必要なものを用意する

「インストールしましょう」といっても、これ単体でどうにかなるものでもありません。いろいろなライブラリやツール類が必要になります。

そのあたりをGitHubのREADME{[(|fnote_stt|)]}そうなんです!GitHubにあるんです!{[(|fnote_end|)]}を参照してチェックしていきましょう。

BOTH runtime AND development components are necessary.

開発ツール類が必要……って感じですね。まあ、ソースからビルドするので当たり前ですが(;´Д`)

今回の環境ではインストール済みだったので試していませんが、

$ sudo yum groupinstall "Development Tools"

で一括インストールできるはずです。{[(|fnote_stt|)]}

ちなみに、何がインストールされるか知りたいときは

$ sudo yum groupinfo "Development tools"」{[(|fnote_end|)]}

でチェックできます。

GNU MP (libgmp) 4.1.2 or later

算術ライブラリですね。10進数の算術実装に使われているとか。

4.1.2以降のバージョンが必要だそうです。

これも手元の環境ではインストール済みでしたので試していませんが、

「$ sudo yum install gmp gmp-devel」

的なコマンドでいい感じにインストールされるはず……。

GNU Libtool (libltdl)

動的呼び出しの実装で使われているらしいです。

が、下記に書いてあるとおり……。LinuxおよびWindows(CygwinとMingWを含む)では不要だそうな。

NOTE – libltdl is NOT needed when installing on Linux
or Windows (including Cygwin and MingW).

スルーしましょう。

Berkeley DB (libdb) 1.85 or later

組み込み型データベースライブラリですね。

1.85以降が必要らしいのですが、いろいろとアレらしいので4.x系のアレがオススメだそうです。

「Indexed-Sequential file I/O is used」とのことで。日本語だと「索引ファイル」とか呼ばれてるブツかな?

これも手元の環境ではインストール済みでしたので試していませんが、

「$ sudo yum install libdb libdb-devel libdb-util」

的なコマンドでいい感じにインストールされるはず……。

Ncurses (ncurses) 5.2 or later / Unix curses / PDCurses (pdcurses) for MinGW ports

端末非依存のテキストインターフェース制御ライブラリですね。Linux環境だとNcursesですね。

5.2以降が必要だそうな。

例によって手元の環境にはインストール済みでしたので試していませんが、

「$ sudo yum install ncurses ncurses-devel ncurses-base ncurses-libs」

的なコマンドでいい感じにインストールされるはず……。

インストールしてみる〜

さて、それじゃあインストールしてみましょう。

まずはソースファイルを入手しよう!

前述の「opensource COBOL」のサイトによると、最新版は「1.5.1J」{[(|fnote_stt|)]}2016年12月09日リリースらすぃ{[(|fnote_end|)]}だそうで。

いくつか種類がありますが、「opensource COBOL v1.5.1J [UTF-8, Source Package, include vbisam (extend OSSCons patch)]」ってやつをチョイスしてみましょう。

Linux上で直接ダウンロードするときはこんな感じで。

$ wget -O opensource-cobol-1.5.1J-utf8.tar.gz ‘https://www.osscons.jp/osscobol/files/?action=cabinet_action_main_download&block_id=414&room_id=21&cabinet_id=11&file_id=382&upload_id=761’

上手くいけば、「opensource-cobol-1.5.1J-utf8.tar.gz」というファイルができているはず。

そいつを下記のコマンドで展開。上手くいけば「opensource-cobol-1.5.1J-utf8」ってディレクトリができているはずです。

$ tar xzf ./opensource-cobol-1.5.1J-utf8.tar.gz

ビルドしよう!

ここまでくれば、後はビルドするだけ!

まずは、展開してできたディレクトリの中に入りましょう。

$ cd ./opensource-cobol-1.5.1J-utf8

そしたら、configureを実行しましょう。

$ ./configure

ちょっと待つと下記のような表示が出力されて{[(|fnote_stt|)]}このエントリではもろもろの事情で表示が崩れてますが、もうちょっと見やすく出力されますよ{[(|fnote_end|)]}、コマンドプロンプトに戻っているはず。そうなっていればOK!

OpenCOBOL Configuration:
(中略)
Use gettext for international messages:      yes
Use Berkeley DB for ISAM I/O:                yes
Use enhanced Berkeley DB (>= 4.1)            yes
Use fcntl for file locking:                  yes
Use ncurses/pdcurses/curses for screen I/O:  yes

テストしよう!

続いてテストプログラムを実行します。

make check

そこそこ時間がかかるので、お茶でも飲みながらマッタリ待ちましょう。

make[4]: *** [check-TESTS] エラー 1
make[4]: ディレクトリ /path/to/opensource-cobol-1.5.1J-utf8/tests' から出ます
make[3]: *** [check-am] エラー 2
make[3]: ディレクトリ
/path/to/opensource-cobol-1.5.1J-utf8/tests’ から出ます
make[2]: *** [check-recursive] エラー 1
make[2]: ディレクトリ /path/to/opensource-cobol-1.5.1J-utf8/tests' から出ます
make[1]: *** [check-recursive] エラー 1
make[1]: ディレクトリ
/path/to/opensource-cobol-1.5.1J-utf8′ から出ます
make: *** [check] エラー 2

……アレ?(;´Д`) どこかでエラーが……。

エラーログは「./tests/」ディレクトリの中に「*.log」という感じで保存されているっぽいです。

5ファイルほどあるみたいなので、ひとつひとつ見てみます。

./tests/data-rep.log

このテストは正常にパスしたようです(`・ω・´)b

$ tail ./tests/data-rep.log
19. PACKED-DECIMAL numeric test (packed.at:324): ok (0m0.042s 0m0.025s)
20. POINTER: display (pointer.at:22): ok (0m0.045s 0m0.014s)
data-rep: ending at: {TIMESTAMP}
data-rep: test suite duration: 0h 0m 3s

## ————- ##
## Test results. ##
## ————- ##

All 20 tests were successful.

./test/i18n_sjis.log

なんかエラーになってそうな気配を感じますね……(´・ω・`)

$ tail ./tests/i18n_sjis.log
| #define STDC_HEADERS 1
| #define USE_DB41 1
| #define USE_LIBDL 1
| #define VERSION “1.5.1”
| #define WITH_DB 3
| #define WITH_VARSEQ 0
| #define __USE_STRING_INLINES 1
|
| configure: exit 0

中身を直接ひらいて見てみたら、確かにエラーになってました(´・ω・`){[(|fnote_stt|)]}このあと、エラーレポートは送っておきました{[(|fnote_end|)]}

./tests/jp-compat.log

これは大丈夫そう(`・ω・´)b

$ tail ./tests/jp-compat.log
111. CALL C$LIST-DIRECTORY (system-routine.at:45): ok (0m0.045s 0m0.018s)
jp-compat: ending at: {TIMESTAMP}
jp-compat: test suite duration: 0h 0m 7s

## ————- ##
## Test results. ##
## ————- ##

104 tests were successful.
7 tests were skipped.

./tests/run.log

これも大丈夫そう(`・ω・´)b

$ tail ./tests/run.log
210. FUNCTION WHEN-COMPILED (functions.at:1611): ok (0m0.051s 0m0.020s)
run: ending at: {TIMESTAMP}
run: test suite duration: 0h 0m 17s

## ————- ##
## Test results. ##
## ————- ##

208 tests were successful.
2 tests were skipped.

./tests/syntax.log

これも大丈夫そう(`・ω・´)b

$ tail ./tests/syntax.log
92. parse-error recovery after Headings. (error-recovery.at:21): ok (0m0.001s 0m0.002s)
93. completely ignore DATA RECORDS (data-records.at:1): ok (0m0.000s 0m0.004s)
syntax: ending at: {TIMESTAMP}
syntax: test suite duration: 0h 0m 2s

## ————- ##
## Test results. ##
## ————- ##

All 93 tests were successful.

インストールしてみよう!

エラーは気になりますが……。SJIS関連ぽいテスト以外はパスしているので、自己責任でインストールしてみましょう。

下記コマンドでインストールができるはずです。

$ sudo make install

ちなみにインストール先は「/usr/local/」配下になっているはず……。

ライブラリが読み込まれるようにしよう!

たぶん、そのままだとlibcob*系のライブラリファイル{[(|fnote_stt|)]}今のインストールで作成されたopensource COBOLのライブラリね{[(|fnote_end|)]}が読み込まれないので……。

「/etc/ld.so.cond.d」配下に適当な名前で設定ファイル作りましょう。

例えば、こんな感じ。

$ sudo vi /etc/ld.so.conf.d/oss-cobol.conf

で、中に「/usr/local/lib」って書いて保存&終了しましょう。

その後に下記コマンドを実行して終了!

$ sudo ldconfig

これで、libcob*系もロードできるようになっているはずです。たぶん。

実行してみた

これで準備は整っているはずなので、ためしに実行してみましょう。

$ /usr/local/bin/cobc –version
opensource COBOL 1.5.1J
OSS Consortium’s patched version of OpenCOBOL1.1(Feb.06 2009)
-—
cobc (opensource COBOL) 1.5.1.0
Copyright (C) 2001-2009 Keisuke Nishida / Roger While
Built {TIMESTAMP}
Packaged Feb 06 2009 10:30:55 CET

おー!動いてるっぽい!(o´∀`o)

せっかくなので、なにかプログラムを動かしてみましょう。

イチから作っても良かったのですが、京大マイコンクラブさんのお力をお借りしましょう。

このソースをテキトーなファイル名(sample.cobol)とかで保存して、下記コマンドをアレすると実行ファイルができあがります。

$ /usr/local/bin/cobc -x ./sample.cobol
$ ls ./sample*
./sample ./sample.cobol

コイツを実行すると……ちゃんと動きました!(o´∀`o)

$ ./sample
Hello World!!

やったね!

ちゃんとCOBOLですね(`・ω・´)b

久々にCOBOLに触れてみた{[(|fnote_stt|)]}実は私、エンジニア人生の最初の数年はCOBOLerとして過ごしていまして。
AS/400{[(|fnote_stt|)]}後継機種でいうところの、iSeries/System i/Power Systems?{[(|fnote_end|)]}とか使ってました。
……まあ、新人の頃なのでたいしたことはしてませんが(o゜▽゜)o{[(|fnote_end|)]}わけですが、他の「モダン」とされている言語にはない独特さがありますよね。あと、今でもお手軽に開発/実行環境があるんだなぁ……と。

COBOL資産もあるところにはあるでしょうし、ハードウェアのリプレース方面で困ることもあるかもしれません。100%の代替にはならないとしても、こういう手段があるというのも覚えておくと役に立つ日もくる……かも……?

あ、そうそう。Pythonで書かれた(!?)COBOL用IDEもあるようですので、万が一の時も安心ですね♪

以上、久々の技術ネタでした!

Let’s share this article!

{ 関連記事 }

{ この記事を書いた人 }

Yuta Hayakawa

2016年6月入社。2020年12月より取締役に就任しました。

普段は東京本社で管理職のお仕事したり、広報的役割としてテキスト書いたり動画作ったりするのが最近のお仕事。

自称「社内システムチーム統括」として、社内システムチームの面々を見守りつつ毎日を過ごしています。

プライベート面では、音楽やコンピュータ関連、ゴルハム&ジャンハム関係、ゲーム関係が興味あるポイント。

あと、我が子可愛い。

記事一覧