【第1回】COBOLの来し方

SCROLL DOWN

リストへ戻る

半世紀を超える COBOLの歴史はデータ処理の歴史そのものと言っても過言ではありません。本稿では登場から現在に至るまでCOBOLがどのように活用されてきたかの歴史をたどってゆきます。

COBOLの来し方

マイクロフォーカスで仕事をしていると、業務上お客様の COBOLコードを拝見する機会が多くあります。ご存知の方は頷かれると思いますが、COBOLのソースコードには往々にして克明なコメントが記されていて、いつだれがどんな目的でコードを改修したかが記載されています。そんな中でコメントの日付が昭和であることは珍しくありません。

 

筆者の手元に US-STEELという名称の著名な COBOLベンチマークプログラムがありますが、そのソース先頭のコメントには

 

DATE-WRITTEN. 65/04/05.

 

と書かれています。1965年に IBM System/360 という歴史的な名機をターゲットとして書かれたものですが、このプログラムを今でもそのまま手元の Windows PC上でコンパイルして実行することができます。

 

 

COBOLが稼働していた IBM System/360

 

50年以上前にこの COBOLプログラムが稼働していたコンピューターが現在も稼働しているはずはありませんから、そういったコードはおそらく何度もコンピューターを乗り替わってきているはずです。メインフレーム、ミニコン、オフコン、MS-DOS、Windows、OS/2、UNIX、Linux と COBOL処理系は時代を象徴するコンピュータープラットフォームの上で常に稼働しており、一度書かれたプログラムは時代を経ても捨て去られることなく活用され続けてきました。

本稿では COBOLのたどってきた歴史を、その使われ方の側面から見てゆきたいと思います。

 

 

COBOLの誕生

COBOL誕生時の歴史については様々な文献で多くが語られていますので、ここでは簡単にご紹介するにとどめます。

 

ほとんどのプログラミング言語はある特定のメーカーが独自の戦略のもとに開発して製品化されます。C言語はベル研が、Javaはサンマイクロシステムズが、C#はマイクロソフトが開発したものです。これに対して COBOLはコンピューターメーカーと企業ユーザーとが知恵を出し合ってみんなで言語仕様を決め、その決まった仕様に基づいて各社が製品化したものなのです。

1950年代、まだインターネットもマルチメディアもない時代にコンピューターのする仕事と言えば、ミサイルの弾道計算のような科学技術用途と、給与計算のような事務処理用途が代表的なものでした。前者の目的でプログラミングする人は数式の処理が専門ですので FORTRANのような数式処理的な言語に慣れ親しみました。しかし後者が目的の人の専門は事務処理の業務であって、数式処理を専門にしているわけではありません。UNIVACの開発チームにいたグレース・ホッパーは、この乖離による事務処理プログラマーの不満に注目しました。ホッパーは後に「COBOLの母」と呼ばれる米国海軍の軍人であり、数学者です。彼女は事務処理プログラマーがやりたいことを英語のキーワードを使用して表現できるようにするべきと考えて、UNIVACに FLOW-MATICという言語を実装しました。1958年のことです。

 

 

グレース・ホッパー

 

当時、事務処理言語は各コンピューターメーカーによって異なっていたため、プログラム資産の移植性がないことが問題となっていました。そこで共通の事務処理言語仕様を策定する目的で CODASYLという委員会が設立されました。COBOL言語仕様は CODASYLによって 1960年に最初に発行されましたが FLOW-MATICはその仕様に大きな影響を与えました。

 

 

COBOLの拡散

コンピューターシステムの発展の歴史をたどってみると、パラダイムシフトが起きる際には大抵はそのための新しいプログラミング言語が登場しています。LISP による人工知能、Smalltalk によるオブジェクト指向、C言語による UNIX、Javaによる JVM、C#による .NET など数多く挙げることができます。ところが COBOLは上記のようなパラダイムシフトにかかわらず、事務処理分野で利用され続けてきています。

 

ここではこれまでに COBOLプログラムが稼働してきた様々なプラットフォームについて振り返ってみましょう。

 

CODASYL による言語仕様が完成すると、その仕様に基づいて各社が COBOL処理系を開発し普及してゆきます。最初は IBMに代表されるメインフレームコンピューター上での利用から始まっていますが、DECの VAXに代表されるミッドレンジコンピューター (ミニコン) でも利用されるようになります。

