前号: No 346 / 次号: No 348 / 一覧(note.com)へ / ブログページに戻る

メールマガジン「がんばりすぎないセキュリティ」No347 (24/02/19)

うるう年ならぬ「うるう秒」がなくなる(347号)


今回も時刻ネタが続きます。

「うるう年」を知らない方はいないでしょうが、「うるう秒」は知らない方も多いと思います。
今回はその「うるう秒」が今後は使われないくなるというお話です。


1. うるう年

地球は太陽系の惑星として太陽の周りを1年かけて1周(公転)します。 その周期は365日よりちょっと長い365.2422日くらいです。 そのため、うるう年を使ってその補正を行っていることは皆さんご存知の通りです。 現在のグレゴリオ暦では、4年に1回のうるう年で366日とするのを原則として、100年に1回はうるう年をスキップし、さらに400年に一度はスキップせずにうるう年にする、というルールになっています。 計算するとわかりますが、このルールでは1年は365.2425日で、公転周期の365.2522日とは、0.0003日(約26秒)ズレています。 1年で26秒しかズレないのですから、恐ろしく正確な暦と言っていいと思います。

2. うるう秒

うるう秒もうるう年と同様に時間補正をするための手法です。 ですが、その理由はかなり違っています。 うるう秒は地球の自転速度に合わせて時刻の補正をしましょうという考え方です。 時刻は(時差を除いて)世界中で一致している方がいいに決まっています。 メートルやグラムの定義が国や地域によって違っていると取引で問題が出てきます。 同様に時刻についても同様です。共有できないといろいろと困ります。 地球の自転速度は極めて正確なのですが、それでもさまざまな要因で自転周期にブレが発生することがわかっています。 そこで、全世界の時刻を一斉に進めたり、止めたりすることで自転速度に合わせて時刻補正をすればいいじゃないか、というわけです。 これを行っているのは、国際度量衡総会という国際団体で、上述のメートルやグラムもこの団体が定義を定めています。 この点がうるう年と大きく違います。 うるう年は暦のルールですので、何が起きようとルール通りに適用されます。 一方、うるう秒は地球の自転速度を観測した結果で、上述の団体の委員会がうるう秒を適用するかどうかを決めるのです。 うるう秒には自転が遅くなった場合に1秒を追加ではさみこむ「正のうるう秒」と、自転が速くなった場合に1秒を短かくする「負のうるう秒」の2つが存在しています。 変化がない場合は、うるう秒の追加も削除もしません。 いずれのうるう秒も6月30日か12月31日の深夜(0時前)に追加や削除を行います。 正のうるう秒: 23:59:59 → 23:59:60 → (翌) 00:00:00 負のうるう秒:、23:59:58 → (翌) 00:00:00 このオペレーションはUTC(世界協定時)を基準に行います。 UTCはGMT(グリニッジ標準時。要は英国の時刻)と同じものと考えてください。 つまり日本では、午前9時にうるう秒のオペレーションが行われることになります。

3. うるう秒って何回くらい適用されたの?

うるう秒の運用は1972年からと意外に古いです。 で、1972〜2017年までの間に27回の「正のうるう秒」が追加されています。 「負のうるう秒」は一度も適用されたことはありません。 ところで、うるう秒については、地球の自転が遅くなるのだからやむを得ないものだという意見がありますが、どうもこれは誤りのようです。(白状すれば、筆者もそうかと思っていました) というのは、確かに自転が遅くなるのは事実のようですが、それよりも他の原因(月などの影響)の方がはるかに大きいらしく、自転が遅くなることの影響は無視できるレベルのようです。 にも関わらず27回ものうるう秒を必要としたのは、1秒という時間の定義が不適切だった(でも様々な指標でその1秒の定義を使っているから今更変えられない)というのが実際のところのようです。

4. うるう秒の運用の難しさ

時間を精密に定義するためのうるう秒ですが、コンピュータシステムとは非常に相性の悪い方策でした。 まず、システム開発の関係者(発注側も開発側も含めて)にうるう秒が全く侵透していないという点があります。 そのため、ほとんどのシステムでは23:59:60 といった時刻が表記できませんし、その必要性を関係者間ですら共有することは大変です。 また、時間計算も非常に面倒になります。 例えば、同じ5分でも、うるう秒をまたがる場合は5分1秒になり、またがらない場合は5分丁度になります。 こんなのをいちいちシステム側で考慮するとなると大変です。 日本ではさらにやっかいなことに、うるう秒が追加される時間帯が最悪です。 UTCで23:59:59 というのは、JST(日本標準時)では朝の8:59:59です。 株式市場の開場時刻であるなど、非常にセンシティブなタイミングです。 こんな時に1秒をシステム上で追加/削除するというのは大変リスキーな作業です。 このやっかいな課題に対応するため、様々な工夫が行われてきました。 例えば、前回も書いたUNIXタイムを使うシステムではうるう秒を無視する(追加したうるう秒を計算しない)ようにしています。 また、前々回に書いた時刻提供サーバ(NTPサーバ)はうるう秒の1秒を薄く広く分散させています。 これは、例えば 23:30:00〜23:59:59 の1800秒間は1秒を少しづつ(1800分の1秒づつ)長くして、23:59:60が存在しなくても良いようにしたりしています。 いずれにしても、システム運用担当者にとっては余計な作業でしかありませんから、うるう秒は非常に不満が多かったのです。 とはいえ、このようなことが気になるようになってきたのはせいぜいこの20年のことです。 それ以前は多くのコンピュータシステムがオフライン(ネットワークに非接続)で利用されていましたし、ネットワーク接続といっても今よりはるかに遅い回線でしたからうるう秒の1秒が問題になることはほとんどなかったのです。

