これは何?
GoogleAppsScript(GAS)を使って祝日判定をするときに、Googleに用意されている「日本の祝日」カレンダーを利用することが多いですが、このカレンダーには「祝日のみ」と「祝日およびその他の休日」の2つのコンテンツがあることを今日知ったので、その違いを記します。
今日知ったというか過去にはコンテンツが1つしかなかったと記憶しています。どこかのタイミングでコンテンツが増えて、しかも困ったことにデフォルトが「祝日およびその他の休日」になってるみたい。
正しく使い分けないと「節分」や「七夕」が「祝日」として判定されちゃいます。
先に注意点
カレンダーの設定画面で指定したコンテンツ(祝日のみ
or祝日およびその他の休日
)と、GASのコードで指定するカレンダーID(祝日のみ、祝日及びその他、それぞれにカレンダIDがある)を合わせておかないとエラーになります。
祝日判定のやりかた
(1)GASを実行するアカウントでカレンダーを設定する
カレンダIDを入力
↓の画面で ja.japanese.official#holiday@group.v.calendar.google.com
を入力する
コンテンツを選択
↓の画面で「祝日のみ」「祝日およびその他の休日」を選択する。
選択に応じて、カレンダーIDが異なるので注意。
「祝日のみ」のカレンダーID: ja.japanese.official#holiday@group.v.calendar.google.com
「祝日およびその他の休日」のカレンダーID: ja.japanese#holiday@group.v.calendar.google.com
(2)GASのコード
function getJapaneseHolidays() {
const calendarId = 'ja.japanese.official#holiday@group.v.calendar.google.com'
const holidayCalendar = CalendarApp.getCalendarById(calendarId);
const start = new Date(2024, 0, 1);
const end = new Date(2025, 0, 1);
const holidayEvents = holidayCalendar.getEvents(start, end);
const holidayNames = holidayEvents.map(holidayEvent => {
return `${Utilities.formatDate(holidayEvent.getStartTime(), "JST", "yyyy-MM-dd")} ${holidayEvent.getTitle()}`;
})
console.log(holidayNames);
}
[ '2024-01-01 銀行休業日',
'2024-01-01 元日',
'2024-01-02 銀行休業日',
'2024-01-03 銀行休業日',
'2024-01-08 成人の日',
'2024-02-11 建国記念の日',
'2024-02-12 建国記念の日 振替休日',
'2024-02-23 天皇誕生日',
'2024-03-20 春分の日',
'2024-04-29 昭和の日',
'2024-05-03 憲法記念日',
'2024-05-04 みどりの日',
'2024-05-05 こどもの日',
'2024-05-06 こどもの日 振替休日',
'2024-07-15 海の日',
'2024-08-11 山の日',
'2024-08-12 休日 山の日',
'2024-09-16 敬老の日',
'2024-09-22 秋分の日',
'2024-09-23 秋分の日 振替休日',
'2024-10-14 スポーツの日',
'2024-11-03 文化の日',
'2024-11-04 文化の日 振替休日',
'2024-11-23 勤労感謝の日',
'2024-12-31 大晦日' ]
注意点にも書きましたが、「カレンダーの設定」と「GASの中のカレンダーID」を揃えておかないと下記のエラーになります。
TypeError: Cannot read properties of null (reading 'getEvents')
比較してみる
ここで calendarId
に「祝日およびその他の休日」のカレンダーID を指定すると下記のような結果になります。(GASの実行前に、カレンダーの「祝日カレンダーのコンテンツ」を「祝日およびその他の休日」に変更する必要あり)
[ '2024-01-01 銀行休業日',
'2024-01-01 元日',
'2024-01-02 銀行休業日',
'2024-01-03 銀行休業日',
'2024-01-08 成人の日',
'2024-02-03 節分',
'2024-02-11 建国記念の日',
'2024-02-12 建国記念の日 振替休日',
'2024-02-23 天皇誕生日',
'2024-03-03 雛祭り',
'2024-03-20 春分の日',
'2024-04-29 昭和の日',
'2024-05-03 憲法記念日',
'2024-05-04 みどりの日',
'2024-05-05 こどもの日',
'2024-05-06 こどもの日 振替休日',
'2024-05-12 母の日',
'2024-07-07 七夕',
'2024-07-15 海の日',
'2024-08-11 山の日',
'2024-08-12 休日 山の日',
'2024-09-16 敬老の日',
'2024-09-22 秋分の日',
'2024-09-23 秋分の日 振替休日',
'2024-10-14 スポーツの日',
'2024-11-03 文化の日',
'2024-11-04 文化の日 振替休日',
'2024-11-15 七五三',
'2024-11-23 勤労感謝の日',
'2024-12-25 クリスマス',
'2024-12-31 大晦日' ]
表にしてみたよ
日付 | 祝日のみ | 祝日およびその他の休日 |
---|---|---|
2024-01-01 | 銀行休業日 | 銀行休業日 |
2024-01-01 | 元日 | 元日 |
2024-01-02 | 銀行休業日 | 銀行休業日 |
2024-01-03 | 銀行休業日 | 銀行休業日 |
2024-01-08 | 成人の日 | 成人の日 |
2024-02-03 | 節分 | |
2024-02-11 | 建国記念の日 | 建国記念の日 |
2024-02-12 | 建国記念の日 振替休日 | 建国記念の日 振替休日 |
2024-02-23 | 天皇誕生日 | 天皇誕生日 |
2024-03-03 | 雛祭り | |
2024-03-20 | 春分の日 | 春分の日 |
2024-04-29 | 昭和の日 | 昭和の日 |
2024-05-03 | 憲法記念日 | 憲法記念日 |
2024-05-04 | みどりの日 | みどりの日 |
2024-05-05 | こどもの日 | こどもの日 |
2024-05-06 | こどもの日 振替休日 | こどもの日 振替休日 |
2024-05-12 | 母の日 | |
2024-07-07 | 七夕 | |
2024-07-15 | 海の日 | 海の日 |
2024-08-11 | 山の日 | 山の日 |
2024-08-12 | 休日 山の日 | 休日 山の日 |
2024-09-16 | 敬老の日 | 敬老の日 |
2024-09-22 | 秋分の日 | 秋分の日 |
2024-09-23 | 秋分の日 振替休日 | 秋分の日 振替休日 |
2024-10-14 | スポーツの日 | スポーツの日 |
2024-11-03 | 文化の日 | 文化の日 |
2024-11-04 | 文化の日 振替休日 | 文化の日 振替休日 |
2024-11-15 | 七五三 | |
2024-11-23 | 勤労感謝の日 | 勤労感謝の日 |
2024-12-25 | クリスマス | |
2024-12-31 | 大晦 |
1月1日の「銀行休業日」は「祝日」の判定なんですね。そして「その他の休日」に入っているイベントは「休日」ではないので「その他のイベント」が正しいネーミングなのかなと思いました。
Chromeの言語設定による違い
Chromeの言語設定を日本語からEnglishに設定した後にカレンダーの設定画面にアクセスしてみたら、「カレンダーを追加」する時点で
-
「祝日のみ」のカレンダーID:
ja.japanese.official#holiday@group.v.calendar.google.com
で追加した場合
-
「祝日およびその他の休日」のカレンダーID:
ja.japanese#holiday@group.v.calendar.google.com
で追加した場合
のように、設定自体が分けられていました。(訳としては other holidays
なので、やはり「祝日」として意味づけされているようですね)