重複したカレンダーイベントをGASで削除

GASカレンダーメンテナンス
重複したカレンダーイベントをGASで削除のサムネイル

重複したカレンダーイベントをGASで削除

こんにちは、GASおじです。中小企業の経営者さんやフリーランスの皆さん、Googleカレンダーのイベントが重複して困っていませんか?特に定期的なミーティングやリマインダーが大量に増えてしまうと、管理が大変ですよね。そこで今日は、Google Apps Script(以下GAS)を使って、安全に重複イベントを検出し、既存データを壊さずに整理する方法をお伝えしましょう。

GASはGoogleアカウントの利用枠内で追加の専用SaaS料金なしで利用できます。ただしquotaや実行上限があるので、その点は注意しつつ使ってくださいね。

重複イベントを「削除」するのではなく「抽出」してバックアップする理由

まず、GASでカレンダーイベントの重複を「その場で削除」するのは、リスクが大きいです。誤って本当に必要なイベントを消してしまうと取り返しがつきません。そこでおじさんのおすすめは、重複イベントの一覧を「新しい日時付きスプレッドシート」に書き出す方法です。

これで「どのイベントが重複しているか」を目視で確認できますし、万一間違えて消しても元データはカレンダーに残ったまま。安心して作業できます。

初期設定と必要な権限

GASスクリプトを実行するには、以下の権限が必要です。

  • GoogleカレンダーAPIへのアクセス権(スクリプト初回実行時に承認)
  • Googleスプレッドシートの作成・編集権限

また、個人情報を扱うのでスクリプトは自分のGoogleアカウントで実行し、権限を安易に他者に渡さないようにしましょう。

重複イベント抽出スクリプトの概要

今回のスクリプトは、

  1. 指定した期間のカレンダーイベントを取得
  2. イベントタイトル+開始日時で重複を判定
  3. 重複イベントを新規作成した日時付きスプレッドシートに書き出す

という流れです。

既存のイベントを「削除」したり「直接編集」しません。重複の確認とバックアップに徹することで安全性を確保します。

GASコード例

function extractDuplicateEvents() {
  const calendarId = 'primary'; // 変更可。自分のカレンダーIDに合わせてください。
  const startDate = new Date('2026-08-01T00:00:00Z');
  const endDate = new Date('2026-08-31T23:59:59Z');

  // イベント取得
  const events = CalendarApp.getCalendarById(calendarId).getEvents(startDate, endDate);
  
  // 重複検出用マップ(タイトル+開始日時をキーにする)
  const eventMap = new Map();
  const duplicates = [];

  events.forEach(event => {
    const key = event.getTitle() + '|' + event.getStartTime().toISOString();
    if (eventMap.has(key)) {
      // すでに登録がある=重複
      duplicates.push(event);
    } else {
      eventMap.set(key, event);
    }
  });

  if (duplicates.length === 0) {
    Logger.log('重複イベントは見つかりませんでした。');
    return;
  }

  // 新規スプレッドシート作成(日時を名前に含める)
  const ssName = '重複イベント一覧_' + new Date().toISOString().slice(0,19).replace(/[:T]/g,'-');
  const ss = SpreadsheetApp.create(ssName);
  const sheet = ss.getActiveSheet();

  // ヘッダ設定
  sheet.appendRow(['タイトル', '開始日時', '終了日時', '説明', '場所', 'イベントID']);

  // 重複イベントを書き出し
  duplicates.forEach(event => {
    sheet.appendRow([
      event.getTitle(),
      event.getStartTime(),
      event.getEndTime(),
      event.getDescription(),
      event.getLocation(),
      event.getId()
    ]);
  });

  Logger.log('重複イベントをスプレッドシートに出力しました: ' + ss.getUrl());
}

ポイント解説

  • 期間は任意に設定してください。長期間を一気に処理するとquota制限にかかる可能性があります。
  • 重複判定はイベントタイトルと開始日時を組み合わせていますが、必要に応じてロジックを変更してください。
  • 出力先は新規作成したスプレッドシートなので、既存データを壊しません。
  • 削除系APIは使わず「抽出」に徹しています。

installable triggerで定期実行も可能

カレンダーは日々更新されるので、週1回や月1回の定期実行がおすすめです。GASのinstallable triggerを使って、

  • 時間主導型トリガー(例:毎週月曜午前9時)

に設定すると便利です。トリガーの設定はGASエディタの「トリガー」メニューから簡単に行えます。

万が一の復元手順

  • 重複イベント一覧を確認後、不要なイベントを手動でGoogleカレンダーから削除してください。
  • スクリプト自体は削除操作をしていないため、誤って消しても元のカレンダーイベントは残ります。
  • 万一のためにスプレッドシートにバックアップを残しておけば安心です。

コスト削減額の試算例(仮定)

例えば、重複イベントを手作業で削除するのに1件あたり1分かかるとしましょう。月に100件の重複イベントがあった場合、

  • 100分=約1.7時間の作業時間削減
  • 仮に時給3000円なら、1.7時間 × 3000円 = 5100円/月のコスト削減

GASはGoogleアカウントの利用枠内で使うため、追加の専用SaaS料金は不要。あくまでquotaや実行上限はありますが、コスト面でも非常に効率的です。


まとめると、GASを使った重複イベントの安全な抽出は、データを壊さずにメンテナンスできる強力な方法です。経営者やフリーランスの皆さんの業務効率アップにぜひ役立ててください。

もっと多くのGASツールやノウハウが知りたい方は、こちらのメンバーシップもチェックしてみてね。

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