4. うるう秒の廃止

このように課題の多かったうるう秒ですが、2022年の国際度量衡の総会で議題となり、当面はうるう秒の追加/削除を行わないという決議が行われました。 その翌2023年にはうるう秒の廃止が決まりました。 システム運用の面からは、「やれやれ」でしかないのですが、正確な時刻を必要とする分野では新たな課題となるわけでしょうから、全てが丸く収まったというわけではないようです。

5. まとめ

1972年からうるう秒という仕組みが導入されました。 これは地球の自転の変化を1年の長さに反映するために考案されたものでした。 当時は現在のようなコンピュータシステムも高速ネットワークもありませんでしたので、大した問題とはなりませんでした。 その後21世紀に入りコンピュータとネットワークが高速化するに従い、うるう秒への対応が重要となってきます。 コンピュータシステムの多くはうるう秒への考慮がなされていません。 対応をするにしても費用がかかる上、その効果を発揮するのは最大でも半年に1秒しかありません。 それどころか、対応することで日常処理にバグが発生するやもしれません。システム開発担当者にとって食指の動く話ではありません。 実際、システム開発会社や保守担当者からはやっかいな作業として認知されており、実際にトラブル(うるう秒の瞬間に処理ミスが発生)も発生していました。 そのためもあり、うるう秒については国際度量衡総会で廃止することが2023年に決まり、今後はうるう秒が追加されることはなくなりました。

6. (おまけ)ユリウス暦とグレゴリオ暦

この章は全て余談です。 セキュリティともコンピュータとも関係ありませんので興味のない方は読み飛ばしてください。 現代は、ほぼ全世界でグレゴリオ暦が採用されています。 グレゴリオ暦は16世紀に発布された暦ですが、現代でも通用する極めて精度の高い暦です。 その前に使われていたのは、ユリウス暦(カエサルの時代に制定された暦)だったのですが、これはこれで(時代を考えると)恐ろしく精緻な暦で、ユリウス暦が利用された1600年間でわずか10日しかズレなかったそうです。 ちなみに、日本では明治5年に太陰太陽暦(天保暦)からグレゴリオ暦に改暦した際、12/2の次が翌年1/1となったため、ほぼ30日程度のズレが生じています。 ただ、これは天保暦というより、それ以前の暦(特に中世で使われた宣明暦)が原因のように思います。 さらに脱線しますが、太陽暦に比べると太陰太陽暦の方がはるかに設計は難しいです。 というのは、太陰太陽暦では毎月は必ず月の満ち欠けと一致させる必要があるためです。 つまり、毎月一日(ついたち)は新月で、15日は満月(十五夜)でなくてはなりません。 そもそも連動していない太陽の動きと月(太陰)の動きを混ぜ交ぜにして一つの暦を作ろうというのですから辻妻を合わせるための難度たるやハンパではありません。 さて、うるう年の29日がなぜ2月なのかご存知ない方も多いと思います。 ローマ帝国の初期は一年は3月で始まり、12月でおしまいだったそうです。 で、その後は農閑期なので特に暦はなし、つまり1月2月は存在しなかったそうです。 春になってそろそろ農業を始めるべき時期になると、皇帝が年始を宣言して3月から暦が始まっていたのです。 3月が当時の1月だったと考えるとめっちゃ辻妻が合いますよね。  09月:september (sep=seven?=7) →当時の7月  10月:october(oct=octagon=8) →当時の8月  11月:november(nov=nine?=9) →当時の9月  12月:december(dec=decimal=10) →当時の10月 さて、帝国が大きくなるにつれて精密な暦が必要となります。 そのため、天文観測により1年の日数を割り出し、1月と2月を追加します。 観測の結果から、1年は365日ですから、最後の2月はそれだけ短かくなります。 さらに、4年に1度、追加の一日が必要だとわかりました。 となれば、2月にもう一日を加えようと考えるのは自然です。 だから、2月は28日しかなく、うるう年の日は2月が29日になるわけです。 以上は今まで筆者が聞きかじったことからの推測ですが、いかがでしょうか? 今回はうるう秒(と暦)についてお話しました。 次回もお楽しみに。 (本稿は 2024年2月に作成しました)

前号: No 346 / 次号: No 348 / 一覧(note.com)へ / ブログページに戻る