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

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

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

さて、「春」と聞いて連想するものといえば……。そう、「COBOL」ですよね♪1)個人差があります

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

COBOLといっても……

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

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

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

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

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

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

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

そのあたりをGitHubのREADME3)そうなんです!GitHubにあるんです!を参照してチェックしていきましょう。

BOTH runtime AND development components are necessary.

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

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

$ sudo yum groupinstall "Development Tools"

で一括インストールできるはずです。4)

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

$ sudo yum groupinfo "Development tools"

でチェックできます。

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」5)2016年12月09日リリースらすぃだそうで。

いくつか種類がありますが、「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

ちょっと待つと下記のような表示が出力されて6)このエントリではもろもろの事情で表示が崩れてますが、もうちょっと見やすく出力されますよ、コマンドプロンプトに戻っているはず。そうなっていれば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

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

./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*系のライブラリファイル8)今のインストールで作成されたopensource COBOLのライブラリねが読み込まれないので……。

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

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

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

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

注訳はこちら   [ + ]

1. 個人差があります
2. 先のGnuCOBOL(OpenCOBOL)をベースとし、日本特有のビジネス環境に即したカスタマイズやメンテナンスを加えたもの……らしいです(‘-‘*)
3. そうなんです!GitHubにあるんです!
4.

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

$ sudo yum groupinfo "Development tools"

5. 2016年12月09日リリースらすぃ
6. このエントリではもろもろの事情で表示が崩れてますが、もうちょっと見やすく出力されますよ
7. このあと、エラーレポートは送っておきました
8. 今のインストールで作成されたopensource COBOLのライブラリね
9. 実は私、エンジニア人生の最初の数年はCOBOLerとして過ごしていまして。
AS/400後継機種でいうところの、iSeries/System i/Power Systems?
10. 後継機種でいうところの、iSeries/System i/Power Systems?とか使ってました。
……まあ、新人の頃なのでたいしたことはしてませんが(o゜▽゜)o
Yuta Hayakawa

Yuta Hayakawaマネージャー

投稿者プロフィール

普段は東京本社で社内システム開発を中心とした本社業務を担当しています。

最近、マネージャー(部長相当)職になりまして、不慣れなアレでアレしている毎日です。

音楽とコンピュータ関連、ゴルハム&ジャンハム関係、ゲーム関係が興味あるポイント。

この著者の最新の記事

関連記事

コメントは利用できません。

募集中!(o゜▽゜)o

エンジャパン
求む、社長!
follow us in feedly

コッチもヨロシク!





最近のネタ!

  1. 2019-2-18

    第9回ボルダリング部 ~まさかのワールドカップ優勝者登場!?~

    今回は、1月に開催されましたボルダリング部活動の様子をお届けします(`・ω・´)ゞ 今年もB-PU…
  2. 2019-2-18

    GitHub のプランを Pro から Free へダウングレードすると制限がかかる機能全 6 つ紹介

    GitHub のアカウントを Pro から Free へダウングレードしました! こんにちは、江嵜…
  3. 2019-2-12

    第三回リアル脱出ゲーム部~さよなら、僕らのマジックアワー~

    はじめに 2019年初のリアル脱出ゲーム部の活動が02/02(土)にありました! というわけで活…
  4. 2019-2-12

    第4回アウトドア部 ~まさかのみんな初心者!?~

    2019/2/2(土)、アウトドア部の4回目の活動!! 前回終了時点では、真冬だろうし寒いから室内…
  5. 2019-2-11

    target=”_blank” すると飛び先のサイトから情報取れるって知ってました?

    target="_blank" はリンク先を新しいタブで開くときの書き方ですが… こんにちは、江嵜…
ページ上部へ戻る