250か国以上の祝日を一行で取得!Python「holidays」ライブラリ徹底解説

タグ Pythonholidays祝日取得データ分析勤怠管理金融カレンダーpandas連携多国籍対応columnコラムlinuxLinuxwindowsWindowsGitHubオープンソースvacanza
🚀 今すぐ試せます! デモスクリプトをダウンロードして、解凍後にターミナルで bash ファイル名.sh を実行してください(中身を一度確認してから実行すると安心です)。 (macOS / Linux 環境が必要)

250か国以上の祝日を一行で取得!Python「holidays」ライブラリ徹底解説

このソフトで何ができる?

holidays(vacanza/holidays)は、世界250か国以上の政府が公認する祝日を、Pythonのコードから即座に取得できるライブラリです。「ある日が祝日かどうか」を調べるのに、自分でデータを用意したり、カレンダーをスクレイピングしたりする必要はありません。国コードを渡すだけで、その国の正確な祝日一覧が手に入ります。日本語をはじめとした多言語での祝日名表示、州・省などの地域絞り込み、銀行休業日・学校休日などカテゴリ別の取得にも対応しています。NYSE(ニューヨーク証券取引所)や東証JPXなど11の金融市場カレンダーも同梱されており、業務システムから個人の自動化スクリプトまで幅広く活用できます。

こんな人におすすめ

1. 勤怠管理・業務システムを作っているエンジニア 各国の祝日判定ロジックを自力で実装するのは手間がかかります。このライブラリを使えば、国コードを一つ渡すだけで正確な祝日セットが取得できます。複数国に対応したシステムでも、コードを大量に書く必要がありません。

2. データ分析・時系列データを扱うアナリスト 売上データや株価データを分析するとき、「この日は休日だから数値が低い」といった判別が必要になる場面があります。このライブラリはPythonの辞書(dict)と同じ使い方ができるので、pandasなどのデータ分析ツールとも組み合わせやすい設計です。

3. 多国籍ユーザー向けにサービスを運営しているチーム メール配信やプッシュ通知のタイミングを国ごとに最適化したい場合、250か国対応のこのライブラリ一つで完結します。対象国が増えても、ライブラリを入れ替える必要はありません。

インストール・使い方

ターミナルとは、文字を入力してパソコンに命令を送る画面のことです。Macでは「ターミナル」、Windowsでは「コマンドプロンプト」や「PowerShell」がこれにあたります。以下のコマンドはコピー&ペーストしてそのまま使えます。

Step 1: ライブラリをインストールする

ターミナルを開いて、次のコマンドを実行します。

pip install --upgrade holidays

pipはPythonに付属するパッケージ(部品)の管理ツールです。このコマンドを実行すると、holidaysライブラリが自動でダウンロードされます。最新の開発版が必要な場合は、以下のコマンドでも取得できます。

pip install --upgrade https://github.com/vacanza/holidays/tarball/dev

Step 2: 基本的な祝日チェックをしてみる

インストールが終わったら、Pythonのスクリプト(.pyファイル)に次のコードを書いて実行してみてください。

from datetime import date
import holidays

# 米国の祝日辞書を生成する
us_holidays = holidays.country_holidays('US')

# 指定した日が祝日かどうかを調べる
print(date(2025, 1, 1) in us_holidays)    # True(元日)
print(date(2025, 1, 2) in us_holidays)    # False(平日)
print(us_holidays.get('2025-07-04'))      # 'Independence Day'(独立記念日)

country_holidays('US')'US'の部分が国コードです。'JP'にすれば日本、'FR'にすればフランスの祝日が取得できます。inを使うと「この日は祝日か?」をTrue/Falseで確認でき、.get()を使うと祝日名を文字列で取得できます。

Step 3: 日本の祝日を日本語で取得する

language='ja'を指定すると、祝日の名前を日本語で取得できます。

import holidays

jp = holidays.country_holidays('JP', language='ja', years=2025)
for d, name in sorted(jp.items()):
    print(d, name)

