Go で祝日判定をする github.com/soh335/shukujitsu を書きました

こんにちは北原です。

Natureのバックエンドはおおよそ Go で書かれています。3月にリリースしたNatureスマート電気も同じく Go で実装されています。

energy.nature.global

Natureスマート電気を作るにあたって、いわゆる営業日の計算をする必要があり*1、当時小さく、メンテナンスを自分でしていける Go のライブラリがなかったので github.com/soh335/shukujitsu というものを作りました。

github.com

インターフェイスとしては与えられた日付が祝日かどうかを判定するもののみを提供しており非常にシンプルな作りになっています。

if shukujitsu.IsShukujitsu(time.Now()) {
    fmt.Println("shukujitsu!")
}

こちらは内閣府から提供されている csv データをもとに作成されています。 csvのファイル名が syukujitsu.csv や、過去様々な変遷がありましたが、現在は安定して提供されています。

github.com/soh335/shukujitsu では GitHub Actions を利用し毎週こちらをチェックし*2差分があった場合は自動で pull request が作られるようになっていて、それをマージしリリースすることで新しいデータを参照できるようになります。こちらは東京オリンピックの都合で海の日、山の日、スポーツの日が移動した際の pull request になります。

github.com

また、cli も提供されており

$ shukujitsu || somecmd

のようにすると祝日の場合は実行しないということも可能です。こちらは fujiwara さんに追加していただきました。


Nature では Nature Remo, Nature Remo E, Nature スマート電気を組み合わせ新しい体験を提供していきたいと思っています。 カジュアル面談も常に募集していますので興味がある方は是非話してみませんか。

herp.careers

*1:小売電気事業者を切り替える際は標準的には切り替え元、切り替え先事業者が切り替えをることを承諾した日に加え1営業日、2暦日をあける必要があります

*2:リポジトリに60日アクティビティがないと止まってしまうという制限があります。 ワークフローの無効化と有効化 - GitHub Docs