こんにちは!レイチェルです。記事を書くのは半年ぶりですが、やっていきましょう!
昨今、レガシーシステムをモダンなシステムに置き換える動きが盛んになっております。その一環として、COBOLをよりモダンな言語に置き換えるというものがあります。
今回ご紹介しますのは、そんなCOBOLをJavaに変換するツール「opensource COBOL 4J(以下、cobol4j)」でございます。
opensource COBOL 4Jとは
githubには以下のように書かれています。
opensource COBOL 4jはCOBOLソースコードをJavaソースコードに変換するCOBOLコンパイラです. opensource COBOL 4jはCOBOLからCに変換するCOBOLコンパイラ"opensource COBOL"をもとに開発されています.
https://github.com/opensourcecobol/opensourcecobol4j/blob/main/README_J…
このcobol4jを使えば、COBOLをJavaに変換できるみたいですね。やってみましょっか!
用意するもの
- COBOLコード(下に例を置いておきますね)
- Docker環境(Rancher Desktopか何かで用意しておいてください)
- VSCode
使用するコード
今回は、以下のCOBOLコードを使ってみます。任意のディレクトリを作成し、OTAMESHI.cblとして保存しておいてください。エンコードはShift-JISでお願いします。
この記事では、otameshi/OTAMESHI.cblにみたいなディレクトリ構造にしておきます。
IDENTIFICATION DIVISION.
PROGRAM-ID. OTAMESHI.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
INPUT-OUTPUT SECTION.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 MOJI PIC X(15).
LINKAGE SECTION.
PROCEDURE DIVISION.
MOVE "Hello World!!" TO MOJI.
DISPLAY "MOJI = " MOJI UPON CONSOLE.
EXIT.
ごくごく簡単なコードですね。実行すれば「MOJI = Hello World!!」と表示されるはずです。
まずはCOBOLを動かしてみる
上記のCOBOLコードを動かしてみましょう!動かすには、cobol4jの元となっているopensource COBOLを使います。cobol4jとopensource COBOLはdockerイメージが配布されているので、サクッとdockerで導入しちゃいましょう!そのために、dockerfile2種とdocker-compose.ymlを書きます。
まずはdocker-compose.ymlから
version: "3"
services:
cobol:
container_name: cobol
stdin_open: true
build:
context: .
dockerfile: dockerfile
tty: true
volumes:
- .:/root/app
working_dir: /root/app
cobol4j:
container_name: cobol4j
stdin_open: true
build:
context: .
dockerfile: dockerfile4j
tty: true
volumes:
- .:/root/app
working_dir: /root/app
お次はdockerfile
FROM opensourcecobol/opensource-cobol
USER root
ラスト、dockerfile4j
FROM opensourcecobol/opensourcecobol4j:1.0.4
USER root
上記のファイル3種は全部/otameshiと同様のディレクトリに配置します。こんな感じ
お好きなディレクトリ下でdocker-compose up -d --build
すればcobol4jとopensource COBOLのコンテナが作成されます。
以下のコマンドでコンテナ内に入りましょう。
docker exec -it cobol bash
早速、COBOLコードをコンパイルして実行してみます。以下のコマンドを入力すると、実行結果が表示されるはずです。
[root@e529f01499d2 app]# cd otameshi
[root@e529f01499d2 otameshi]# cobc OTAMESHI.cbl
[root@e529f01499d2 otameshi]# cobcrun OTAMESHI
MOJI = Hello World!!
cobc ファイル名
でCOBOLコードをコンパイルできます。コンパイルすると実行可能ファイルの.soファイルが生成されます。
.soファイルの実行はcobcrun プログラム名
です。これまでの手順で「MOJI = Hello World!!」が出力されるはず!
いよいよCOBOL→Java変換
cobol4jとopensource COBOLとではコンテナが分かれているので、移動しましょう。
コンテナをexitで抜けてから、docker exec -it cobol4j bashを実行します。その後、以下のコマンドを入力します。
root@74b8e4a9e4e0:~/app# cd otameshi
root@74b8e4a9e4e0:~/app/otameshi# cobj OTAMESHI.cbl
root@74b8e4a9e4e0:~/app/otameshi# java OTAMESHI
MOJI = Hello World!!
cobjでCOBOLコードをjavaコードに変換・コンパイルできます。
配布されているdockerイメージには、最初からJVMが導入されているためjavaコマンドが使えます。
こちらもMOJI = Hello World!!が表示されれば成功です。
おめでとうございます!これであなたはこの世から一つレガシーコードを消し去ることができましたよ!
最終的にはこんな感じのファイル構成になります。
まとめ
この記事ではcobol4jを用いてCOBOL→Java変換をする方法を紹介しました~
もっと詳しいことは以下の参考文献にございますgithubで確認していただければ。
今回の例は極めて簡単なものだったので、次回はもっと応用的なことを紹介できたらいいな~と思います。
まぁ、気が向いたらね。
参考文献
opensourcecobol/opensourcecobol4j: A new version of opensourcecobol. Translate COBOL to Java.