昭和100年問題とは?ITシステム、コンピューターの元号問題はCOBOLで起こる?

スポンサーリンク
ITで知っておくべき知識

2019年5月1日から元号が 「令和」 になります。

「平成」は31年間続きました。

今更ですが、日本のIT系システム、コンピュータープログラムには昭和100年問題という元号にまつわる潜在的なバグが起こる可能性があります。

昭和100年問題とは?分かりやすく

昭和100年問題 (しょうわひゃくねんもんだい) とは、日本固有の元号に基づくコンピュータシステムの年問題の一つです。

これはシステム上、昭和が現在まで継続しているものとして扱った際、昭和100年にあたる2025年に昭和100年を昭和0年と誤って認識することによって発生する問題です。

西暦2025年に発生することが懸念されているため「2025年問題」とも呼ばれています。

 

 

分かりやすく説明しましょう。

 

昭和時代に作られた、年の情報を2桁で取得しているアプリケーションソフトウェアがあったとします。

内部処理として、平成元年 (1989年1月8日) 以降も昭和が連続していることと仮定して、昭和として扱っていたとします。

例えば、プログラム上で日付の処理を「yymmdd」と記述する際、平成2年1月1日を昭和換算し、650101 として処理しているようなケースが典型例です。

 

この場合、

1988年 昭和63年

1989年 平成元年は昭和64年

1990年 平成2年は昭和65年

1991年 平成3年は昭和66年

・・・・

2019年 平成31年・令和元年は昭和94年

2020年 令和2年は昭和95年

・・・・

2024年 令和6年は昭和99年

2025年 令和7年は昭和100年

となります。

 

画面表示や帳票印字では、以下のような修正を行います。

  • 昭和64年から昭和94年までは、年から 63 を引いて「平成」に置き換え
  • 昭和95年以降は、年から94を引いて「令和」に置きかえ

このようにすれば、見た目は問題ありません。

 

ところで、

2024年 令和6年1月1日は、「yymmdd」で990101となります。

2024年 令和6年12月31日は、「yymmdd」で991231となります。

 

ところが、内部で年を2桁で処理しているため、「991231(昭和99年12月31日)」の次は、「000101(昭和00年1月1日)」と数字が一巡してしまいます。

 

この現象が、システムの誤作動の原因になる可能性があるという訳です。

西暦2000年の直前に世を騒がせた、2000年問題 (millennium bug) と同じことです。

銀行や大企業の基幹システム、COBOLで不具合発生するか?

昭和100年問題は、昭和の最後の年1989年以前に作らたプログラムで発生します。

この頃、主流だったCOBOLのようなプログラム言語と、それを動かすための大型汎用機、オフコンなどではメモリやディスクが高かったために、年を2桁で扱っていました。

 

1989年以降に作られたプログラムでは、余程な必要性がない限り、年号を昭和で読み替えるようなプログラムは作っていないと思われます。

 

そうやって考えていくと、プログラムが作られてから30年以上経つわけですが、そんなプログラムがいまだに現役で動いているのでしょうか?

 

Wikipediaには以下の記載があります。

膨大なCOBOLプログラムおよびそれらの処理するデータが、企業や政府機関に長年開発し続けられ稼働している。ガートナー発という情報によれば、メインフレームが世界1万サイト以上あって3万8千のレガシーシステムがあり、COBOLは全プログラム約3,100億行のうちの約65%の約2,000億行あって、毎年約50億行が増えているという

https://ja.wikipedia.org/wiki/COBOL

 

古くから動いている銀行や大企業の基幹システムではCOBOLのバグのリスクは、あると考えてよいでしょう。

 

実際、2019年1月23日に厚生労働省の毎月勤労統計調査についてCOBOL起因の不具合が発覚しています。

それによると、

  • 2004年にシステムの変更を行った
  • システム改修を行った担当係によると「外部業者等に委託することなく自前でシステム改修を行うが、毎月勤労統計調査に係るシステムのプログラム言語はCOBOLであり、一般的にシステム担当係で COBOL を扱える者は1人又は2人に過ぎなかった」。このため、ダブルチェックができなかった。

とのことです。

 

今更、コボルのプログラムを覚えるのは中々大変ですから、チェックも難しいでしょう。

 

↓プログラミングのオンラインスクール CodeCamp

現役エンジニアのオンライン家庭教師【CodeCamp】

 

コメント

タイトルとURLをコピーしました