自分のGoogleカレンダーにJWTを使って予定を追加してみる

家事・育児
スポンサーリンク
このエントリーをはてなブックマークに追加

やりたいこと

アプリケーションからGoogleカレンダーに予定を追加することはGoogle Calendar APIを利用すれば可能です。当然ながら、カレンダーに予定を追加するためには、ユーザ認証が必要なわけですが、この認証がかなり複雑です。特に、Calendar APIのクイックスタートに掲載されている方法は、ブラウザによるGoogleアカウントでのログイン操作が必要で、アプリケーションからの利用には向いていません。

そこで今回は、JWT(JSON Web Token)を使って、ブラウザからのログイン操作なしで特定のGoogleカレンダーに予定を追加することをやってみます。

全体の流れ

JWTを使ってGoogleカレンダーに予定を追加する全体の流れは以下の通りです。

 1.Google Calendar APIの有効化
 2.Googleカレンダーへのサービスアカウントの権限追加
 3.予定の投稿用プログラムの作成

Google Calendar APIの有効化

まずは、Google Calendar APIを有効化します。そして、Calendar APIを通じてカレンダーに予定を追加する専用アカウントであるサービスアカウントを作成し、このサービスアカウントを利用するためのKey情報(JSON)を取得します。

①Google Cloud プラットフォームサイトにアクセス

Google Calendar APIを有効にするためにGoogle Cloud プラットフォームにアクセスします。

②Calendar APIを検索

検索欄に「calendar」と入力して検索して、Google Calendar APIを選択します。ちなみに、カタカナで検索しても出てこないので、ちゃんと英語で検索しましょう。

③Calendar APIを有効化

Google Calendar APIの画面で「有効にする」ボタンをクリックして、Google Calendar APIを有効化します。

④認証情報の追加

次に、画面左側の「認証情報」を選択します。

⑤認証情報の追加

画面上部の「+認証情報を作成」をクリックし「ウィザードで選択」をクリックします。

⑥認証情報の設定

認証情報の設定画面で、以下のように入力して「必要な認証情報」ボタンをクリックします。

 ・APIを呼び出す場所:その他の非UI(cronジョブ、デーモンなど)
 ・アクセスするデータの種類:アプリケーションデータ
 ・App Engineまたは・・・:いいえ、使用していません

⑦サービスアカウントの追加

IAMと管理のサービスアカウントの画面に遷移したら「+サービスアカウントを作成」ボタンをクリックします。

⑧サービスアカウントの設定

サービスアカウントの設定画面で必要事項を入力します。また、サービスアカウントのメールアドレスが後で必要になるので、テキストエディタなどにメモしておきましょう。メモしたら「作成」ボタンをクリックします。
※サービスアカウント名などは、任意の名前でOKです。

⑨役割の設定

この画面は、設定不要なので「続行」ボタンをクリックします。

⑩キーの作成

この画面の「+キーを作成」ボタンをクリックします。

出てきた右側の画面で、キーのタイプで「JSON」を選択し、「作成」ボタンをクリックします。すると、キーファイルがダウンロードされるので、このファイルを保存します。

(11)完了

キーが作成されていることを確認し、「完了」ボタンをクリックします。

Googleカレンダーへのサービスアカウントの権限追加

次に、Googleカレンダーに新しいカレンダーを追加して、先ほど作成したサービスアカウントにイベントの登録・閲覧権限を付与します。

①Googleカレンダにアクセス

ブラウザで新しいタブを開きGoogleカレンダーを開きます。そして「他のカレンダー」の右側にある「+」をクリックします。

②新しいカレンダーの作成

出てきたポップアップウィンド内の「新しいカレンダーを作成」を選択します。

③カレンダーの名前の入力

作成するカレンダーの名前を適当に入力し、「カレンダーを作成」ボタンをクリックします。

画面下に「カレンダーを作成しました」と表示されたら、画面左上の「⇦」ボタンをクリックして戻ります。

④カレンダーの設定1

作成したカレンダーがマイカレンダーの欄に追加されている事を確認し、作成したカレンダーの右にある、「・・・」ボタンをクリックします。

⑤カレンダーの設定2

ポップアップで表示されるメニューから「設定と共有」を選択します。

⑥ユーザの追加

「特定のユーザとの共有」の欄にある「+ユーザを追加」ボタンをクリックします。

⑦メールアドレスと権限の設定

出てきたウィンドウに、上でメモしたサービスアカウントのメールアドレスを入力し、エンターを押します。また、権限欄は「予定の変更権限」を選択し、「送信」ボタンをクリックします。
※メールアドレスを入力した後に「エンターキー」を押して確定しないと「送信」ボタンが押せないので注意です。

⑧カレンダーIDのメモ

最後に、後ほど必要となるカレンダーIDをテキストエディタなどにメモしておきます。

予定の投稿用プログラムの作成

最後に、Google Calendar APIをキックし、予定を登録するプログラムを作成していきます。なお、今回使用した環境は以下の通りです。

 ・OS :Ubuntu 18.04.1
 ・node:10.16.0
 ・npm :6.11.3

①Google APIのインストール

まずは、nodeからGoogle Calendarを利用するために、GoogleAPIsパッケージをインストールします。

②プログラムの作成

JWTを用いてGoogle Calendarに予定を登録するプログラム「InsertCalendar.js」を作成します。なお、以下の変数は適宜、変更してください。

 ・keyfile変数:上でダウンロードしたサービスアカウントのキーファイル名
 ・calendarId変数:上でメモしたカレンダーID
 ・event変数:登録する予定の情報

また、キーファイルとプログラムは同じフォルダに格納してくださいね。

プログラム自体を見てもらえれば、何をやっているかは理解できると思います。認証部分はKeyfileを読み込むだけであり、OAuth2を使う場合と比較してかなり簡潔なプログラムとなっているのが、わかると思います。

③テスト

それでは、作成したプログラムを実行してみましょう!!!
「予定を登録しました」と出れば、正常に動いています。

Googleカレンダーの画面も確認してみましょう。ちゃんと、予定が登録されました!!

おわりに

今回はJWTを使って、Google Calendarに予定を登録することをやってみました。次は、この機能を使って、子供のミルクやオムツの時間を記録する「みるく&おむつボタン」を作ってみようと思っています。

記事が参考になったら、ブログランキングに協力(クリック)して貰えると嬉しいです。
ブログランキング・にほんブログ村へ
スポンサーリンク
naka-kazz

昼間はIT企業に勤めてますが、プライベートでは「育児×家事×IoT」をテーマに家のスマートホーム化に取り組んでいます。Androidアプリも作っているので使って下さい。
E-mail:naka.kazz.d@gmail.com

naka-kazzをフォローする
家事・育児 開発者向け
naka-kazzをフォローする
育児×家事×IoT

コメント

タイトルとURLをコピーしました