COBOLをJavaに変換してみよう!~初級編~
2022-10-12
azblob://2022/11/11/eyecatch/2022-10-12-cobol-to-java-migration-beginner-000.jpg

こんにちは!レイチェルです。記事を書くのは半年ぶりですが、やっていきましょう!

昨今、レガシーシステムをモダンなシステムに置き換える動きが盛んになっております。その一環として、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.

https://github.com/opensourcecobol/opensourcecobol4j