Linux サーバで, cron で定期的に何かさせたい時があります. 月〜金の平日だけさせたい, ということは簡単に実現できますが, 国民の休日は除くという処理をさせたい時困ります.
国民の休日に関しては以前 も悩んだことがありました. そのときは定義ファイルを使いました. 定義ファイルを使うと古くなって使い物にならなくなる危険性がありますが, その場で手動で使うコマンドをターゲットにしていたたこともあり, 古くなればすぐ気づくので, 気づいたときに定義ファイルを新しくしようという思想でした. しかし今回のように cron による自動化では定義ファイルが古くなっても 気づきません.
なんかいい手はないかなとネットをさまよってみると ここや ここに Google Calendar API を使うという手がありました. なるほど.
というわけで, 今日が祝日だったら yes という文字列を返す isnh (is national holiday) というコマンドを作ってみました. 実行毎に google 様に尋ねるのは効率が悪いのでキャッシングしてます. キャッシュの大きさは, 2 月の官報で翌年の祝日が決定すること, google が官報を元にデータを修正するのに 2 ヶ月くらいかかるだろう ということでおよそ 8 ヶ月分の大きさにしています.
なお規約 によると商用利用は不可のようですので, 気をつけてください.