日本の祝日を扱ふ holiday_jp を Elixir に移植した holiday_jp-elixir を作った
普段は Ruby や Elixir や Python や Crystal を扱ってゐる。祝日と云ふのは本質的に難しい。何時が祝日であるかは国民の祝日に関する法律と云ふ法律に依って決まる。一年のいつが祝日であるか此の法律に書いてあるし、例外處理も書かれてゐる。故に此の法律から祝日は決定出來る。では現在の此の法律を基に祝日を扱ふ處理を書いて了って好いだらうか。ところが法律は改正されるのである。即ち現在の此の法律の algorithm は過去に遡って適用出來ないし、未來に下って適用も出來ない。無論改正を全て algorithm に組み込む事は出來る。然し其んな面倒な事をするよりも、數少ない祝日を全て羅列した方が安全で簡單である。Ruby ではholiday_jpと云ふ gem が此れをやって呉れ、皆便利に使へる樣に成った。此の度 Elixir で祝日を扱ふ必要が在ったので、此れを移植した。
mix.exs の deps/0 に :holiday_jp
を追加し、同じく mix.exs の applications/0 にも :holiday_jp
を追加すれば使へる。HolidayJp.between/2
と HolidayJp.holiday?/1
と云ふ二つの函數を提供する。
iex> HolidayJp.between ~D[2016-03-01], ~D[2016-03-31] [ %HolidayJp.Holiday{date: ~D[2016-03-20], name: "春分の日", name_en: "Vernal Equinox Day", week: "日", week_en: "Sunday"}, %HolidayJp.Holiday{date: ~D[2016-03-21], name: "振替休日", name_en: "Holiday in lieu", week: "月", week_en: "Monday"}, ] iex> HolidayJp.holiday? ~D[2017-01-02] true iex> HolidayJp.holiday? ~D[2016-01-02] false
祝日の一覧はholiday-jp/holiday_jpを git submodule して依存してある。
因みに holiday_jp-elixir を使って作ったのは、平日丈罵倒して呉れる Slack bot。bot の framework にはHedwigを使った。打倒 Hubot。