こんにちは。CDataエンジニアの浦邊です。
本記事ではCData Google Calendar Driverでサービスアカウントを使う手順を説明します。
サービス アカウントは、個人ではなくアプリケーションやVMに属する特別なアカウントです。
複数人が使うアプリケーションからGCPのAPIにアクセスする場合などに利用します。
いくつかのGoogleのサービスではサービスアカウントを作成すればすぐにサービスにアクセスできるようになりますが、Google Calendarではカレンダーの共有など追加の設定が必要です。
この記事ではサービスアカウントの作成からユーザのスケジュール取得までの各ステップを説明します。
今回は以下のシナリオを前提に説明します。
Google Calendarのユーザ([email protected])のアカウントでサービスアカウントを作成し、当該ユーザのカレンダーにアクセスできるようにします。
CData Google Calendar Driverを使用しないで、Google Calendar APIにサービスアカウントからアクセスする方法については以下の記事をご覧ください。
www.cdatablog.jp
ステップ概要
以下の表はサービスアカウントを使ってGoogle Calendar APIにするまでの大まかなステップと、各ステップが画面、APIまたはドライバを通してできるかどうかを表しています。
APIの有効化とサービスアカウントの作成はGoogle Cloud Platformの画面上で行います。
サービスアカウントへのカレンダーの共有、カレンダーリストへのカレンダーの追加などAPIでできるステップはドライバでも可能です。
ステップ |
画面 |
API |
ドライバ |
1.APIの有効化 |
O |
X |
X |
2.サービスアカウントの作成 |
O |
X |
X |
3.サービスアカウントへのカレンダーの共有 |
O |
O |
O |
4.カレンダーリストへのカレンダーの追加 |
X |
O |
O |
1. APIの有効化
Google CalendarのユーザアカウントでGoogle Cloud Platformにログインし、ナビゲーションメニューの[APIとサービス]から[ライブラリ]を開きます。
サービス一覧からGoogle Calendar APIを選択し、[有効にする]をクリックします。
2. サービスアカウントの作成
Google CalendarのユーザアカウントでGoogle Cloud Platformにログインします。
2.1 OAuth同意画面の作成
はじめにGoogle Calendar APIにアクセスするアプリを作成します。
ナビゲーションメニューの[APIとサービス]から[OAuth同意画面]を開きます。
[User Type]を選択し、[作成]をクリックします。
[User Type]はアプリの公開範囲に従って選択してください。
因みに「内部」はGoogle Workspace (旧G Suite)の組織内のアカウントの場合のみ選択可能です。
[アプリ名]に適当な名前を入力し、[ユーザサポートメール]、[デベロッパーの連絡先情報]にメールアドレスを入力します。
これ以降の画面では特に何も設定せず、すべて[保存して次へ]をクリックします。
2.2 サービスアカウントの作成
ナビゲーションメニューの[APIとサービス]から[認証情報]を開きます。
[認証情報の作成]を開き、[サービスアカウント]を選択します。
適当なサービスアカウント名を入力し、[完了]をクリックします。
2.3 サービスアカウントのキーの生成
サービスアカウント一覧から作成したサービスアカウントを選択し詳細画面を開きます。
[キー]タブを選択し、[鍵を追加]を開いて[新しい鍵を作成]をクリックします。
希望する鍵タイプをチェックし[作成]をクリックします。ここでは「JSON」を選択します。
鍵が生成されダウンロードされます。
このファイルはドライバからの接続時に必要となりますので保管しておいてください。
3.サービスアカウントへのカレンダーの共有
サービスアカウントからアクセスするユーザ([email protected])のカレンダーをサービスアカウントに共有します。
このステップは画面またはドライバで実施できます。
画面で共有する場合
User1のGoogle Calendarを開きます。
カレンダーのオーバーフローメニューを開いて(マウスオーバーすると表示されるアイコンをクリック)、[設定と共有]をクリックします。
[カレンダーの設定]を開き、[特定のユーザとの共有]セクションで[ユーザの追加]をクリックします。
サービスアカウントのメールアドレスを入力し、[権限]を選択して[送信]をクリックします。
今回は権限としてフルアクセスを行う「変更及び共有の管理権限」を選択しました。
以下のように共有にサービスアカウントが追加されたことを確認してください。
ドライバで共有する場合
ドライバからUser1のアカウントで接続し、以下のSQLを実行します。
接続方法はどのような方法でも構いません。
insert into AccessControlRules(CalendarId, [Role], ScopeType, ScopeValue) values('<ユーザのカレンダーID>','owner','user','<サービスアカウントのメールアドレス>');
例:User1のカレンダーをサービスアカウントに共有する
insert into AccessControlRules(CalendarId, [Role], ScopeType, ScopeValue) values('[email protected]','owner','user','[email protected]');
4.カレンダーリストへのカレンダーの追加
最後にサービスアカウントのカレンダーリストにユーザのカレンダーを追加します。
サービスアカウントでの接続
ドライバからサービスアカウントで接続します。
接続プロパティの設定値は以下の通りです。
プロパティ名 |
値 |
InitiateOAuth |
"GETANDREFRESH" |
OAuthJWTCertType |
"GOOGLEJSON" |
OAuthJWTCert |
鍵ファイルのパス |
OAuthJWTCertSubject |
"*" |
OAuthJWTCertにはサービスアカウント作成時に取得した鍵ファイルのパスを指定してください。
JDBCドライバで接続する際の接続文字列の例を以下に示します。
JDBCドライバの接続文字列例
jdbc:googlecalendar:InitiateOAuth=GETANDREFRESH;OAuthJWTCertType=GOOGLEJSON;OAuthJWTCert=C:\OAuthJWTCert\testproject-308110-d361062d700d.json;OAuthJWTCertSubject="*";
カレンダーリストへのユーザカレンダーの追加
ドライバから以下のSQLを実行します。
insert into Calendars(Id) values ('<ユーザのカレンダーID>');
例:User1のカレンダーをカレンダーリストに追加する
insert into Calendars(Id) values ('[email protected]');
複数ユーザのカレンダーにアクセスする場合
これまでの手順で、サービスアカウントからUser1のカレンダーのスケジュールを取得する方法を紹介しました。
他のユーザのカレンダーも取得できるようにする際は、カレンダーごとにステップ3の共有設定とステップ4のカレンダーリストへの追加を行ってください。
実行確認
それではサービスアカウントで接続しデータを取得してみます。
今回実行確認用に用意したUser1のカレンダーには5件のスケジュールが登録されています。
テーブル一覧を取得
ドライバのテーブル一覧を取得します。
SQL1: テーブル一覧を取得
select TableName, Description from sys_tables;
SQL1: 実行結果
[email protected]のカレンダーが追加されています。
スケジュール取得
User1のカレンダーからスケジュールを取得します。
SQL2: User1のカレンダーからスケジュールを取得
select Summary, StartDateTime, EndDateTime, ColorId from [[email protected]];
SQL2: 実行結果
User1のスケジュールが取得できました。
スケジュール登録
User1のカレンダーに新しいスケジュールを登録します。
SQL3: User1のカレンダーにスケジュールを登録
insert into [[email protected]](Summary, StartDateTime, EndDateTime) values('面談','2021-05-07 14:00:00','2021-05-07 15:00:00');
SQL3: 実行結果
登録したスケジュールが画面上で確認できました。
おわりに
今回はCData Google Calendar Driversでサービスアカウントを使う方法を説明しました。
CData Google Calendar Driversは30日間無料でお使いいただけます。 Google Calendarとの連携をご検討の方はぜひお試しください。
関連コンテンツ