祝日・営業日API
日本の祝日・振替休日・国民の休日を、1955年から2100年まで返すAPIです。「◯営業日後はいつ?」「今月末の支払日は?」といった計算に使えるJavaScriptも用意しています。
- できること
- その年の祝日の一覧 / 振替休日・国民の休日の見分け / 確定(内閣府が公表済み)か予定かの印 / 営業日の計算(◯営業日後・営業日数・休みならずらす)
- 費用・登録
- 無料・登録不要・APIキー不要(提供条件は利用状況で変わることがあります)
- 向いている用途
- 予約・配送日の表示、納期や支払日の計算、勤怠・シフト、カレンダーの祝日表示
- 気をつけること
- 予定の年(
confirmed: false)は法律の改正や春分・秋分の正式発表で変わることがあります。止まらないことは保証していません。
データ: 内閣府「国民の祝日について」の一覧(版は /holidays/v1/meta.json で確認できます)
はじめかた(3ステップ)
- ブラウザで開いてみる: https://api.shirugear.com/holidays/v1/2026.json を開くと、2026年の祝日の一覧が返ります。URLの数字を年に変えるだけです。
- 営業日の計算に使う: 完成例のように
holidays.jsを読み込むと、土日・祝日を除いた営業日を数えられます。 - 利用規約を確かめる: 利用規約をご確認ください。登録や申し込みは要りません。
いろいろな言語から呼ぶ
サーバー側のプログラムやコマンドからも、URLを開くだけで使えます。1年分を1回で受け取れるので、受け取った結果を手元に保存して使い回すと効率的です。
const res = await fetch("https://api.shirugear.com/holidays/v1/2026.json");
const data = await res.json();
const names = Object.fromEntries(data.holidays.map((h) => [h.date, h.name]));
console.log(names["2026-11-03"] ?? "祝日ではありません"); // 文化の日curl -s https://api.shirugear.com/holidays/v1/2026.json
# 日付と名前の一覧にする(jq を使う場合)
curl -s https://api.shirugear.com/holidays/v1/2026.json \
| jq -r '.holidays[] | "\(.date) \(.name)"'<?php
$data = json_decode(file_get_contents('https://api.shirugear.com/holidays/v1/2026.json'), true);
$names = array_column($data['holidays'], 'name', 'date');
echo $names['2026-11-03'] ?? '祝日ではありません', "\n"; // 文化の日import json
import urllib.request
url = "https://api.shirugear.com/holidays/v1/2026.json"
with urllib.request.urlopen(url, timeout=10) as res:
data = json.load(res)
names = {h["date"]: h["name"] for h in data["holidays"]}
print(names.get("2026-11-03", "祝日ではありません")) # 文化の日その場で試す
その年の祝日
| 日付 | 曜日 | 名前 | 種類(kind) |
|---|
営業日の計算
営業日の計算の完成例
次の HTML をそのまま貼ると、「今日から5営業日後」と「今月末の支払日(休みなら前の営業日)」が出ます。loadCalendar の引数で、会社ごとの休み(年末年始・お盆など)を足せます。
<!-- 営業日の計算(このまま HTML に貼って試せます) -->
<p>今日から5営業日後: <output id="due"></output></p>
<p>今月末の支払日(休みなら前の営業日): <output id="pay"></output></p>
<script type="module">
import { loadCalendar } from "https://api.shirugear.com/holidays/v1/holidays.js";
// 土日・祝日・振替休日・国民の休日に加えて、年末年始(12/29〜1/3)を休みにする
const cal = await loadCalendar({ yearEnd: { from: "12-29", to: "01-03" } });
const now = new Date();
document.getElementById("due").textContent = cal.addBusinessDays(now, 5);
// 月末(31日・30日・28日など)を求めて、休みなら前の営業日へずらす
const end = new Date(now.getFullYear(), now.getMonth() + 1, 0);
document.getElementById("pay").textContent = cal.adjust(end, "previous");
</script>
<script type="module"> は今のブラウザ(Chrome・Edge・Safari・Firefox)で動きます。Node.js(18以降)でも同じ URL から import できます。
URLの一覧
どれも、URLを開く(GET)だけで JSON(UTF-8)が返ります。先頭は https://api.shirugear.com です。自分のサイトのJavaScriptから直接呼べます(CORS対応)。
| URL | 返すもの |
|---|---|
/holidays/v1/{西暦4桁}.json | その年の祝日・休日の一覧(1955〜2100年)。例: /holidays/v1/2026.json |
/holidays/v1/all.json | 全期間の祝日・休日(日付 → 名前・種類)。自分のプログラムで判定したいときに。約130KB(通信は圧縮されて約12KB) |
/holidays/v1/meta.json | データの版・確定している年・件数 |
/holidays/v1/holidays.js | 営業日を計算する JavaScript(ES モジュール)。使い方 |
- 年は半角数字4桁の西暦で指定します(
2026)。範囲外の年は 404 です。 - 呼び出しは
GET(またはHEAD)だけです。独自のヘッダを付けずに呼んでください。
その年の祝日
応答の例
GET https://api.shirugear.com/holidays/v1/2026.json
{
"year": 2026,
"confirmed": true,
"holidays": [
{ "date": "2026-01-01", "weekday": "木", "name": "元日", "kind": "national", "official_name": "元日" },
…
{ "date": "2026-05-06", "weekday": "水", "name": "振替休日", "kind": "substitute", "official_name": "休日" },
…
{ "date": "2026-09-22", "weekday": "火", "name": "国民の休日", "kind": "citizens", "official_name": "休日" },
…
],
"confirmed_through": 2027,
"data_version": "2026-11-01"
}
各項目
| 項目 | 型 | 内容 |
|---|---|---|
year | 数値 | 年 |
confirmed | 真偽値 | true は内閣府が公表済みの確定した年、false は今の祝日法で計算した予定(確定と予定) |
holidays | 配列 | その年の祝日・休日を日付の順に。下の表の項目が入ります |
confirmed_through | 数値 | 確定している最後の年(例: 2027) |
data_version | 文字列 | データの版。内閣府の一覧が変わったのを取り込んだ日("YYYY-MM-DD") |
| holidays の項目 | 型 | 内容 |
|---|---|---|
date | 文字列 | 日付 "YYYY-MM-DD"(日本の日付) |
weekday | 文字列 | 曜日("日"〜"土") |
name | 文字列 | 名前。振替休日・国民の休日は見分けた名前("振替休日"・"国民の休日") |
kind | 文字列 | 種類(下の表) |
official_name | 文字列 | 内閣府の一覧での書き方(振替休日・国民の休日は "休日")。予定の年は name と同じか "休日" |
| kind | 意味 | 例 |
|---|---|---|
national | 国民の祝日 | 元日、成人の日、春分の日、スポーツの日 など |
substitute | 振替休日。日曜日の祝日のあとの、最初の祝日でない日 | 2026-05-06(5/3 憲法記念日が日曜日のため) |
citizens | 国民の休日。前の日と次の日が祝日である日 | 2026-09-22(敬老の日と秋分の日にはさまれた日) |
special | その年だけの休日(法律で個別に定めたもの) | 1989-02-24 昭和天皇の大喪の礼、2019-05-01 天皇の即位の日 など6日 |
振替休日は1973年4月12日から、国民の休日は1988年から始まった制度です。それより前の年には出てきません。
確定と予定
- 確定(
confirmed: true): 内閣府が「国民の祝日について」で公表している年です(1955年〜翌年。今は 2027年まで)。内閣府の一覧のとおりに返します。 - 予定(
confirmed: false): その先の年は、今の祝日法で計算した予定です。春分の日・秋分の日は、国立天文台と同じ方法で計算した春分・秋分の日付です(JPL の天体暦 DE440s を使った計算で、1955〜2027年の146回すべてが内閣府の一覧と一致することを確かめています)。 - 予定の年は、次のことで変わることがあります。祝日法の改正(祝日の新設・移動)、春分の日・秋分の日の正式な決定(前の年の2月に官報で公表)、その年だけの休日(即位の礼など)。カレンダーやシステムで先の年を使うときは、
confirmedを見て「予定」と表示するなどしてください。 - 毎日、内閣府の一覧を確かめています。新しい年が公表されると、その年が確定に変わります。また、今の祝日法での計算が内閣府の一覧と合わなくなったとき(法律が変わったとき)は、データを切り替えずに止め、こちらで確かめてから直します。
営業日の計算(holidays.js)
https://api.shirugear.com/holidays/v1/holidays.js は、全期間の祝日(all.json)を一度だけ読み込み、営業日の計算をブラウザの中で行う JavaScript です。日付は "YYYY-MM-DD" の文字列か Date(その端末の日付として読みます)で渡し、"YYYY-MM-DD" で返ります。端末の時差の影響は受けません。
import { loadCalendar } from "https://api.shirugear.com/holidays/v1/holidays.js";
const cal = await loadCalendar(); // 土日・祝日・振替休日・国民の休日が休み
loadCalendar(options) の options
| 項目 | 既定 | 内容 |
|---|---|---|
closedWeekdays | [0, 6] | 休みの曜日(0=日 … 6=土)。土曜も営業なら [0] |
holidays | true | 祝日・振替休日・国民の休日を休みにする |
yearEnd | false | 年末年始の休み。"bank" は銀行と同じ12月31日〜1月3日。{ from: "12-29", to: "01-03" } のようにも指定できます |
closedDates | [] | ほかに休みにする日(お盆休み・創立記念日など)。例: ["2026-08-13", "2026-08-14"] |
openDates | [] | 休みの日でも営業する日(ほかのどの指定よりも優先) |
使える関数
| 関数 | 返すもの | 例 |
|---|---|---|
isBusinessDay(date) | 営業日なら true | cal.isBusinessDay("2026-05-06") → false |
addBusinessDays(date, n) | n 営業日後(n が負なら前)。その日自身は数えません | cal.addBusinessDays("2026-04-30", 3) → "2026-05-08" |
adjust(date, "next" | "previous") | 休みなら次(前)の営業日へ。営業日ならそのまま | cal.adjust("2026-05-31", "previous") → "2026-05-29" |
countBusinessDays(from, to) | 2つの日の間(両端を含む)の営業日の数 | cal.countBusinessDays("2026-05-01", "2026-05-31") → 18 |
businessDaysInMonth(year, month) | その月の営業日の一覧 | cal.businessDaysInMonth(2026, 1)[0] → "2026-01-05"(年末年始を休みにした場合) |
lastBusinessDayOfMonth(year, month) | その月の最終営業日 | cal.lastBusinessDayOfMonth(2026, 2) → "2026-02-27" |
holiday(date) | その日の祝日・休日({ date, name, kind })。無ければ null | cal.holiday("2026-05-06").name → "振替休日" |
isHoliday(date) | 祝日・休日なら true(土日は含みません) | |
isConfirmed(date) | その年の祝日が確定していれば true | cal.isConfirmed("2030-01-01") → false |
- 1955年〜2100年の外の日付を渡すと
RangeError、日付の形が違うとTypeErrorになります。 loadCalendarは通信できないと失敗(例外)します。画面では、計算できなかったことを伝えて手で入力してもらうなどしてください。- 祝日だけを自分で判定したいときは、
/holidays/v1/all.jsonを直接読むこともできます(holidaysは日付 →{ name, kind }の形です)。
エラー
うまくいかないときは、HTTPの状態コードと、次の形の JSON を返します。code は固定の値なので、プログラムで見分けるときはこれを使ってください(message は説明文で、言い回しが変わることがあります)。
{"error":{"status":404,"code":"year_not_found","message":"この年の祝日はありません。…"}}
| 状態 | code | いつ |
|---|---|---|
| 400 | invalid_year | 年の形が違う(2桁・和暦・文字など) |
| 404 | year_not_found | 1955年〜2100年の外の年 |
| 404 | not_found | URLが違う |
| 405 | method_not_allowed | GET / HEAD 以外で呼んだ |
データの更新・キャッシュ・呼び出し回数
- 出典: 内閣府「国民の祝日について」で公開されている祝日の一覧(CSV)。予定の年の春分・秋分は、NASA JPL の天体暦 DE440s を使った計算です。
- 更新: 内閣府の一覧は年に1回(2月ごろ)更新されます。毎日 4:50(日本時間)ごろに確かめ、変わっていれば作り直します。
- データの版(
data_version): 内閣府の一覧が変わったのを取り込んだ日です。/holidays/v1/meta.jsonには、作った日時(built_at・UTC)、確定している最後の年、件数も入っています。 - キャッシュ: 応答は1日キャッシュしてかまいません(祝日は年に1回しか変わりません)。
ETag/Last-Modifiedに対応しているので、変わっていなければ 304 が返ります。 - 呼び出し回数の目安: 決まった上限はありませんが、1つの利用元から1秒あたり10回程度までにしてください。日付ごとに呼ぶのではなく、年のファイルか
all.jsonを一度取って使い回してください。
変更の方針と更新履歴
- v1 の中では、項目を足すことはあっても、今ある項目の名前や意味は変えません。知らない項目が増えていても無視するように作ってください。
kindの種類が増えることもあります。 - 互換性のない変更は、URLの版を分けて(
/holidays/v2/など)行います。v1 を終わらせるときは、できるかぎり6か月以上前にこのページでお知らせします。 - 提供条件(無料・登録不要・アクセス回数の上限など)は、利用状況に応じて変えることがあります(利用規約第4条)。
更新履歴
- 2026年11月1日
- 公開。
機械で読める仕様(型定義・OpenAPI)
- TypeScript の型定義:
/holidays/types.d.ts - OpenAPI 3.1:
/holidays/openapi.json
用語の説明
- 国民の祝日
- 「国民の祝日に関する法律」(祝日法)で決まっている祝日です。今は年に16日あります。
- 振替休日
- 祝日が日曜日に重なったとき、そのあとの最初の祝日でない日が休みになる日です。土曜日の祝日には振替休日はありません。
- 国民の休日
- 前の日と次の日が祝日である日(祝日でない日)が休みになる日です。9月の敬老の日と秋分の日の間などで起こります。
- 営業日
- 会社やお店が営業している日です。このAPIの計算では、ふつう土日・祝日・振替休日・国民の休日を除いた日を指します。年末年始などは options で足せます。
- ES モジュール
- JavaScript のファイルを
importで読み込む仕組みです。HTML では<script type="module">の中で使います。
よくある質問
本当に無料ですか?登録は必要ですか?
現在は無料で、登録やAPIキーも要りません。個人・法人、営利・非営利を問わず使えます。ただし利用状況に応じて提供条件を変えることがあり、そのときはできるかぎりこのページでお知らせします。
来年や再来年の祝日も分かりますか?
2100年まで分かります。内閣府が公表している年(今は2027年まで)は確定、その先は今の祝日法で計算した予定で、confirmed が false になります。春分の日・秋分の日は前の年の2月に官報で正式に決まるので、予定の年は変わることがあります。
「休日」と「振替休日」「国民の休日」の違いは?
内閣府の一覧では、振替休日も国民の休日も「休日」とだけ書かれています。このAPIは前後の日から見分けて、日曜日の祝日の代わりの休みを「振替休日」、祝日にはさまれた日を「国民の休日」として返します。もとの書き方は official_name に入っています。
土曜日の祝日は振替休日になりますか?
なりません。振替休日は日曜日の祝日だけが対象です。土曜日が祝日の年は、平日の休みは増えません。
年末年始やお盆は休みとして入っていますか?
祝日ではないので入っていません。営業日の計算では yearEnd: "bank"(銀行と同じ12月31日〜1月3日)や closedDates(お盆休みなど)で、会社ごとの休みを足せます。
銀行の休業日(営業日)と同じになりますか?
loadCalendar({ yearEnd: "bank" }) とすると、土日・祝日・振替休日・国民の休日と12月31日〜1月3日が休みになり、銀行の休業日と同じ考え方になります。
1955年より前や、2100年より先の祝日は?
このAPIでは返しません(範囲外の年は 404)。1955年より前は内閣府の一覧に無いため、2100年より先は先すぎて予定としても役に立ちにくいためです。
アクセス数に上限はありますか?
決まった上限はありませんが、目安として1つの利用元から1秒あたり10回程度までにしてください。祝日は年に1回しか変わらないので、取ったデータは使い回してください。
ご利用にあたって
ご利用の前に利用規約をご確認ください。データの正確さや、止まらないことは保証していません。正式な祝日は内閣府の「国民の祝日について」でご確認ください。ご質問・不具合のご連絡は、シルギアのお問い合わせ窓口から、件名に「API」と入れてお送りください。