Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@takaya1992

東京五輪開催で夏の祝日が移動 〜各言語の祝日ライブラリの2021年の祝日対応を追ってみる〜

大遅刻をしてしまいましたが、これはミクシィグループ Advent Calendar 2020 12日目の記事です。

以前、2018年の年末に「#平成最後 のクリスマスに贈る、2019年の祝日対応と改元の話」という記事を書いたことがあります。この記事を書いたときは、祝日について考えることなんて当分ないだろうと考えていたんですが、2年後の今年、また祝日について考えなければならないようです……。

COVID-19による東京オリンピック 2020の延期

みなさんご存知のとおり、2020年の年初から世界中で新型コロナウイルス COVID-19が猛威をふるい、2020年の夏に東京で開催予定だった 東京オリンピック2020も2021年に延期となりました。

日本では、2020年のオリンピックの開催に合わせ、法律を改正(平成三十二年東京オリンピック競技大会・東京パラリンピック競技大会特別措置法及び平成三十一年ラグビーワールドカップ大会特別措置法の一部を改正する法律)し一部の祝日を移動し開会式と閉会式前後を連休にして、通勤・通学者を減らし、混乱を和らげるようにしていました。
東京オリンピック 2020が2021年に延期されたことで、同じように2021年の祝日も一部移動させ、開会式と閉会式前後を連休にしようという案が2020年5月29日に内閣府から提出されていました(平成三十二年東京オリンピック競技大会・東京パラリンピック競技大会特別措置法等の一部を改正する法律案)。
2020年11月27日に衆参両院でその案が可決され、平成三十二年東京オリンピック競技大会・東京パラリンピック競技大会特別措置法
等の一部を改正する法律
として、2020年12月4日に公布されました。

2021年の祝日

平成三十二年東京オリンピック競技大会・東京パラリンピック競技大会特別措置法
等の一部を改正する法律
で変更される祝日をまとめると、以下のようになります。

祝日名 本来の日付 2021年
海の日 7月 第3月曜日 7月22日 木曜日
スポーツの日 10月 第2月曜日 7月23日 金曜日
山の日 8月11日 8月8日 日曜日
山の日 振替休日 - 山の日が日曜日なのでその振替休日

ちょっと分かりづらいのでカレンダーにしてみます。

2021年の祝日

祝日ライブラリの対応状況

祝日を自分で判定するのは骨が折れるので、たいていの場合はライブラリを利用すると思います。
2021年の祝日について、各言語の祝日判定機能を提供してくれるライブラリの対応状況を見ていきたいと思います。

日本の祝日データセット holiday-jp/holiday_jp

まず、日本の祝日のデータセットを提供している holiday-jp/holiday_jp について確認しておきます。

Holiday accompanying coronation day #101」という、前述した2021年の祝日をデータセットに追加するプルリクが11月26日に出されています。
祝日についての法案が可決されたのが11月27日なので、毎度とても早い初動ですね。
実際の公布・施行を待ち、テストなどの修正をしたのち、12月2日にmasterへマージされています。

これから紹介するいくつかのライブラリはこのデータセットを利用しています。
しかしながら、このデータセットの更新を取り込んでいるかどうかはライブラリ次第なので、それぞれ確認が必要です。

Perl

Calendar::Japanese::Holiday : 対応済み(2020/12/11)

2020年12月11日に2021年の祝日に対応した バージョン 0.07 がリリースされました。

Ruby

holiday_jp : 対応済み(2020/12/09)

バージョン 0.8.0 で2021年の祝日に対応しました。

date-holiday : 未対応(2020/12/16 現在)

現在のバージョンは 2018/12/14 にリリースされた 0.0.5 で、2021年の祝日には対応していません。
0.0.5 のリリースの際に、2019年、2020年の祝日への対応をしていたので、一応アクティブな gem ではあるはずです。

holidays : 未対応(2020/12/16 現在)

全世界の祝日を集め、判定を行うライブラリです。現時点での最新のバージョンは 8.3.0 です。

これも、ライブラリとは別にデータセットを提供しているリポジトリが別に存在しています。
データセットも現時点では2021年の祝日には対応しておらず、2021年の祝日を追加する Add 2021 jp holiday という PR が GitHub 上で出されています。

holiday_japan : 対応済み(2020/11/27)

内閣府から改正案が出せれた 5/29 に move Marine day, Sports day, Mountain day for 2021 Olympic という commit が master ブランチへ push されていて、最終的に改正案が可決された 11/27 に 1.4.4 として RubyGems へリリースされています。
祝日ライブラリ界では最速の対応と言っていいかもしれません。

holiday : 未対応(2020/12/16 現在)

指定の形式のYAMLファイルを用意し、読み込ませることで祝日かどうかを判定できるライブラリのようです。
初回リリースの2011年9月からメンテナンスもされていないので、利用は推奨しません。

JavaScript

@holiday-jp/holiday_jp : 対応済み(2020/12/06)

holiday_jp データセットを利用しており、最新版のデータを取り込んだ差分が、v2.3.0 としてリリースされています。

PHP

holiday_jp : 対応済み(2020/12/06)

holiday_jp データセットを利用しており、最新版のデータを取り込んだ差分が、v2.3.0 としてリリースされています。

Java

holidayjp(holiday_jp) : 未対応(2020/12/16 現在)

holiday_jp データセットを利用していますが、最新版の取り込みはまだされていません。
現在の最新のバージョンは、2.0.1 です。

Swift

HolidayJp(holiday_jp) : 未対応(2020/12/16 現在)

holiday_jp データセットを利用していますが、最新版の取り込みはまだされていません。
最新のバージョンは、0.2.1 です。

Go

flagday : 対応済み(2020/09/01)

09/01 に Add holiday definitions in 2021 with postponement of the Olympics という PR で対応されていました。

holiday_jp : 未対応(2020/12/16 現在)

holiday_jp データセットを利用していますが、最新版の取り込みはまだされていません。
参照している holiday_jp データセットも、2019年にあった天皇の退位・即位による4月から5月にかけての10連休に対応していない少し古いものを参照しているようです。

Elixir

holiday_jp : 未対応(2020/12/16 現在)

holiday_jp データセットを利用していますが、最新版の取り込みはまだされていません。
現在の最新のバージョンは、0.3.6 です。

0
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
mixi
全ての人に心地よいつながりを

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?