LoginSignup
0

More than 1 year has passed since last update.

posted at

updated at

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

はじめに

こんにちわ。
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 を読みとく



オープンデータ | 厚生労働省 「新規陽性者数の推移(日別)」を借りました。

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

神奈川県の、直近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できるように精進します!!

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
What you can do with signing up
0