🗓

Google カレンダーの移動イベントを自動的に非公開にする

2022/02/09に公開

背景

プライベート・会社で Google カレンダーを利用しています。移動には Google マップを利用しており、前後の移動時間を確保するために「Google カレンダーに追加」を多用しています。

しかしあるとき気づいたのです。「これ、自宅の住所を会社のみんなに大公開してるやん!!!」と。それ以来、Google マップでカレンダーに追加したら Google カレンダーアプリを開き、該当するイベントを選んで「非公開」にして… という一連の流れが習慣化しました。

まあ、想像に難くないと思いますが、これ地味に面倒臭いんですよね。その煩わしさから解放されるのが今回のゴールです。

手順

GAS のコードを書く

GAS エディタを開き、以下のコードを貼り付けてください。ハードコーディングされた箇所はないので、修正は必要ありません。

コード.gs
const defaultCalendar = CalendarApp.getDefaultCalendar();

// Triggered when calendar changes (create, edit, or delete).
function main() {
  // Search calendar events which includes Google Maps info
  // in 48 hours around now
  const now = new Date();
  const rangeHour = 24;
  const start = new Date(now.getTime() - (rangeHour * 60 * 60 * 1000));
  const end = new Date(now.getTime() + (rangeHour * 60 * 60 * 1000));
  const options = {search: "https://goo.gl/maps/"};

  // Array<CalendarApp.Calendar>
  const movingEvents = defaultCalendar.getEvents(start, end, options);

  for (const movingEvent of movingEvents) {
    // If not set to PRIVATE...
    if (movingEvent.getVisibility() != CalendarApp.Visibility.PRIVATE) {
      Logger.log(`Found! Setting ${movingEvent.getTitle()} hidden...`);
      movingEvent.setVisibility(CalendarApp.Visibility.PRIVATE);
      Logger.log("Done.");
    }
  }
}

トリガーをセットする

次に、このスクリプトが実行されるタイミングを設定します。これが必要なのは新たなカレンダーが追加された時ですが、残念ながら GAS のトリガーはそこまで細かく設定できません。その代わり、カレンダーが変更(作成 || 編集 || 削除)された時に実行されるトリガーはセットできます。

おわりです!簡単でしたよね?念の為、Google マップを開いて移動イベントを追加してみてください。若干のタイムラグはありますが、即座に「非公開」になるはずです。

おわりに

今回解消されたのは小さな煩わしさですが、Google マップをよく使う我々にとっては大きな一歩です(?)。この手のアイデアが思いついたらまた共有します!

GitHubで編集を提案

Discussion