毎日ルーティンスクリプトを動かしていると、土日や祝日、特定の休業日などには実行をスキップしたい場面がありますよね。
今回は Google Apps Script(GAS)で、「祝日+指定日」の両方に対応してスクリプト実行をスキップする方法をメモします。
目次
スクリプトの基本構造
function isBusinessDay(date){
if (date.getDay() == 0 || date.getDay() == 6) return false; // 土日
var calJa = CalendarApp.getCalendarById('ja.japanese#holiday@group.v.calendar.google.com');
return calJa.getEventsForDay(date).length === 0;
}
function myFunction() {
var date = new Date();
if (isBusinessDay(date)) {
Logger.log('送信');
} else {
Logger.log('休日');
}
}
上記は「土日+日本の祝日」をスキップ対象とする例です。
さらに「指定した日」も除外したいとき
例えば、社内指定休日やシステムメンテナンス日なども除外対象にしたい場合は、以下の方法で対応できます。
1. Googleカレンダーを準備
- Google カレンダーを新規作成
- スキップしたい日付に「予定」を入れる(タイトルは何でもOK)
- カレンダー横の「︙」メニューから「設定と共有」を開き、「カレンダーID」をコピー
例)hogehoge@group.calendar.google.com
2. スクリプトに指定日チェックを追加
function isBusinessDay(date){
if (date.getDay() == 0 || date.getDay() == 6) return false;
var calJa = CalendarApp.getCalendarById('ja.japanese#holiday@group.v.calendar.google.com');
return calJa.getEventsForDay(date).length === 0;
}
function isSpecifiedDay(date){
var calCustom = CalendarApp.getCalendarById('hogehoge@group.calendar.google.com'); // あなたのカレンダーIDに置き換え
return calCustom.getEventsForDay(date).length === 0;
}
function myFunction() {
var date = new Date();
if (isSpecifiedDay(date)) {
if (isBusinessDay(date)) {
Logger.log('送信!');
} else {
Logger.log('休日');
}
} else {
Logger.log('指定日休日');
}
}
まとめ
- 日本の祝日は
ja.japanese#holiday@group.v.calendar.google.com
を使用 - 任意の指定日は独自カレンダーを作成し、そのIDで管理
getEventsForDay(date).length
を使えば当日のイベント有無で判定可能
業務自動化や日次処理で、「今日は処理しない日だな」と思ったら自動で止めてくれるのはとても便利です。
カレンダーで日付を管理できるので、コードをいじらずに運用できるのもポイント。
運用中のスクリプトにぜひ組み込んでみてください!