AppSheetでGoogleカレンダー読み書き

AppSheetではデータソースと言えばスプレッドシート。AppSheet DBやCloud SQLのMySQLなど用途に応じて使い分けをしているケースも多いでしょう。

一方で特殊なデータソースとして「Googleカレンダー」を読み書きする事ができ、これが結構実務で非常に役に立つシーンが多い。そこでチーム内で共有するカレンダー連携タイプのAppSheetアプリを作ってみようと思います。

今回利用するファイル等

今回はシンプルに単体のカレンダーに対して読み書きをし、そのカレンダー自体をチーム内で共有もして利用する仕組みにしています。単体で利用と言うよりも以下のような形で合わせて利用するケースで活躍するのではないかと思います。

  1. Googleフォームと連携して送信されたデータと連結させる
  2. 既存のシートの日付列と連結して活用する(仕入ID1個に対して、納品日複数などなど)
  3. 独立した特定目的のカレンダーに対してタスク管理や労務管理
  4. 自動作業のログデータと連携してカレンダービューで表示
  5. メールで飛んできた内容をトリガーにしてカレンダーに自動追加

ちなみに連携してるカレンダー側での追加や編集があると、AppSheet上でも同じものを見ているので変更されます。

AppSheetでGmail受信をトリガーにして自動化

事前準備

追加でカレンダーを作成する

Googleカレンダーは個人に1つ標準でアカウントに直結のカレンダーが用意されていますが、チームで運用するようなケースや今回のようなAppSheetで活用するといった特定の目的に絞った場合には使いづらいです。そこで専用のカレンダーを別途用意してそのカレンダーに対して読み書きや共有を行うようにしましょう。

以下の手順で作成します。

  1. Googleカレンダーを開く
  2. 左サイドバーの「他のカレンダー」の項目の隣の+ボタンをクリックする
  3. 新しいカレンダーを作成をクリックする
  4. 新しいカレンダーの名前を入力して、カレンダーを作成をクリックする
  5. マイカレンダーに新しいカレンダーが登録されます。

新規追加のカレンダーなので、現時点では自分以外の人は見えない状態です。

図:専用のカレンダーを新規追加する

カレンダーを共有する

アプリを使う分にはAppSheetではデフォルトではデプロイ(オーナー)した人の権限で動作するので、カレンダーそのものを共有する必要はありません。しかし、実際の現場で利用する場合Googleカレンダー単体でも見えるようにしてあげないと利便性が落ちます。

AppSheet上で読み書きを許可しつつ、Googleカレンダーとしては読み取り専用といった運用が可能ですので、是非この運用を追加してあげましょう。

  1. 前述で作成したマイカレンダーに登録されたカレンダーの横の「⋮」をクリックする
  2. 設定と共有をクリックする
  3. 左側の「共有する相手」をクリックする
  4. 右側の共有する相手に対して、共有先のメアドやグループアドレスを追加する
  5. 同じく権限はここではデフォルトの「予定の表示(すべての予定の詳細)」を選択する(読み取り専用となる)
  6. 送信をクリックする
  7. 共有先にはメールで共有された旨の通知が送られます。相手はメールの中の「このカレンダーを追加」をクリックすると自分のカレンダーの追加ダイアログが出てくるので、「追加」をクリックする
  8. すると相手側は、他のカレンダー欄にこのカレンダーが登録されます。
  9. ただし読み取り専用なので編集は出来ません。

予定の編集という権限の場合は、相手の側でもカレンダー上で内容を変更することが可能ですので、編集許可したい場合には5.の権限を変更して保存しましょう。

図:カレンダー共有を追加する

図:カレンダー追加はここから

AppSheetで利用する

前述まででカレンダーそのものを用意と共有が完了しました。この新しく作成したカレンダーをAppSheetのデータソースとして追加し活用する手順を記します。

データソースとして追加

新規にプロジェクトを作成したり、既存のアプリに対してデータソースとしてカレンダーを追加します。以下はBlankアプリから開始してるケースで始めています。

  1. AppSheetアプリ開発画面のDataに於いて、上部にある+ボタンをクリックする
  2. Add dataに於いて色々データソース一覧が出てきますが、ここでNew Sourceをクリックする
  3. Add a new data sourceでは、一番下の方にあるGoogle Calendarをクリックする
  4. 自分自身のアカウントでログインして、認証を許可する
  5. 再びAdd dataにてGoogle Calendarが出てきます(下に自身のメアドがあるものを選びます)
  6. Choose a Sheet/Tableと出るので、前述で用意したカレンダーを選択します。
  7. Create a new tableと出たら、Are updates allowed?ではアクセス権限を設定。基本読み書きなのでデフォルトのままでオッケーです。Add to appをクリックする

これで新規に読み書き出来るデータソースとしてカレンダーが追加できました。

図:作成したカレンダーを選択する

ビューの問題点

すでにこの段階で2つのビューが作成済みとなっているのですが、個人的に気に食わないのが

  • 何故かマップビューが追加されている。カレンダーにLocationフィールドがあるからだろうけれども
  • カレンダービューを追加してみると、単一の日付のイベントの場合時間の範囲できちんと表示されるけれども、日付を跨る期間のイベントは月カレンダーに出ても日および週カレンダーには出てこない(終日チェックの有無にかかわらず)
  • また、24日〜25日に1つイベントを入れていて、25日〜26日に1つイベントを入れてる場合、月カレンダーでも後者が出てこない現象。
  • フィールド名は変更できないので、Display Nameの側で変更を掛けて日本語化してあげる

という現象があります。後者の日カレンダーに出てこない件については回避手段が見つからず(どうもバグのようで2023年から修正されておらず)。しかし前者については不要なので、ビューに自動で生成されたマップビューを削除することで対処しています。

ということで、Google Calendarを使う場合にはカレンダービューも使わない方が良いという判断をして実際のアプリでは利用するのを控えるようにしました。

仮想列を追加したテクニックで回避出来るようですが・・・・

図:一見するとちゃんと表示されてる

図:実際のカレンダーと表示が異なる

実際に使ってみる

AppSheetおよびGoogle Calendarの双方向から編集を掛けてどうなるかを実験してみました。新規追加および更新両方共通でお互いに反映しあい、修正されることが確認できました。カレンダービューのバグが非常に残念。

Googleカレンダーのソースは仮想列としてはフィールドは足すことが出来ても、他に追加項目を設けることは出来ません。StartとEndがそれぞれ日付時刻の開始と終了と対応してるのでこのフィールドの値をもってカレンダー表示となり、Descriptionが対象日のコメント欄と対応しています。

Meet LinkなどについてはGoogleカレンダー上で追加時に発行されるものであるのでAppSheet上からは見えても編集するのは防ぐべきでしょう。このあたりの細かなフィールドの読み書き制限をソース追加後にしてあげる必要があります。自分の場合はshowとsearchのフラグをオフにしてあります。

図:AppSheet上での入力欄

図:編集不要な列を非表示に

関連リンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)