平成14年度未踏ソフトウェア創造事業(未踏ユース)

採択案件評価

1.採択者氏名 西田 圭介 25歳  (株式会社ネットワーク応用通信研究所 研究員)
2.プロジェクト実施管理組織 三菱マテリアル株式会社
3.委託金支払額  3,000,000
4.テーマ名  オープンソースCOBOLコンパイラの開発
5.関連Webサイトへのリンク  http://www.open-cobol.org/
6.テーマ概要

本プロジェクトの目的は,これまで汎用機上で主に使われてきた言語COBOLで書かれたプログラムを,GNU/Linux上で動作させるためのオープンなコンパイラを開発することである.具体的には,GNU/Linuxで標準的に使われているコンパイラGCC (GNU Compiler Collection) のフロントエンドとして,COBOL言語をコンパイルするための拡張を行なう.

 今の時代,COBOLという言語に目新しい機能は何もないが,それだけに安定性・信頼性の要求される業務の分野では,今でもCOBOLが多く使われている.しかしながら,ソフトウェアはそのままにシステムのコストダウンを図りたいというニーズは強くあり,誰もが自由に使えるオープンソースのCOBOLコンパイラが求められている.

 既存のオープンソースCOBOLコンパイラはいくつかあるが,業務レベルで十分な実用性をもったものはまだ存在しない.本プロジェクトでは,既存のオープンソースCOBOLコンパイラを拡張・改良し,実用に耐えるコンパイラを完成させることによって,業務システム環境としてのGNU/Linuxの基盤整備を進めることを目指す.


7.採択理由

いまどきCOBOL?と思うが,逆にいまだからこそオープンなCOBOLという提案にも説得力がある.実際のところ,ニーズがどれくらいあるのか,PMにはちょっと読めないし,この短期間にどこまでできるかもちょっと読めないが,やるべきことが明解で,できたら素晴らしい.
 これこそ個人の力によるソフトウェア開発である.

 
8.成果概要

これまで西田君が開発してきたOpenCOBOL (西田・図1) はCOBOLの最低限の機能を実現していたが,COBOLから一旦Cに翻訳するという手順をとっていた.そのため,構文解析が二度手間でコンパイル時間がかかり,ソースレベルのデバグ情報が失われていた.これをGCCに組み込んで直接コンパイルし,コンパイル速度を上げ,gdbなどの汎用デバグツールを活用できるようにしたGCC COBOLを作成することが今回の開発の趣旨である (西田・図2).なお,対象としたCOBOLは現在世の中で使われているCOBOL 85である ----- 最近仕様が制定されたCOBOL 2002を対象とするのは時期尚早という判断.


西田・図1


西田・図2

開発成果は2段階に分けることができる.

(1) OpenCOBOL の改良

・COBOLパーザを改良し,より単純でコード生成に適した構文木を作るようにした.

・COBOLランタイムを修正し,GCCからの利用を行ないやすくした.COBOL 85規格のうち,コアとなる構文,ファイル処理,主要な組み込み関数の実装を完了した.残っているのは帳票印刷,通信処理などであるが,現在のCOBOLの使われ方ではマイナーなもののみである.すなわち,実用的な意味で必要なものは完成したといってよい.

・COBOLパーザのエラーチェック機能を強化した.それらが正しく機能していることを確かめるため,テストスイートを作成した.

(2) GCCフロントエンドの開発

・OpenCOBOLからパーザを移植し,GCCの中間形式を生成するようにした.

・デバッグ情報を埋め込み,gdbを使ってCOBOLのデバッグができるようにした.

 この開発により,GCC3.3のCOBOLフロントエンドの完成をみた.OpenCOBOLと比較して,コンパイル速度で30%,生成コードサイズで20%程度の改善がみられた.今後,最適化を進めることで,より一層の改善が期待できる.

 今後の課題としては,未実装の機能の実装,コンパイル時エラーチェックの強化,充実したテストスイートの作成,コンパイル速度や実行速度の最適化などの技術課題のほかに,これをGCC公式採用のCOBOLとすることである.

 開発されたものの情報は

  http://www.open-cobol.org/

に公開される予定である.

 
9.PM評価とコメント

 採択理由にも書いたが,1960年生まれのCOBOLに対して,「いまどきCOBOL?」というのはいかにも当然である (同年代に誕生してしぶとく生き残っているLispの愛好家であるPMに対して「いまどきLisp?」とは言わんといてほしいが… :-).しかし,西田君の話のとあるスライドにあった殺し文句で疑問氷解した.そのスライドにまずいわく,銀行業務系などはいまでもCOBOL.これはとっくに承知で驚かない.しかし,業務を理解しているCOBOLプログラマが多く,彼らにとっては,プログラミング能力ではなく,業務知識のほうが重要なのである,というスライドには新鮮な驚きを覚えた.まさにこの一言は,情報処理の専門家が等しく心すべき大きな教訓であるといってよい.

 いずれにせよ,オープンソースCOBOLは逆にいまだからこそ重要な課題であるとも言える.PMはCOBOLの知識は皆無だが,西田君が示してくれたCOBOLの一部の仕様の異常さには感動した.例えば,evaluate,どうしてこんな奇妙な仕様が生まれ得たのか,それが興味深い.これらの奇妙な仕様は,COBOLコンパイラの公式テストスイートでいまでもきちんとチェックされる.なるほど,こんなのでも動かないといけないようであれば,いまこれをオープンソースで打ち止めにして,新たな無駄なエネルギーを使わないほうが世の中のためになる!

 オープンソースCOBOLは世界的に見ても希少である.TinyCOBOLが有名と聞いたが,西田君のオープンソースCOBOLはそれを越えて世界の標準となっていくポテンシャルを秘めている.目指すはGCCである.この出来であればGCCの公式採用は問題ないと思うが,そうは簡単に問屋が卸さない.

 実際にGCCに公式採用されるようになるには,実運用での実績や,Gnuプロジェクトとの折衝などが必要であり,少なくともあと1年程度を必要とするであろう.逆に,その間に抜けていた部分の補充,さらなる性能の改善をする余裕が生まれる.GCCにこれが採用されれば,基幹系業務がオープンソースLinuxの採用に流れるための大きなバネとなるであろう.

 西田君は足がしっかりと地についた人であり,文章も,開発の進め方も緻密である.プロの開発者なのだから当然と言えば当然なのだが,これはユースのほかの学生開発者にも見習ってほしいところである.

★★ スーパークリエータ: プロとしての確かな腕前や,プロジェクトの戦略性 (そもそもオープンソースCOBOLに目を向けるとは!) などを見ると,未踏本ちゃんレベルだった.

   
(補足)