🧫

ゆめかわ日記

もう腹時計使って仕事しようぜ

というのは嘘で、カレンダーと時計のロジックには非常にお世話になりながら生活させていただいております。

どの企業でもカレンダー通りに業務をこなし、システムを構築していると思います。

IT企業じゃなくてもエクセルや簡単なシステムを作ることは多いので、自分が作ったり先輩が秘伝のたれのように管理してる業務システムが1つや2つあるのではないでしょうか。

そのシステムで使われているカレンダー。爆弾がついていませんか?

というのも、これを書いているのは2/29日。謎のカレンダー概念「うるう年」ですね。

うるう年は謎概念。

システムを実装する際に「謎」であるということはロジックを明確に理解していない為多くは未実装です。 エクセルでも簡単なコードでも、前任者が綿密に実装していなければ、ある日突然アポカリプスが到来します。

もし自社のシステムがカレンダーを模した周期の下で動いていて、例外である2/29日が来るとどうなるか。

🚀🚀🚀🚀🚀💥💥💥💥🤯🤯🤯🤯💥💥💥💥🤯💥💥💥🤯🤯🤯💥💥💥💥💥💥💥💥🤯🤯🚀🚀🚀🚀🚀💥💥💻💻🤯🤯🤯💥💥🤯🤯🚀🚀🚀🚀🚀💥💥💥💥🤯🤯🤯🤯💥💥💥💥🤯💥💥💥🤯🤯🤯💥💥💥💥💥💥💥💥🤯🤯🚀🚀🚀🚀🚀💥💥💻💻🤯🤯🤯💥💥🤯🤯🚀🚀🚀🚀🚀💥💥💥💥🤯🤯🤯🤯💥💥💥💥🤯💥💥💥※サービスが適用されなかったりして部署を超えて苦情の連絡が大量に来る音🤯🤯🤯💥💥💥💥💥💥💥💥🤯🤯🚀🚀🚀🚀🚀💥💥💻💻🤯🤯🤯💥💥🤯🤯🚀🚀🚀🚀🚀💥💥💥💥🤯🤯🤯🤯💥💥💥💥🤯💥💥💥🤯🤯🤯💥💥💥💥💥💥💥💥🤯🤯🚀🚀🚀🚀🚀💥💥💻💻🤯🤯🤯💥💥🤯🤯 ↑ 僕今この状態

きゃー!お客様の中にエンジニアの方はいらっしゃりますか?

...

生憎乗り合わせてる機内にはエンジニアの方はいません。前任者は溶鉱炉に溶けてもういない。

別段他社やカスタマーに迷惑が掛かっていないから、もう酔拳の達人でも料理人でもいいからこの騒ぎを少しでも早く止めるしかない...

ということでエンジニア経験0&&朝寝坊のスペシャリストである僕の出番です。

少しでも早く修正しないといけないということなのでてきとー糞パッチを当てることにします。

まず、2/29を想定できていないということなので「うるう年」の規則性を把握します。

www.nao.ac.jp

国立天文台の方の解説を参考にすると閏年になる条件は以下の通り

  • 西暦年号が4で割り切れる年をうるう年とする。
  • 例外として、西暦年号が100で割り切れて400で割り切れない年は平年とする。

驚愕ですね。4年に1回オリンピックみたいにうるう年が来るのかと思ってたら、例外処理のオンパレードじゃないですか。

func isNayaminotane(year int) bool {
    // 西暦年号が4で割り切れる年は閏年
    // でも、100で割り切れる年は閏年ではない
    // でもでもでも、400で割り切れる年は閏年
    return (year%4 == 0 && year%100 != 0) || (year%400 == 0)
}

こういった感じでしょうか。

2000年問題の時と同様、我々が生活するうえでは「まあ、分からんけどそういうことやろ」のようになあなあで適応していた処理は機械的には想定外の話で、バグり散らかして苦しめられる事って結構潜んでいます。

機械処理は命令に忠実なので、〇長が大好きな「まぁ。察せ」を遂行することは出来ません。

特にカレンダーとか規則性のあるものに関しては潜在的な例外があり、その日、そのタイミングにならないと気付けない物も多いです。

ツールでも何でも使えることが当たり前って思うんじゃなくて、どういうロジックで動いているのかもう少し興味を持っておけば、今回みたいな事例は実装の段階で防げたんだろうなぁって思うと、面白いですね。

会社からしたら面白くないけどww

当ブログの投稿内容において、具体的な根拠や出典を明示していない限り、根拠や出典の存在を一切保証しません。また、根拠や出典が明示されているか否かにかかわらず、根拠や出典の妥当性・真実性を保証しません。

尚、実際の人物や団体に影響が出ないようにある程度抽象化したり脚色したりすることもあります。ここに出てくる登場人物や出来事は全て夢の中で起こっているようなものという感覚で読んでいただけると幸いです。