GASで自動化!メールでカレンダー通知を受け取る方法

GASを使って、カレンダーの通知が来たらメールで知らせたいんだけど、どうすればいいのかな…?なんだか難しそう…。
猫男
猫男
catman
catman
そんな時は、catmanにお任せさ。GASを使えば、カレンダーのイベントを自動でチェックしてメールで通知を送れるように設定できるんだ。やり方を一緒に見てみよう。

GASでカレンダー通知をメールで受け取る基本

まずは、GASを使ってGoogleカレンダーを操作するために準備を整える必要がある。

1. GASプロジェクトの作成

まずはGASプロジェクトを新規に作成する。

1. Googleドライブを開き、「+新規」から「Google Apps Script」を選ぶ。

2. プロジェクト名を設定しよう。ここでは「カレンダー通知メーラー」とする。

2. 必要なAPIにアクセスする

GASでカレンダーやメールを操作するためには、適切なサービスを使用する必要がある。

1. GASエディタの「サービスを追加」から「Calendar API」と「Gmail API」を有効にしよう。

3. スクリプトを書こう

GASで必要なスクリプトを記述する。


function sendCalendarNotifications() {
  var calendarId = 'primary'; // ここにカレンダーのIDを入れる
  var now = new Date();
  var later = new Date(now.getTime() + 3600000); // 一時間後
  var events = CalendarApp.getCalendarById(calendarId).getEvents(now, later);
  
  if (events.length > 0) {
    events.forEach(function(event) {
      var subject = 'カレンダー通知: ' + event.getTitle();
      var body = 'イベントは次の時間に設定されています: ' + event.getStartTime();
      GmailApp.sendEmail('you@example.com', subject, body);
    });
  }
} 

CalendarApp.getCalendarById(calendarId): 指定したIDのカレンダーオブジェクトを取得する。

getEvents(now, later): 現在時刻から一時間後までのイベントを取得する。

GmailApp.sendEmail(): メールを送信するためのメソッドさ。

GASスクリプトの実行設定

スクリプトを実際に動作させるための設定が必要になる。

トリガーの設定

GASでは、トリガーを使って定期的にスクリプトを実行できるように設定可能だ。

1. GASエディタの「時計」のアイコンをクリックし、トリガーを設定。

2. どの関数をどの間隔で動かすかをセットしよう。ここでは、1時間おきに「sendCalendarNotifications」を実行することにする。

  

練習問題

GASを使って、指定したカレンダーの明日の予定を全て確認し、メールで通知を送るスクリプトを書いてみよう。

  

解答・解説


function sendTomorrowEvents() {
  var calendarId = 'primary'; // ここにカレンダーのIDを入れる
  var tomorrow = new Date();
  tomorrow.setDate(tomorrow.getDate() + 1);
  var startOfTomorrow = new Date(tomorrow.getFullYear(), tomorrow.getMonth(), tomorrow.getDate(), 0, 0, 0);
  var endOfTomorrow = new Date(tomorrow.getFullYear(), tomorrow.getMonth(), tomorrow.getDate(), 23, 59, 59);
  var events = CalendarApp.getCalendarById(calendarId).getEvents(startOfTomorrow, endOfTomorrow);

  if (events.length > 0) {
    events.forEach(function(event) {
      var subject = '明日のカレンダー通知: ' + event.getTitle();
      var body = 'イベントは次の時間に設定されています: ' + event.getStartTime();
      GmailApp.sendEmail('you@example.com', subject, body);
    });
  }
} 

setDate(tomorrow.getDate() + 1): 今日の日付を一日進めて、明日の日時をセットしている。

getEvents(startOfTomorrow, endOfTomorrow): 明日の一日を指定して、その中にあるイベントを取得している。

このスクリプトは、指定したカレンダーの明日の全ての予定をメールで通知する。トリガーを使用すれば、毎日特定の時刻に確認を実行できるのだ。VEVENTアクションを設定することで、毎日指定した時刻に確認を実行するようにするのが良いだろう。