見出し画像

【GAS】Google Apps Script 活用事例 Googleカレンダーの予定を別のアカウントにコピーするスクリプト

「Hey, Siri 今日の予定を教えて」
「Hey, Siri まだ聞いたことがない曲を流して」

と購入以来、Apple Home Pod miniライフを満喫しております。
ふと、思ったのです….。今日の会議の予定とか読み上げてくれねぇかなと。

UI部分の手順

  • 操作対象のカレンダーの編集権限を付与します。

  • 別のアカウントで他のカレンダーを追加をクリック

  • 操作対象のカレンダーを追加

スクリプトはこんな感じ

function registerEvents() {
  const mailAddress = Session.getActiveUser().getEmail();
  console.log(`対象のメールアドレス:${mailAddress}`);
  
  const today = new Date();
  const targetDate = new Date();
  targetDate.setDate(targetDate.getDate() + 1);
 
  const calendar = CalendarApp.getDefaultCalendar();

  // 明日の予定を取得
  const events = calendar.getEvents(today, targetDate);
  events.forEach((event) => {
    const guestList = event.getGuestList(true);

    // 予定の出席者に自分のメールアドレスが含まれているかを確認し、true or falseで返す
    const isMyEmailIncluded = isMyEmailIncluded_(guestList, mailAddress);
    
    console.log(`${event.getTitle()} ${Utilities.formatDate(event.getStartTime(), 'JST', 'yyyy/MM/dd HH:mm')}`);
    console.log(`isInvited:${isMyEmailIncluded}`);

    // 自分のメールアドレスが予定の出席者に含まれておらず、終日予定ではない場合
    if (isMyEmailIncluded && !event.isAllDayEvent()) {

      // カレンダーに予定を登録する
      createCalendarEvent(event);

    }
  });
};



/**
 * 
 * 登録されている予定に自分のアドレスが含まれているかどうかを確認する
 * 
 */
function isMyEmailIncluded_(guestList, myEmail) {
  for (let guest of guestList) {
    if (guest.getEmail() === myEmail) {
      return true;
    }
  }
  // ループが終わっても一致しなかったら、falseを返す
  return false;
}



function createCalendarEvent(event) {
  // ここに操作対象のアカウントを追加
  const calendar = CalendarApp.getCalendarById('***********@gmail.com');
  console.log(calendar);

  // 終了時間を開始時間の30分後に設定
  const endTime = new Date(event.getStartTime().getTime() + 30 * 60 * 1000); 

  // 予定を作成
  calendar.createEvent(event.getTitle(), event.getStartTime(), endTime);

  console.log('予定を作成しました。');
}

私の場合は、採用事務の仕事をしているため、カレンダーに自分が出席しない予定が複数登録されていることもあり、出席者に自分が含まれているかをチェックする処理を挟んでいます。

あとはこれをトリガーで毎日動かせば、明日の予定をApple Home Pod miniで読み上げてもらうことが出来ます。

いいなと思ったら応援しよう!