お問い合わせ

ホーム > COBOLのはなし > COBOLの難しさって何だろう?

COBOLの難しさって何だろう?

増田 和信(NECソリューションイノベータ)

「COBOLは習得が難しい」という事が話題になることがありますが、マイグレーション業務とCOBOL言語に携わって10年あまり、自身ではそういった認識を持っていません。
いったい何が難しいのかな?と思い、自身の経験を踏まえて、考えてみました。

はじめてのプログラミング

プログラミング言語に初めて触れたのは、大学1年でJavaを習った時でした。この頃はオブジェクト指向を必死に勉強していましたが、大学2年でC言語の授業があり、「ライブラリが充実しているJava」と「メモリまで意識してコーディングするC言語」のギャップに驚いた記憶があります。

COBOLでのプログラミング

COBOLを触ったのは入社して1年目からになりますが、最初は上司が昔の教育で使ったというメインフレーム用のCOBOL問題集を、Windows上で動くCOBOLを使ってやりました。当然、Windowsで動かすためにはいくつかの変更が必要なのですが、処理を作る上では、学習した言語の概念とマッピングできれば、手続き型の言語としては変わりがなかったため、すぐに慣れることができました。それよりも、学習する上で苦しんだのはさまざまな概念です。

・装置名やファイル記述項

当時はメインフレームに触ったことも無いため、「装置名」というものがまったく理解できませんでした。そもそもメインフレームにおける装置がイメージできないのですが、Windows上で動かすためには何を指定すればいいのか、ファイル記述項にどうやってパスを入れてやればいいのか、などで四苦八苦した記憶があります。

・PICTURE句/USING句で指定できるデータの種類

COBOLは扱えるデータの種類が多いと感じた事が印象に残っています。パック10進数やアンパック10進数にエンディアン固定の形式など、数値にはデータの持ち方がいろいろある事を知識としては知っていましたが、COBOLを使って初めて強く意識しました。

業務を通してのCOBOLとの関わり

その後、実際の業務ではお客様のCOBOLプログラムコードを読む事が多くなりましたが、難しいと感じるのは「データに依存した問題」です。

・再定義項目

C言語でいう共用体なのですが、COBOLでは使われる頻度が多く、他言語へ変換する場合には、データの問題が起きやすいものの1つです。特にマルチレイアウトレコードは、実際に入ってくるレコードデータによってある領域がまったく異なるデータ形式として使われたり、そもそもレコード全体のレイアウトが異なったりします。また、1つの巨大なX項目は別々のプログラムで異なるレイアウトに定義されている場合があり、複数のプログラムで処理された結果、マルチレイアウトレコードのファイルが出来上がる、という場合もあります。

・文字コード

メインフレームはEBCDICコードのデータを処理するのに対し、マイグレーション後の環境はASCIIコードのデータを処理します。プログラムでEBCDICを想定しているようなものがあれば問題が起きるのはすぐわかりますが、逆にメインフレームでASCIIコードのデータを処理する前提だったりすると、前後の処理を見たりしないといけない場合があります。

COBOLは習得が難しい?

このように、業務を通してCOBOLプログラムを読み書きできるようになっていきましたが、改めて考えてみると、難しいのは次のような点です。

つまり「COBOLは習得が難しい」というのは、COBOLプログラムの理解や習得が難しいという事では無く、「COBOLプログラムを取り巻く業務システム(OS含む周辺システムやデータを含めた処理内容)を理解するのが難しい」ということだと理解できます。

これは「COBOLが大規模な基幹システムで使われている事が多い」という事にも起因していると思いますが、このような難しさは他の言語においても同様であるように感じます。

蛇足:COBOLは読みやすい?

個人的な感覚になりますが、大規模なシステムのCOBOLプログラムはコーディングルールが決められている事が多く、変数がわかりにくいとか、プログラムの全体像を掴みにくい、といった事はあまり無いように思います。

また、もともと事務員でもプログラミングできる言語として設計されたものであるため、プログラミングの難しい概念を知らない人でも素直に読み書きできるのかな、とも思います。