GAS Event.getStartTime()でイベント開始時刻を自動取得!定期実行でイベントリマインダーを送信

GAS Event.getStartTime()でイベント開始時刻を自動取得!定期実行でイベントリマインダーを送信

Google Apps Script(GAS)のEvent.getStartTime()関数を使うと、Googleカレンダーのイベント開始時刻を簡単に取得できます。この記事では、Event.getStartTime()と自動化処理を組み合わせ、定期実行でイベントリマインダーを送信する方法を解説します。イベントのリマインダー送信を自動化することで、イベント参加者の参加率向上や、イベント管理者の業務効率化に貢献します。

Event.getStartTime()の基本

Event.getStartTime()は、Googleカレンダーのイベントオブジェクトからイベントの開始時刻をDateオブジェクトとして取得する関数です。

// イベントオブジェクトを取得する例
function getEventStartTime() {
const calendarId = "your_calendar_id@group.calendar.google.com";
const calendar = CalendarApp.getCalendarById(calendarId);
const now = new Date();
const events = calendar.getEventsForDay(now);

if (events.length > 0) {
const event = events[0]; // 最初に見つかったイベント
const startTime = event.getStartTime();
Logger.log(startTime);
}
}

定期実行によるイベントリマインダー送信

GASのトリガー機能を活用し、イベント開始前に自動でリマインダーメールを送信するシステムを構築します。

実装例1:イベント1時間前にリマインダーメールを送信

以下のコードは、当日のイベントを検索し、イベント開始1時間前にリマインダーメールを送信するものです。

function sendReminderEmails() {
const calendarId = "your_calendar_id@group.calendar.google.com";
const calendar = CalendarApp.getCalendarById(calendarId);
const now = new Date();
const events = calendar.getEventsForDay(now);

for (let i = 0; i < events.length; i++) {
const event = events[i];
const startTime = event.getStartTime();
const eventTitle = event.getTitle();
const eventDescription = event.getDescription();

// イベント開始1時間前の日時を取得
const reminderTime = new Date(startTime.getTime() - 60 * 60 * 1000); // 1時間前
const nowTime = new Date();

// 現在時刻がリマインダー送信時刻を過ぎているか確認
if (nowTime >= reminderTime && nowTime < startTime) {
// メールを送信
const recipient = "attendee@example.com"; // 参加者のメールアドレス
const subject = "【リマインダー】" + eventTitle;
const body = "まもなく「" + eventTitle + "」が開始します。
詳細はこちら: " + eventDescription;

MailApp.sendEmail(recipient, subject, body);
Logger.log("リマインダーメールを送信: " + eventTitle);
}
}
}

実装例2:イベント参加者全員にリマインダーメールを送信

イベントの参加者リストを取得し、全員にリマインダーメールを送信します。事前にイベントに招待されている必要があります。

function sendReminderToAttendees() {
const calendarId = "your_calendar_id@group.calendar.google.com";
const calendar = CalendarApp.getCalendarById(calendarId);
const now = new Date();
const events = calendar.getEventsForDay(now);

for (let i = 0; i < events.length; i++) {
const event = events[i];
const startTime = event.getStartTime();
const eventTitle = event.getTitle();
const attendees = event.getGuestList();

// イベント開始1時間前の日時を取得
const reminderTime = new Date(startTime.getTime() - 60 * 60 * 1000); // 1時間前
const nowTime = new Date();

// 現在時刻がリマインダー送信時刻を過ぎているか確認
if (nowTime >= reminderTime && nowTime < startTime) {
// 参加者全員にメールを送信
for (let j = 0; j < attendees.length; j++) {
const attendee = attendees[j];
const recipient = attendee.getEmail();
const subject = "【リマインダー】" + eventTitle;
const body = "まもなく「" + eventTitle + "」が開始します。";

MailApp.sendEmail(recipient, subject, body);
Logger.log("リマインダーメールを送信: " + eventTitle + " to " + recipient);
}
}
}
}

実装例3:スプレッドシートに記録されたイベント情報を元にリマインダーを送信

Googleスプレッドシートにイベント情報を記録しておき、その情報を元にリマインダーメールを送信します。

function sendReminderFromSheet() {
// スプレッドシートのIDとシート名
const spreadsheetId = "your_spreadsheet_id";
const sheetName = "Events";

// スプレッドシートとシートを取得
const ss = SpreadsheetApp.openById(spreadsheetId);
const sheet = ss.getSheetByName(sheetName);

// データの範囲を取得(A2から最終行まで)
const range = sheet.getDataRange();
const values = range.getValues();

// ヘッダー行をスキップしてデータ行を処理
for (let i = 1; i < values.length; i++) {
const row = values[i];

// 各列からデータを取得 (例: A列がイベント名、B列が開始時間、C列がメールアドレス)
const eventTitle = row[0]; // A列:イベント名
const startTime = new Date(row[1]); // B列:開始時間 (Dateオブジェクトとして読み込む)
const recipient = row[2]; // C列:メールアドレス

// イベント開始1時間前の日時を取得
const reminderTime = new Date(startTime.getTime() - 60 * 60 * 1000); // 1時間前
const nowTime = new Date();

// 現在時刻がリマインダー送信時刻を過ぎているか確認
if (nowTime >= reminderTime && nowTime < startTime) {
// メールを送信
const subject = "【リマインダー】" + eventTitle;
const body = "まもなく「" + eventTitle + "」が開始します。";

MailApp.sendEmail(recipient, subject, body);
Logger.log("リマインダーメールを送信: " + eventTitle + " to " + recipient);
}
}
}

よくある問題とトラブルシューティング

  • タイムゾーンの問題: GASのタイムゾーンが適切に設定されているか確認してください。SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetTimeZone()で確認できます。
  • 権限の問題: カレンダーやメール送信に必要な権限が付与されているか確認してください。
  • トリガーの設定ミス: トリガーが正しく設定され、有効になっているか確認してください。

カスタマイズ方法と応用例

  • リマインダー時間の変更: イベント開始の1時間前に限らず、任意のリマインダー時間を設定できます。
  • メール本文のカスタマイズ: イベントの詳細情報(場所、説明など)をメール本文に含めることができます。
  • 複数のリマインダー送信: イベント前に複数回リマインダーメールを送信することができます。

まとめ

GASのEvent.getStartTime()関数とトリガー機能を組み合わせることで、イベントリマインダー送信を自動化し、イベント管理を効率化できます。この記事で紹介したコード例を参考に、ぜひ独自のイベントリマインダーシステムを構築してみてください。

PR

CodeCampは、現役エンジニアからマンツーマンで学べるオンラインプログラミングスクールです。WebデザインやWebサービス開発、転職支援など、目的に合わせた多様なコースが選べます。
朝7時〜夜23時40分まで、365日レッスンが受けられるため、忙しい方でも自分のペースで学習を進めることが可能です。通過率8%の厳しい選考を通過した質の高い講師陣が、あなたのキャリアチェンジを強力にサポートします。
さらに、未経験者向けのカリキュラムや、学習開始から20日以内の全額返金保証制度もあるため、プログラミング学習に不安を感じている方でも安心して始めることができます。

CodeCampで理想の働き方を実現しよう