years=2025で対象年を指定しています。sorted()で日付順に並べ替えて表示しています。

Step 4: 地域(州・省)や種別を絞り込む

国の中のさらに細かい地域や、祝日の種別(カテゴリ)を指定することもできます。

import holidays
from holidays import PUBLIC, BANK

# 米国プエルトリコ州のみの祝日
us_pr = holidays.country_holidays('US', subdiv='PR')

# NYSE(ニューヨーク証券取引所)の休場日
nyse = holidays.financial_holidays('NYSE')

# タイの公的祝日+銀行休業日をまとめて取得
th_bank = holidays.country_holidays('TH', categories=(PUBLIC, BANK))

subdivはsubdivision(サブディビジョン)の略で、州や省などの下位地域を意味します。financial_holidays()は金融市場専用の関数で、証券取引所の休場日を取得できます。

動かしてみた

Python 3.12.13 の環境で、パッケージのインストールから実際の祝日取得までスムーズに動作することを確認しました。以下は実際に動かしたコードとその出力の一部です。

import holidays

# 日本の2025年祝日一覧を取得する
jp = holidays.country_holidays('JP', years=2025)
print(len(jp), '件の祝日を取得')
print(list(jp.items())[:3])
16 件の祝日を取得
[(datetime.date(2025, 1, 1), "New Year's Day"),
 (datetime.date(2025, 1, 13), 'Coming of Age Day'),
 (datetime.date(2025, 2, 11), 'Foundation Day')]

2025年の日本の祝日が16件取得できました。holidays.US()による米国の祝日取得、holidays.financial_holidays('NYSE')によるNYSEの休場日取得も同様に動作し、祝日名・日付ともに正しく返ってくることを確認しています。コード量が非常に少なく、導入のハードルが低い点が実際に使ってみての印象です。

ブラウザで試す

ライブラリの公式ページでは、ブラウザからインタラクティブに祝日を確認できるデモが用意されています。国コードと年を入力するだけで、その年の祝日一覧がその場で表示されます。コードを書かなくてもライブラリの動作を体験できるので、導入前の確認に便利です。

はじめの一歩 — すぐ試せる実践のコツ

実際に使い始めるときのポイントをまとめました。以下のコードをcheck_holidays.pyという名前で保存し、python check_holidays.pyと入力して実行するだけで今日が祝日かどうか確認できます。

from datetime import date
import holidays

def is_holiday_today(country_code: str) -> str:
    today = date.today()
    cal = holidays.country_holidays(country_code, years=today.year)
    name = cal.get(today)
    if name:
        return f'今日 {today} は祝日です: {name}'
    return f'今日 {today} は平日です'

print(is_holiday_today('JP'))
print(is_holiday_today('US'))
  • まず一国だけ試す: 最初は'JP'(日本)や'US'(米国)など馴染みのある国コードで動作確認しましょう。
  • 国コードはISO 3166-1 alpha-2形式: 2文字のアルファベットコードです。日本はJP、アメリカはUS、フランスはFRなど、よく知られた形式です。
  • 年を指定してリスト化: years=2025のように年を渡すと、その年の全祝日を一覧で取得できます。複数年をリストで渡すこともできます(years=[2024, 2025])。
  • 対応国・言語の確認: holidays.list_supported_countries()で対応国一覧、holidays.list_supported_languages('JP')でその国の対応言語一覧を確認できます。
  • pandasと組み合わせる: pd.bdate_range()のカスタムカレンダーとして祝日オブジェクトを渡すことで、国別の営業日インデックスを作れます。
  • ICSエクスポートも可能: 公式ドキュメントのダウンロードページから.ics形式でカレンダーをエクスポートし、Googleカレンダーなどに直接インポートすることもできます。

