こんにちは北原です。
Natureのバックエンドはおおよそ Go で書かれています。3月にリリースしたNatureスマート電気も同じく Go で実装されています。
Natureスマート電気を作るにあたって、いわゆる営業日の計算をする必要があり*1、当時小さく、メンテナンスを自分でしていける Go のライブラリがなかったので github.com/soh335/shukujitsu というものを作りました。
インターフェイスとしては与えられた日付が祝日かどうかを判定するもののみを提供しており非常にシンプルな作りになっています。
if shukujitsu.IsShukujitsu(time.Now()) { fmt.Println("shukujitsu!") }
こちらは内閣府から提供されている csv データをもとに作成されています。 csvのファイル名が syukujitsu.csv や、過去様々な変遷がありましたが、現在は安定して提供されています。
github.com/soh335/shukujitsu では GitHub Actions を利用し毎週こちらをチェックし*2差分があった場合は自動で pull request が作られるようになっていて、それをマージしリリースすることで新しいデータを参照できるようになります。こちらは東京オリンピックの都合で海の日、山の日、スポーツの日が移動した際の pull request になります。
また、cli も提供されており
$ shukujitsu || somecmd
のようにすると祝日の場合は実行しないということも可能です。こちらは fujiwara さんに追加していただきました。
shukujitsu cliコマンドを追加してもらったので、crontabで平日に実行するコマンドを `shukujitsu || 実行したいコマンド` ってすれば祝日には実行されなくなる(先にexit 0するので)。つまり祝日にbotが通知して来なくなる平和が自動化される https://t.co/dgX3DeGwPw
— fujiwara (@fujiwara) 2021年2月26日
Nature では Nature Remo, Nature Remo E, Nature スマート電気を組み合わせ新しい体験を提供していきたいと思っています。 カジュアル面談も常に募集していますので興味がある方は是非話してみませんか。
*1:小売電気事業者を切り替える際は標準的には切り替え元、切り替え先事業者が切り替えをることを承諾した日に加え1営業日、2暦日をあける必要があります
*2:リポジトリに60日アクティビティがないと止まってしまうという制限があります。 ワークフローの無効化と有効化 - GitHub Docs