Project

syukujitsu

0.0
No release in over 3 years
内閣府が公開する CSV を基に、日本の祝日データを Enumerable なインターフェースで扱います。
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Runtime

~> 3.0
 Project Readme

Syukujitsu

Test Gem Version

内閣府「国民の祝日」のデータを提供する Ruby gem です。 内閣府が公開する CSV を正とし、1955年〜の祝日データを Enumerable なインターフェースで扱えます。 土日などの曜日判定は含まず、「国民の祝日」のみを対象としています。

インストール

# Gemfile
gem "syukujitsu"
bundle install

使い方

require "syukujitsu"

# 祝日かどうか
Syukujitsu.include?(Date.new(2025, 1, 1))  #=> true
Syukujitsu.include?(Date.new(2025, 1, 2))  #=> false

# 祝日名を取得
Syukujitsu.name(Date.new(2025, 1, 1))  #=> "元日"

# Entity オブジェクトを取得
entity = Syukujitsu.on(Date.new(2025, 1, 1))
entity.date  #=> #<Date: 2025-01-01>
entity.name  #=> "元日"

# 期間内の祝日を取得
Syukujitsu.between(Date.new(2025, 1, 1), Date.new(2025, 3, 31))
#=> [#<Syukujitsu::Entity 2025-01-01 元日>, #<Syukujitsu::Entity 2025-01-13 成人の日>, ...]

# Enumerable
Syukujitsu.select { |e| e.date.year == 2025 }
Syukujitsu.count

DateDateTimeTime いずれも引数に渡せます。

Date 拡張

core_ext を require すると Date にメソッドが生えます。

require "syukujitsu/core_ext"

Date.new(2025, 1, 1).holiday?      #=> true
Date.new(2025, 1, 1).holiday_name  #=> "元日"

グローバルな monkey patch を避けたい場合は、Refinement 版も使えます。

require "syukujitsu/refinements/date_methods"

class MyApp
  using Syukujitsu::Refinements::DateMethods

  def greet(date)
    if date.holiday?
      "#{date.holiday_name}です"
    else
      "平日です"
    end
  end
end

CSV の更新

内閣府の最新データで holidays.csv を更新できます。

bundle exec syukujitsu update

リポジトリでは GitHub Actions により毎週土曜に差分を検知し、更新がある場合は自動で PR が作成されます。

API

メソッド 戻り値 説明
Syukujitsu.include?(date) Boolean 祝日かどうか
Syukujitsu.on(date) Entity / nil 祝日の Entity を返す
Syukujitsu.name(date) String / nil 祝日名を返す
Syukujitsu.between(start, end) Array<Entity> 期間内の祝日を返す
Syukujitsu.each Enumerator 全祝日をイテレート

データソース

内閣府「国民の祝日」CSV

ライセンス

MIT License