暖かくなってきましたね(o゜▽゜)o
気がつけばもう4月。東京では桜もいい感じに満開で、仕事ほったらかしてお花見にでも行きたい気持ちになりますね。
さて、「春」と聞いて連想するものといえば……。そう、「COBOL」ですよね♪1)個人差があります
というわけで、今回はCentOS 7にCOBOLの実行環境をインストールしてみようと思います☆
COBOLといっても……
さて、一口に「COBOLの実行環境」といってもいろいろありますよね。
有名どころだとGNUCobol(旧名:OpenCOBOL)でしょうか。GNUプロジェクトのひとつですね。
GnuCOBOL Guides via kwout
これを使っても良いのですが……。
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' から出ます
/path/to/opensource-cobol-1.5.1J-utf8/tests’ から出ます
make[3]: *** [check-am] エラー 2
make[3]: ディレクトリ
make[2]: *** [check-recursive] エラー 1
make[2]: ディレクトリ/path/to/opensource-cobol-1.5.1J-utf8/tests' から出ます
/path/to/opensource-cobol-1.5.1J-utf8′ から出ます
make[1]: *** [check-recursive] エラー 1
make[1]: ディレクトリ
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/400{[(|fnote_stt|)]}後継機種でいうところの、iSeries/System i/Power Systems?とか使ってました。
……まあ、新人の頃なのでたいしたことはしてませんが(o゜▽゜)o{[(|fnote_end|)]}わけですが、他の「モダン」とされている言語にはない独特さがありますよね。あと、今でもお手軽に開発/実行環境があるんだなぁ……と。
COBOL資産もあるところにはあるでしょうし、ハードウェアのリプレース方面で困ることもあるかもしれません。100%の代替にはならないとしても、こういう手段があるというのも覚えておくと役に立つ日もくる……かも……?
あ、そうそう。Pythonで書かれた(!?)COBOL用IDEもあるようですので、万が一の時も安心ですね♪
以上、久々の技術ネタでした!
注訳はこちら
↑1 | 個人差があります |
---|---|
↑2 | 先のGnuCOBOL(OpenCOBOL)をベースとし、日本特有のビジネス環境に即したカスタマイズやメンテナンスを加えたもの……らしいです(‘-‘*) |
↑3 | そうなんです!GitHubにあるんです! |
↑4 |
ちなみに、何がインストールされるか知りたいときは 「 |
↑5 | 2016年12月09日リリースらすぃ |
↑6 | このエントリではもろもろの事情で表示が崩れてますが、もうちょっと見やすく出力されますよ |
↑7 | このあと、エラーレポートは送っておきました |
↑8 | 今のインストールで作成されたopensource COBOLのライブラリね |
↑9 | 実は私、エンジニア人生の最初の数年はCOBOLerとして過ごしていまして。 AS/400{[(|fnote_stt|)]}後継機種でいうところの、iSeries/System i/Power Systems? |