生成AIを使ってCOBOLを解読できる!Javaに変換する方法を解説

COBOLと聞くと、多くのプログラマーの方は眉をひそめるかもしれません。しかし、この半世紀以上も前から存在する言語は、今なお銀行から医療機関、政府まで、日々の業務を支え続けています。

問題は、このような極めて重要なシステムを構築している言語があまり知られていないことです。そのため、COBOLを利用できる開発者が少なく開発リソースで問題が発生しています。この問題の解決に、生成AIは非常に効果的です!

本記事では、生成AIツールの活用方法について解説します。COBOLの開発を効率的かつ安全に進めるための実践的な知識を伝授しますので、是非最後までご覧ください!

目次

COBOLとは?

COBOL(Common Business Oriented Language)は、事務処理に特化したプログラミング言語として、1959年にアメリカで誕生しました。この言語はその名の通り「ビジネス指向」の言語として設計され、特に大規模なデータ処理やファイル操作を得意とします。

COBOLの最大の特徴は、その非常に人間に近い自然言語に似た構文です。このため、プログラムの読み書きが比較的容易で、専門知識がない非技術者でもコードの内容を理解しやすいです。例えば、データの加算やファイルの読み込みなどの操作も、英語の文として記述することができます。また、この特徴は生成AIによる解析・生成に有利になります。

ここで、COBOLの歴史について少し触れると、1960年代から1970年代にかけて、金融機関、政府機関、保険会社など、多くの企業や組織で採用されました。その理由は、COBOLが大規模なトランザクション処理やバッチ処理に適していたためです。その結果、多くの重要なシステムやアプリケーションがCOBOLで書かれ、今日に至るまで稼働しているものも少なくありません

誕生が1959年と古いため、COBOLは古い言語と見なされることが多いですが、前述したように未だ多くの企業や組織の重要なシステムを構築しているため、その影響力や重要性は依然として高いです。ただ、近年ではオブジェクト指向プログラミングなどが主流になってきたため、システムの新規開発でCOBOLは使われなくなっていきました。また、多くの組織や企業が、COBOLを基盤としたシステムの近代化や移行を検討しており、近年急速に発展してきたAIとの組み合わせで、それを実現しようという試みが行われています。

この後は、COBOLが使われなくなった詳しい原因と、実際に生成AIを使ってCOBOLを解読する方法を紹介します!

なお、生成AIについて知りたい方はこちらをご覧ください。
生成AIとは何か?仕組みやできることをAI専門家がわかりやすく解説

COBOLはなぜ使われなくなった?

COBOL(Common Business Oriented Language)は、ビジネス処理に特化したプログラミング言語であり、過去には数々の基幹システムで広く用いられました。しかし、現代においてはその使用頻度が減少しています。

ここでは、その背景と要因について次のことを解説します。

  • 技術の進化と適用範囲の限定
  • 開発リソースの問題
  • 新規開発の減少

一つずつ見ていきましょう。

技術の進化と適用範囲の限定

COBOLが得意とするのは、大規模なデータ処理と事務処理です。しかし、Web技術の進展やスマートフォンの普及に伴い、開発の主流が移り変わりました

Webアプリやスマホアプリ、人工知能(AI)やデータ解析など、多岐にわたる新たなニーズが生まれています。COBOLはこれらのトレンドに対応しきれていないのです。

開発リソースの問題

COBOLの開発リソースについても問題があります。この言語に習熟したエンジニアが減少しており、それがCOBOLシステムの運用・保守費用を増大させています。

とくに、メインフレームと呼ばれる大型のコンピューターではCOBOLが多く用いられているため、さらに維持費がかさみ企業にとって大きな負担になっています。

新規開発の減少

新しいプロジェクトでCOBOLが選ばれるケースは減少しています。現代の開発環境では、より効率的多機能なプログラムを容易に作成できるプログラム言語が多く登場しているからです。たとえば、PythonやJavaはAI開発からWebサービスまで、多くの用途で活躍しています。

生成AIを使ってCOBOLをJavaに変換する方法

ここでは、「watsonx Code Assistant for Z」と「ChatGPT」などの生成AIを使ってCOBOLをJavaに変換する方法を解説します。

watsonx Code Assistant for Z

watsonx Code Assistant for Zは、企業がメインフレーム・アプリケーションのモダナイゼーションを迅速に進めるための生成AIツールです。このツールは特にCOBOLに対して高度な解析と変換機能を提供し、加えてIBM Zの堅牢なパフォーマンスとセキュリティを維持してくれます。