活用例

  • 営業日カウント: プロジェクトの開始日と終了日を指定し、間に含まれる祝日を除いた営業日数を自動計算します。納期管理や工数見積もりに活用できます。
  • 多言語での祝日通知: language='ja'などを指定して祝日名をローカル言語で取得し、ユーザーへの通知メッセージをそのまま生成できます。多国籍ユーザー向けのアプリやサービスで役立ちます。
  • 株式取引カレンダーの自動取得: holidays.financial_holidays('XJPX')(東証)やholidays.financial_holidays('XNYS')(NYSE)で金融市場の休場日を即座に取得できます。バックテストや自動売買システムへの組み込みに便利です。
  • pandasとの連携: 時系列データフレームに「祝日フラグ」列を追加したり、営業日のみのデータを抽出したりする前処理が数行で書けます。
  • 勤怠・シフト管理システム: 従業員の出退勤データを処理する際、各国・各地域の祝日を自動判定してシフト計算に組み込めます。グローバルチームの管理にも対応できます。
  • メール・通知の配信最適化: 配信スケジューラーに祝日判定を組み込み、祝日前後のタイミングを自動調整することで、開封率の改善や迷惑メール扱いの回避につなげられます。

用語とポイント解説

country_holidays(カントリーホリデーズ) 国ごとの祝日辞書を生成するメインの関数です。かんたんに言うと、「どの国の祝日が欲しいか」を伝えるための窓口です。引数に国コードを渡すと、その国の祝日がすべて入ったオブジェクトが返ってきます。

financial_holidays(ファイナンシャルホリデーズ) 証券取引所などの金融市場専用の休場日を取得する関数です。かんたんに言うと、「株式市場がお休みの日」を調べるための専用機能です。NYSE(ニューヨーク)や東証JPX(東京)など11市場に対応しています。

subdivision(サブディビジョン) 国の中のさらに細かい地域単位のことです。かんたんに言うと、国→都道府県・州・省のように、一段階細かい地域のことです。subdiv='PR'のようにISO 3166-2コードで指定します。

PUBLIC(パブリック) すべての国で標準的に含まれる公的祝日のカテゴリです。かんたんに言うと、「国が正式に定めた休日」のグループで、何も指定しないと自動でこのカテゴリが使われます。

BANK(バンク) 銀行など金融機関が休業する日のカテゴリです。かんたんに言うと、「一般の祝日ではないけれど銀行が休む日」のことで、PUBLICとは別に指定して取得します。金融システムや振込処理に関わる開発で役立ちます。

MIC(エムアイシー) Market Identifier Code(マーケット識別コード)の略で、金融市場を一意に識別するコードです。かんたんに言うと、「どの証券取引所か」を表す4文字の記号で、ISO 10383という国際規格に基づいています。'XJPX'が東証、'XNYS'がNYSEに対応します。

ISO 3166(アイエスオー3166) 国や地域を表す国際規格のコード体系です。かんたんに言うと、「どの国か」を2文字のアルファベットで統一して表すルールで、日本はJP、米国はUSという形式です。holidaysライブラリでは国コードにこの形式を使います。

supported_languages(サポーテッドランゲージズ) そのライブラリや国が対応している言語の一覧です。かんたんに言うと、「祝日名を何語で表示できるか」のリストです。holidays.list_supported_languages('JP')のように国コードを渡すと、対応言語のコード一覧が返ってきます。

default_language(デフォルトランゲージ) languageを指定しなかったときに自動的に使われる言語のことです。かんたんに言うと、「何も言わなければこの言語で祝日名が表示される」という初期設定の言語です。多くの国では英語が設定されていますが、国によって異なります。

dict互換インターフェース(ディクト互換インターフェース) Pythonの辞書(dict)と同じ書き方で操作できる設計のことです。かんたんに言うと、「inで存在確認、.get()で値取得」といったおなじみの書き方がそのまま使えます。既存のコードに組み込むときも違和感なく使えます。


ぜひ勤怠管理システムの祝日判定や、データ分析での営業日フラグ付けなどに活用してみてはいかがでしょうか。