お問い合わせ

ホーム > COBOLのはなし > JIS新規格 JIS COBOL2011の概要

JIS新規格 JIS COBOL2011の概要

COBOLコンソーシアム利用技術分科会
佐藤 孝夫 (日本電気株式会社 第三ITソフトウェア事業部)

2002年11月20 日に第4次COBOL規格「COBOL ISO/IEC 1989:2002」 が制定された。これを受けて,2011年1月に日本工業規格 電子計算機プログラム言語 COBOL JIS X3002:2011(以降JIS COBOL2011と記載)が登場した。オブジェエクト指向開発を取り入れるなど他言語との連携を意識した仕様になっている。その一方で従来規格との互換性も十分に配慮され,信頼に足る「事務処理記述言語」としての性格は失われていない。漢字などの多バイト文字やデータ型の追加など開発効率を向上させる進歩も遂げている。
JIS COBOL2011は従来の第3次規格のCOBOL85 に対して,149 の追加,40の変更が加えられている。COBOL言語は膨大な資産を抱えるため,追加変更部分の仕様については従来規格との互換性に十分に注意が払われている。そのため,開発者は既存資産と互換性を保ちながら以下に示すような新機能を利用することができる。

(1) オブジェクト指向機能
(2) 漢字などの多バイト文字処理機能
(3) POSIXのロケールに対応した地域/文化固有機能
(4) 自由形式の正書法
(5) ビット操作機能
(6) 浮動小数点データ操作機能
(7) アドレス付けとポインタ項目
(8) 利用者定義のデータ型
(9) 利用者定義の関数
(10) 例外割り込み処理機能
(11) データ妥当性検査機能
(12) 画面処理機能
(13) コンパイル時指示機能
(14) 他言語との言語連絡の拡張
(15) テーブルソート機能
(16) ファイルの共用と排他制御
(17) 標準算術演算
(18) 10進項目の桁数を18桁から31桁に拡張
(19) 報告書機能の拡張
(20) 第一水準,第二水準などのサブセット規格の廃止

ここでは,その中から従来COBOL85 からの移行を考えた時に特に重要と思われる機能について紹介していく。

①漢字などの多バイト文字処理機能

従来から日本国内で利用されているCOBOLコンパイラでは,日本語を項目名や定数として利用することや日本語項目を利用することが可能であった。しかしこれまでのCOBOL85規格では日本語利用については規定されておらず,日本語機能は,各COBOLベンダーが独自仕様として提供する機能だった。今回, JIS COBOL2011では2 バイト文字(多バイト文字)の取り扱いが規定された。ベンダーが従来提供してきた独自仕様とは記述上で若干の差異があるが機能としてはほぼ同じである。もしユーザーが既存COBOLプログラムをJIS COBOL2011 規格に準拠させるとしても,大掛かりな修正にはならないだろう。
追加された多バイト文字機能の主なものは次の通りである。ここでは特に日本語に限って見ていく。

②自由形式の正書法

JIS COBOL2011では従来からの「固定形式の正書法」に加え, 新たに自由形式の正書法が加えられた。これは, 長い定数や行末に多バイト文字を自由に使えるようにするためである。従来の固定形式では, 多バイト文字で長いコメントや定数を記述した場合,バイト数が大きくなり境界をはみ出してしまいコンパイルできなくなるおそれがあった。そのため,JIS COBOL2011では境界を廃止した自由形式の正書法を設けた。これにより,C/C++/Javaなどの言語と同様に,より自由にプログラムを記述することと,より見やすいコメントの挿入が可能になった。なおCOBOL85規格から英大文字と英小文字を等価に扱う規則があり,COBOLプログラムの見栄えが大きく変わって見える。

●固定形式の正書法の変更

JIS COBOL2011 では固定書式のA領域/B領域の識別が削除された。これにより,固定形式で,あってもソースコードの記述の自由度は増した。ただし,従来の固定形式の正書法で記述されたソースコードでも問題なく利用できる。

固定形式の正書法の変更

●新たな自由形式の正書法

これまでの一連番号領域や,標識領域などの境界による制約がなくなった。自由形式では,基本的にソースコードをテキスト上のどこに書いてもよい。ただし標識領域がないため,定数の継続や注記(コメント)に関しては,以下の通り,特別の規則が定められている。

自由形式のプログラムの例を以下に示した。この例では,③で述べるコンパイラ指示により,自由形式を指定して(>>SOURCE FORMAT IS FREE) ,ソースコードの記述を開始している。データ定義の開始位置や,定数の継続,コメントの記載,デバッグ行の記載などはこれまでの固定形式と異なる。

>>source format is free    *>翻訳時指示機能で自由形式を宣言。
  identification division.
  program-id. FREE-FORM-EXP.
  environment division.
  configuration section.
  source-computer. XYZ with debugging mode.
  data division.
  working-storage section.
  01 長い項目 pic n(100) value n"長い項目の定数の継続例"-
                                "定数の継続の残り".
  01 数字項目 pic 9(10).
  procedure division.
  処理開始.                   *>節名,段落名でも日本語が利用できます。
*>この行は,コメント行です。
  move 0 to 数字項目.         *>これは,インラインのコメントです。
  move n"長い項目の定数の継続の例です。" &
        "定数の継続の残り" to 長い項目.     *>&で複数の定数を連結できます。
>>d add 1 to 数字項目.        *>これは,デバッグ行です。
    …

③コンパイル時指示機能

