COBOL に Bing AIで挑む
全銀ネットで話題の COBOL を Bing AI を使って、Python に翻訳できるかやってみました。
COBOL については良く知らないので以下の Qiita の記事を参考にしています。
ちなみに小数の丸め誤差やバッチ処理が得意とかもあるようなので、 COBOL はダメだとか言える程良く知らないです。
単なる好奇心です。
<質問>
以下のCOBOLのコードをPythonに翻訳してください。
*---1---------2---------3---------4---------5
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE.
*
ENVIRONMENT DIVISION.
*
DATA DIVISION.
WORKING-STORAGE SECTION.
01 STR PIC X(5)
VALUE 'WORLD'.
*
PROCEDURE DIVISION.
MAIN SECTION.
MAIN-S.
DISPLAY "HELLO " STR.
MAIN-E.
STOP RUN.
<AIの回答>
以下のCOBOLのコードをPythonに翻訳すると、次のようになります。
print("HELLO WORLD")
<以下の文言は、全ての回答に入るので以下は[いつもの文言]と記載します。>
COBOLとPythonは、文法や構造が大きく異なるため、翻訳することは容易ではありません。ただし、このCOBOLコードは非常にシンプルであるため、Pythonに翻訳することができます。上記のPythonコードは、COBOLコードと同じ出力を生成します。
できました。計算はどうでしょうか。
<質問>
以下のCOBOLのコードをPythonに翻訳してください。
*---1---------2---------3---------4---------5
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE.
*
ENVIRONMENT DIVISION.
*
DATA DIVISION.
WORKING-STORAGE SECTION.
01 RESULT PIC 9(02).
01 IN-NUM PIC 9(01)
VALUE 9.
*
PROCEDURE DIVISION.
MAIN SECTION.
MAIN-S.
*--ケイサン
COMPUTE RESULT = IN-NUM + 1.
*--シュツリョク
DISPLAY RESULT.
MAIN-E.
STOP RUN.
<AIの回答>
以下のCOBOLのコードをPythonに翻訳すると、次のようになります。
RESULT = 9 + 1
print(RESULT)
[いつもの文言]
まだ行けそうです。分岐処理はどうでしょうか。
<質問>
以下のCOBOLのコードをPythonに翻訳してください。
*---1---------2---------3---------4---------5
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE.
*
ENVIRONMENT DIVISION.
*
DATA DIVISION.
WORKING-STORAGE SECTION.
01 CNST PIC 9(01)
VALUE 1.
*
PROCEDURE DIVISION.
MAIN SECTION.
MAIN-S.
EVALUATE CNST
WHEN 1
DISPLAY 'HOGE'
WHEN 2
DISPLAY 'FOO'
WHEN OTHER
DISPLAY 'BAR'
END-EVALUATE.
MAIN-E.
STOP RUN.
<AIの回答>
以下のCOBOLのコードをPythonに翻訳すると、次のようになります。
CNST = 1
if CNST == 1:
print('HOGE')
elif CNST == 2:
print('FOO')
else:
print('BAR')
[いつもの文言]
では関数は?
<質問>
以下のCOBOLのコードをPythonに翻訳してください。
*---1---------2---------3---------4---------5
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE.
*
ENVIRONMENT DIVISION.
*
DATA DIVISION.
WORKING-STORAGE SECTION.
*
PROCEDURE DIVISION.
*--メインセクション
MAIN SECTION.
MAIN-S.
PERFORM SUB.
MAIN-E.
STOP RUN.
*--サブセクション
SUB SECTION.
SUB-S.
DISPLAY 'HELLO WORLD'.
SUB-E.
EXIT.
<AIの回答>
以下のCOBOLのコードをPythonに翻訳すると、次のようになります。
def SUB():
print('HELLO WORLD')
SUB()
[いつもの文言]
関数もできましたね。では最後にループ処理をみてみます。
<質問>
以下のCOBOLのコードをPythonに翻訳してください。
*---1---------2---------3---------4---------5
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE.
*
ENVIRONMENT DIVISION.
*
DATA DIVISION.
WORKING-STORAGE SECTION.
01 CNT PIC 9(02)
VALUE 0.
*
PROCEDURE DIVISION.
*--メインセクション
MAIN SECTION.
MAIN-S.
DISPLAY CNT.
*--キホウ1ノループ
PERFORM SUB
UNTIL CNT = 10.
DISPLAY CNT.
*--キホウ2ノループ
PERFORM
UNTIL CNT = 20
COMPUTE CNT = CNT + 1
END-PERFORM.
DISPLAY CNT.
MAIN-E.
STOP RUN.
*--サブセクション
SUB SECTION.
SUB-S.
COMPUTE CNT = CNT + 1.
SUB-E.
EXIT.
<AIの回答>
以下のCOBOLのコードをPythonに翻訳すると、次のようになります。
CNT = 0
print(CNT)
while CNT < 10:
CNT += 1
print(CNT)
CNT = 0
while CNT < 20:
CNT += 1
print(CNT)
[いつもの文言]
基本的なものであれば、無料の Bing AI でもそこそこ翻訳できそうですね。
ただ本当に知らない人だと回答が間違っていても気づけないので、使っている間は技術者が必要になるかなと思いました。
今後のことを考えると移行の大変さはあると思いますが、技術者がいなくなる可能性もあるので移行を検討してもいいのかなと思いました。(もう始めてるのかもしれませんが。)