見出し画像

Google Apps Scriptで複数のGoogle Calendarを同期する

複数のGoogle Calendarをお使いの皆さん、こんにちは。皆さんは以下のような悩みを抱えていませんか。

・ダブルブッキングしてしまった/されてしまった
・片方のカレンダーにしか予定が入っておらず、予定をすっぽかしてしまった

カレンダーを共有すれば良いだけでは?そうお考えでしょうか。

例えば仕事で複数の組織のGoogleアカウントを使っている場合、関わる人に「私のカレンダーはAのアカウントではなく、Bのアカウントを見てください」そうお願いするのは難しかったり、お願いできても浸透させるのは難しいのではないでしょうか。
またセキュリティ設定によっては、カレンダーを共有しても組織外の人には"busy"とだけ表示されることもあります。

私も同様の悩みを抱えていました。今回は、その悩みを解決する「複数のGoogle Calendarで予定を同期する方法」をご紹介します。

それは、イベントのゲストにお互いを追加するという方法です。

例えばアカウントAのイベントのゲストにアカウントBを招待し、アカウントBのイベントにはアカウントAを招待します。こうすることで、例えあなたの知り合いや同僚がどちらかのカレンダーしか見ることができなくても、同期されたすべての予定を見ることができます。

ただ、ひとつひとつのイベントにお互いのアカウントを手動で招待するのは大変です。そこで、Google Apps Scriptを使って自動でカレンダーを同期し続けたいと思います。

使うもの

Google Apps Script
Google Calendar, Gmail, SpreadsheetなどのGoogleのサービスと組み合わせたプログラムを開発、実行できるサービス。無料で使うことができます。

Slack
チャットツール。カレンダー同期の仕様上、同期に失敗することがあります。同期に失敗した際にSlackに通知します。

設定の手順

これより先、2つのGoogleアカウントをそれぞれアカウントA (john@a-company.com)、アカウントB (john@b-company.com) と呼びます。

1. 必要な情報を集める
2. Google Apps Scriptを設定する(アカウントA)
3. Google Apps Scriptを設定する(アカウントB)

Step1: 必要な情報を集める

3つの情報が必要です。

・カレンダーの同期日数
・カレンダーのメールアドレス
・Slack Webhook URL

カレンダーの同期日数
何日分のカレンダーを同期しますか?日数が多いとそれだけ同期に時間がかかります。標準設定では、同期を行う際に未来30日分の予定を対象にしています。

カレンダーのメールアドレス
同期したいカレンダーのメールアドレスは何ですか?同期する2つのカレンダーのメールアドレスが必要です。この記事ではアカウントAのメールアドレス「john@a-company.comアカウントBのメールアドレス「john@b-company.com」この2つがカレンダーのメールアドレスです。

Slack Webhook URL
カレンダーの同期に失敗したとき(イベントへの参加/不参加を同期する際、アカウントAとBで参加/不参加が)にSlackに通知を行います。Slackに通知するにはSlack Incoming WebHooksの設定が必要です。

設定ページを開いて、カレンダーの同期に失敗したときに通知したいSlackチャンネルを選んでください。チャンネルを選んだら「Add Incoming WebHooks Integration」をクリックしてください。

ページ中程にあるWebhook URLをコピーしてください。「Copy URL」をクリックするとコピーできます。

ここでコピーしたURLがSlack Webhook URLです。
これで必要な3つの情報が揃いました。

Step2: Google Apps Scriptを設定する(アカウントA)

まずはGoogleアカウントA (john@a-company.com)のGoogle Apps Scriptを設定します。

アカウントAでログインした状態で、G Suite Developer Hubを開いて「New script」をクリックしてください。

「Untitled project」の部分は「Sync Google Calendar」など、後からみて何の為のプログラムか分かるように記載するのがおすすめです。

Code.gsの中身はこちらのプログラムをコピー&ペーストしてください。

ここで、先程用意した3つの情報でプログラムを更新します。

カレンダーの同期日数
カレンダーを何日同期するかをDAYS_TO_SYNCに設定します。標準では30日です。もし60日に変更したい場合はこのようになります。

// 1. How many days do you want to sync your calendars?
var DAYS_TO_SYNC = 60;

カレンダーのメールアドレス
カレンダーA (john@a-company.com) の予定にカレンダーB (john@b-company.com) を招待する場合、以下のようになります。

// 2. Calendar ID mapping: [Calendar ID (Source), Calendar ID (Guest)]
var CALENDAR_IDS = [
 ['john@a-company.com', 'john@b-company.com']
];

Slack Webhook URL
先程取得したSlack Webhook URLを貼り付けてください。

// 3. What is Slack webhook URL? You'll be notified when the sync is failed
var SLACK_WEBHOOK_URL = 'https://hooks.slack.com/services/foobar';

トリガーの設定
このプログラムを定期的に実行するため、トリガーを設定します。「Edit」から「Current project's triggers」を開いてください。

トリガーの設定画面が開くので「Add Trigger」をクリックしてください。

以下の画像のように設定し、保存してください。この場合、毎時間カレンダーの同期が行われます。回数が多い/少ない場合は「Select type of time based trigger」や「Select hour interval」を変更してください。

Google Apps Scriptが各種アクセスを求める画面が出てきますので許可してください。

おめでとうございます!これでアカウントAの設定は完了です。

Step3: Google Apps Scriptを設定する(アカウントB)

最後にGoogleアカウントB (john@b-company.com)のGoogle Apps Scriptを設定します。

アカウントBでログインした状態で、G Suite Developer Hubを開いて「New script」をクリックしてください。Code.gsの中身はこちらのプログラムをコピー&ペーストしてください。

カレンダーの同期日数
カレンダーを何日同期するかをDAYS_TO_SYNCに設定します。Step2と同じ値です。

// 1. How many days do you want to sync your calendars?
var DAYS_TO_SYNC = 60;

カレンダーのメールアドレス
カレンダーB (john@b-company.com) の予定にカレンダーA (john@a-company.com) を招待する場合、以下のようになります。
Step2とメールアドレスの順番が逆になります。ご注意ください。

// 2. Calendar ID mapping: [Calendar ID (Source), Calendar ID (Guest)]
var CALENDAR_IDS = [
 ['john@b-company.com', 'john@a-company.com']
];

Slack Webhook URL
先程取得したSlack Webhook URLを貼り付けてください。Step2と同じ値です。

// 3. What is Slack webhook URL? You'll be notified when the sync is failed
var SLACK_WEBHOOK_URL = 'https://hooks.slack.com/services/foobar';

トリガーの設定
このプログラムを定期的に実行するため、トリガーを設定します。「Edit」から「Current project's triggers」を開いてください。トリガーの設定画面が開くので「Add Trigger」をクリックしてください。設定はStep2と同様にしてください。

おめでとうございます!これでアカウントBの設定も完了です。

Google Apps ScriptでGoogle Calendarを同期する

いかがでしたか?無事、2つのGoogleアカウントそれぞれでGoogle Apps Scriptを設定できたでしょうか。はじめの設定は少し大変かもしれませんが、一度設定できてしまえば快適なGoogle Calendar同期を楽しむことができます。

このGoogle Apps ScriptでみなさんのGoogle Calendarがさらに使いやすくなることを願っています。

免責

記事で紹介しているGoogle Calendarを同期するGoogle Apps Scriptは私が作成し、MITライセンスで公開しています。このソフトウェアを利用して発生したいかなる問題の責任を私は負いません。詳しくはGitHub Repositoryをご覧ください。

この記事が気に入ったらサポートをしてみませんか?