みやもとメモ

「Notion」「Google Apps Script」「ブログカスタマイズ」などについて書いていきます。

目次
目次

GASで祝日を取得/判定する(Googleカレンダーの「日本の祝日」を活用)

この記事をシェアする

今回はGAS(Google Apps Script)に関して書いていきます。

以前もGASに関する記事を書いています(以下リンク)。

miya-moto-memo.hatenablog.com

上記の記事で、GASを平日だけ実行する対応をしました。
トリガーを1日1回実行する設定にしつつ、プログラムで平日を判定しています。

ただ、プログラムで判定していることはシンプルです。
「月~金は平日」「土~日は休日」と判定しているだけです。
祝日には対応できていませんでした。

今回は、祝日を取得/判定する方法について書いていきます。

それでは本題へ。

やりたいこと

記事の冒頭でも触れた通り、GASで祝日のデータを取得/判定します。

以下記事の追加対応でもあるのですが、今回の記事はその前段となる内容となります。

miya-moto-memo.hatenablog.com

いずれは上記の記事で載せているプログラムに祝日対応を組み込む予定です。
ですがその前に、まずは祝日のデータを

  • どうやって取得するか
  • どういった内容が取得できるか
  • どうやって判定するか

といった辺りを、今回の記事で書いていきます。

プログラム事前準備

プログラムの事前準備として、Googleカレンダーに「日本の祝日」を追加します。
追加手順は以下の通りです。


STEP
「他のカレンダー」にある「+」をクリック
「関心のあるカレンダーを探す」をクリック
STEP
「地域限定の祝日」の「すべて表示」をクリック
STEP
「日本の祝日」をチェック
※長いので「日本の祝日」でページ内検索した方が良いかもしれません
STEP
Googleカレンダーに「日本の祝日」が反映されます
STEP
「日本の祝日」の3点リーダーをクリック
「設定」をクリック
STEP
カレンダーIDを控えておく
※プログラムで使用します

プログラム

プログラムは以下の通りです。

// 日本の祝日カレンダー
const HOLIDAY_CALENDAR = CalendarApp.getCalendarById('ja.japanese#holiday@group.v.calendar.google.com');

/**
 * 祝日を出力
 */
function outputNationalHoliday() {
  // 2024年の祝日を取得
  const events = HOLIDAY_CALENDAR.getEvents(new Date('2024/01/01'), new Date('2024/12/31'));
  for (const event of events) {
    const date = formatDate(event.getStartTime());
    const title = event.getTitle();
    // 2024年の祝日を出力
    console.log(date + "|" + title);
  }
}

/**
 * 祝日テスト
 */
function testNationalHoliday() {
  const startDate = new Date('2024/05/01');
  const endDate = new Date('2024/05/31');
  while (startDate <= endDate) {
    console.log(formatDate(startDate), isNationalHoliday(startDate));
    startDate.setDate(startDate.getDate() + 1);
  }
}

/**
 * 祝日判定
 */
function isNationalHoliday(date) {
  const events = HOLIDAY_CALENDAR.getEventsForDay(date);
  return events.length > 0;
}

/**
 * 日付をフォーマットする
 */
function formatDate(date) {
  const yyyy = date.getFullYear();
  const mm = zeroPadding(date.getMonth()+1);
  const dd = zeroPadding(date.getDate());
  return yyyy + '/' + mm + '/' + dd;
}

/**
 * ゼロ埋めする
 */
function zeroPadding(str) {
  return ('0' + str).slice(-2);
}

プログラム実行

上記のプログラムを実行します。
今回は2パターン実行します。

2024年の祝日を取得

まずは2024年の祝日を全て取得し、ログ出力してみます。

2024年の祝日を全て取得してログ出力

ログ出力された内容は以下の通りです。
2024年の祝日の一覧です。

2024/01/01|元日
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年5月)

次に、祝日判定をテストしてみます。
祝日が多めの2024年5月でテストしてみます。

祝日判定のテスト(2024年5月)

テスト結果は以下の通りです。

2024/05/01 false
2024/05/02 false
2024/05/03 true
2024/05/04 true
2024/05/05 true
2024/05/06 true
2024/05/07 false
2024/05/08 false
2024/05/09 false
2024/05/10 false
2024/05/11 false
2024/05/12 false
2024/05/13 false
2024/05/14 false
2024/05/15 false
2024/05/16 false
2024/05/17 false
2024/05/18 false
2024/05/19 false
2024/05/20 false
2024/05/21 false
2024/05/22 false
2024/05/23 false
2024/05/24 false
2024/05/25 false
2024/05/26 false
2024/05/27 false
2024/05/28 false
2024/05/29 false
2024/05/30 false
2024/05/31 false

5月の祝日である以下4つがtrueとなりました。
それ以外はfalseになっています。

2024/05/03|憲法記念日
2024/05/04|みどりの日
2024/05/05|こどもの日
2024/05/06|こどもの日 振替休日

「CalendarApp」の詳細

CalendarAppに関するリファレンスをリンクしておきます。

CalendarApp

developers.google.com

CalendarApp.getCalendarById

「CalendarApp.getCalendarById」で、指定したIDのカレンダーを取得できます。
今回は「日本の祝日」のカレンダーIDを指定しています。
developers.google.com

Calendar.getEvents

「Calendar.getEvents」で、指定した日付範囲のイベントを取得できます。
今回は「日本の祝日」をイベントとして取得しています。
developers.google.com

CalendarEvent.getStartTime

「CalendarEvent.getStartTime」で、イベントの開始日時を取得できます。
developers.google.com

CalendarEvent.getTitle

「CalendarEvent.getTitle」で、イベントのタイトルを取得できます。
developers.google.com

Calendar.getEventsForDay

「Calendar.getEventsForDay」で、指定した日のイベントを取得できます。
「日本の祝日」カレンダーであれば、指定した日が祝日かどうか判定できます。
developers.google.com

おわりに

ということで、「GASで祝日を取得/判定する(Googleカレンダーの「日本の祝日」を活用)」に関してアレコレ書いてみました。

「CalendarApp」は今回初めて使ってみましたが、色々と活用案が浮かぶ内容でした。
今後も「CalendarApp」を使って色々と試してみたくなりました。

今回の内容を前回の記事に反映したら、また別記事にて投稿しようかなと思います。

この記事が参考になれば幸いです。

(追記)
今回の記事の内容を取り込みました。
こちらも良ければぜひ。
miya-moto-memo.hatenablog.com

関連記事

GAS(Google Apps Script)に関してはいくつか記事にしています。
気になる記事があればぜひ。

GASの活用事例


GASでGmailの下書きを定期作成(1日1回:日報作成)- 派生記事

TOPへ戻る HOMEへ