[markdown] マネーフォワードのプログラマ、奥野(@bugslife)です。
最近、話題の映画ベイマックスを見ました。 賛否あるものの素晴らしい映画です、開発チームに居て欲しいですね。ベイマックス。メンターでしょうか? 「泣きたい時は、泣いてもいいんですよ」
今回は、エンジニアブログの箸休めとしてトリビアネタです。 必ず必要になるけど、あんまり重要視されず秘伝のソースになる事が多い、そう 『祝日処理』 です。
私の経験だと
- GoogleCalenderから引っ張ったり
偉い人が年次でDBにエイヤッと入れてストアドでつついたり- もっと凄い何か
等など。ちょっとやりたい事に対して手間が掛かり過ぎですよね? [/markdown][markdown]
勿論MFにはちゃんとした運用がありますが、hubotなどでライトに使いたい時など、、、 そんな状況を簡単に救えたら・・・
そうだ、gemを使おう!
holiday_jp @ komagataさん作が良さそうです。 人気漫画の言葉を借りるなら 「ほーいいじゃないか こういうのでいいんだよ こういうので」
1970〜2050年の祝日が含まれているようです。 ただ、未来の祝日は変わっていくので、定期的にgemを更新すればいいかと思います。
rubyで使う場合
HolidayJp.holiday?(Date.today)
なんの問題もありません。 独自の祝日を持つケース、一日が24時で切り替わらない、なども拡張すれば出来そうですね。
cronで起動する場合
cronの記述には曜日設定はあれど祝日は記述できません。 こんな感じでコントロールしては如何でしょうか?
環境変数読み込みに設定
ruby -rholiday_jp -e 'exit HolidayJp.holiday?(Date.today).nil?' export IS_HOLIDAY=$?
各起動スクリプトの先頭で・・・
if test $IS_HOLIDAY -eq 1 ; then exit 0 fi
デーモン等(ruby以外)の場合
gemはrubyの世界を出れません。また、cronの定時起動作戦は起動時のみしか使えません。 そんな時には、Webサーバーを立てましょう! I love Sinatra.
Webサーバー側
ruby -rholiday_jp -rsinatra -e 'get "/" do; "{\"is_holiday\": #{HolidayJp.holiday?(Date.today).nil?}}" ;end'
クライアント側
JSON.parse(open('http://localhost:4567/').read)
最後に
如何でしょうか?もっと良い方法等あるかと思います。 そんな熱い思いを誰かにぶつけたい貴方は・・・
マネーフォワードでは、Railsエンジニアを大募集しています! みなさまのご応募お待ちしております!
マネーフォワード採用サイト https://recruit.moneyforward.com/
Wantedly https://www.wantedly.com/companies/moneyforward [/markdown]