生成AIをCOBOLコードのモダナイゼーションに応用することで、複雑なロジックもJavaなどの現代言語に短時間で容易に変換できます。

このツールは大規模なCOBOLコードベースを効率よく解析し、開発者の手間を減らすだけでなく、コード品質も向上してくれます。生成AIの力を活用して、適切に設計されたJavaコードへの変換が容易になり、結果として開発サイクルが高速化します。

watsonx Code Assistant for Zを使用してCOBOLを解読する手順は以下のとおりです。

  1. 環境の準備:watsonx Code Assistant for Zがサポートするプラットフォーム(通常はIBM Z)にアクセスできるように環境を整えます。
  2. ツールのインストール:公式ウェブサイトやパッケージマネージャを用いて、watsonx Code Assistant for Zをインストールします。
  3. COBOLコードの読み込み:ツールにCOBOLコードを読み込むための手順を実施します。多くの場合、コードベースへのパスを指定するだけで読み込み可能です。
  4. 解析開始:watsonx Code Assistant for Zのインターフェースで「解析開始」などの命令を実行します。これにより、COBOLコードの構文とロジックが解析されます。
  5. 生成AIの活用:生成AI機能を用いて、COBOLコードを他のプログラミング言語(例:Java)に変換するオプションが提供されます。必要に応じて変換処理を行います。
  6. 結果の確認:変換後のコードや、COBOLコード内の特定の機能やロジックに関する解説が出力されます。必要に応じて修正や調整を行います。
  7. テストとデバッグ:変換したコードが期待通りに動作するか確認するためにテストを実施します。問題があれば、デバッグ機能を用いて修正します。

ChatGPT

ChatGPTを使って、COBOLをJavaに変換することも可能です。

ここでは、COBOLのサンプルコードを入力して、それを解読してもらいました。
以下がその結果です。

尚、今回使用したサンプルコードはIBM社が提供しているデータベースのエラーチェックを行うサンプルコードです。

サンプルコード

***********************************************************************
      ** (c) Copyright IBM Corp. 2007 All rights reserved.
      ** 
      ** The following sample of source code ("Sample") is owned by International 
      ** Business Machines Corporation or one of its subsidiaries ("IBM") and is 
      ** copyrighted and licensed, not sold. You may use, copy, modify, and 
      ** distribute the Sample in any form without payment to IBM, for the purpose of 
      ** assisting you in the development of your applications.
      ** 
      ** The Sample code is provided to you on an "AS IS" basis, without warranty of 
      ** any kind. IBM HEREBY EXPRESSLY DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR 
      ** IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
      ** MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. Some jurisdictions do 
      ** not allow for the exclusion or limitation of implied warranties, so the above 
      ** limitations or exclusions may not apply to you. IBM shall not be liable for 
      ** any damages you suffer as a result of using, copying, modifying or 
      ** distributing the Sample, even if IBM has been advised of the possibility of 
      ** such damages.
      ***********************************************************************
      **
      ** SOURCE FILE NAME: checkerr.cbl 
      **
      ** SAMPLE: Checks for and prints to the screen SQL warnings and errors 
      **
      **         This utility file is compiled and linked in as an object
      **         module with COBOL sample programs by the supplied 
      **         makefile.
      ** 
      ** DB2 APIs USED:
      **         sqlggstt -- GET SQLSTATE MESSAGE
      **         sqlgintp -- GET ERROR MESSAGE
      **
      **               None 
      ***********************************************************************
      **
      ** For more information on the sample programs, see the README file. 
      **
      ** For information on developing embedded SQL applications see the Developing Embedded SQL Applications book.
      **
      ** For information on DB2 APIs, see the Administrative API Reference.
      **
      ** For the latest information on programming, compiling, and running
      ** DB2 applications, visit the DB2 Information Center: 
      **     http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp
      ***********************************************************************
       Identification Division.
       Program-ID. "checkerr".
       Data Division.
       Working-Storage Section.
       copy "sql.cbl".
      * Local variables
       77 error-rc        pic s9(9) comp-5.
       77 state-rc        pic s9(9) comp-5.
      * Variables for the GET ERROR MESSAGE API
      * Use application specific bound instead of BUFFER-SZ
      * 77 buffer-size     pic s9(4) comp-5 value BUFFER-SZ.
      * 77 error-buffer    pic x(BUFFER-SZ).
      * 77 state-buffer    pic x(BUFFER-SZ).
       77 buffer-size     pic s9(4) comp-5 value 1024.
       77 line-width      pic s9(4) comp-5 value 80.
       77 error-buffer    pic x(1024).
       77 state-buffer    pic x(1024).
       Linkage Section.
       copy "sqlca.cbl" replacing ==VALUE "SQLCA   "== by == ==
                                  ==VALUE 136==        by == ==.
       01 errloc          pic x(80).
       Procedure Division using sqlca errloc.
       Checkerr Section.
           if SQLCODE equal 0
              go to End-Checkerr.
           display "--- error report ---".
           display "ERROR occurred : ", errloc.
           display "SQLCODE : ", SQLCODE.
      ********************************
      * GET ERROR MESSAGE API called *
      ********************************
           call "sqlgintp" using
                                 by value     buffer-size
                                 by value     line-width
                                 by reference sqlca
                                 by reference error-buffer
                           returning error-rc.
      ************************
      * GET SQLSTATE MESSAGE *
      ************************
           call "sqlggstt" using
                                 by value     buffer-size
                                 by value     line-width
                                 by reference sqlstate
                                 by reference state-buffer
                           returning state-rc.
           if error-rc is greater than 0
              display error-buffer.
           if state-rc is greater than 0
              display state-buffer.
           if state-rc is less than 0
              display "return code from GET SQLSTATE =" state-rc.
           if SQLCODE is less than 0
              display "--- end error report ---"
              go to End-Prog.
           display "--- end error report ---"
           display "CONTINUING PROGRAM WITH WARNINGS!".
       End-Checkerr. exit program.
       End-Prog. stop run.

