この記事について問い合わせる

なぜ今あらためて COBOL なのか?Java と比べて見える COBOL の強み

「COBOL=古い言語」「Java や他言語に置き換えるべき」という印象を持たれがちですが、本当にそうでしょうか。ここでは、長年 COBOL を業務システムで使ってきた立場から、主に Java と比較したときの COBOL の「優位な点」を整理してみます。レガシー刷新やマイグレーションを検討している方の参考になれば幸いです。

高速バッチの COBOL、移植性の Java――設計思想の違い

もともとコンピュータは「読み・書き・そろばん」を高速にこなすための道具として使われてきました。業務システムの世界では、「どれだけ早くバッチを終わらせられるか」が重要視されており、各メーカーが同じ業務プログラム(COBOL)を動かして実行時間を競うような時代もありました。

その結果、各メーカーは COBOL コンパイラの最適化に心血を注ぎ「同じ COBOL ソースを、いかに高速に実行させるか」が長年のテーマだったという歴史があります。この積み重ねにより、現在の COBOL 実行環境は「バッチ処理の実行速度」が極めて高いレベルに達しています。

一方で Java は、「バッチ処理重視」の言語/実行環境として設計されたわけではありません。重要視されたのは、さまざまな環境で同じコードを動かせる「移植性」、GUI アプリケーションや Web アプリケーションなどの汎用性といった面であり、COBOL のように「特定の業務バッチを限界まで高速化する」方向への最適化は、中心ではありませんでした。

そのため、現行の COBOL バッチを Java にそのまま移行すると、「実行時間が 2~3 倍になる」ケースが珍しくなく、夜間バッチなど、処理時間に厳しい制約があるジョブは、そのままでは Java 移行が難しいといった問題が発生します。「バッチが夜間に終わらなくなる」ようでは本末転倒です。

処理時間がビジネスに直結する業務バッチでは、今なお COBOL が非常に強力な選択肢である、という点は押さえておく必要があります。

国際標準としての COBOL と計算精度

COBOL が誕生した背景には、「メーカーごとにバラバラだった業務用言語を統一したい」という強いニーズがありました。そのために各社が集まり、CODASYL という組織を作って、言語仕様を共同で策定したのが COBOL の始まりです。この COBOL 言語仕様は非常に厳密で、たとえば次のような点まで細かく規定されています。

  • 計算精度(結果:最大 18 桁、中間結果:最大 31 桁)
  • JIS や ASA などの規定事項

こうした標準化の恩恵として、「COBOL で書かれたプログラムは、どの国のどの計算機で動かしても、同じ計算結果が得られる」ことが原則として保証されています。一方 Java は、特定ベンダーによる言語仕様・実装が出発点であり、浮動小数点などの扱いも含め、COBOL と比べると厳密さ・一貫性の面で差があります。

事務計算など「桁・端数」の扱いに厳密さが要求される分野では、そのまま単純に Java に移行すると、計算誤差が問題になることがあり、そうした世界では、COBOL の厳密な計算仕様は、今なお非常に大きな安心材料です。

COBOL の「将来性」は本当にないのか?

「COBOL は古いから、いずれなくなる」という声を耳にすることがあります。
しかし、COBOL は誕生から 70 年以上経った今でも現役で使われ続けています。それは単に「古い資産が残っているから」というだけではなく、言語として進化し続けてきたからでもあります。

COBOL には、時代の要請に応じてさまざまな機能が追加されてきました。

  • 当初は存在しなかった計算式(COMPUTE 命令)
  • ビット処理命令
  • 構造化プログラミングのための構文
  • オブジェクト指向の要素(クラス、継承的な考え方)
  • 関数を定義して再利用できる機能 など

そして現在も、CODASYL の流れをくむ標準化団体によって、「これからの COBOL に必要な仕様」を検討し続けています。「新しい=将来性がある」「古い=将来性がない」と単純に決めつけるのではなく、「標準が維持・進化し続けているか」「実運用で使われ続けているか」という観点で見ると、COBOL は今も十分に“現役の言語”だと考えられます。

COBOLの読みやすさが支える、長く使えるシステムの保守性

業務システムのプログラムは、一度作って終わりではありません。

機能追加、実行環境の変化への対応、バグ修正(Bug 対応)、法改正・制度変更への追従といった理由で、何年にもわたって改修・拡張が行われます。そして、改修する人は往々にして「最初の作成者とは別の人」です。そのときに重要になるのが、プログラムの「可読性」や「可視性」です。

COBOL は、もともと「英語に近い形で処理内容を記述する」という思想で設計されており、記述としてはやや冗長に見える部分もあります。ただし、この冗長さこそが、長期運用時の読みやすさ、仕様を追いかけやすさ、人が変わっても理解しやすいことにつながっており、大規模な業務システムのライフサイクル全体を考えると、非常に重要な性質です。

一方、Java は「開発効率」や「柔軟性」に重きを置いて発展してきた言語であり、書き方次第では極めてコンパクトかつ抽象度の高いコードを書くことができます。

その反面、言語仕様として「業務処理を自然言語のように記述する」ことは主目的ではない、フレームワークやライブラリ層で抽象化が重なり、全体像が見えにくくなることも多いといった側面があり、「後から読む人にとってのわかりやすさ」は、チームの設計・コーディング規約・ドキュメント整備に大きく依存します。

長期間にわたって運用される基幹業務システムでは、COBOL の持つ「ドキュメント性の高さ」が、結果的に大きな武器となっているケースが少なくありません。

COBOL を「正しく評価」したうえで選択する

ここまで、主に Java と比較しながら COBOL の強みを、バッチ性能、国際標準・計算精度、将来性(標準の継続的な進化)、ドキュメント性・メンテナンス性という観点から整理しました。

もちろん、Java をはじめとするモダンな言語・プラットフォームにも、豊富なライブラリ・フレームワーク、Web やモバイルとの親和性、開発者人口の多さなど、多くの利点があります。大事なのは、「COBOL は古いからダメ」「Java は新しいから良い」といったイメージだけで判断せず、それぞれの技術の特性を理解したうえで、

  • どの業務には何が向いているのか
  • どこまでを置き換え、どこを残すのか
  • 共存・連携のアーキテクチャをどう設計するか

を検討することだと考えています。レガシー刷新やマイグレーションを検討されている方は、ぜひ一度、COBOL の本来の強みを踏まえて、最適な構成を考えてみてください。

もっとも、ここまで述べてきたように COBOL 自体の強みや将来性を正しく評価したとしても、現実問題として「COBOL エンジニアをどう確保するか」という課題は残ります。人財をどう確保するかは、避けて通れない重要なテーマです。

この点についての考え方やアプローチは、こちらの記事に詳しく記載していますので、あわせてご参照ください。
→ 「レガシーから“主役”へ COBOLの現状と未来に求められる人財像」

お問い合わせ

タイトル 必須
お名前 必須
お名前(フリガナ) 必須
メールアドレス 必須
会社名 必須
部署
役職
電話番号 必須
お問い合わせ内容

お預かりした個人情報は、本お問い合わせへの回答および関連するご連絡のために利用いたします。
当社における個人情報の取り扱いの詳細およびお問い合わせ種別ごとの利用目的については、
個人情報の取り扱いについて」をご確認ください。

この記事を書いた人

筆者 BIチーム