タイムズカーシェアの予約をカレンダーに自動反映する

〜
タイムズカーシェアの予約情報をカレンダーに自動反映（<font color="#FF6666">**新規登録 / 更新 / 削除**</font>）する機能をご紹介します
〜

こちらの機能を利用すると以下が実現できます。

タイムズカーシェアで、
- <font color="#FF6666">予約をする</font>と自動でカレンダーに予定が追加される
- <font color="#FF6666">予約を変更する</font>と自動でカレンダーの予定が変更される
- <font color="#FF6666">予約を取り消す</font>と自動でカレンダーの予定が削除される

![カレンダー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364477/e4f48430-a04d-4a2b-a517-f45df957b33f.png)


# はじめに
私生活でタイムズカーをよく利用しています。
タイムズカーを予約する中で予約状況をタイムズカーのアプリ内でしか確認できない不満が昔からありました。

メールで予約登録や変更、返却証の通知は届きます。
それをカレンダーにいちいち登録していて面倒でした。

一方で Google アカウントの愛用者でもあったので、GAS の存在も知っており無料の範囲でカレンダーへの自動反映機能を簡単に作れないか思案していました。
趣味で細々と作ったので、これを機にこちらで共有しようと思います。

タイムズカー利用者の方がこちらの記事を見つけてくださったら、もし良ければ使ってみてください。

# 機能概要
Google のサービスを活用しています。
Gmail, Google カレンダー, スプレッドシート（データベースとして）を利用します。

動作の流れは以下の通りです。

1. タイムズカーで予約を <font color="#FF6666">**新規登録 / 変更 / 取消 / 返却**</font> する
1. Gmail に予約情報の最新の通知メールが届く
1. Gmail のメール情報を GAS で抽出する
1. Google カレンダーへ GAS でイベントを反映（<font color="#FF6666">**登録 / 更新 / 削除**</font>）する

※ GAS（Google Apps Script）は<font color="#FF6666">時間主導型のトリガー</font>で実行されるように設定する前提です

# 開発の前提
開発にあたって、こちらの機能を基盤にしています。
開発者の方はぜひ参考にしてみてください。

[Qiita - GAS でスプレッドシートを Database ライクに操作する](https://qiita.com/takkichii/items/54cffecf338cc278523c)

# 成果物
## GoogleDrive
開発したものは以下に格納してあります。
<font color="#FF6666">コピーしてご自身のマイドライブへ格納してご利用ください。</font>
スプレッドシートをデータベースの役割として、それに GAS プロジェクトが紐づいています。

[GoogleDrive - タイムズカーの予約をカレンダーに自動反映](https://drive.google.com/drive/folders/1X67t5bLv0bEUAtjwY1KLCiXb8ksYM_X8?usp=drive_link)

GAS を時間主導型のトリガーに設定して利用してください。
※詳細は以降で説明します。

## GitHub
GAS のソースコードは以下で管理しています。

[GitHub - timescar-calendar-sync](https://github.com/takkichii/timescar-calendar-sync)

# 開発内容
## Gmail
### ■ 専用のラベルを作成する
Gmail の検索を効率化するために、まずラベルを作成します。
私の場合は ```TimesCar``` という名称のラベルを作成しました。

![Gmail-label.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364477/f736504d-4f3e-4a1d-8d78-e8e793a20517.png)

[参考)ラベルを作成して Gmail を整理する](https://support.google.com/mail/answer/118708?hl=ja)

### ■ メールの自動振り分け設定
対象のメールアドレスに自動振り分け設定をしておきます。
タイムズカーからメールが届くと、そのメールに自動でラベルを付与してくれます。

[参考)メールのフィルタルールの作成](https://support.google.com/mail/answer/6579?hl=ja)

![ラベル付与ルール.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364477/0e3ce7ff-bb3b-46fd-b7c2-b4697dc24467.png)

![ラベル付与ルール2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364477/cc7fee1e-5cf1-4f2d-adad-9dade644f6a9.png)


## スプレッドシート
開発物として上述したスプレッドシートを、データベースとして活用しています。
主に、予約情報をカレンダーへ最後に反映した日時（同期時刻管理）と、タイムズカーの予約番号とカレンダーのイベント ID を一意に紐づけた履歴リスト（同期履歴）です。
これを元に予約情報をカレンダーに効率的に自動反映することを実現しています。

![スプシ_同期時刻管理.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364477/6238e724-cfca-4618-a8da-5078d6be01be.png)

![スプシ_同期履歴.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364477/96891ffd-23dd-4d64-a8e5-9bde5ac1f26a.png)

## GAS（Google Apps Script）
### ■ 概要
スプレッドシートに紐づけて GAS プロジェクトを開発しています。
こちらの GAS 内に存在する ```createEventFromGmail()``` メソッドを時間主導型のトリガーとして設定すると、Gmail を定期的に取得して、最新の予約通知メールが存在する場合は Google カレンダーへ自動反映されます。

予約の <font color="#FF6666">新規登録、変更、取り消し、返却</font> に対応しています。

![GAS_menu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364477/a862815c-03c6-4f99-a470-41dacf166bf7.png)

![GAS_内容.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364477/9865c657-d507-4ce5-b42e-004013efeeb8.png)

### ■ ラベル名の設定 <font color="#FF6666">**【重要】**</font>
Gmail で専用のラベル（```TimesCar```）を設定するよう言及しましたが、こちらを**ご自身の好きな名称で作成された場合**は GAS の一部を変更する必要があります。

```Config.gs``` ファイルに記載のある ```this.labelNameTimesCar``` の値を、ご自身のラベル名称に合わせてください。

```Javascript: Config.gs
function config() {
  // スプレッドシート ID を指定しない（空欄）場合は getActiveSpreadsheet が実行される
  this.spreadsheetId = ""; // Spreadsheet ID: Default Database

  // ===========================
  // Setting as you like
  // ===========================
  this.settingAsYouLike = "Sample";

  this.labelNameTimesCar = 'TimesCar'; // Gmail の任意のラベル名
  this.subjectCalendarEvent = 'Times Car 予約'; // カレンダーのタイトル

...（略）
```

![スクリーンショット 2025-04-25 11.48.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364477/feb74a7c-fc94-48e7-af6b-4920b2f26cd9.png)

### ■ トリガーの設定方法
1. GAS の左側にあるメニューから時計アイコンのトリガーを選択します
1. トリガー設定の画面へ遷移したら、```トリガーを追加``` ボタンをクリックしてダイアログを表示させます
1. 実行する関数に ```createEventFromGmail()``` を選択します
1. イベントのソースは「時間主導型」
1. トリガーの間隔は任意で設定できます（1分〜12時間おき、他）
1. 設定が完了したら保存ボタンをクリック

![トリガー_menu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364477/5f4e5674-c3a8-42dc-9698-dba1ab106487.png)

![トリガー_追加.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364477/9d95ed8b-1caa-4de9-841a-8be0007b9b0f.png)

![トリガー_詳細.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364477/9f826445-a04f-4dca-a0f7-8905b9380456.png)


# まとめ
以上で初期設定は完了です。
あとはタイムズカーで予約の操作を行うと、トリガーで設定した時間間隔ごとに最新の予約情報を Google カレンダーに自動反映してくれます。

最後まで読んでくださりありがとうございました！