概要
本記事では、RailsアプリケーションにてGoogle Calendar APIを使用したGoogleカレンダーの予定(イベント)取得を行います。
作業環境
Ruby 3.3.4
Ruby on Rails 7.1.5
※本記事ではrails newが既に完了してアプリケーションのベースが出来た状態である前提で説明していきます。
Google Cloude Platform(GCP)の設定
まずはじめに事前準備としてGoogle Calendar API接続のための初期設定を行います。
公式ページにGoogle カレンダーのクイックスタートが用意されており、こちらの手順に従って進める事も可能です。
ただ、少し情報が足りなかったり、Rubyに対応していなかったりするため、分からない所は以下の記事を参考にしながら進めました。
・Google Calendar APIで予定のCRUD操作を行う
・Ruby on RailsでGoogle Calendar APIを叩く
GCPの設定作業の流れは以下の通りです。
[GCPの設定]
1:プロジェクトを作成する
2:Google Calendar APIの利用を許可する
3:API管理するためのサービスアカウントを作成する
4:サービスアカウントに秘密鍵を追加する
[Googleカレンダーの設定]
5:サービスアカウントのメールアドレスをGoogleカレンダーに登録する
詳細な設定方法は、以下記事にて非常に分かりやすく解説されているため、本記事では割愛します。
Ruby on RailsでGoogle Calendar APIを叩く
Rails Appにてコードを記述
Gemのインストール
今回の実装では以下のgemを利用するためインストールを行います。
# google-api-client for Google Calendar API
gem 'google-apis-calendar_v3'
gem 'googleauth'
gem 'dotenv', groups: [:development, :test]
dotenv
については、後ほど.env
ファイルで環境変数を設定することになるため、先にインストールしておきます。
bundle install
を実行してgemをインストールします。
※参考資料では、gem 'google-api-client'
を使用しておりますが、本記事では使用しませんでした。ちなみにgoogle-api-client
をインストールした際に以下の警告が発生します。
The google-api-client gem is deprecated and will likely not be updated further.
Instead, please install the gem corresponding to the specific service to use.
For example, to use the Google Drive V3 client, install google-apis-drive_v3.
For more information, see the FAQ in the [OVERVIEW.md](http://overview.md/) file or the YARD docs.
この警告は、The google-api-client が今後更新されないため非推奨であること。Google Drive V3を使用する場合はgoogle-apis-drive_v3のインストールを推奨しているとのことです。(詳細は以下記事参照)
google-api-clientを指定してinstallするのはもう非推奨になっていた
今回の場合は、google-apis-calendar_v3
がインストールされており、google-api-client
をインストールしなくとも、動作に影響なかったため省きました。
Initializeメソッドの記述
まずは、Initializeメソッドを定義して初期設定を行います。
今回は、appディレクトリ直下にcalendar_test.rb
を作成し、以下のコードを記述しました。
require "google/apis/calendar_v3"
require "googleauth"
require "googleauth/stores/file_token_store"
require 'dotenv/load'
class GoogleCalendar
def initialize
calendar = Google::Apis::CalendarV3
# カレンダー操作用のインスタンスを生成、@serviceとして定義
@calendar = calendar::CalendarService.new
# アプリケーションの名前を設定(GCPで設定したサービスアカウント名)
@calendar.client_options.application_name = ENV['GOOGLE_CALENDAR_APPLICATION_NAME']
# authorizeメソッド(Google::Auth::UserAuthorizer)から受け取った認証情報
@calendar.authorization = authorize
# 利用するカレンダーのID(GCPで設定したメールアドレス)を設定する
@calendar_id = ENV['GOOGLE_CALENDAR_ID']
end
end
環境変数'GOOGLE_CALENDAR_APPLICATION_NAME'
および'GOOGLE_CALENDAR_ID'
については、アプリのルートディレクトリに.env
を作成し、環境変数を定義しておきます。
GOOGLE_CALENDAR_APPLICATION_NAME = '****' # GCPで設定したサービスアカウント名
GOOGLE_CALENDAR_ID = '****' # GCPで設定したメールアドレス
Authorizeメソッドの記述
Initializeメソッドにて@calendar.authorization = authorize
が登場しておりますが、ここでは、authorize(認証情報を取得する動作)に該当する動作を定義します。
class GoogleCalendar
### 一部省略 ###
def authorize
# 認証情報を取得し、credentialに格納
credential = Google::Auth::ServiceAccountCredentials.make_creds(
json_ke_io: File.open(ENV['GOOGLE_CALENDAR_SECRET_PATH']),
scope: Google::Apis::CalendarV3::AUTH_CALENDAR
)
# アクセストークンを取得
credential.fetch_access_token!
# 認証情報を返す
credential
end
end
GCPの設定にてダウンロードしたJSONファイルを、ルートディレクトリに保管します。
※注意
このJSONファイルを公開するとセキュリティ上危険であるため、.gitignore
に追記してgit管理対象から外すようにしてください。
.env
に環境変数'GOOGLE_CALENDAR_SECRET_PATH'
を追加します。
### 一部省略 ###
GOOGLE_CALENDAR_SECRET = "./****.json" # ルートディレクトリに保存したJSONファイルのURLを指定
これで最低限のAPI接続の準備は完了しました。一旦ここで動作確認をしてみましょう。
class GoogleCalendar
def initialize
### 一部省略 ###
puts "Google Calendar API initialized" #確認終わったら削除orコメントアウト
credential #credentialを戻り値に設定したいため、最後に記載すること。
end
def authorize
### 一部省略 ###
puts "Google Calendar API authorized" #確認終わったら削除orコメントアウト
end
end
GoogleCalendar.new
以下の表示が出れば成功です。エラーが出る場合はエラー内容に応じて対応しましょう。
app# ruby app/calendar_test.rb
> Google Calendar API authorized
> Google Calendar API initialized
Readメソッドの記述
Readメソッドでは、Googleカレンダーのイベント情報を取得する動作を記述していきます。
class GoogleCalendar
### 一部省略 ###
def read
events = @calendar.list_events(@calendar_id,
time_min: Time.new(2025,1,1).iso8601, #抽出開始時間
time_max: Time.new(2025,1,31).iso8601, #抽出終了時間
)
events.items.each do |event|
puts '-------------------------------'
puts_event(event) # 下で定義するputs_eventに基づき抽出
end
end
def puts_event(event)
puts "Event: #{event.summary}"
puts "description: #{event.description}"
puts "Start: #{event.start.date_time || event.start.date}"
puts "End: #{event.end.date_time || event.end.date}"
puts "reminders: #{event.reminders}"
end
end
GoogleCalendar.new.read # readメソッドの実行
ターミナルからapp# ruby app/calendar_test.rb
のようにコード実行すれば、puts_eventで指定した項目がログに表示されます。
どのようなイベントが取得できるかについては、Event listから確認して、必要な情報を出力出来るようにしてみてください。
Google Calendar Events List
まとめ
Googleカレンダーの予定(イベント)を取得して、ログに出力する事が出来るようになりました。
参考文献
・Google カレンダー クイックスタート
・Google Calendar APIで予定のCRUD操作を行う
・Ruby on RailsでGoogle Calendar APIを叩く
・google-api-clientを指定してinstallするのはもう非推奨になっていた
・Google Calendar Events List