0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

祝日は覚えるものじゃなくて、落としてくるもの【kurashi-skill Day 4】

0
Posted at

9月も半ばだ。有給の残りが気になる季節、エージェントに聞いた。「今月、連休ある?」

即答が返ってきた。「9月21日が敬老の日で、23日が秋分の日です」。合っている。合っているのだが、その答えはどこから来たのかと聞き返したくなった。もしモデルの記憶から来ているなら、僕はそれを信用しないことにしている。祝日は記憶が曖昧なままでも通る話題に見えて、実は毎年のように法改正やら何やらで動く。ハッピーマンデーで月曜に逃げていった祝日を、僕はいくつも見てきた。

kurashi-skillの4つ目、japan-holidaysはそういう思想のスキルだ。祝日を「知識」として持つのではなく、毎回公式のデータを落としてくる。

起: 内閣府がCSVをくれている

祝日の正本は、内閣府が公開している「国民の祝日・休日」のCSVだ。1本取ってくれば全部入っている。

curl -sm 30 https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv | iconv -f SHIFT_JIS -t UTF-8

中身は 1955/1/1,元日 のような行がずらっと並ぶだけの、潔いデータだ。APIキーもログインもいらない。2026-09-12現在、1955年から2027年11月まで収録されていた。

このCSVのいいところは、振替休日と国民の休日があらかじめ行として入っていることだ。しかも名称はどちらもただの「休日」。つまり計算する側は種別を気にしなくていい。休みは休みだ。

承: 連休は計算で出す

このスキルがやるのは3つ。特定の日が祝日かどうか、期間内の祝日一覧、そして連休の計算だ。

連休の出し方は単純で、対象期間の全日付を走査して「休み」(土曜・日曜・CSVにある日)の連続区間を切り出し、3日以上を返す。ゴールデンウィークもシルバーウィークも、特別扱いしなくてもこの計算で自然に出てくる。

ためしに今月でやってみる。CSVを引くとこうなる。

2026/9/21,敬老の日
2026/9/22,休日
2026/9/23,秋分の日

21日(月)が敬老の日、23日(水)が秋分の日。挟まれた22日(火)は国民の休日、つまり「前後が祝日の平日は休み」のルールが発動した日だ。これに前の土日(19日・20日)がくっつく。つまり来週、9月19日から23日まで5連休だ。カレンダーをぱっと見ただけでは22日の「休日」は気づきにくい。これが言いたくてこの記事を書いたと言ってもいい。

転: 2019年のことを覚えているか

「祝日くらい覚えていればいい」が通用しない決定的な年がある。2019年だ。

改元があったあの年、4月27日から5月6日まで10連休が突発で生まれた。CSVの2019年を見ると、4月30日と5月2日に「休日」、5月1日に「休日(祝日扱い)」という、普段見ない行が並んでいる。即位に伴う特例で祝日が増え、国民の休日のルールが連鎖して、ゴールデンウィークが10日に伸びた。あの春、旅行業界が沸いたのを覚えている人も多いと思う。

記憶で答えるエージェントは、こういう年に負ける。法律が変われば祝日は変わる。だからjapan-holidaysは「祝日の知識」を一切持たず、毎回CSVを取り直す設計にした。古いローカルコピーを使い回さない、という注意書きもわざわざ入れてある。

ついでに言うと、このCSVはShift_JISで配布されている。iconvを忘れると祝日名がすべて文字化けする。「元日」が読めない祝日データほど悲しいものはないので、変換は必須だ。iconvがない環境のためにPythonでの代替手順もSKILL.mdに書いた。

結: 持ち帰れる教訓3つ

  1. 祝日・料金・法令のような「変わる基準値」は、推測せず公式の配布データを正とする。 記憶は鮮度が保証されない。
  2. 文字コードは配布側が決める。 取得したらまず確認する。化けたままユーザーに見せない。
  3. 確定と推計を分けて言う。 CSVに未収録の将来年は、振替休日・国民の休日のルールで推計できる。ただしその場合は「公式CSVに未収録で、ルールによる推計である」と明示する。japan-holidaysはそう書いてある。

最後に、いま考えている企画をひとつ。

この祝日データが手元にあると、面白いことができそうだ。例えば5連休やゴールデンウィークの祝日配置を入力にして、新幹線のチケットがどの順番で、どのくらいの速度で売り切れていくかをシミュレーションしてみるプロジェクト。予約開始日の朝に何が起きているのか、データ側から眺めてみたい。実現するかどうかはまだ分からないけれど、祝日は「休みの予定」だけじゃなくて、世の中の動きの「入力データ」でもあると気づけたのは今回の収穫だ。

kurashi-skillは公開開発中。リポジトリはここ → https://github.com/tahodev/kurashi-skill

5連休の予定はまだない。でも「ある」と分かったのと「ない」と思い込んでいたのでは、週末の気分が違う。祝日は覚えるものじゃなくて、落としてくるものだ。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?