0
0
お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

【Ruby on Rails】Google APIを使ってSpread Sheetを操作する

Last updated at Posted at 2024-07-09

いつも大変お世話になっている、
私が大好きなGem(というかGem集)

google-api-ruby-client

仕事でもHeavy useしていたり、
趣味でもなんだかんだで使ったり、
ソースコードを読んで勉強させてもらったりと、
個人的には結構思い入れがある技術です

勝手に、もう記事を書いている気でいたが、
何も書いていなかったのでおさらいしとく。

GCPでAPIを有効にする

まずは、GCPで使いたいGemのAPIを有効にしておく。

例えばSpread sheetなら、
Google Sheet APIを有効にしておく

スクリーンショット 2024-07-09 21.53.14.png

サービスアカウントと秘密鍵作成

次に、認証の設定として、
サービスアカウントを作成する。

作成したら、鍵を作成する項目があると思うので、
そこで秘密鍵を作成する
(これは絶対に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を例にサンプルコードをご紹介

sheet.rb
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の操作ができるはずです。

0
0
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
0
0