2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RailsでGoogleスプレッドシートにデータを自動登録する方法:Google APIとGCPの設定ガイド

Last updated at Posted at 2024-10-31

実装背景

今回の実装では、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を有効化します。
スクリーンショット 2024-10-28 10.46.29.png

・サービスアカウントの作成
→「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」のエラーが発生し、一定時間後に再試行可能です。

参照:
https://support.google.com/a/answer/10445916?hl=ja#:~:text=Drive%20API%20%E3%81%AE%E3%83%87%E3%83%95%E3%82%A9%E3%83%AB%E3%83%88%E3%81%AE,%E5%90%88%E8%A8%88%E3%81%AB%E9%81%A9%E7%94%A8%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82

まとめ

この実装により、Google Cloud Platformのサービスアカウントを使用してGoogleスプレッドシートにRailsアプリから自動的にデータを登録できるようになりました。DBの利用を避けつつ、スプレッドシートでのデータ管理を可能にするこの方法は、外部のユーザーとリアルタイムでデータ共有を行いたい場合に有効です。環境変数を利用した認証情報管理や、Google APIの操作に関する基本的な知識を活用することで、シンプルで安全な連携が実現しました。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?