6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[GAS] カレンダーの「祝日のみ」と「祝日およびその他の休日」

Last updated at Posted at 2024-09-02

これは何?

GoogleAppsScript(GAS)を使って祝日判定をするときに、Googleに用意されている「日本の祝日」カレンダーを利用することが多いですが、このカレンダーには「祝日のみ」と「祝日およびその他の休日」の2つのコンテンツがあることを今日知ったので、その違いを記します。

今日知ったというか過去にはコンテンツが1つしかなかったと記憶しています。どこかのタイミングでコンテンツが増えて、しかも困ったことにデフォルトが「祝日およびその他の休日」になってるみたい。

正しく使い分けないと「節分」や「七夕」が「祝日」として判定されちゃいます。

先に注意点

カレンダーの設定画面で指定したコンテンツ(祝日のみor祝日およびその他の休日)と、GASのコードで指定するカレンダーID(祝日のみ、祝日及びその他、それぞれにカレンダIDがある)を合わせておかないとエラーになります。

祝日判定のやりかた

(1)GASを実行するアカウントでカレンダーを設定する

↓赤丸を押して、 カレンダーに登録 を選択する。
c1.png

カレンダIDを入力

↓の画面で ja.japanese.official#holiday@group.v.calendar.google.com を入力する

c2.png

コンテンツを選択

↓の画面で「祝日のみ」「祝日およびその他の休日」を選択する。

image.png

選択に応じて、カレンダー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 で追加した場合
    c4.png

  • 「祝日およびその他の休日」のカレンダーID: ja.japanese#holiday@group.v.calendar.google.com で追加した場合

c3.png

のように、設定自体が分けられていました。(訳としては other holidays なので、やはり「祝日」として意味づけされているようですね)

6
1
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
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?