【GAS】Google Apps Scriptで日本の休日(土日・祝日)判定するコード

2021年1月11日

Google Apps Script(GAS)で処理を行う際に、平日か休日か判定して処理を分岐させたいケースがあります。

そこで翌日(当日)が土日・祝日の休日か判定するGASコードを作成しました。

※GAS関数として作成しているため、他の処理にも組み込みやすい形式です。

GASの処理を平日と休日で分けたい

Google Apps Script(GAS)で様々な処理を実装する中で、平日と休日で処理を分けたいケースがあります。

日本の2021年(令和3年)のカレンダー

GASは仕事の業務自動化などで使われることから、一般的な営業である平日のみ処理が稼働し、休日の場合は処理しないといった分岐を実装がよく行われます。

そのような業務処理のコードで、土日または祝日の休日かそうでないか判定する処理が必要になってきます。

土日判定はgetDayメソッドで可能

特定の日が土曜日または日曜日かという土日判定はgetDayメソッドで実現できます。

DateオブジェクトのメソッドであるgetDay()では、その日付の曜日について番号で取得可能です。

日曜:0、月曜:1、…、土曜:6

判定したい日付のgetDay()による数字が0または6の場合、土日だと判定できます。

祝日判定はGAS標準機能では不可能

土日判定は可能ですが、休日判定に必要な祝日を判定するのがGoogle Apps Script(GAS)の標準機能では難しいです。

祝日は基本的には日本固有のもので、日本ではお休みでも他の国では休みではありません。

GASのDateオブジェクトでは、国ごとに異なるような祝日はパラメータとして保持していません。

そのため、土日判定のようにGAS単体では、祝日判定ができません。

「どうやって日本の祝日を取得するか」というのが休日判定で必要な条件となります。

「日本の祝日」のGoogleカレンダー利用で祝日判定が可能

日本の祝日をどうやって取得するかという点についてはGoogleカレンダーを利用することで解決できます。

Googleカレンダーには「日本の祝日」というカレンダーが公開されています。

「日本の祝日」のGoogleカレンダーには、その日がなんという祝日かの情報が保持されています。

Googleカレンダー「日本の祝日」には、日本固有の祝日情報が記録されていて、GASの休日判定に利用可能

この日本の祝日カレンダーをGASから参照し、その日にイベントが設定されている場合、祝日と判定することが可能です。

そのため、GASでGoogleカレンダーの日本の祝日を取得することで、祝日判定が実装できます。

※なお、日本以外の国の祝日カレンダーも用意されているので、他の国でも同様の実装が可能です。

翌日が休日か判定するGASサンプルコード

実際にGAS実行時に翌日が休日か判定するサンプルコードを紹介します。

tomorrowIsHolidayという関数で、翌日が休日の場合はtrue、そうでない場合はfalseを返します。

//翌日が休日(土日、祝日)か判定する関数
function tomorrowIsHoliday(){
//実行した当日の日付情報を取得する
let today = new Date();
//当日の日付から翌日の日付情報を取得する
let tomorrow = new Date(today.setDate(today.getDate() + 1));
//翌日の曜日(0:日曜~6:土曜)を取得し、土日と判定された場合はtrueを返す
let weekInt = tomorrow.getDay();
if(weekInt <= 0 || 6 <= weekInt){ return true; } //祝日を判定するため、日本の祝日を公開しているGoogleカレンダーと接続する let calendarId = "ja.japanese#holiday@group.v.calendar.google.com"; let calendar = CalendarApp.getCalendarById(calendarId); //翌日にイベントが設定されているか取得し、イベントが有る場合はtrueを返す let tomorrowEvents = calendar.getEventsForDay(tomorrow); if(tomorrowEvents.length > 0){
return true;
}
//土日、祝日のいずれでもない場合は、休日ではないとしてfalseを返す
return false;
}

Google Apps Script(GAS)で土日や祝日の休日を判定する関数のサンプルコード

※GASコード実行時にGoogleカレンダーのCalendarAppを利用するため、初回実行時に権限許可が求められます。

tomorrowIsHoliday関数では土日判定と祝日判定の2つの処理を実装しています。

祝日判定はCalendarApp.getCalendarById(“祝日カレンダー")で祝日情報が格納されたGoogleカレンダーを取得します。

取得した祝日カレンダーで翌日にイベントがあるかチェックし、祝日判定を行っています。

どちらか一方にでも該当する場合はreturnでtrueを返し、いずれにも該当しない場合にfalseが返すことで休日判定を実現しています。

休日と平日で処理を分けたい場合はこの関数を実行し、戻り値がtrue/falseで条件分岐させれば実現可能です。

コード修正で当日やn日後の休日判定も

今回紹介したのは翌日の休日判定のGASコードですが、少し修正することで実行当日の休日判定も可能です。

8行目以降のGASの処理ではtomorrow変数に対し、土日判定や祝日判定を行っています。

tomorrow変数をtoday変数に置換すれば、判定する日付を翌日→当日に変更できます。

また、tomorrowIsHoliday関数に引数nを設定し、6行目の1加えている部分をnに置換すれば、「n日後の休日判定」にも変更可能です。

このように翌日が休日か判定するプログラムを少し応用するだけで、当日や○日後、さらには○日前といった休日判定処理を実装できます。

まとめ・終わりに

今回、Google Apps Script(GAS)で土日・祝日の休日を判定するコードを紹介しました。

曜日を取得することで土日判定し、Googleカレンダーで日本の祝日を取得することで祝日判定することで休日判定をGASで実現します。

紹介したGASのコードは翌日の日付が祝日か判定する関数ですが、少し修正すれば当日または○日後といった判定もできます。

平日と休日のGASの処理を分けたい場合は、今回紹介した関数を活用してみてください。