Google Apps Scriptでカレンダー同期を自作する方法と、その限界

読了目安 約2吉岡朝日(株式会社ASRISE)

💡 複数のGoogle/Outlookカレンダーの「予定あり」自動同期はタバカレ(無料プランあり)で試せます。

GASでカレンダー同期は「作れる」

Google Apps ScriptはGoogleアカウントの権限で動くスクリプト環境で、CalendarApp / Calendar APIを使えば「カレンダーAの予定を読み、カレンダーBに『予定あり』を作る」処理は数十行で書けます。時間主導型トリガーで5分〜15分おきに実行すれば、簡易的な同期が動きます。

コストはゼロ、外部サービスにデータを渡さない、という点が魅力で、エンジニアならまず検討する選択肢でしょう。

実装の骨子

基本構造は3つです。①ソースカレンダーから対象期間の予定一覧を取得する。②各予定に対応するブロックがターゲットに存在するか確認する(照合キーとして元予定のIDを、作成するブロックの説明欄や拡張プロパティに埋めておく)。③存在しなければ作成、元予定が消えていれば削除。

この「照合キーの管理」が設計の核心です。タイトルや時刻での照合は、同時刻の別予定や予定の変更で簡単に壊れます。必ず元予定のイベントIDをブロック側に記録してください。

自作でハマる4つのポイント

第一に削除追従。予定一覧の取得だけでは「消えた予定」は分からないため、ターゲット側の全ブロックを走査して元予定の存在を逆引き確認する必要があり、予定数が増えると実行時間制限(6分)に当たります。第二に変更検知。開始時刻の変更やキャンセルへの追従は、全件比較か増分同期(syncToken)の実装が必要で、後者はエラー処理が急に難しくなります。

第三にレート制限。Calendar APIの書き込みには流量制限があり、初回の大量作成では失敗リトライの設計が必須です。第四に無限ループ。自分が作ったブロックを同期対象として拾ってしまうと、ブロックのブロックが無限に増えます。自作ブロックの識別を厳密にやる必要があります。いずれも「動くデモ」と「壊れない運用」の間にある壁です。

それでもGASが有効な場面

会社のWorkspaceが外部アプリのOAuth接続を全面禁止している場合、GASは数少ない現実解です。スクリプトは自分の権限で会社アカウント内で動き、通信は会社側からの外向きだけなので、セキュリティポリシーと衝突しにくいのです。

実はタバカレもこのパターンを公式にサポートしています。OAuth接続が使えない会社アカウント向けに、貼り付けるだけのGASスクリプトを発行し、読み取りと「予定あり」ブロックの受け取りをGAS経由で行う接続方式です。自作との違いは、削除追従・変更検知・ループ防止・リトライがサービス側で面倒見られることです。

まとめ: 買うか、作るか

学習目的や特殊要件があるなら自作は良い選択です。ただし「壊れない同期」の運用コストは書いた後に発生します。月350円でその保守から解放されるなら、多くの人にとっては買うほうが合理的でしょう。GAS接続はタバカレのプレミアムプランで利用できます。既製ツールの選択肢は複数カレンダーの一元管理おすすめ比較【2026年版】にまとめています。

この記事に関連する無料ツール

登録不要・ブラウザだけで使えます。

無料ツールをすべて見る →

関連記事

Google Apps Scriptでカレンダー同期を自作する方法と、その限界 | タバカレ