GASを平日だけ実行させる方法をやってみた!【成功!|コピペ可!】

毎日通知されるKPI通知はとても便利なのだが、

土日や祝日にslackが通知されてしまうと、休日も仕事のことを考えてしまう。

という声も実際あります。

これを解決しようとしても、デフォルトのGoogle Apps Scriptのトリガーからの設定では指定することができません。

通常のGoogle Apps Scriptでは、「毎日〇〇時〜〇〇時の間で実行」や「毎週▲曜日に実行」などのトリガー指定はできるものの、土日祝日以外だけに実行するというトリガー設定はできないのです。

この記事では、強制的に平日(土日祝以外)だけGoogle Apps Scriptを実行する方法について記述します。

目次

平日のみの実行のためにしなければならないこと

実際にしなければならないことは2つです。

①コードを追加

②トリガーを設置

この2点です。

Step1: コードの追加

強制的に平日(土日祝以外)だけ実行するためには、トリガーを設定するのではなく、毎日実行するようにトリガーが設定するが、コードで今日の日付が、「土・日・祝日」に該当する場合は処理を中断する となるように処理を記載します。

以下が対象のコードになります。

function isBusinessDay() {
  const today = new Date(); // 現在の日付を取得
  console.log(today);
  
  const weekInt = today.getDay(); 
  console.log(weekInt);
  
  // 土日なら `true` を返す(何もしない)
  if (weekInt === 0 || weekInt === 6) {
    return true;
  }

  // 日本の祝日カレンダーを取得
  const calendarId = "ja.japanese#holiday@group.v.calendar.google.com";
  const calendar = CalendarApp.getCalendarById(calendarId);
  const events = calendar.getEventsForDay(today);
  console.log(events);

  // 祝日なら `true` を返す(何もしない)
  if (events.length > 0) {
    return true;
  }

  // 平日なら `false` を返す
  return false;
}


function example() {       //関数名を好きなものに変換する
  if (isBusinessDay()) {
    return; // 土日祝なら何もしない
  }

  /////////////////////////////////////////////
  // ↓↓↓平日のみの実行したい処理を、以下に記入↓↓↓ //
  /////////////////////////////////////////////

  console.log("b"); // 平日の場合のみ実行
}

たったこれだけで完了です。

このコードのconsole.log(“b”)の部分に実際に行いたい処理を記載すれば、土日祝以外で正しく実行されます。

Step2: トリガーを設置

トリガーを

①イベントのソースを選択を「時間手動型」にする。

②時間ベースのトリガーのタイプを選択を「日付ベースのタイマー

③時刻を選択を、起動させたい時間帯に選択します。

④「保存」を押下する。

たったこれだけでトリガーが設置されます。

コードの詳細な説明

Google Apps Script(GAS)を使って、「今日は平日かどうか?」 を判定するスクリプトを作成しました。本記事では、ステップバイステップでコードの内容を説明し、どのようにして土日祝日を判定しているのかを解説します。

1. 平日かどうかを判定する関数 isBusinessDay()

スクリプト全体の流れ

• まず現在の日付を取得し、その曜日を判定します。

• 土日であれば true を返して処理を終了します。

• 祝日カレンダーを取得し、該当日が祝日なら true を返します。

• それ以外の平日は false を返します。

それではコードを詳しく見ていきましょう。

1-1. 現在の日付を取得

const today = new Date(); // 現在の日付を取得
console.log(today);

new Date() を使って現在の日付(例: 2024-02-15)を取得します。console.log(today); を入れておくと、デバッグ時に確認できます。

1-2. 曜日を取得

const weekInt = today.getDay(); 
console.log(weekInt);

JavaScriptの getDay() メソッドは、曜日を数値(0~6)で返します。

数値曜日
0日曜日
1月曜日
2火曜日
3水曜日
4木曜日
5金曜日
6土曜日

例えば、 weekInt が 0 または 6 なら、土日です。

1-3. 土日かどうかを判定

if (weekInt === 0 || weekInt === 6) {
  return true;
}

0(日曜日) または 6(土曜日) の場合、 true を返します。これは「土日なら何もしない」という意味です。

1-4. 祝日を判定

const calendarId = "ja.japanese#holiday@group.v.calendar.google.com";
const calendar = CalendarApp.getCalendarById(calendarId);
const events = calendar.getEventsForDay(today);
console.log(events);

Googleの「日本の祝日カレンダー」を取得するために、 CalendarApp.getCalendarById() を使います。

ここで取得する calendarId は、Googleが提供している日本の祝日カレンダー です。

• “ja.japanese#holiday@group.v.calendar.google.com” というIDを使うことで、カレンダーに登録されている祝日を取得できます。

• getEventsForDay(today) で、その日が祝日かどうかをチェックできます。

console.log(events); を実行すると、祝日の場合は events 配列にデータが入っています(例: [‘建国記念の日’])。

1-5. 祝日なら true を返す

if (events.length > 0) {
  return true;
}

取得した events 配列にデータが入っていれば、その日は祝日です。その場合、 true を返して処理を終了します。

1-6. 平日の場合は false を返す

return false;

ここまでの判定を通過した場合、その日は「平日」です。よって false を返します。

2. 平日のみ実行する処理

次に、isBusinessDay() を使って、平日のみ処理を実行する関数 example() を見てみましょう。

2-1. isBusinessDay() を使って土日祝日をスキップ

function example() {
  if (isBusinessDay()) {
    return; // 土日祝なら何もしない
  }

• isBusinessDay() の戻り値が true(土日祝)なら、return して処理を終了します。

• false(平日)なら、次の処理に進みます。

2-2. 平日のみ実行したい処理

  console.log("b"); // 平日の場合のみ実行
}

この console.log(“b”); の部分を、「平日のみ実行したい処理」 に置き換えればOKです。

3. 実際にこのスクリプトをどう活用するか?

このコードを使うことで、例えば以下のようなタスクを 平日のみ 実行できます。

✅ Googleスプレッドシートのデータ更新

✅ Slackへの通知(営業日だけ通知する)

✅ Webスクレイピング(週末はサーバー負荷を抑える)

例えば、 console.log(“b”); の部分を次のように変更すると、平日だけSlack通知を送る ことができます。

if (isBusinessDay()) {
  return;
}

// 平日のみSlack通知を送る
const webhookUrl = "https://hooks.slack.com/services/XXXXX/YYYYY/ZZZZZ";
const payload = {
  text: "今日は平日です!"
};

UrlFetchApp.fetch(webhookUrl, {
  method: "post",
  contentType: "application/json",
  payload: JSON.stringify(payload)
});

まとめ

このスクリプトでは、Google Apps Scriptを使って「今日は平日かどうか」を判定する方法を紹介しました。

🔹 isBusinessDay() で土日祝日を判定

🔹 土日祝なら true を返して何もしない

🔹 平日なら false を返して処理を実行

🔹 example() 内で isBusinessDay() を活用して平日だけ処理を実行

このスクリプトを使えば、平日のみ自動実行したい処理を簡単に管理できます。ぜひ活用してみてください!

目次