Project

syukujitsu

0.0
The project is in a healthy, maintained state
内閣府が公開する 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