いつも大変お世話になっている、
私が大好きなGem(というかGem集)
google-api-ruby-client
仕事でもHeavy useしていたり、
趣味でもなんだかんだで使ったり、
ソースコードを読んで勉強させてもらったりと、
個人的には結構思い入れがある技術です
勝手に、もう記事を書いている気でいたが、
何も書いていなかったのでおさらいしとく。
GCPでAPIを有効にする
まずは、GCPで使いたいGemのAPIを有効にしておく。
例えばSpread sheetなら、
Google Sheet APIを有効にしておく
サービスアカウントと秘密鍵作成
次に、認証の設定として、
サービスアカウントを作成する。
作成したら、鍵を作成する項目があると思うので、
そこで秘密鍵を作成する
(これは絶対にGit管理してpushなどしてはいけない、
セキュリティ情報を含むものなので厳重に管理する)
Gemをインストール
さて、次は、Railsの方で、
使うGemをインストール
sheetなら、
gem 'google-apis-sheets_v4', '~> 0.1'
みたいな記述を追加してbundle install
ちなみに、google-api-ruby-client/generated配下にある、
ディレクトリは、基本的にはそれぞれの各Googleサービスのgemになっているから、
これらの中から使いたいやつをinstallすればいい。
詳細な使い方は、それぞれのディレクト配下の
OVERVIEW.mdにも書いてある
例えば、sheetなら下記が該当する
https://github.com/googleapis/google-api-ruby-client/blob/main/generated/google-apis-sheets_v4/OVERVIEW.md
サンプルコード
sheetを例にサンプルコードをご紹介
require 'google/apis/sheets_v4'
class Google::Sheet
extend Forwardable
def_delegators :@service, :update_spreadsheet_value
def initialize
@service = Google::Apis::SheetsV4::SheetsService.new
@service.authorization = authorize
end
def get_values(spreadsheet_id, ragne)
@service.get_spreadsheet_values(spreadsheet_id, ragne)
end
private
def authorize
json_key = JSON.generate(
private_key: Rails.application.credentials.dig(:google, :private_key),
client_email: Rails.application.credentials.dig(:google, :client_email)
)
json_key_io = StringIO.new(json_key)
authorizer = Google::Auth::ServiceAccountCredentials.make_creds(
json_key_io: json_key_io,
scope: ['https://www.googleapis.com/auth/spreadsheets']
)
authorizer.fetch_access_token!
authorizer
end
end
classとして実装してみたが、
要するに、Google::Apis::SheetsV4::SheetsService.new
として
インスタンス化して、認証さえすればどのような形式でも行けると思う。
該当Sheetにサービスアカウントの編集権限を与える
適当なSheetを用意したら、
共有ボタンを押して、サービスアカウントを編集者として追加します。
あとは、このクラスを呼び出して、
適当なメソッドを使えば
sheetの操作ができるはずです。