日本の祝日を取得できるDartライブラリのholiday_jp-dartを作りました
業務で銀行の営業日を取得する必要があったのでどのように実装するか検討していました。
銀行の営業日はこちらを解釈すると以下の定義です。
土・日・祝日(振替休日含む)と12月31日~1月3日を除いたものが銀行の営業日
Dartでサーバサイドを実装しているので祝日を取得できるライブラリを探すとnholiday_jpが見つかりました。
他の言語だと祝日はholiday_jpのYAMLのデータセットをベースに以下のシンプルな機能を実装しているライブラリがあります(たとえばgoはこちらです)。
- 特定の日の祝日を取得する
- 特定の日が祝日かどうか判定する
- 2つの日の間の祝日をすべて取得する
Goでは、データセットを辞書の変数としてコードに変換し、それに対して年月日がマッチするかどうか判定して祝日を取得しているシンプルなものでした。
これならすぐ実装できそうだったので実装してpub.devへholiday_jpのパッケージとして出しました。
さくっと作れたのですが工夫したところがあるので紹介します。
最新のデータセットを使っているかどうかをGitHub ActionsのCIで毎日確認する
データセットは随時更新されるので、追従していないとライブラリが新しい祝日に追従できません。
毎日CIでチェックしてちゃんと最新かどうかを以下のようにバッチとして出しています。
他のライブラリに依存しないようにした
最初は年月日に整形するところでintlに依存していたのですがよく考えたら依存しなくても実装できるので途中で依存を抜きました。
ライブラリに追従する必要がないのでよりメンテンナスが少なくできます。
まとめ
holiday_jpのデータセットのYAMLから生成した情報を使って祝日を取得するDartのパッケージのholiday_jpを作りました。
CHANGELOGを自動で作ったりはCiderを使えばいい感じでできそうだったので違うパッケージつくるときとかは試してみようと思います。