日本では IBMメインフレームからわずかに遅れて、日立、富士通、NECなど各社がそのメインフレームに COBOLを搭載して普及が始まりました。その後、オフコンと呼ばれる一連の日本固有のミッドレンジコンピューターがほぼもれなく COBOLを搭載するようになります。この当時、CPUと OSはコンピューターメーカーが自前で用意する時代であり、COBOLなどの言語処理系も各メーカーが自製していました。この結果多種多様な COBOLコンパイラが林立する状態となりました。

しかし COBOLは言語の誕生時からメーカーの垣根を超えた言語仕様が策定されており、すべての COBOLコンパイラは若干の方言を持ちながらも仕様に準拠していました。

 

1980年代になると、主に制御系での利用を目的としていたマイクロプロセッサが多目的で利用されるようになり、パーソナルコンピューターが登場します。世界で最初のマイクロプロセッサをターゲットとした COBOLコンパイラは 1976年に英国で創業したマイクロフォーカスによって製品化されました。

これは実はかなり大変なことなのです。1965年に登場した IBM System/360 が既に 32-Bitアーキテクチャのマシンであったのに対して、Intel 8080 に代表される初期のマイクロプロセッサは 8-Bitでした。仮想記憶を活用したとしても利用可能なアドレス空間は今では考えられないほど狭いのです。COBOL のような膨大な言語仕様を 8-Bitアーキテクチャで稼働させるのは、狭いアドレス以外にもいろいろな意味で相当な技術力を必要としたことでしょう。昔のプログラマーたちは本当にツワモノぞろいだったのですね。

 

 

初期のマイクロフォーカスを伝えるプレス記事

 

その後、マイクロフォーカスは実に様々なコンピュータープラットフォームをターゲットとして COBOLを拡散してゆきます。

NEC 9800 に代表される国産パソコンの多くに Micro Focus COBOLは搭載され、オフコンで主流だった業務パッケージの多くが安価なパソコンでも稼働するようになってゆきました。

 

 

COBOLが稼働していたNEC PC9801

 

UNIXをターゲットとした 16-Bitアーキテクチャの COBOL製品は 1984年にリリースしており、これはその後のメインフレームリホストの潮流の出発点になりました。

余り需要がなくすぐにリタイヤしてしまいましたが、初期の Macintosh でも稼働していました。

Java VMをターゲットとした COBOLは 2010年にリリースしており、COBOL言語を Javaにソース変換することなしに直接 Javaバイトコードを生成するコンパイラとしては、今でも世界で唯一の実装となっています。この Java VM向け COBOLを Android上の Java VMに適用して Androidをターゲットにした COBOLも試作されています。

 

 

バッチ処理からオンラインへ

COBOLが登場した時代、コンピューターの処理コストは今よりも桁違いに高価でした。このためコンピューティング資源を効率的に使用する方法として、即時性を要求しないバッチ処理が主流となっていました。日次・週次・月次の在庫・売上管理と言った業務で、日中に発生した業務が記録されたファイルを夜間に順次処理して翌日の業務開始までに、マスター更新・帳票出力などを行っておく形態です。

COBOLは、CODASYLによる仕様策定に際して、こういった処理を記述するための機能をすべて言語の文法としてサポートすることを目標としていました。C言語や Java、.NET などがプログラミング言語の機能を最小化し、周辺機能を豊富なクラスライブラリとして提供しているのとは対照的です。

また、オブジェクト指向の考え方が登場していない時代ですので、複数の属性をパッケージ化した「オブジェクト」に相当するものとして「レコード」の処理を可能としています。例えば給与計算における「従業員」というオブジェクトの設計を考えれば、そこには「従業員番号」「氏名」「性別」「入社年月日」「所属」… と言った属性を与えるでしょう。COBOLではこれを「従業員レコード」というデータ構造で表現します。C言語や PL/I の構造体や、SQLのテーブルを思い浮かべていただければよいですが、さらに COBOLではこのレコードの中のバイト並びまでがはっきりと規定されます。

 

 

「従業員レコード」のイメージ

 

この「レコード」を順に読み書きしたり、索引キーでランダムアクセスしたり、あるキーでソートする機能も言語として規定されています。このため、このような処理を言語規格の範囲内で記述した COBOLプログラムは極めて移植性が高く、他のプラットフォームへの乗り換えが容易です。最初にお話しした昭和に書かれたプログラムが今でも使われているというのは、これが理由なのです。

 

