COBOL
COBOLの最新ニュースをまとめて検索!
| COBOL | |
|---|---|
| パラダイム | 構造化・命令型・オブジェクト指向 |
| 登場時期 | 1959 |
| 開発者 | Grace Hopper, William Selden, Gertrude Tierney, Howard Bromberg, Howard Discount, Vernon Reeves, Jean E. Sammet |
| 最新リリース | COBOL 2002 |
| 型付け | 強い静的型付け |
| 主な処理系 | HP3000 COBOL/II, COBOL/2, IBM OS/VS COBOL, IBM COBOL/II, IBM COBOL SAA, IBM Enterprise COBOL, IBM COBOL/400, IBM ILE COBOL, Unix COBOL X/Open, Micro Focus COBOL, Microsoft COBOL, Ryan McFarland RM/COBOL, Ryan McFarland RM/COBOL-85, DOSVS COBOL, UNIVAC COBOL, Realia COBOL, Fujitsu COBOL, ICL COBOL, ACUCOBOL-GT, DEC VAX COBOL, Wang VS COBOL, Visual COBOL ほか |
| 影響を受けた言語 | FLOW-MATIC, COMTRAN, FACT |
| 影響を与えた言語 | PL/I, CobolScript, ABAP |
| プラットフォーム | z/OS, z/VM, z/VSE, MCP, VOS3, ACOS, GCOS, VMS, OS/400, UNIX, Linux, Windows, Mac OS, CP/M, MS-DOS ほか |
COBOL(コボル、COmmon Business Oriented Language 汎商業目的言語の略)は、事務処理用に開発されたプログラミング言語である。非理系の事務員や役人が使える言語として設定されたため、自然な英語に近い記述になるようなコマンド語彙や文法(シンタックス)になっている。また過去に政府や企業の膨大なデータがCOBOLによって処理され蓄積されているため、現在でもCOBOLによって電算処理されている情報は膨大な数に上る。現在でも稼動しているCOBOLによるコードは2000億行に上るとされており、これはFORTRANとAssemblerをあわせた数10億行に比べても圧倒的に多い。
このように誕生から半世紀たっているにも関わらず、今なお主流言語(2000年の世界の民間企業の8割)として使用されている点で、他の初期の言語とは大きく異なる。
目次 |
[編集] 誕生経緯
1950年代、事務処理言語は開発メーカーごとに異なっていた。その統一の必要性を認識していたアメリカ国防総省によって、事務処理用の共通言語の開発が提案され、CODASYL(Conference on Data Systems Languages、データシステムズ言語協議会)が設立された。そういった背景の下、1959年にCODASYLによって開発された共通事務処理用言語がCOBOLである。
COBOLの開発により、アメリカ政府の事務処理システムは全てCOBOLのみで納品されることとなった。これに伴い、COBOLは事務処理用言語として世界中に普及することになる。
COBOLより先に誕生したFORTRANが主に科学技術計算用であるのに対して、その後ほぼ同時期に誕生したCOBOLは大量のデータを処理するための事務処理用及び管理分野用と位置付けられる。COBOLとFORTRANは、プログラミング言語の歴史において高水準記述言語としての古典的あるいは原点ともいえる存在を示すものである。
[編集] COBOLの言語仕様
年齢を表すageという変数の値を、一定の年数を表すyearsという変数の値の分だけ増やす手続きは、例えば普通のプログラミング言語では
- age = age + years(C言語などでは age += yearsのように略記できる)
と書かれるが、COBOLでは
GeSHi Error: GeSHi could not find the language cobol (using path /disk1/Wikipedia/MediaWiki/mediawiki-1.14.0rc1_wiki_main_div/extensions/SyntaxHighlight_GeSHi/geshi_1.0.7.22/geshi/) (code 2)
以下のように言語を指定する必要があります: <source lang="html4strict">...</source>
構文ハイライト機能に対応している言語は以下の通りです:
abap, actionscript, actionscript3, ada, apache, applescript, asm, asp, autoit, bash, basic4gl, blitzbasic, bnf, c, c_mac, caddcl, cadlisp, cfdg, cfm, cpp, cpp-qt, csharp, css, d, delphi, diff, div, dos, dot, eiffel, fortran, freebasic, genero, gettext, glsl, gml, groovy, haskell, html4strict, idl, ini, inno, io, java, java5, javascript, kixtart, latex, lisp, lotusformulas, lotusscript, lua, m68k, matlab, mirc, mpasm, mxml, mysql, nsis, objc, ocaml, ocaml-brief, oobas, oracle8, pascal, per, perl, php, php-brief, plsql, python, qbasic, rails, reg, robots, ruby, sas, scala, scheme, sdlbasic, smalltalk, smarty, sql, tcl, text, thinbasic, tsql, vb, vbnet, verilog, vhdl, visualfoxpro, winbatch, xml, xpp, z80
となる。このように、英語による理路整然とした記述ができれば、数学やアルゴリズムの知識がほとんど無くともCOBOLのプログラムを取り扱うことができるようになっている。つまり事務処理の手順を逐一細かく(英語で)記述していけば事務処理が電算自動化できるという、工程的利点が存在する。さらにプログラムのコードそのものがプログラムの機能を説明することになるという利点も指摘されている。
一方でCOBOLは数学や自然科学、工学などの分野における制御・演算には向いていない。例えば二次方程式 A X2 + B X + C= 0の解(の片方)を求める手続きは、基本的な算術の演算子や初等的な関数 (数学)と再帰的に定義された文法を持つC言語などの多くの近代的プログラミング言語では
- X = (-B + SQRT(B ** 2 - (4 * A * C))) / (2 * A)
と一文で済むいっぽう、COBOLでは
GeSHi Error: GeSHi could not find the language cobol (using path /disk1/Wikipedia/MediaWiki/mediawiki-1.14.0rc1_wiki_main_div/extensions/SyntaxHighlight_GeSHi/geshi_1.0.7.22/geshi/) (code 2)
以下のように言語を指定する必要があります: <source lang="html4strict">...</source>
構文ハイライト機能に対応している言語は以下の通りです:
abap, actionscript, actionscript3, ada, apache, applescript, asm, asp, autoit, bash, basic4gl, blitzbasic, bnf, c, c_mac, caddcl, cadlisp, cfdg, cfm, cpp, cpp-qt, csharp, css, d, delphi, diff, div, dos, dot, eiffel, fortran, freebasic, genero, gettext, glsl, gml, groovy, haskell, html4strict, idl, ini, inno, io, java, java5, javascript, kixtart, latex, lisp, lotusformulas, lotusscript, lua, m68k, matlab, mirc, mpasm, mxml, mysql, nsis, objc, ocaml, ocaml-brief, oobas, oracle8, pascal, per, perl, php, php-brief, plsql, python, qbasic, rails, reg, robots, ruby, sas, scala, scheme, sdlbasic, smalltalk, smarty, sql, tcl, text, thinbasic, tsql, vb, vbnet, verilog, vhdl, visualfoxpro, winbatch, xml, xpp, z80
と演算を一つずつ分けて別々に記述する必要がなる。このため事務処理用の言語として重宝された一方で、COBOLに慣れると他の言語のプログラミング能力が著しく落ちるという側面も存在する[要出典]。前述したように過去にCOBOLで処理された膨大なデータが蓄積されたため、これを維持あるいは更新する必要が存在し、COBOLに対する需要はいまだに根強く存在する。
[編集] CODASYL COBOLの言語仕様の変遷
CODASYLでは常時言語仕様の改定をおこなっており、その成果を1~5年ごとにとりまとめてCOBOLの仕様書を発行していた。
- COBOL-60
- 最初の版
- COBOL-61
- 手続き部の構成の変更、4つの部が出揃う
- 拡張COBOL-61(1963年)
- (追加)ソート機能
- (追加)報告書作成機能
- (追加)算術文での複数の答え
- (追加)CORRESPONDING機能
- COBOL-65
- 第1次規格の元になる。
- (追加)大記憶ファイルの処理機能
- (追加)指標による添字付け、表引き
- (廃止)誤り診断メッセージへの要求
- (廃止)必須機能と選択機能の区分
- COBOL-68
- この年から開発報告 (JOD) 形式になる。
- (追加)プログラム間連絡機能
- (追加)映像端末処理用のSUSPEND文
- (追加)割り算の余りを求める機能
- (追加)注釈行
- (追加)一般化されたCOPY機能
- (追加)論理的なページあふれ条件の指定と検出
- (追加)略語による記法
- (変更)EXAMINE文の機能拡張
- (廃止)PICTURE句と重複する編集句
- (廃止)NOTE文、REMARKS段落
- (廃止)DEFINE文
- (廃止)一部の略記法
- COBOL-69
- (追加)通信機能
- (追加)翻訳印刷におけるページ送り
- (追加)実行時の日付と時刻の呼び出し
- (変更)文字列操作機能
- (追加)STRING文
- (追加)UNSTRING文
- (追加)INSPECT文
- (廃止)EXAMINE文
- (追加)SIGN句
- (廃止)データ部の定数節
- COBOL-70
- 第2次規格の元になる。
- (追加)デバッグ機能
- (追加)MARGE文
- (追加)データ初期化のためのINITIALIZE文
- (変更)報告書作成機能の全面的な改定
- (廃止)RANGE句
- COBOL-73
- (追加)WRITE文によるページ送り
- (追加)LINAGE句
- (変更)INSPECT文の機能拡張
- (変更)直接記憶装置アクセス機能を相対編成と索引編成に組み替え
- (変更)登録集機能
- (変更)再実行機能
- (変更)独立項目記述と一連項目記述の相対位置の自由化
- COBOL-76
- (追加)データベース機能
- (追加)ビット列操作
- (変更)ファイル定義方法の整理
- (廃止)独立項目(レベル番号77)
- (廃止)ALTER
- COBOL-78
- 第3次規格の元になる。
- (追加)構造化プログラミング機能
- EVALUATE文
- PERFORM文の機能拡張
- 名前の有効範囲の規定の整備
- (変更)プログラム間連絡機能
- (変更)データベース機能
- COBOL-81
- (追加)浮動小数点
- (追加)算術式による添字
- (変更)正書法の改訂(自由書式の導入)
- (廃止)デバッグ機能(デバッグ行以外)
- (廃止)ENTER文
- (廃止)CORRESPONDING機能
- COBOL-84(25周年記念版)
- 第3次規格(補追)の元になる。
- (追加)組み込み関数
- (追加)データ検証 (VALIDATE) 機能
- (追加)行の一部分に注釈を書く方法
- (廃止)RERUN機能
- COBOL-88
- (追加)表SORT機能
- (追加)定数の連結
- (追加)画面制御機能
- (変更)組み込み関数
- (廃止)区分化機能
- COBOL-93
- (追加)マルチオクテット処理
- (追加)ファイルの排他共用制御
[編集] COBOLの文法の概要 (主にANSI COBOL 1985)
[編集] 表記法
COBOLの文法は英語の表現に近い。たとえば、ある変数 W-NO に対し数値 1 、W-CHARに'ABC'を代入する場合は、以下のような表記をする。
GeSHi Error: GeSHi could not find the language cobol (using path /disk1/Wikipedia/MediaWiki/mediawiki-1.14.0rc1_wiki_main_div/extensions/SyntaxHighlight_GeSHi/geshi_1.0.7.22/geshi/) (code 2)
以下のように言語を指定する必要があります: <source lang="html4strict">...</source>
構文ハイライト機能に対応している言語は以下の通りです:
abap, actionscript, actionscript3, ada, apache, applescript, asm, asp, autoit, bash, basic4gl, blitzbasic, bnf, c, c_mac, caddcl, cadlisp, cfdg, cfm, cpp, cpp-qt, csharp, css, d, delphi, diff, div, dos, dot, eiffel, fortran, freebasic, genero, gettext, glsl, gml, groovy, haskell, html4strict, idl, ini, inno, io, java, java5, javascript, kixtart, latex, lisp, lotusformulas, lotusscript, lua, m68k, matlab, mirc, mpasm, mxml, mysql, nsis, objc, ocaml, ocaml-brief, oobas, oracle8, pascal, per, perl, php, php-brief, plsql, python, qbasic, rails, reg, robots, ruby, sas, scala, scheme, sdlbasic, smalltalk, smarty, sql, tcl, text, thinbasic, tsql, vb, vbnet, verilog, vhdl, visualfoxpro, winbatch, xml, xpp, z80
このように、COBOLの文法は自然言語(英語)に類似した文章的なものであることから、その可読性(ドキュメント性)の面において優れていると言われている。(ただしこれは、否定派からCOBOLの冗長性と捉えられる部分でもある。数学の定理を例にとれば、それを自然言語に直したところで理解が容易になるわけではないからである。)
[編集] プログラムの書式
典型的なCOBOLの原始(ソース)プログラムは、FORTRANと同様にカラム固定形式で記述することとされており、以下の形式で記述する。
- 1~6カラム目「一連番号」
- 各行を識別するために、6桁のシーケンシャル番号を記述することができる。
- 7カラム目「標識領域」
- その行の標識を記述する。例えば、アスタリスクを記述すると、その行は注記行となる。
- 8~11カラム目「A領域」
- 12~72カラム目「B領域」
- A領域及びB領域において、コードを記述する。ピリオド(厳密にはピリオド及びその後に続くスペース)を記述してコードの行端を示す
[編集] COBOLプログラムの基本構造(4つのDIVISION)
COBOLのプログラムは、次の4つのDIVISIONがその基本構造となっており、次の順番の通りにこれらのDIVISIONを記述することが必要である。(カッコ及びカッコ内の日本語は説明のために付与したものである。)
- IDENTIFICATION DIVISION.(見出し部)
- ENVIRONMENT DIVISION.(環境部)
- DATA DIVISION.(データ部)
- PROCEDURE DIVISION.(手続き部)
[編集] IDENTIFICATION DIVISION.
「PROGRAM-ID.」(プログラム識別名)、「AUTHOR.」(作成者名)、「DATE-WRITTEN.」(作成日)等のプログラムの実行には直接影響しない文を記述する。これらの内容は、他の言語では注釈文(コメント文)として任意に記述することなっているが、COBOLにおいては正式な文法の一つとして組み込まれている。
[編集] ENVIRONMENT DIVISION.
プログラムが実行されるコンピュータの環境を記述する。「ENVIRONMENT DIVISION.」は、「CONFIGURATION SECTION.」(環境節)と「INPUT-OUTPUT SECTION.」(I-O節)に大別される。
[編集] DATA DIVISION.
プログラムで使用する変数及びデータ並びにその型について記述する。プログラムで使用する変数及びデータのすべては、DATA DIVISION.で定義しなければならない。
「DATA DIVISION.」は、「FILE SECTION.」と「WORKING-STORAGE SECTION.」に大別される。データの型の宣言は、PICTURE(PIC)句によって行う。
引数でデータを受け取る場合は、引数を「LINKAGE SECTION」で宣言する。
[編集] COBOLにおけるデータの分類
COBOLのプログラムにおけるデータは、次の3つに分類される。
- 変数 (Variables)
- 定数 (Literals)
- 表意定数 (FigurativeConstants) - 予め名称が定められている特定の意味を持つ定数(表意定数)を利用できる。この定数の実体は、実行されるシステムよってその意味が有効になるように実現される。例としては、HIGH-VALUES、LOW-VALUES等が挙げられる。
[編集] COBOLにおける変数
COBOLにおける変数の型は、次の3つが基本となっている。
- 数値型 (Numeric)
- 英数字型 (AlphaNumeric)
- 英字型 (Alphabetic)
COBOLではスカラー型変数及びレベル番号による多次元の配列を使用することができるとともに、これらを複数組み合わせて階層構造を持つ固定長「レコード型」(構造体)を構成して定義することもできる。なお、この「レコード型」はCOBOLによって初めて導入された概念である。
COBOLのプログラミングにおける特徴的な記述方法として、レベル番号によって表現される階層構造を持つレコードのデータ構造の定義を挙げることができる。なお、レベル番号は"01"から"49"までとされるが、特殊なレベル番号として"66"、"77"等がある。
事務処理用及び管理分野用とされるCOBOLにおいては、会計・経理処理などのように通貨を対象とした正確な数値計算が特に要求されるため、数値に対する10進数から2進数への基数変換時に、計算誤差の発生しない2進化10進数による数値型(固定小数点数)を用いることができる。これはFORTRANなどのプログラミング言語において浮動小数点方式などによって実数を近似値で表現しようとする発想とは対照的である。
無名の変数等として"FILLER"という名称を記述することができる。無名項目の"FILLER"は、COBOLにおける変数等の領域の定義は固定長となるため、そのような固定長領域内における予備的な領域の確保という意味合いも有している。
[編集] PROCEDURE DIVISION.
実行されるプログラムの内、実際の処理部分のコードを記述する。 引数を受け取る場合は、「PROCEDURE DIVISION USING 引数名[,引数名・・・]」という書き方をする。
上記3つのDIVISIONを記述したあとの4番目のDIVISIONである「PROCEDURE DIVISION」においてプログラムコードを記述する文法となっているため、COBOLは「前置きが長い」言語と評されることもある。その一方で、このような4つのDIVISIONの明確な記述などによる厳格で形式的な文法に基づくプログラムの記述方法によってCOBOLは、その可読性、ドキュメント性、保守性が高い言語であるとも言われる。なお、これと関連してCOBOLの予約語の数は膨大で、文字数の長いものが多いことはCOBOLの特徴の一つである。
[編集] 標準化
CODASYLによって標準化が行われてきたが、ANSIやISO/IEC JTC 1 SC22/WG4などによっても標準化されている。 なお、1992年1月にCODASYLのCOBOL委員会とANSIのCOBOL委員会は一本化された。
- 第1次規格 米国規格1968年制定,国際規格1972年制定,日本規格1972年制定 最初の規格
- 第2次規格 米国規格1974年制定,国際規格1978年制定,日本規格1980年制定 主な改正点:相対・検索ファイル
- 第3次規格 米国規格1985年制定,国際規格1985年制定,日本規格1988年制定 主な改正点:構造化プログラミング
- 第3次追捕規格 米国規格追捕1989年制定,国際規格追捕1992年制定,日本規格1992年制定 主な改正点:組込関数
- 第4次規格 国際規格2002年制定 主な改正点:オブジェクト指向、マルチバイト文字
[編集] 問題点と未来
COBOLは事務用として広く使われたため、各処理系(=各機種)ごとに多くの固有部分が発生してしまった。特に、画面処理を行なうプログラム向けの、画面処理機能は各社固有の機能となっている。
また、言語仕様が古くからあり、論理制御機能が弱い問題点もあった。それらはCOBOLの言語仕様の改訂ごとに徐々に改善されて来ている。
[編集] コードの実例 (Hello World)
[編集] 実例1 (Hello World)
GeSHi Error: GeSHi could not find the language cobol (using path /disk1/Wikipedia/MediaWiki/mediawiki-1.14.0rc1_wiki_main_div/extensions/SyntaxHighlight_GeSHi/geshi_1.0.7.22/geshi/) (code 2)
以下のように言語を指定する必要があります: <source lang="html4strict">...</source>
構文ハイライト機能に対応している言語は以下の通りです:
abap, actionscript, actionscript3, ada, apache, applescript, asm, asp, autoit, bash, basic4gl, blitzbasic, bnf, c, c_mac, caddcl, cadlisp, cfdg, cfm, cpp, cpp-qt, csharp, css, d, delphi, diff, div, dos, dot, eiffel, fortran, freebasic, genero, gettext, glsl, gml, groovy, haskell, html4strict, idl, ini, inno, io, java, java5, javascript, kixtart, latex, lisp, lotusformulas, lotusscript, lua, m68k, matlab, mirc, mpasm, mxml, mysql, nsis, objc, ocaml, ocaml-brief, oobas, oracle8, pascal, per, perl, php, php-brief, plsql, python, qbasic, rails, reg, robots, ruby, sas, scala, scheme, sdlbasic, smalltalk, smarty, sql, tcl, text, thinbasic, tsql, vb, vbnet, verilog, vhdl, visualfoxpro, winbatch, xml, xpp, z80
この例では DISPLAY命令を使い、コンソール(または標準出力)に結果を出力しているが、基本的にCOBOLはファイルの処理が主体である。従ってFILE SECTIONにファイル定義を書くのが基本的な処理方法である。
[編集] 実例2 (Hello World)
GeSHi Error: GeSHi could not find the language cobol (using path /disk1/Wikipedia/MediaWiki/mediawiki-1.14.0rc1_wiki_main_div/extensions/SyntaxHighlight_GeSHi/geshi_1.0.7.22/geshi/) (code 2)
以下のように言語を指定する必要があります: <source lang="html4strict">...</source>
構文ハイライト機能に対応している言語は以下の通りです:
abap, actionscript, actionscript3, ada, apache, applescript, asm, asp, autoit, bash, basic4gl, blitzbasic, bnf, c, c_mac, caddcl, cadlisp, cfdg, cfm, cpp, cpp-qt, csharp, css, d, delphi, diff, div, dos, dot, eiffel, fortran, freebasic, genero, gettext, glsl, gml, groovy, haskell, html4strict, idl, ini, inno, io, java, java5, javascript, kixtart, latex, lisp, lotusformulas, lotusscript, lua, m68k, matlab, mirc, mpasm, mxml, mysql, nsis, objc, ocaml, ocaml-brief, oobas, oracle8, pascal, per, perl, php, php-brief, plsql, python, qbasic, rails, reg, robots, ruby, sas, scala, scheme, sdlbasic, smalltalk, smarty, sql, tcl, text, thinbasic, tsql, vb, vbnet, verilog, vhdl, visualfoxpro, winbatch, xml, xpp, z80
[編集] その他
「COBOLの冗長さ」は有名で、時折ハッカージョークのネタにされる。例えばCOBOLのオブジェクト指向拡張案「ADD 1 TO COBOL GIVING COBOL」(C++のもじり)などである。
2003年出版の書籍『13歳のハローワーク』(村上龍)では「COBOLは過去の言語で、修正できるプログラマは皆死んでしまった」という趣旨の記載がされ話題となった。また1990年代の日本のダウンサイジング全盛期には、マスコミなどで「日本のメガバンクや官公庁は前時代のCOBOLを使っているから効率が悪い」との論調が多く見られた。しかし現実には2009年現在でも、CやJavaと並んで、多数の企業・組織でCOBOLは使われ続けている。COBOLが古くからある高級言語である事は事実だが、「COBOLを使用していればレガシーシステムであり効率が悪い」とは限らない。
2009年9月18日は「COBOL誕生50周年」とされ、Micro Focusが50周年を祝うサイトを立ち上げた。これはCOBOLという名称が決定された1959年9月18日を、COBOLの誕生日としたものである。[1]
COBOLプログラマーのことをコボラーと呼ぶ人も多い[2]。
[編集] 関連項目
[編集] 脚注
[編集] 外部リンク
最終更新 2009年11月15日 (日) 18:25 (日時は個人設定で未設定ならばUTC)。
【COBOL】変更履歴

