見出し画像

GASでGoogleカレンダーのスケジュールを自動通知!Slackと連携してリマインドも完全自動化🚀

💡この文章はAI初心者向けに書いた記事です!

📌 はじめに

Googleカレンダーに登録している予定を毎朝6時にメール&Slackで通知し、1時間前・30分前・10分前にリマインダーを自動送信する方法を解説します!

「予定を忘れてしまう…」「リマインドを手作業でやっている…」そんな方におすすめのGAS(Google Apps Script)を活用した完全自動化スクリプトです!

できること
Googleカレンダーの当日スケジュールを自動取得&通知(メール+Slack)
イベントの1時間前・30分前・10分前にリマインダーを自動送信
SlackのWebhookを使い、リマインドもリアルタイムで通知
GASのトリガーを設定し、一度導入すれば完全自動化!


📌 使い方(導入ステップ)

① Google Apps Script(GAS)のセットアップ

  1. Google Apps Script(GAS)エディタ を開く

  2. 「新しいスクリプト」を作成

  3. 以下のコードをコピペ

  4. SlackのWebhook URLを設定

  5. GASのトリガーを設定(毎朝6時のスケジュール通知&リマインダー実行)


📌 GASの完全スクリプト

/*******************************************************
 * Googleカレンダーの当日予定を毎朝6時にメール&Slackに通知
 * イベント開始の1時間前・30分前・10分前にリマインド!
 *******************************************************/

function sendDailySchedule() {
  // デフォルトのGoogleカレンダーを取得
  var calendar = CalendarApp.getDefaultCalendar();
  var today = new Date();
  today.setHours(0, 0, 0, 0);
  var tomorrow = new Date(today);
  tomorrow.setDate(today.getDate() + 1);
  
  // 当日のイベントを取得
  var events = calendar.getEvents(today, tomorrow);
  var emailMessage = "📅 本日のスケジュール\n\n";
  var slackMessage = "*📅 本日のスケジュール*\n\n";
  
  // イベントがない場合
  if (events.length === 0) {
    emailMessage += "本日の予定はありません。\n";
    slackMessage += "本日の予定はありません。";
  } else {
    // 取得したイベントをループ
    for (var i = 0; i < events.length; i++) {
      var event = events[i];
      var title = event.getTitle();
      var startTime = event.getStartTime();
      var endTime = event.getEndTime();
      var location = event.getLocation() || "(場所の指定なし)";
      
      // メール文面用
      emailMessage += "▶ " + title + "\n" +
                      "⏰ " + formatTime(startTime) + " - " + formatTime(endTime) + "\n" +
                      "📍 " + location + "\n\n";
      
      // Slack文面用
      slackMessage += "▶ *" + title + "*\n" +
                      "⏰ " + formatTime(startTime) + " - " + formatTime(endTime) + "\n" +
                      "📍 " + location + "\n\n";
      
      // イベント開始前のリマインド通知をスケジューリング
      scheduleReminder(event, -60); // 1時間前
      scheduleReminder(event, -30); // 30分前
      scheduleReminder(event, -10); // 10分前
    }
  }

  // メール送信(自分のアカウント宛)
  MailApp.sendEmail(Session.getActiveUser().getEmail(), "📅 本日のスケジュール", emailMessage);
  // Slackへ送信
  sendSlackNotification(slackMessage);
}

// イベント開始前のリマインドを予約する
function scheduleReminder(event, minutesBefore) {
  // リマインドのタイミング(イベント開始時間 + minutesBefore分)
  var reminderTime = new Date(event.getStartTime().getTime() + minutesBefore * 60000);
  // 過去の時間はスキップ
  if (reminderTime < new Date()) return;

  ScriptApp.newTrigger("sendReminder")
    .timeBased()
    .at(reminderTime)
    .create();
}

// リマインド実行
function sendReminder() {
  var now = new Date();
  var calendar = CalendarApp.getDefaultCalendar();
  // 直近10分間に開始するイベントを取得
  var events = calendar.getEvents(now, new Date(now.getTime() + 10 * 60000));

  for (var i = 0; i < events.length; i++) {
    var event = events[i];
    var title = event.getTitle();
    var startTime = formatTime(event.getStartTime());

    var message = "⏰ リマインド: *" + title + "* が " + startTime + " に開始します!";

    // メール送信
    MailApp.sendEmail(Session.getActiveUser().getEmail(), "⏰ イベントリマインダー", message);
    // Slackへも送信
    sendSlackNotification(message);
  }
}

// Slackに通知する関数
function sendSlackNotification(message) {
  // ここに取得したWebHook URLを貼り付け
  var slackWebhookUrl = "https://hooks.slack.com/services/XXXXX/XXXXX/XXXXX";
  
  var payload = JSON.stringify({ text: message });

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

// 日時フォーマット関数 (HH:mm)
function formatTime(date) {
  return Utilities.formatDate(date, Session.getScriptTimeZone(), "HH:mm");
}

// 朝6時のトリガーを自動作成する関数 (必要に応じて実行)
function setupDailyTrigger() {
  ScriptApp.newTrigger("sendDailySchedule")
    .timeBased()
    .atHour(6)
    .everyDays(1)
    .create();
}

📌 Slack Webhook URL の取得はこちらから

Slack通知を行うには、Webhook URLの取得が必要です。
詳しい手順はこちらの記事を参考にしてください👇
🔗 Slack Webhook URL の取得方法


📌 GASのトリガー設定


GASのトリガーを設定する理由とは?

Google Apps Script(GAS)では、特定のタイミングや条件でスクリプトを自動実行するために「トリガー」 を設定します。手動でスクリプトを毎回実行する必要がなくなり、作業を効率化できます。


「毎朝6時にスケジュールを通知」するための設定

  1. GASエディタの**[編集] → [現在のプロジェクトのトリガー]** を開く

  2. 「トリガーを追加」

    • 関数: sendDailySchedule

    • イベントの種類: 時間主導型

    • 時間ベースのトリガー: 日付ベースのタイマー(朝6時)

「リマインダーを自動送信」するための設定

  1. 「トリガーを追加」

    • 関数: sendReminder

    • イベントの種類: 時間主導型

    • 時間ベースのトリガー: 5分ごとに実行


📌 まとめ

📌 GASでGoogleカレンダーのスケジュール通知を完全自動化!
📌 メール & Slack でリアルタイム通知
📌 リマインダーを1時間前・30分前・10分前に送信
📌 トリガーを設定すれば、手間なく毎日自動実行!

📢 こんな人におすすめ!予定を忘れがちな人
スケジュール管理をSlackと連携したい人
リマインドを自動化して手間を減らしたい人

以上が、Googleカレンダーの当日予定を朝6時にメールとSlackへ通知し、イベントの1時間前・30分前・10分前にリマインダーを送信する方法でした。もし、エラーが出たり、さらに別の要望があれば、コメントやSNSなどで教えてください。皆さんの業務や日常のタスク管理が、少しでもスムーズになるよう願っています!

それでは、良き自動化ライフをお過ごしください。👍

いいなと思ったら応援しよう!

この記事が参加している募集