動かざることバグの如し

殿、温めておいたバグがこちらでございます

Rubyで特定の日が祝日かどうかを判別するメソッド

環境

やりたいこと

業務処理とか書いてて、特定の日が出勤日かどうか判別したい時がある。

ここでいう出勤日というのは

  • 月曜日〜金曜日
  • 勤労感謝の日とか元旦とかの定められた祝日ではない

を指す。

それをtrue/falseで返してくれるメソッドがほしい

コード

さすがRuby専用のGemがあった。

holiday-jp/holiday_jp-ruby: Japanese holiday.

が、あくまで祝日かどうかしか見ないのでDateクラスから直接叩けるようにカスタマイズした

Gemfileに以下を追加して

gem "holiday_jp"

で、bundle installすればおk

require "date"
require "holiday_jp"

class Date
  def workday?
    (1..5).include?(self.wday) && HolidayJp.holiday?(self).nil?
  end
end


p Date.new(2018,8,17).workday? # true
p Date.new(2018,8,18).workday? # false
p Date.new(2018,1,1).workday? # true

これでおkholiday_jp自体は2050年まで対応してるらしいので当面は大丈夫だと思われる。Railsでこれを使いたい場合はconfig/initializers/custom_date.rbとかファイル作って追加、rails再起動すれば動く