祝日かどうかを判定する shukujitsu コマンドを使ってみたら便利だったのでメモしておく。
shukujitsu コマンドのバージョン。
$ shukujitsu -version shukujitsu 0.0.4
shukujitsu コマンドの使い方
shukujitsu コマンドは指定した日付が祝日かどうかを判定して結果を表示する。
大雑把な使い方だけど、指定した日付が祝日なら日付のあとになんの祝日なのかを表示して、指定した日付が祝日じゃなかったら日付だけを表示する。
$ shukujitsu -date 2021-01-01 2021-01-01 元日 $ shukujitsu -date 2021-01-02 2021-01-02
使い方の例だけど2021年1月の祝日はこんな感じでリストできる。
$ seq 1 31 | awk '{printf("2021-01-%02d\n", $1)}' | xargs -I{} shukujitsu -date {} | awk 'NF==2' 2021-01-01 元日 2021-01-11 成人の日
2021年6月の祝日をリストしたら何も表示しなかった。切ない。
$ seq 1 30 | awk '{printf("2021-06-%02d\n", $1)}' | xargs -I{} shukujitsu -date {} | awk 'NF==2'
インストール
Go 1.16 を使ってたら go install 〜
でインストールする。 go get 〜
でインストールでもいい。
$ go install github.com/soh335/shukujitsu/cmd/shukujitsu@latest
Go 1.15 を使ってたら go get 〜
でインストールする。
$ go get github.com/soh335/shukujitsu/cmd/shukujitsu
単に実行バイナリーだけがあればいいなら https://github.com/soh335/shukujitsu/releases からダウンロードする。
使い方
引数を指定しないときはシステム日付が祝日かどうか判定する。
$ date "+%Y-%m-%d" 2021-03-14 $ shukujitsu 2021-03-14
-date
オプションで祝日かどうか判定する日付を指定する。
-date
オプションは日付を Go の 2006-01-02
のフォーマットつまり YYYY-MM-DD
みたいに指定する。
$ shukujitsu -date 2021-01-01 2021-01-01 元日 $ shukujitsu -date 2021-01-02 2021-01-02
-quiet
オプションを指定すると祝日かどうかの判定結果を表示しない。
-quiet
オプションは判定結果を表示する必要がなくて shukujitsu コマンドの終了ステータスをチェックするときに使う感じ、というかたぶんこちらがよく使いそう。
shukujitsu コマンドの終了ステータスはこのあと記載していく。
$ shukujitsu -quiet $ shukujitsu -date 2021-01-01 -quiet $ shukujitsu -date 2021-01-02 -quiet
shukujitsu コマンドの終了ステータス
終了ステータス | 意味 |
---|---|
0 | 祝日 |
1 | 祝日じゃない |
2 | 日付のパースエラー |
cron と shukujitsu コマンドを組み合わせて使う
cron で 0 0 * * MON-FRI shukujitsu || echo '祝日じゃない'
みたいにやると祝日じゃない平日だけ特定の処理を実行したりできて便利。
特定の日付が祝日かどうか判定する仕組み
shukujitsu コマンドは内閣府が 祝日の csv ファイル を公開しているのを利用している。
shukujitsu コマンドは前述の csv ファイルから祝日の定義を取り出してプログラムの中に取り込んでいる。
現時点での最新バージョンの 0.0.4
は 1955/1/1 元旦から 2022/11/23 勤労感謝までの祝日に対応しているよう。
ライブラリーとしても使える
shukujitsu コマンドはライブラリーとしても使えるというかもともとは Go で任意の日付が祝日か判定するためのライブラリーだったりする。
ライブラリーとして使うときはこんな感じで任意の日付が祝日かどうか判定できる。
if shukujitsu.IsShukujitsu(time.Now()) { fmt.Println("shukujitsu!") }