ITkeizou2038年問題とはツイートシェアはてブ送るPocketこんにちは。今回は「2038年問題」に関する記事です。※この記事は過去に別のブログで書いた記事のリライトになります。少々専門的な内容になってしまうので、非エンジニアの方は「2000年問題とは」と「一般向けの説明」だけ読んでもらえれば大体雰囲気は掴むことができるんじゃないかなと思います。稼働しちゃってたらどうしたらいいのか2000年問題とは2038年問題の話題に入る前に、2000年問題について少し触れておこうと思います。私がまだ子供のこと、「2000年問題」というのが世間を騒がせていたのを覚えています。その頃父から教えてもらったのはコンピュータ君はなんとなーく西暦というものを下二桁だけで認識していて2000年になったらそれが「00」になるもんだからコンピュータ君は「フムフム、ならば時を戻そう!」とイカれだしてバグると。しまいには核ミサイルが発射されて世界が滅びる。いうものでした(トンデモ)1999年の大みそかの夜のことは今でもよく覚えています。私は本当に世界が明日滅亡するんだと思い込んでいて、その日、町が壊滅する悪夢を見たほどです。時は流れて2020年。私は意図せず基幹システムの保守っぽい仕事をしていたのですが、とある調査中、とあるカラムに「2038年01月19日12時14分7.9999秒」という値がボコボコボコボコ入っているのを見つけてしまいました。「何だこの中途半端な値は。誰かが何かの対応のつもりで手動で入れたんだな!?」と思って、騒いでしまったのですが、当時の設計者から「落ち着け、仕様だ。そのカラムはある処理を行った日時を格納するTimestamp型の列(MySQLです)なのですが、(最終処理日時をセットしておいて、次回処理タイミングなどを決定する)ある特定の条件に合致したときに最大値をセットして二度と処理されないようにするという仕様だったようです。それで、MySQLのTimeStamp型の最大値というのが上記の「2038年01月19日12時14分7.9999秒」ということらしいのです。これって2000年問題の再来じゃん?二度と処理されないように最大値を入れたのに、2038年1月19日12時14分になったら、再処理されてしまいますよ。その値が最大値なので、それ以上の値に更新することができなくて、処理が異常終了してしまいますよ。いうのを業界では時限爆弾と呼んでいます。これが、2038年問題です。一般向けの説明プログラムが動くときに使うデータをため込んでおく「データベース」というものがあります。ここには色々な顧客データとか、連絡先とかの個人情報が入っていたりもします。データベースにデータを登録するとき、大体そのデータと一緒に、いつ登録したか?という日時も一緒に登録します。登録する日時には様々な形式があるのですが、ある特定の形式は日時が「2038年1月19日」までしか入らない仕様になってしまっているのです。この日を過ぎると、登録できない形式で登録してしまったり、誤った形で登録してしまったりと、色々と問題が発生してしまうのです。その色々な問題は、それぞれで作成しているプログラムに依存する部分もあるので、どんな影響があるかを正確に測るのは難しいですが、何もしなければシステムがエラーで動かなくなってしまうのは、確かだと言えます。意識せずに作られているシステムであれば、この日を境に動かなくなります。これが2038年問題です。