Googleカレンダーのイベントに自動リマインダーを設定する

GASカレンダー自動化
Googleカレンダーのイベントに自動リマインダーを設定するのサムネイル

Googleカレンダーのイベントに自動リマインダーを設定するメリット

中小企業の経営者やフリーランスの皆さん、こんにちは。GASおじです。忙しいスケジュール管理、手間になっていませんか?Googleカレンダーのイベントに自動リマインダーを設定すれば、うっかり忘れ防止はもちろん、効率的な時間管理が可能です。GAS(Google Apps Script)を使えば、無料で使えるGoogleアカウントの利用枠内で、追加の専用SaaS料金なしで自動化が実現できます(ただし、Apps Scriptのquota・実行上限はありますのでご注意を)。

今回は、既存のカレンダーイベントデータを消さずに、リマインダー設定情報を新しい日時付きのスプレッドシートに出力する形で、安全に運用できるスクリプト例をおじさんの経験を踏まえてご紹介します。


初期設定と必要な権限

まずは初期設定です。Google Apps ScriptでGoogleカレンダーの情報を扱うには、OAuth認証でカレンダーの読み取り権限が必要です。スクリプトエディタの「サービス」からGoogleカレンダーAPIを有効にしてください。

また、カレンダーのイベントを取得し、その情報を新規スプレッドシートへ書き込むため、スプレッドシートの作成・編集権限も付与されます。

さらに、イベントのリマインダーを自動で設定するためには「インストール可能なトリガー」を使います。例えば、毎日決まった時間にスクリプトを実行して最新イベントをチェックし、リマインダー設定を更新します。


コード例:イベント情報の取得と日時付き新規シートへの書き込み

ここで、おじさんが推奨するポイントは以下の通り。

  • 既存データは触らない(削除APIは使わない)
  • 入力検証でデータの整合性を保つ
  • バッチ処理で複数行をまとめて書き込む
  • 失敗時に備え、元データはそのままにしてロールバックを容易に
function createEventReminderReport() {
  const calendarId = 'primary'; // 変更可:対象カレンダーID
  const now = new Date();
  const oneWeekLater = new Date(now.getTime() + 7 * 24 * 60 * 60 * 1000);
  
  // イベント取得(1週間分)
  const events = CalendarApp.getCalendarById(calendarId).getEvents(now, oneWeekLater);
  
  if (events.length === 0) {
    Logger.log('対象期間のイベントはありません');
    return;
  }
  
  // 出力用スプレッドシートを新規作成(日時付き)
  const ssName = `イベントリマインダー_${Utilities.formatDate(now, Session.getScriptTimeZone(), 'yyyyMMdd_HHmmss')}`;
  const ss = SpreadsheetApp.create(ssName);
  const sheet = ss.getActiveSheet();
  
  // ヘッダー行
  const headers = ['イベント名', '開始日時', '終了日時', '場所', '説明', 'リマインダー設定(分前)'];
  sheet.appendRow(headers);
  
  // イベント情報とリマインダー情報をまとめる
  const rows = [];
  events.forEach(event => {
    // 入力検証:開始日時が終了日時より前かチェック
    if (event.getStartTime() >= event.getEndTime()) {
      Logger.log(`イベント「${event.getTitle()}」の日時設定に問題があります。スキップします。`);
      return;
    }
    
    // 既定リマインダー情報を取得(ない場合は空文字)
    const reminders = event.getPopupReminders();
    const reminderMinutes = reminders.length > 0 ? reminders.join(',') : '';
    
    rows.push([
      event.getTitle(),
      Utilities.formatDate(event.getStartTime(), Session.getScriptTimeZone(), 'yyyy/MM/dd HH:mm'),
      Utilities.formatDate(event.getEndTime(), Session.getScriptTimeZone(), 'yyyy/MM/dd HH:mm'),
      event.getLocation() || '',
      event.getDescription() || '',
      reminderMinutes
    ]);
  });
  
  // バッチ書き込み
  if (rows.length > 0) {
    sheet.getRange(2, 1, rows.length, headers.length).setValues(rows);
  } else {
    Logger.log('有効なイベントデータがありませんでした。');
  }
  
  Logger.log(`イベントリマインダー情報を新規スプレッドシート「${ssName}」に出力しました。`);
}

自動リマインダー設定のポイントとトリガー運用

スクリプトでイベントを取得してリマインダー情報を抽出しましたが、実際にイベントのリマインダーを自動更新したい場合は、Calendar APIのsetReminders()メソッドなどを使います。ただし、操作ミスで既存データを消さないように注意が必要です。

このサンプルでは読み取りとレポート作成に留めていますが、もし実装する場合は

  • 変更前にイベント情報をバックアップ(今回のように新規シートに書き出す)
  • 更新は個別に必要な分だけ実施
  • トリガーは「時間主導型」で定期実行

を徹底しましょう。

トリガー設定はスクリプトエディタの時計マークから「トリガーを追加」で、createEventReminderReport関数を毎朝例えば8時に実行する設定をおすすめします。


コスト削減の仮定と計算例(参考)

おじさんの経験上、中小企業のスケジュール管理にかかる手間を自動化すると、1ヶ月あたり約5時間の業務削減が見込めます。仮に時給2,000円のコストとすると、

5時間 × 2,000円 = 10,000円/月
年間では 10,000円 × 12ヶ月 = 120,000円

が節約可能です。ただし、Apps ScriptはGoogleアカウントの利用枠内で動作し、追加の専用SaaS料金は発生しませんが、quota・実行上限には注意してください。過剰な実行は制限にかかる恐れがあります。


個人情報保護と復元手順について

Googleカレンダーのイベントデータは個人情報を含みますので、アクセス権限の管理に注意しましょう。今回の方法は既存データを上書き・削除しないので安全ですが、スクリプトやスプレッドシートの共有は必要最小限にしてください。

もし誤ってデータを変更してしまった場合は、Googleカレンダーの履歴機能やスプレッドシートのバージョン履歴で復元可能です。バックアップ用に新規シートを作成することも復元の助けになります。


GASおじのノウハウをもっと活用して、あなたの業務効率をさらにアップさせませんか?

GASおじラボで500ツール使い放題 →