たった15分で完成!Google Apps Script × SlackでGoogle Calendarの翌日予定を自動通知してみた!

たった15分で完成!Google Apps Script × SlackでGoogle Calendarの翌日予定を自動通知してみた!

2026.06.10

こんにちは!
今回、Google Apps Scriptを使って「毎日18時台に翌日のGoogle Calendar予定を自動送信する仕組み」を作ってみました。

【自動送信メッセージの例】

📅 明日のスケジュール(6月10日(月))
⏰ 09:00 朝会
⏰ 11:00 プロジェクトキックオフ
⏰ 14:00 お客様との打ち合わせ
⏰ 16:00 週次チームミーティング
合計 4件 の予定があります。良い1日を!

Slackを確認するだけで、翌日の準備ができるようになりました。

作りたいもの

  • 毎日18時台に自動実行される
  • Google Calendarから翌日の予定を取得する
  • 自分が参加承諾した予定・自分が主催者の予定のみ表示する
  • 終日イベント(勤務場所・休暇など)は除外する
  • 土日の前日(金・土)は通知しない(月〜金の予定のみ対象)
  • 予定がない日は「明日は予定されているミーティングはありません」と送る

構成要素

項目 使用ツール
スクリプト Google Apps Script
カレンダー連携 Google Apps Script
メッセージ送信 Slack Incoming Webhook
自動実行 Google Apps Scriptトリガー

サーバーも不要、Googleアカウントがあれば誰でも始められます。


STEP 1:Slack Incoming Webhook URLの発行

手順
1. Slack APIページにアクセス
https://api.slack.com/apps にアクセスします。

2. アプリを作成する
「Create an App」 をクリック → 「From scratch」 を選択します。

スクリーンショット 2026-06-09 14.49.27

「From a manifest」と「From scratch」の2つがありますが、From scratchは画面を見ながら直接設定する方式です。

スクリーンショット 2026-06-09 17.33.25

アプリ名を入力(例:Meeting Notifier)→ ワークスペースを選択 → 「Create App」 をクリックします。

スクリーンショット 2026-06-09 14.57.36

3. Incoming Webhooksの設定
左側のメニューから 「Incoming Webhooks」 をクリックします。

アプリ作成直後はBasic Informationの画面が表示されますが、ここでは何もしなくて大丈夫です。
左のメニューから直接Incoming Webhooksに移動してください。

スイッチを On に変更します。

スクリーンショット 2026-06-09 15.03.50

4. チャンネルにWebhookを追加
「Add New Webhook to Workspace」 または 「Request to Add New Webhook」 をクリックします。

管理者の設定によってボタンの表示が異なる場合があります。
Requestボタンが表示される場合でも、Webhookの追加自体は可能なことが多いです。

メッセージを入力し、「Submit Request」を押下します。
スクリーンショット 2026-06-09 15.04.11

「Add New Webhook」を押下します。
スクリーンショット 2026-06-09 15.05.26

通知を送りたいチャンネルを選択して 「許可する」 をクリックします。
スクリーンショット 2026-06-09 18.17.45
個人チャンネルがおすすめ
Webhookで送信したメッセージは後から削除できません。
テストから個人用チャンネルを作って試すと安心です。

5. Webhook URLをコピー
以下のようなWebhook URLが生成されます。コピーしておいてください。
https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXX/XXXXXXXXXXXXXXXXXXX

スクリーンショット 2026-06-09 18.19.31

STEP 2:スクリプトを作成する

スクリプト

Script

// ===== 設定エリア(ここだけ修正すればOK)=====
const SLACK_WEBHOOK_URL = 'YOUR_SLACK_WEBHOOK_URL'; // Webhook URLをここに入力

// ===== メイン関数 =====
function sendTomorrowSchedule() {
  const tomorrow = new Date();
  tomorrow.setDate(tomorrow.getDate() + 1);
  tomorrow.setHours(0, 0, 0, 0);

  // 翌日が土曜(6)または日曜(0)なら何もしない
  const tomorrowDay = tomorrow.getDay();
  if (tomorrowDay === 0 || tomorrowDay === 6) {
    Logger.log('翌日は週末のため通知をスキップ');
    return;
  }

  const dayAfterTomorrow = new Date(tomorrow);
  dayAfterTomorrow.setDate(dayAfterTomorrow.getDate() + 1);

  // 翌日の予定を取得
  const calendar = CalendarApp.getDefaultCalendar();
  const events = calendar.getEvents(tomorrow, dayAfterTomorrow);

  // 日付フォーマット
  const weekdays = ['日', '月', '火', '水', '木', '金', '土'];
  const month = tomorrow.getMonth() + 1;
  const date = tomorrow.getDate();
  const weekday = weekdays[tomorrowDay];
  const dateStr = `${month}月${date}日(${weekday})`;

  // メッセージ作成
  let messageText = `📅 *明日のスケジュール(${dateStr})*\n\n`;

  // 終日イベントを除外 + 参加承諾済み(YES)または自分が主催者の予定のみフィルタリング
  const acceptedEvents = events.filter(event => {
    if (event.isAllDayEvent()) return false;
    const myStatus = event.getMyStatus();
    return myStatus === CalendarApp.GuestStatus.YES ||
           myStatus === CalendarApp.GuestStatus.OWNER;
  });

  if (acceptedEvents.length === 0) {
    messageText += '明日は予定されているミーティングはありません。';
  } else {
    acceptedEvents.forEach(event => {
      const startTime = Utilities.formatDate(
        event.getStartTime(),
        Session.getScriptTimeZone(),
        'HH:mm'
      );
      messageText += ` ${startTime} ${event.getTitle()}\n`;
    });
    messageText += `\n合計 *${acceptedEvents.length}件* の予定があります。良い1日を!`;
  }

  // Slackに送信
  const message = { text: messageText };
  const options = {
    method: 'post',
    contentType: 'application/json',
    payload: JSON.stringify(message)
  };

  UrlFetchApp.fetch(SLACK_WEBHOOK_URL, options);
  Logger.log('送信完了: ' + dateStr);
}

STEP 3:Google Apps Scriptにデプロイする

1. Apps Scriptを開く

  1. https://script.google.com/ にアクセス
  2. 新しいプロジェクト をクリック
  3. エディタの既存コードを全て削除して、上記のコードを貼り付け
  4. YOUR_SLACK_WEBHOOK_URL の部分をSTEP 1でコピーしたURLに書き換え
  5. Ctrl+S で保存

スクリーンショット 2026-06-09 15.58.29

スクリーンショット 2026-06-09 18.38.21

2. 権限を許可する

  1. 上部の関数選択欄で 「sendTomorrowSchedule」 を選択
  2. 実行ボタン (▶) をクリック
  3. 「権限を確認」 をクリック
  4. 自分のGoogleアカウントを選択
  5. すべて選択にチェックして 「続行」 をクリック

スクリーンショット 2026-06-09 16.05.21

スクリーンショット 2026-06-09 16.06.41

3. 動作確認
翌日の参加予定のミーティングが設定されている場合、Slackの指定チャンネルに以下のようなメッセージが届いたら成功です。

スクリーンショット 2026-06-09 18.50.33

4. トリガーの設定(毎日自動実行)

  1. 左メニュー → 時計アイコン (トリガー) をクリック
  2. 右下の トリガーを追加 をクリック
  3. 以下のように設定

スクリーンショット 2026-06-09 19.12.32

  1. エラー通知は 「毎日通知を受け取る」 を選択
  2. 保存 をクリックして完了

この記事をシェアする

関連記事