出力結果

どのような事をするためのコードで、上から4つに区切ってその内容と機能を簡潔に教えてくれました。

また、このCOBOLコードをPythonに変換させてみました。

すると、以下のようなPythonコードに変換してくれました。

ちゃんとCOBOLサンプルコードのロジックを基に作成されていて、改めてChatGPTの凄さを実感しました。

なお、生成AIを活用したノーコード開発について知りたい方はこちらをご覧ください。
【生成AI×ノーコード】AI時代のノーコード開発をAIエンジニアが解説

まとめ

COBOLの解読において、生成AIツールが果たす役割は日々高まっています。「watsonx Code Assistant for Z」や「ChatGPT」などは、COBOLの古いコードベースを効率よく解析し、新しいプログラム言語への変換を容易にしてくれます。

本記事で強調したいのは、生成AIの適切な活用です。単なるコード変換だけでなく、記事で示したように生成AIは開発者が賢明な設計決定を行うための洞察も提供してくれます。

最終的に、生成AIとCOBOLの結びつきは、過去の遺産を未来の機会へと変える鍵です。だからこそ、このテクノロジーを理解し、戦略的に活用することが重要です。生成AIの価値とその適用範囲を明確に理解することで、より効率的な業務が可能となります。

サービス紹介資料

生成系AIの業務活用なら!

・生成系AIを活用したPoC開発

・生成系AIのコンサルティング

・システム間API連携

最後に

いかがだったでしょうか?

弊社では

・マーケティングやエンジニアリングなどの専門知識を学習させたAI社員の開発
・要件定義・業務フロー作成を80%自動化できる自律型AIエージェントの開発
・生成AIとRPAを組み合わせた業務自動化ツールの開発
・社内人事業務を99%自動化できるAIツールの開発
ハルシネーション対策AIツールの開発
自社専用のAIチャットボットの開発

などの開発実績がございます。

まずは、「無料相談」にてご相談を承っておりますので、ご興味がある方はぜひご連絡ください。

➡︎生成AIを使った業務効率化、生成AIツールの開発について相談をしてみる。

生成AIを社内で活用していきたい方へ
無料相談

「生成AIを社内で活用したい」「生成AIの事業をやっていきたい」という方に向けて、生成AI社内セミナー・勉強会をさせていただいております。

セミナー内容や料金については、ご相談ください。

また、サービス紹介資料もご用意しておりますので、併せてご確認ください。

投稿者

  • Hiromi Sai

    ChatGPTメディア運営 / テクニカルライター リベラルアーツ専攻。大学休学中は、Webマーケティング会社のマネージャーとしてライター、ディレクター100名のマネジメントをする。南米のチリとタイでの長期居住歴を持つ。

  • URLをコピーしました!
  • URLをコピーしました!
目次