従来からCOBOL では,ソースコードに関しての操作や条件翻訳機能として, REPLACE指定のCOPY文, REPLACE文などがあった。主にソースコードを異なるシステム環境で稼働させる場合など,環境に応じてコンパイルさせたいソースコードが変わる場合に効果がある。
ただし,Cなど他言語に比較すると,コンパイル時指示に条件が設定できないこともあり,コンパイル時指示はCOBOL向けのプリプロセッサで代替する場合が多かった。JIS COBOL2011 ではコンパイル時指示機能として,条件の追加など新たな機能を提供している。

コンパイル時指示機能は先頭に">>"を記述し,その後にコンパイル時指示文を記述する。コンパイル時の選択機能やコンパイル時に利用する変数(コンパイル時変数)の定義を行うことが可能となる。

以下に代表的なコンパイル時指示機能の例を示す。コンパイル時指示,演算形式,オブジェクト指向機能関連,プログラムリストの出力など多岐にわたった記述が可能となっている。

●条件翻訳の例

>>define type1 as 1.        *>コンパイル時変換を定義
identification division.
program-id. PROGRAM-1.
data division.
…
procedure division.
>>if type1 is defined       *>コンパイルの条件を記述
display "DEFINE".           *>このソースコードはコンパイル対象になる
>>else
display "NOT DEFINE".       *>このソースコードはコンパイル対象除外になる
>>end-if 
…

DEFINE指示,EVALUATE指示,IF指示などを用いて,コンパイル時に翻訳/省略の対象になるソースコードの条件を記述する。この機能を利用して,実行環境に合せたプログラム記述を選択することが可能なる。

●その他の主なコンパイル時指示

④オブジエクト指向機能

JIS COBOL2011では,従来機能と互換を保ちながらCOBOLにとって新しい概念であるオブジェクト指向機能を追加した。従来形式である手続き型のプログラムを活かしたオブジェクト指向プログラミングが可能だ。また,クラス,インスタンス,継承,ポリモーフイズム,ガベージ・コレクションなど,オブジェクト指向プログラミングに必要な機能を標準で備えたため,他のオブジェクト指向言語と比較しても見劣りしないものになっている。
ただし,他のオブジェエクト指向言語で作成されたクラス・ライブラリを取り込む機能はない。そのため,COBOLクラスから他言語のクラスを呼び出す,その逆に他言語のクラスからCOBOLクラスを呼び出すためには,ミドルウエアなどが提供する,ラッピングなどの補助が必要となる。COBOLのみの記述であれば,オブジェクト指向機能を利用した部品化などの機能を活かした開発が可能となる。
以下にJIS COBOL2011のオブジェクト指向機能を利用した,クラス定義,オブジェクト定義(インスタンス定義),メソッド定義の例を示す。クラス定義では, JIS COBOL2011が提供する標準クラスを継承して定義した「預金クラス」をさらに継承し,新たに「定期預金クラス」を定義している。「預金クラス」を継承した定義であるので. 「定期頭金クラス」と「預金クラス」の差分のみをデータや手続きをインスタンス定義として記述することで「定期預金クラス」を構築することができる。
あらかじめ定義されたクラスを利用するためには,クラスからインスタンスを生成,インスタンスの個々のメソッドを呼び出す(INVOKE文)ことで処理を実行する。このINVOKE文によるメソッド呼び出しは,従来の手続き型COBOLのCALL文に相当する。メソッド定義の中は,従来と同じ手続き型のCOBOLも,オブジェクト指向のCOBOL記述も同様に記述することができる。従来の手続き型のCOBOLで記述しプログラムを再利用する場合は,この機能を利用して部品化し再利用することができる。ただし現実的には部品化すべき手続き部分と再利用できない手続きが混在しているため,部品化および再利用にはプログラム自体の見直しが必要となる。

オブジエクト指向機能

⑤利用者定穫のデータ型

COBOLでは,ビジネス向けに利用可能な様々なデータ型を持つ。レコード形式のデータは各プログラムで共通に利用することが多く,COPY文が利用されてきた。しかし複数のプログラムが利用する場合,項目名の変更作業が必要となり,その操作は煩雑で,誤りも発生しやすいものであった。
これに対してJIS COBOL2011 では,新たに利用者定義のデータ型機能が追加になった。利用者定義のデータ型機能の利用例を次に示す。

前半は,新機能のTYPEDEF句を指定することで,日付に該当するデータ型を「日付データ型はレコード形式を持つ。年/月/日の3つのデータから成り,それぞれ 9(4)/9(2)/9(2)のデータ形式を持つ」と利用者が定義していることを示す。
後半は,定義されたデータ型を利用したデータ宣言となる。受注日,納入日は日付データ型を持つので,それぞれ階層として年/月/日のデータを従属データとして利用できる。
この機能を利用し,データ型宣言部分をCOPY原文で展開した上で,各プログラムで自由なデータ命名をすることができるようになる。誤りもなく,レコード形式を含めてデータの型を共通化することができるようになった。

⑥その他の追加機能

JIS COBOL2011規格の仕様を実装したCOBOL製品も既に出荷されている。読者の方々もJIS COBOL2011規格で開発する機会があるだろう。前述したようにCOBOL85規格との互換性は保たれているため,従来のスタイルのままでも,もちろん開発は可能だ。既存COBOLプログラムを移行する場合などはこの互換性が活きる。しかし,新規開発においてはJIS COBOL2011 の新機能を利用すれば従来よりも開発効率は上がり,整理され読みやすいコードを開発できるだろう。
前記で紹介してきた主要機能のほか,次のような追加機能もある。詳細は割愛するがぜひ積極的に利用してほしい。