💎
RailsアプリからGoogleスプレッドシート内のデータにアクセス
はじめに
RailsアプリケーションからGoogleのスプレッドシートへアクセスし、データの読み込みをするための手順、サンプルコードをまとめています。
手順の中でイメージしやすいようにスクショを貼っている場合もありますが、セキュリティ的に見せられない箇所は塗りつぶしています。
Summary
- スプレッドシートへアクセスするためにGoogle Cloud Platform (以下GCP)のサービスアカウントを作成します。
- Railsアプリケーションからスプレッドシートへアクセスする際は、google-apis-sheets_v4の
gem
を使います。
手順
GCPのサービスアカウントとキーの作成
- GCPへログインする。
- GCPのプロダクト『IAMと管理』を開く。
- 左メニューにある『サービスアカウント』を開く。
- 『サービス アカウントを作成』のリンクを開く。
- 任意のサービスアカウント名とサービスアカウントIDを入力して『完了』ボタンを押下する。
- 作成したサービスアカウントの行の右端にある『操作』をクリックし、『鍵の管理』のリンクを開く。
- ここでキーを発行する理由は、Railsアプリからスプレッドシートへアクセスする際にキーが必要になるためです。
- ここでキーを発行する理由は、Railsアプリからスプレッドシートへアクセスする際にキーが必要になるためです。
- 『鍵を追加』を押下し、『新しい鍵を作成』を押下する。押下時のポップアップでキーのタイプを選択できますが、キーのタイプは
JSON
で良いと思います。
- 鍵が作成されるとキー情報が含まれた
JSON
ファイルがダウンロードされる。
Sheet APIの有効化
- GCPプロダクトの『APIとサービス』を開く。
- 『APIとサービスを有効にする』のリンク先で
Sheet API
を有効化する。- ※ ただし、すでに有効化されている場合はこの手順は不要。
Googleスプレッドシートへ権限追加
- データ読み取りしたいスプレッドシートを開く。
- 前述の手順『GCPのサービスアカウントとキーの作成』でダウンロードした
JSON
ファイル内のclient_email
のメールアドレスをコピーする。 - スプレッドシートの『共有』で、コピーしたメールアドレスに権限を付与する。
Railsアプリケーションの作成
- Railsのアプリケーション作成方法については、情報がたくさんあると思うのと、この記事のメインではないため割愛させていただきます。
- 動作確認したバージョンとしては、
Ruby
は3.1.6
、Railsは7.0
になります。
Gemの導入
-
Gemfile
に以下を追加
gem 'google-apis-sheets_v4', '~> 0.1'
サンプルコード
- 適当なサービスクラスを用意して、その中でスプレッドシートへのアクセスをするようにする。
require "google/apis/sheets_v4"
class SampleService
def sheet_value
sheet = Google::Apis::SheetsV4::SheetsService.new
# スコープを定義することでスプレッドシートへアクセスできるようになる
scopes = ['https://www.googleapis.com/auth/spreadsheets']
# 認証
auth = ::Google::Auth::ServiceAccountCredentials
.make_creds(scope: scopes)
sheet.authorization = auth
# シート名
sheet_name = "sheet1"
# セル位置
cell_position = "A1"
# スプレッドシートのデータ読み込み
sheet.get_spreadsheet_values(ENV['SPREADSHEET_ID'], "#{sheet_name}!#{cell_position}").values
end
end
動作検証
スプレッドシートのセルに値を入れる
- 下記のように値を入れておく。また、シート名は
sheet1
とする。
環境変数の設定
- 今回はサービスアカウントの
private_key
などを環境変数で定義する方法を採用しています。 -
https://github.com/googleapis/google-auth-library-ruby?tab=readme-ov-file#example-environment-variables にるあるように、前述でダウンロードした
JSON
ファイルに記載の値を下記のように環境変数としてプログラムを実行する環境でexport
する。export GOOGLE_ACCOUNT_TYPE=service_account export GOOGLE_CLIENT_ID=000000000000000000000 export GOOGLE_CLIENT_EMAIL=xxxx@xxxx.iam.gserviceaccount.com export GOOGLE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n"
- また、上記に加えて対象のスプレッドシートIDも今回環境変数として
export
します。- ソースコードの
ENV['SPREADSHEET_ID']
がスプレッドシートIDにあたります。
export SPREADSHEET_ID="xxxxxxxxxxx"
- スプレッドシートIDは下記スプレッドシートのURLの
xxxxxxx
の部分です。https://docs.google.com/spreadsheets/d/xxxxxxx/edit?gid=0
- ソースコードの
Rails consoleで動作検証実施
- 下記のように
Rails console
を立ち上げる。
rails c
- 下記のように実行するとスプレッドシートの値が取得できていることが分かります。
irb(main):001> SampleService.new.sheet_value
=> [["100"]]
次回
今回は単純にセルのデータを読み込みするだけでしたが、次回は書き込みについてのサンプルコードもまとめられればと思います。
Discussion