🐥

Google Apps Script を使用した Google Calendar の勤務予定管理

2024/03/27に公開

背景

ケアネットでは、テレワークとオフィスワークを組み合わせて働くことができます。さらに、フレックスタイム制も合わせ、個々のライフスタイルや作業スタイルに合わせた柔軟な働き方を実現しています。勤務予定の共有には、Google Calendar (Google Workspace)を活用しています。

Google Apps Scriptの活用

予定の組み方は人それぞれですが、私の場合は、はじめに業務予定に合わせて日々の勤務場所を決め、次に、それぞれの日の勤務時間を決めています。
ただ、この組み方だと、Google Calendarの仕様から、手間に感じる点がありました。
それは、日付に勤務場所を登録した後、その予定に時間を追加する更新が行えず、日付の勤務予定を削除しつつ、時間を指定した勤務場所を新たに登録する必要があることです。[1]
そこで、Google Apps Script を活用し、この削除と新規登録を自動化することにしました。

自動化までの流れ

  • Google Apps Script に新しいプロジェクトを作成する。
  • プロジェクトのエディタ画面で、サービスに「Google Calendar API」v3 を追加する。
  • コーディングと動作確認。[2]
  • トリガーの設定し、定期的に実行されるようにする。

来週の予定を更新するサンプル

function sampleFunction() {

  // 対象期間
  let startDate = new Date();
  startDate.setDate(startDate.getDate() + 7 - startDate.getDay());
  startDate.setHours(0,0,0,0);
  let endDate = new Date(startDate);
  endDate.setDate(endDate.getDate() + 6);
  endDate.setHours(23,59,59,999);

  // 勤務場所のイベントを取得
  const calendarId = 'primary';
  const events = Calendar.Events.list(calendarId, {
    eventTypes: 'workingLocation',
    timeMax: endDate.toISOString(),
    timeMin: startDate.toISOString()
  });

  for (const event of events.items) {

    // 日付イベントの場合
    if (event.start.date && event.end.date) {

      // 時間指定有りのイベントを作成する
      let newEvent = {
        eventType: "workingLocation",
        visibility: "public",
        transparency: "transparent",
        workingLocationProperties: event.workingLocationProperties
      }
      // 場所によって設定する時間を変えたい場合
      if (event.workingLocationProperties.type === 'homeOffice') {
        newEvent['start'] = {
          timeZone: events.timeZone,
          dateTime: event.start.date + 'T09:00:00+09:00'
        }
        newEvent['end'] = {
          timeZone: events.timeZone,
          dateTime: event.start.date + 'T18:00:00+09:00'
        }
      } else if (event.workingLocationProperties.type === 'officeLocation') {
        newEvent['start'] = {
          timeZone: events.timeZone,
          dateTime: event.start.date + 'T10:00:00+09:00'
        }
        newEvent['end'] = {
          timeZone: events.timeZone,
          dateTime: event.start.date + 'T19:00:00+09:00'
        }
      } else {
        continue;
      }
      try {
        let response = Calendar.Events.insert(newEvent, calendarId);
      } catch (exception) {
        console.log(exception.message);
      }

      // 元の日付イベントを削除
      Calendar.Events.remove(calendarId, event.id);

    }

  }

}

まとめ

この自動化で、予定を組むのが少し楽になりました。それと同時に、勤務時間を共有し忘れることがなくなりました。
繰り返す小さな一手間を見つけたら、また改善する方法を探したいと思います。

参考

https://developers.google.com/apps-script/advanced/calendar?hl=ja
https://developers.google.com/calendar/api/v3/reference?hl=ja

脚注
  1. 2024/03/22現在 ↩︎

  2. 初回実行時にカレンダーへのアクセス許可を求められます。 ↩︎

CareNet Engineers

Discussion