COBOL
COBOLは1959年にアメリカ国防省主導の CODASYL 会議で設計されたプログラミング言語です。設計の中心を担ったのは海軍准将にして計算機科学者のグレース・ホッパーさん(Grace Hopper)。「プログラムは英語のように読めるべきだ」というホッパーさんの哲学が、COBOLの英語的な文法に深く刻まれています。誕生から60年以上を経た今も、世界の金融・保険・政府機関の基幹システムを支える現役言語です。
名前の由来
COBOL は COmmon Business-Oriented Language(共通事務処理向け言語)の略です。名前の全ての語に意図が込められています。
- COmmon(共通) — メーカーが違うコンピュータでも同じコードが動くことを目指した
- Business-Oriented(事務処理向け) — 科学技術計算ではなく、金融・給与計算・在庫管理のような事務処理に特化することを明示した
- Language(言語) — プログラマー専用の記号でなく、業務担当者にも読める言語という思想
「Business-Oriented」という言葉が名前に入っている言語は珍しく、当初から「誰のための言語か」を名前で宣言していました。
1959年: COBOLの誕生
1950年代後半、アメリカの大企業と政府機関はコンピュータを導入し始めていましたが、深刻な問題がありました。IBMもUNIVACもHoneywellも、それぞれ独自の言語を使っており、コンピュータを買い替えると業務プログラムを一から書き直す必要があったのです。給与計算・国勢調査・税務処理といった国家規模の業務で、マシン交換のたびにプログラムを廃棄するコストは莫大でした。
1959年5月、アメリカ国防総省が召集した CODASYL(Conference on Data Systems Languages)会議がこの問題に取り組みます。メーカー横断で「どのコンピュータでも動く、事務処理向けの共通言語」を設計するという目的のもと、わずか数ヶ月で初版仕様が完成し、1960年に最初のコンパイラが動きました。
グレース・ホッパーさんの役割
COBOLの設計で中心的な役割を果たしたのがグレース・ホッパーさん(Grace Murray Hopper、1906〜1992)です。ホッパーさんはハーバード大学で数学の博士号を取得し、第二次世界大戦中にハーバード Mark I コンピュータのプログラミングを担当。戦後も海軍に残り、最終的に海軍准将(Rear Admiral)の階級まで昇進した人物です。
ホッパーさんは「プログラムは英語のように読めるべきだ」という信念を持っていました。記号の塊ではなく、経理担当者や管理職が読んでも意味が追える文章のようなコードを目指すことで、業務知識を持つ人とエンジニアの橋渡しができると考えたのです。
| ホッパーさんの哲学 | COBOLへの反映 |
|---|---|
| 英語で読めるコード | ADD 5 TO WS-TOTAL. のように英語の命令文に近い文法 |
| 業務担当者でも読める | 変数名に意味のある長い名前(CUSTOMER-ACCOUNT-BALANCE 等)を推奨 |
| プラットフォーム独立 | どのコンピュータでも同じコードが動く移植性 |
| 正確な計算 | 事務処理で致命的になる浮動小数点誤差を回避する10進数型(PACKED-DECIMAL) |
「バグ」という言葉の起源
「バグ(bug)」という言葉がコンピュータ用語として定着したのもホッパーさんのエピソードに由来します。1947年、ハーバード Mark II のリレーに挟まった蛾を発見した際、ホッパーさんがログブックに実際の虫を貼り付けて「First actual case of bug being found」と記録したのです。この記録はスミソニアン博物館に保存されています。
COBOLの系譜
主要マイルストーン
| 年 | 出来事 |
|---|---|
| 1947 | グレース・ホッパーさんが Mark II のリレーに挟まった蛾を発見。「バグ」という言葉がコンピュータ用語として広まるきっかけになる |
| 1955年 | ホッパーさんが FLOW-MATIC を設計。英語に近い構文でデータ処理を記述する最初の言語のひとつ。COBOLの直接の前身 |
| 1959年 | アメリカ国防総省が CODASYL 会議を召集。IBMやUNIVACなどメーカー横断で共通事務処理言語を設計する取り組みが始まる |
| 1960年 | COBOL の最初のコンパイラが動作。RCA 501 と UNIVAC II で同じプログラムが動くことを実証(移植性の証明) |
| 1968年 | ANSI が COBOL を標準化(COBOL-68)。標準化によって移植性がさらに強化される |
| 1974年 | COBOL-74 改訂。ファイル処理・テーブル処理の機能が強化される |
| 1985年 | COBOL-85 改訂。構造化プログラミング構文(PERFORM VARYING等)が強化。Cなど後発言語の設計を一部取り込む |
| 2002年 | COBOL 2002 改訂。オブジェクト指向プログラミングの機能が追加(クラス・メソッド・継承) |
| 2014年 | COBOL 2014 改訂。XML 処理の組み込みサポートを追加 |
| 2023年 | COBOL 2023 改訂。JSON サポートの強化・モダン化が継続 |
| 現在 | 世界の主要銀行・証券・保険・政府機関の基幹システムで現役稼働中。毎年新たな COBOL プログラマーの需要が報告されている |
同時代の比較 — なぜ COBOLが選ばれたか
| 言語/方式 | 時代 | 特徴 | COBOLとの違い |
|---|---|---|---|
| アセンブリ | 1940〜50年代 | マシン固有。高速だが可搬性なし | COBOLは可搬性・可読性を優先。速度よりも正確さと保守性 |
| FLOW-MATIC | 1955年〜 | ホッパーさん設計の英語的言語の先駆け | COBOLの直接の前身。複数言語の知見をまとめたのがCOBOL |
| FORTRAN | 1957年〜 | 科学技術計算向け。数値演算に強い | COBOLは事務処理向け。帳票出力・ファイル処理・文字列処理に強い |
| COBOL | 1959年〜 | 事務処理向け共通言語。英語的文法・10進数演算 | 金融・保険・政府の基幹システムで60年以上の実績 |
現代の使われ方
COBOLは「過去の遺物」と語られることがありますが、現実は異なります。
- 世界の主要な銀行・証券・保険の基幹システムで稼働中
- 世界のクレジットカード取引・ATM取引の多くがCOBOLで処理されているとの調査がある(数字は調査会社によって幅があるが、規模が大きいことは一貫している)
- アメリカの社会保障局(Social Security Administration)・国税庁(IRS)・各州政府の業務システムで現役
- 2020年代に入っても、毎年COBOLプログラマーの求人が増加しているという報告がある
COBOLが残り続けている主な理由は3つあります。第一に正確な10進数演算で、浮動小数点の誤差が致命的になる金融計算では、COBOLのPACKED-DECIMAL型が今もリスクが少ない選択です。第二に強固な後方互換性で、1970年代のコードが現代のIBM z/OS上でそのまま動きます。第三に移行コストで、数千万行規模の基幹システムを他言語に書き換えるプロジェクトは数年単位・数百億円規模になることがあり、現実的な選択肢になりにくいのです。
よくある誤解
「COBOLはもう使われていない」
現役で稼働しているCOBOLシステムは世界に大量に存在しています。問題は「新規開発でCOBOLを選ぶか」ではなく、「既存のCOBOLシステムを誰がメンテするか」です。ベテランCOBOLプログラマーの引退に伴う後継者不足が業界の課題として毎年報告されています。
「COBOLは遅い」
IBM z/OS上のエンタープライズCOBOLは、最新のコンパイラ最適化により高速に動作します。メインフレームのハードウェア自体も特化した処理能力を持っています。「COBOL=遅い」は先入観です。
「COBOLは古すぎて学ぶ意味がない」
金融・保険・政府系のシステム開発・保守の仕事では、COBOLの読み書きができるエンジニアの需要があります。2020年代のパンデミック対応でアメリカ各州の失業給付システムが処理限界を迎えた際、COBOLエンジニアの緊急招集が報道されました。
関連用語
- IDENTIFICATION DIVISION — プログラムの識別情報を記述するDIVISION
- DATA DIVISION — データ(変数)の定義を行うDIVISION
- PROCEDURE DIVISION — 実際の処理を記述するDIVISION
- COBOL辞典 入口ページ — DIVISION構造・10進数演算・学習ロードマップ