一方、1970年代には即時性が要求されるオンラインリアルタイム処理が実現され始めます。金融機関の本支店間連携やキャッシュディスペンサーの処理、列車や航空機の窓口座席予約などが先駆けとなりました。初期のオンラインシステム構築は、ハードウェアや OSも特注で開発されたそうですが、IBMによる IMS、CICSに代表されるオンライントランザクションのためのミドルウェアが整備され、COBOLによってオンライン業務が記述されるようになります。このような COBOLプログラムは、すべてがCOBOL言語仕様の範囲内で記述できたバッチ処理と異なり、トランザクション処理のミドルウェアに固有の APIを使用しており、この点で移植性の限界が発生しました。IBMの CICS向けに書かれた COBOLプログラムはそのままでは CICS以外の環境上では動作しないのです。

 

 

コンポーネント化から API化へ

1990年台に入り、UNIXサーバーと Windows端末を組み合わせたクライアント・サーバー型の構築が主流になると、UNIXで稼働するトランザクションミドルウェアとして、TUXEDO (現在は Oracle製品) や CICSの UNIX版である IBM TX Seriesなどが SIerによって多用されるようになりました。これらのミドルウェアはほぼすべて COBOL APIを装備していたため、サーバー側トランザクションのビジネスロジックを COBOLで書き、これを Windowsの GUIアプリケーションから呼び出す形式でのCOBOLの利用が広まりました。

Windowsサーバーも COM+ をサーバー側コンポーネント化の基盤として整備し、マイクロフォーカスは、COBOLロジックを COMコンポーネント化する自動化ツールを提供しました。

当然メインフレーム上のトランザクションミドルウェアも、Windowsクライアントからのアクセスを許容していました。そこでメインフレームをサーバーとしたクライアント・サーバー形態もあり、COBOLはサーバー側のビジネスロジックを担当する言語として多用されるようになりました。

メインフレームマイグレーションの際にも、既存のオンラインアプリケーションから COBOLのビジネスロジック部分を抽出して、サーバー側でコンポーネント化して利用する方法は多く見られました。保険料計算のような純粋にビジネスロジックだけの COBOLプログラムであれば高い移植性があります。

 

21世紀になり Webサービスが登場すると、コンポーネント化されたCOBOLプログラムはサービス指向アーキテクチャ (SOA) の疎結合サービスとして、Java、.NETなどのアプリケーションとオーケストレーションされるようになってゆきます。

マイクロフォーカスは 2003年に COBOLプログラムを Webサービスとしてディプロイする、COBOL専用のアプリケーションサーバーを COBOL製品に同梱しました。この機能は同時に Java EE の Connectorとしてのディプロイ手段も用意しており、当時はこちらを使用して Javaとの連携を実現する事例が数多くありました。しかし RESTful Webサービスの普及と、最新の仮想化テクノロジーを駆使したクラウド上の動的負荷分散を実現する疎結合サービス化が現実のものになると、Webサービスでの COBOLの利用が主流になってきました。ここでは、メインフレーム時代にトランザクション処理を記述していた COBOLプログラム内のビジネスロジックが Web APIとして提供され、これを様々なデバイス上のコンシューマアプリから直接呼び出して活用される形態になっています。

 

この間、誕生時以来のバッチ処理での COBOLの利用は連綿と続いており、なくなることはありませんでした。100%オンラインリアルタイムの形態も増えてきてはいますが、いまだにバッチ処理に適した業務は多く残されています。このように現在でも COBOLは、バッチ処理と API化されたサービスのビジネスロジック部分の記述言語として、60年以上前に誕生したときのままの構文で世界のビジネスを支えているのです。

関連情報

セミナー:COBOL言語超入門セミナー

これからCOBOL言語を知ろうとするエンジニア向けの入門セミナーです。プロジェクト管理者、システム管理者、マイグレーションエンジニア等の方々を対象に、COBOL言語を使用するシステム開発のための基礎知識を提供します。

Micro Focus Enterprise Developer

Micro Focus Enterprise Developer は、IBMメインフレームで稼働しているバッチ / オンラインアプリケーションをオープン環境で有効に活用できる製品です。

Micro Focus Visual COBOL

Micro Focus Visual COBOLは、最新版のCOBOL統合開発環境製品です。価値ある既存COBOL資産の最新テクノロジー環境での活用を可能にします。単一のCOBOLソースを多数のプラットフォームに展開することができるため、開発期間の短縮やコスト削減にも貢献します。

SNSでシェアする

  • URLをコピーしました