1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[Rails]GoogleSheetsをAPIで操作してみた[Ruby]

Last updated at Posted at 2021-11-06

はじめに

こんにちわ。
RPA、作業の自動化に関して、興味を持って色々勉強しているひとです。

「なんかこれ毎回同じことしてない...?」

と感じることが最近ままありまして、自動化やってみたい!と思ったので、すぐに実践。  
とりあえずプログラムが書けるように、環境を構築しないと。

この記事は、備忘録として書いていきますが、見ていってくれる皆さんの何かお役に立てれば幸いです。

参考, 引用記事:

TECHBLOG by GMO RubyでGoogle スプレッドシートを操作する

Google Sheets and Ruby by Twilio   // Youtube です


## 今回の目的: GoogleSheetsをRubyで動かしてみる

目次

  1. Google API Console で Google Drive API と Google Sheets APIを有効(ENABLE)にする
  2. Creditials でサービスアカウントを作り、JSON形式のPrivate Keyを取得
  3. gem "google_drive" を入れて、 bundle install
  4. 実行ファイルと同じ場所に、client_secret.json(先ほど取得したJSONファイル)を入れる
  5. Google Sheetsの共有で、Service AccountのEmailで認証
  6. プログラムを組む
  7. 実行

## 1.Google API Console で Google Drive API と Google Sheets APIを有効(ENABLE)にする

Google Apis Libraryで下にスクロールすると、
・Google Drive API
・Google Sheets API
があるので、それぞれ有効(Enable)にします。

google_apis_pic.png


2.Credentials でサービスアカウントを作り、JSON形式のPrivate Keyを取得

上の画面のハンバーガーボタンから > APIとサービス > 認証情報 

1.サービスアカウント

サービスアカウントがない人は、「認証情報を作成」 > 「サービスアカウント」
※Googleのサイト はデザインがよく変わるので、頑張って見つけましょう

create_serviceAccount.gif






2.サービスアカウントからプライベートキーを作る

download_config_json.gif


3.gem "google_drive" を入れて、 bundle install


Gemfile
gem 'google_drive'
$ bundle install

4.実行ファイルと同じ場所に、credentials.json(先ほど取得したJSONファイル)を入れる

僕は、Railsアプリを構成しているので

・実行ファイル.rb ---------- /lib/spreadsheet.rb
・jsonファイル ---------- /config/credentials.json

にそれぞれ置いています。 Rails使わない方は、Twilioのビデオの通りに同じ階層に置きましょう。

あと、Git管理なら gitignoreを忘れないようにしましょう!



5.Google Sheetsの共有で、Service AccountのEmailで認証

1.GoogleSheetsでスプレッドシートを選んで、空白のシート作る


2.シートの名前をつけて、サービスアカウントのメールアドレスで共有可能にする

共有 > ユーザーやグループを追加 で、jsonファイルのメールアドレスをコピーして共有
credentials.json
{
  "type": "service_account",
  "project_id": "sound-helper-*******",
  "private_key_id": "**************************",
  "private_key": "-----BEGIN PRIVATE KEY----- *******"
  "client_email": "test-pcr-ruby@**************.gserviceaccount.com",  < ココです!
  "client_id": "000000000000000000",
  "auth_uri": "******************************",
  "token_uri": "******************************",
  "auth_provider_x509_cert_url": "************************************",
  "client_x509_cert_url": "**************************************"
}



6.プログラムを組む

spreadsheet.rb
require 'bundler'
Bundler.require

# jsonファイルがある場所
session = GoogleDrive::Session.from_service_account_key("../config/credentials.json")

# titleはシート名
spreadsheet = session.spreadsheet_by_title("test_ruby")
worksheet = spreadsheet.worksheets.first

worksheet.rows.first(10).each { |row| puts row.first(10).reverse.join(" | ") }

これで動くか確認。

7.実行


/lib
$ bundle exec ruby spreadsheet.rb

Bundlerあたりについて -- Bundler入門 - setupとrequire を読みとく


[オープンデータ | 厚生労働省](https://www.mhlw.go.jp/stf/covid-19/open-data.html) 「新規陽性者数の推移(日別)」を借りました。

ファイル > インポート > アップロード

神奈川県の、直近30日の新規感染者の総数とか出してみます。

spreadsheet.rb
require 'bundler'
Bundler.require

# jsonファイルがある場所
session = GoogleDrive::Session.from_service_account_key("../config/credentials.json")

# titleはシート名
spreadsheet = session.spreadsheet_by_title("test_ruby")
worksheet = spreadsheet.worksheets.first

counter = 0
range = 47 * 30

worksheet.rows.last(range).each { |row| counter += row[2].to_i if row[1] == "Kanagawa" }

puts "神奈川県の直近30日の新規感染者数: #{counter}人"

worksheet["E2"] = "Newly Comfirmed Case"
worksheet["E3"] = "Last 30 days in Kanagawa:"
worksheet["F3"] = counter

worksheet.save  # sheetに反映させるならsave

Logに出力

kanagawa_last_month.png

セルを直接指定すれば入力もやってくれます

kanagawa_last_manth.png

## おわりに

お疲れ様でした。 

これで実行できるようになったのであとはアルゴリズムやら別のAPIやら勉強してRPAできるように精進します!!

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?