実装背景
今回の実装では、RailsアプリケーションからGoogleスプレッドシートへ自動的にデータを登録する機能を構築しました。この機能により、DBに保存せずスプレッドシートでデータを管理する必要があったため、その内容をまとめました。
Googleスプレッドシートについて
Googleスプレッドシートは、Googleの提供するオンライン表計算ツールです。リアルタイムでのデータ共有や編集、さまざまなプラグインの活用ができるため、多くのプロジェクトでデータ管理ツールとして活用されています。また、APIを通じてプログラムからデータの取得・更新が可能です。
GCPについて
GCP(Google Cloud Platform)は、Googleの提供するクラウドサービスプラットフォームであり、API管理やデータベース、AIツールなど幅広いサービスが提供されています。今回は、GCPでGoogleスプレッドシートと連携するために「Google Drive API」および「Google Sheets API」を利用し、Railsアプリからスプレッドシートにデータを登録します。
実装手順
・必要なgemの登録
RailsアプリからGoogleスプレッドシートを操作するため、以下のgemを使用します。
gem 'google_drive', '~> 3.0'
バージョン指定について:google_driveはバージョン1系ではgoogle/api_clientを直接読み込む必要があるため、バージョン3以上を指定することで不具合を防止しています。
GCP設定と認証情報ファイルの取得
・Google Cloud Consoleにアクセスし、ログインします。
リンク:https://cloud.google.com/cloud-console?hl=ja
アカウント作成後は、
・新規プロジェクトを作成
・Google Sheets API と Google Drive API の有効化
・「APIとサービス」 > 「ライブラリ」に移動し、「Google Sheets API」と「Google Drive API」を検索し、各APIを有効化します。
・サービスアカウントの作成
→「APIとサービス」 > 「認証情報」に移動し、「認証情報を作成」ボタンをクリックし、「サービスアカウント」を選択し、サービスアカウントの名前を設定し、作成を完了します。
・認証情報(JSONファイル)の取得
→作成したサービスアカウントの「鍵」セクションで「鍵を追加」 > 「新しい鍵を作成」を選択します。
→「JSON」を選択し、「作成」ボタンをクリックすると、認証情報ファイル(JSON形式)がダウンロードされますので、このファイルにあるデータを環境変数で設定をします。
GOOGLE_SHEET_ID=
GOOGLE_PROJECT_ID=
GOOGLE_PRIVATE_KEY=
GOOGLE_CLIENT_EMAIL=
GOOGLE_TOKEN_URI=
最後にアクションで実際にスプレットシートにデータを出力する処理を実装します。
def save_to_google_sheet(vendor)
# 必要な認証情報を環境変数から読み込む
credentials = {
type: "service_account",
project_id: ENV['GOOGLE_PROJECT_ID'],
private_key: ENV['GOOGLE_PRIVATE_KEY'],
client_email: ENV['GOOGLE_CLIENT_EMAIL'],
token_uri: ENV['GOOGLE_TOKEN_URI']
}
# 認証情報を使って特定のシートにアクセス
worksheet = GoogleDrive::Session.from_service_account_key(StringIO.new(credentials.to_json)).spreadsheet_by_key(ENV['GOOGLE_SHEET_ID']).worksheet_by_gid("215102901")
# データを追加
worksheet.insert_rows(worksheet.num_rows + 1, [[
Time.now.strftime("%Y-%m-%d"), #申込日時
vendor.user_name, #名前
vendor.user_namekana, #名前(カナ)
vendor.email, #メールアドレス(任意)
vendor.tel, #電話番号
vendor.zipcode, #郵便番号
vendor.address, #住所
vendor.inquiry_type, #問い合わせ内容
vendor.consult #具体的な相談内容
]])
worksheet.save
end
補足
Google Sheets APIには使用量の上限があり、1分あたりのリクエスト数が制限されます(例:1分に最大300件の読み取りリクエスト)。上限を超えると「429: Too many requests」のエラーが発生し、一定時間後に再試行可能です。
まとめ
この実装により、Google Cloud Platformのサービスアカウントを使用してGoogleスプレッドシートにRailsアプリから自動的にデータを登録できるようになりました。DBの利用を避けつつ、スプレッドシートでのデータ管理を可能にするこの方法は、外部のユーザーとリアルタイムでデータ共有を行いたい場合に有効です。環境変数を利用した認証情報管理や、Google APIの操作に関する基本的な知識を活用することで、シンプルで安全な連携が実現しました。