

皆さん、こんにちはこんばんは。
今回はNodeJSでGoogleカレンダーAPIを使って予定を追加したり更新、削除などができる機能を紹介していきたいと思います。
やり方としては2パターンあるんですが、比較的に汎用性の高いOAuth認証型で今回は実装していきたいと思います。
もう1方のやり方はOAuth認証型より比較的実装が簡単なんですが汎用性がちょっと低いのでそちらは少しだけ紹介したいと思います。
また、サーバー処理に関してはすべてAPIベースで行なっていきます。
初めに
OAuth認証型でAPIを利用していきますので、まずはGoogle Calendar APIを有効にするところから始めていきます。
Google Calendar APIを有効にするためにまずはこちらからGCPのコンソールへ移動してください。
コンソール画面から「クイックアクセス」の「APIとサービス」からでも良いですし
ダッシュボードから左上にあるナビゲーションメニューを開いてもらって「APIとサービス」→「ライブラリ」のページへ移動してください。
移動ができたら、添付のように「Google Calendar API」と検索して結果画面に表示された「Google Calendar API」を有効にしてください。
有効にできたら認証情報を作成するので、GCPのコンソール画面からダッシュボードへ移動しナビゲーションメニューにある「APIとサービス」→「認証情報」の画面へ移動してください。
移動ができたら画面上部にある「+認証情報を作成」から「OAuthクライアントID」を作成します。
ここの情報は自分のプロジェクトにあった情報を設定してください。
※今回はウェブアプリケーションを前提にご紹介します。
認証情報の作成が完了すると「クライアントID」と「クライアントシークレット」が生成されますので、後ほどこちらの情報を利用していきます。
もし今回テスト用でGoogle Calendar APIを利用する場合はテストユーザーを追加する必要があります。
アプリがテスト状態(公開されていない状態)だと特定のユーザーでしか認証ができないため認証ができるようにテストユーザーを追加しておきます。
「OAuth同意画面」からテストができるユーザーを追加しておいてください。
ここまでがGoogleのAPIを利用するまでの事前準備となります。
イベントを取得する
まずはGoogleカレンダーのイベントを取得するところから始めます。
これはGoogleCalendarAPIのクリックスタートに紹介がある通りになりますが、私が紹介するやり方はJSONファイルのクレデンシャルは利用せず、またすこし条件を追加しつつイベントを取得していこうと思います。
npmからgoogleapisをインストールしましょう。
1 |
npm install --save googleapis |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import {google} from 'googleapis' const list = async () => { const googleOAuth = new google.auth.OAuth2(<client_id>, <secret_key>, <redirect_uri>) googleOAuth.setCredentials({ access_token: <access_token> }) const calendar = google.calendar({version: 'v3', auth: googleOAuth}) const res = await calendar.events.list({ calendarId: <calendarId>, timeMin: <expire_min>, timeMax: <expire_max>, timeZone: 'Asia/Tokyo' }) const events = res.data.items console.log(events) } こ |
こちらが基本的なGoogleカレンダーからイベントを取得する処理です。”<>”で囲ってある値は適切変更してください。
“timeMin”と”timeMax”はイベントを取得する期間を設定します。アプリ開発でカレンダー式の月送りなどを作る場合はこのように期間を設けると期待通りのイベントが取得できます。
また”<calendarId>”の部分は自分のカレンダーを取得したい場合はgmailのアドレスが対象になります。自分が共有されている他のカレンダーへアクセスをしたい場合は対象のカレンダーの設定画面から以下のカレンダーIDに変更することで対象のカレンダーからイベントを取得することができます。
イベントを作る
続いてイベントを作成してGoogleカレンダーへ反映させていこうと思います。
OAuth認証を行う箇所は基本的に同じで、呼び出すメソッドが変わってきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
const create = async () => { const googleOAuth = new google.auth.OAuth2(<client_id>, <secret_key>, <redirect_uri>) googleOAuth.setCredentials({ access_token: <access_token> }) const calendar = google.calendar('v3') const res = await calendar.events.insert({ auth: googleOAuth, calendarId: <carendarId>, requestBody: { summary: <summary>, location: <location>, description: <description>, start: { dateTime: <dateTime>, timeZone: <timeZone> }, end: { dateTime: <dateTime>, timeZone: <timeZone> }, attendees: [ {email: <email>} ] } }).then((response) => { return response }).catch((e) => { console.error(e) }) console.log(res.status) } |
“<>”の箇所は適切変更してもらい、メインは”requestBody”の部分になります。
みてわかる通りの箇所は説明を省きますが、”attendees”の部分に関しては参加者を追加することができます。
パラメーターは”email”となっており、対象のメールアドレスに対して通知を飛ばすことができるんですがこちらは”gmail”アドレスでないと通知を飛ばすことはできないので注意してください。
レスポンスのステータスが200で返ってきたらイベントの作成も成功しています。
イベントを削除する
続いてはイベントの削除です。こちらはカレンダーのIDにプラスでイベントのIDも必要になります。このイベントIDはイベントを取得したときにイベントIDを取得することができるので、そのイベントIDを使って削除をします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
const delete = async () => { const googleOAuth = new google.auth.OAuth2(<client_id>, <secret_key>, <redirect_uri>) googleOAuth.setCredentials({ access_token: <access_token> }) const calendar = google.calendar('v3') const res = await calendar.events.delete({ auth: googleOAuth, eventId: <eventId>, calendarId: <calendarId> }).then((response) => { return response }).catch((e) => { console.error(e) }) console.log(res.status) } |
こちらも同じく”<>”の中身は適切変更してもらいレスポンスのステータスが200であればイベントの削除が成功しています。
イベントIDと対象のカレンダーIDをパラメーターに付与するだけですので簡単にイベントを削除することができますね。
OAuth認証以外でのGoogle Calendar APIについて
冒頭で話したGoogle Calendar APIを活用するやり方が2パターンあるとご紹介しましたが、もう1つのやり方は「サービスアカウント」というBOTアカウントを使ったやり方です。
このやり方のメリット・デメリットを挙げておきます。
サービスアカウントを使うメリット
・OAuth認証を扱わないのでGoogleアカウントと連携する必要がない
・OAuth認証の手間を省いて比較的簡単に実装することが可能
サービスアカウントを使うデメリット
・イベント作成者がサービスアカウントの情報で登録される
・対象のカレンダーと連携したい場合にサービスアカウントに対してカレンダーを共有しなければいけない
・組織として扱う場合、権限を委託しないと参加者ゲストの追加が不可能
といったところでしょうか。私はOAuth認証でGoogle Calendar以外にもSNSログインなど他のAPIにも活用できるのでOAuth認証をお勧めします。
最後に
いかがでしたでしょうか。
アプリケーションなどでイベント管理のような実装を行うときにGoogle Calendarと連携できるとアプリやGoogleCalendarからもイベントの確認や更新などができるのですごい便利になりますよね!
よかったら皆さんも試してみください。