今回はGAS(Google Apps Script)に関して書いていきます。
以前もGASに関する記事を書いています(以下リンク)。
上記の記事で、GASを平日だけ実行する対応をしました。
トリガーを1日1回実行する設定にしつつ、プログラムで平日を判定しています。
ただ、プログラムで判定していることはシンプルです。
「月~金は平日」「土~日は休日」と判定しているだけです。
祝日には対応できていませんでした。
今回は、祝日を取得/判定する方法について書いていきます。
それでは本題へ。
やりたいこと
記事の冒頭でも触れた通り、GASで祝日のデータを取得/判定します。
以下記事の追加対応でもあるのですが、今回の記事はその前段となる内容となります。
いずれは上記の記事で載せているプログラムに祝日対応を組み込む予定です。
ですがその前に、まずは祝日のデータを
- どうやって取得するか
- どういった内容が取得できるか
- どうやって判定するか
といった辺りを、今回の記事で書いていきます。
プログラム事前準備
プログラムの事前準備として、Googleカレンダーに「日本の祝日」を追加します。
追加手順は以下の通りです。
「関心のあるカレンダーを探す」をクリック
![](https://cdn-ak.f.st-hatena.com/images/fotolife/m/miyamoto-blog/20240618/20240618204714.png)
![](https://cdn-ak.f.st-hatena.com/images/fotolife/m/miyamoto-blog/20240618/20240618204723.png)
※長いので「日本の祝日」でページ内検索した方が良いかもしれません
![](https://cdn-ak.f.st-hatena.com/images/fotolife/m/miyamoto-blog/20240618/20240618204731.png)
「設定」をクリック
![](https://cdn-ak.f.st-hatena.com/images/fotolife/m/miyamoto-blog/20240618/20240618204750.png)
※プログラムで使用します
![](https://cdn-ak.f.st-hatena.com/images/fotolife/m/miyamoto-blog/20240618/20240618204807.png)
プログラム
プログラムは以下の通りです。
// 日本の祝日カレンダー 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年の祝日を全て取得し、ログ出力してみます。
![](https://cdn-ak.f.st-hatena.com/images/fotolife/m/miyamoto-blog/20240618/20240618204915.png)
ログ出力された内容は以下の通りです。
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月でテストしてみます。
![](https://cdn-ak.f.st-hatena.com/images/fotolife/m/miyamoto-blog/20240618/20240618210723.png)
テスト結果は以下の通りです。
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
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回:日報作成)- 派生記事