2025.09.29
昨今、フロントエンドからバックエンドまで多くのシステムが Java で開発されています。Java の特長は、オブジェクト指向言語として汎用性や拡張性が高く、AI 開発を含む豊富なフレームワークやライブラリが提供されている点ではないでしょうか。
一方、長年、皆様のビジネスを支え続けている多くの基幹システムは、COBOL で開発されています。COBOL の特長は、手続き型言語として言語仕様が国際標準化されており、安定性と信頼性が高く、四則演算や大量データの処理に適しており、実行環境に最適化されたモジュールは高速な処理が行えるといった点です。
さて、皆様がお持ちの COBOL で開発された基幹システム、長年安定して稼働しているものの問題が全くない、というわけではありません。例えば、COBOL に限らず、Java をはじめ、どのような言語でも起こりえるシステム開発終了後の保守時に問題となる「仕様のブラックボックス化」があげられますが、このような問題を解決するため、Java へのリライトをご検討された方もいらっしゃるかもしれません。
しかし、リライトは「COBOLとモダナイゼーション」の記事でご紹介しているように、保守、性能、品質においてリスクが高い手法です。最近では、生成 AI を活用した自動変換も行われていますが、その品質は自動変換の域を抜け出せておらず、「手続き型言語をオブジェクト指向言語に自動変換する? 」でご紹介しているような落とし穴があります。生成 AI が高品質なアウトプットを生成するための条件である”大量の業務や特長に沿ったプログラムのインプット”を満たせないためです。
では、将来に向けて、COBOL システムをどうすればよいのでしょうか。COBOL 言語自体が目新しい技術をサポートしない限り、現状維持しか選択肢はないのでしょうか。もしくは Java の優位性だけに着目して、リスクを抱えつつリライトすることが良いのでしょうか。
実は、両言語の特長を活かすことができる手法として、弊社製品を用いたモダナイゼーションがあります。このような複数言語の特長を活かすメリットについては、「プログラミング言語の特性を活かした DX」をご参考になさってください。
弊社製品を用いたモダナイゼーションであれば、短期間、低リスクに以下のような運用を実現できます。
・既存 Java システムから既存の COBOL 資産を利用する
・既存 COBOL システムから Java で開発されたシステム・サービスを利用する
・既存 COBOL システムで Java のプログラムを実行する
それぞれの導入例と、これらを実現する製品機能についてご紹介します。
こちらは、すでに稼働中の Java システム側から COBOL システムが持つデータやロジックをご利用いただける方法で、4つの構成から選択できます。
・関連コラム:RESTful Web サービスやJCA連携を用いたCOBOL資産の活用
現在、多くのサイトの Web サービスは 、業界標準のインターフェイスであるREST API として提供されています。弊社製品機能を用いることで、現在お持ちの COBOL ロジックを、RESTful Web サービスとして運用できるようになります。サービス運用に必要となるサーバー機能や通信機能は、弊社製品に付属しており、アプリケーションとして新たな開発は必要ないため、サービスの作成から開発、テストと登録までを Eclipse や Visual Studio といった統合開発環境 (IDE) で完結できます。
・関連コラム:RESTful Web サービスやJCA連携を用いたCOBOL資産の活用
こちらも、既存の Java システムと COBOL ロジックが実行される COBOL 専用のアプリケーションサーバーが連携する構成となりますが、連携手順は Java EE 仕様の一部である JCA 仕様に基づきます。
さきほどの Web サービス運用と構成は似ていますが、こちらは Java, COBOL 間にまたがる分散トランザクションを実現したい場合にもご利用いただけます。
・関連コラム:COBOLとJava、.NETとの連携
これまでの構成では、COBOL アプリケーションは既存 Java システム上ではなく、弊社製品に付属する COBOL 専用のアプリケーションサーバー上で動作するものでした。一方、こちらは、これまでの構成と異なり、既存の Java システム上で COBOL アプリケーションを実行する構成となります。弊社製品はコンパイラ指令 JVMGEN をコンパイル時に指定することで、COBOL プログラムから Java バイトコードを生成します。生成された Java バイトコードを弊社製品のランタイムとともに利用することで、COBOL プログラムを他の Java クラスと同じように呼びだすことができ、 Java として実行できます。このため、ご紹介しているような Java アプリケーションサーバーや、Java バッチアプリケーション上の Java 仮想マシン上において、COBOL が Java として実行できるようになります。
なお、Java アプリケーションサーバーは、一般的にマルチスレッドで動作しますが、多くの COBOL プログラムはマルチスレッドでの動作を考慮していません。この結果、いわゆるスレッドアンセーフの状態となってしまうのですが、弊社製品には、この問題を容易に解決する RunUnit というクラスを弊社製品提供のランタイムから提供しています。
さきほどの JVM COBOL では、COBOL プログラムは Java として実行されますが、こちらは Java から呼び出される COBOL ロジックは従来同様、ネイティブモジュールとなります。 Runtime.exec(“./COBOLPG”) のような起動方法では、実行時に引数としてパラメータを渡しますが、本機能では LINKAGE SECTION 項目を利用したパラメータの受け渡しや、COBOLロジックの実行結果をパラメータとして Java 側で受け取ることもできるため、シームレスに COBOL プログラムを呼び出すことができます。
こちらは、COBOL システムから、すでに稼働中のJava システムやサービスをご利用いただける方法で、2つの構成から選択できます。
こちらは、COBOL 側でクライアントプログラムを用意したうえで、 Java で開発された REST API を利用します。COBOL でクライアントプログラムを作るのは大変そう、と思われた方もいらっしゃるかもしれませんが、ご心配はいりません。Java やその他の言語においても、クライアントプログラムをスクラッチ開発することはなく、連携先となるサービスのインターフェイス定義をもとにクライアントプログラムを自動生成することが一般的です。そして、この方法が COBOL でもご利用いただけます。
こちらは、すでに Java で REST API などを立ち上げており、開発済みの Java クライアントプログラムを利用して、COBOL プログラムとのデータの受渡しが行える方法です。そのため、 短期間でサービス連携を実現できます。
こちらは、小規模な Java のプログラムを既存の COBOL システムからご利用いただける方法です。
さきほどの[COBOL から Java のクライアントを介して利用]と同様になりますが、COBOL プログラムから Java プログラムを呼び出します。呼び出された Java プログラムが他サーバーへのサービスへのアクセス有無が異なります。既にお持ちの Java 資産が持つ機能をそのまま COBOL と連携して利用できるのが特長です。
近年、DX をはじめとした IT システム変革の必要性が大きく叫ばれていますが、その目的は長く稼働したシステムを破棄して新規開発することではなく、ビジネス環境や新技術への対応を迅速に行えるシステムへの変革です。既存資産を活かした安定性を保持しつつ、Java 技術との連携を短期間に行える弊社製品を用いたモダナイゼーションは、まさにこの目的に合致する有効なソリューションです。
ロケットソフトウェアのCOBOL製品は、エンタープライズ・アプリケーションの開発、保守、拡張、統合を強力に支援しています。貴重な既存資産を、Java、.NET、Webサービスなどの最新テクノロジーと連携させ、低コスト低リスクで、ビジネスの変化に迅速に対応するシステム構築を支援します。
既存の COBOL 資産を Java 技術と連携させ、アプリケーション価値の向上を検討されている SE・プログラマの方々が対象のセミナーです。マイクロフォーカス製品を活用してCOBOL 資産を Web サービス化、JCA 連携アプリケーション化、JVM クラス化する技術をデモンストレーションを中心に紹介いたします。
Visual COBOL – COBOL 開発機能概要紹介