はじめに
こんにちわ。
RPA、作業の自動化に関して、興味を持って色々勉強しているひとです。
「なんかこれ毎回同じことしてない...?」
と感じることが最近ままありまして、自動化やってみたい!と思ったので、すぐに実践。
とりあえずプログラムが書けるように、環境を構築しないと。
この記事は、備忘録として書いていきますが、見ていってくれる皆さんの何かお役に立てれば幸いです。
参考, 引用記事:
TECHBLOG by GMO RubyでGoogle スプレッドシートを操作する
Google Sheets and Ruby: by Twilio // Youtube です
## 今回の目的: GoogleSheetsをRubyで動かしてみる
目次
- Google API Console で Google Drive API と Google Sheets APIを有効(ENABLE)にする
- Creditials でサービスアカウントを作り、JSON形式のPrivate Keyを取得
- gem "google_drive" を入れて、 bundle install
- 実行ファイルと同じ場所に、client_secret.json(先ほど取得したJSONファイル)を入れる
- Google Sheetsの共有で、Service AccountのEmailで認証
- プログラムを組む
- 実行
## 1.Google API Console で Google Drive API と Google Sheets APIを有効(ENABLE)にする
Google Apis Libraryで下にスクロールすると、
・Google Drive API
・Google Sheets API
があるので、それぞれ有効(Enable)にします。
2.Credentials でサービスアカウントを作り、JSON形式のPrivate Keyを取得
上の画面のハンバーガーボタンから > APIとサービス > 認証情報
1.サービスアカウント
サービスアカウントがない人は、「認証情報を作成」 > 「サービスアカウント」
※Googleのサイト はデザインがよく変わるので、頑張って見つけましょう
2.サービスアカウントからプライベートキーを作る
3.gem "google_drive" を入れて、 bundle install
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ファイルのメールアドレスをコピーして共有
{
"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.プログラムを組む
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.実行
$ bundle exec ruby spreadsheet.rb
Bundlerあたりについて -- Bundler入門 - setupとrequire を読みとく
[オープンデータ | 厚生労働省](https://www.mhlw.go.jp/stf/covid-19/open-data.html) 「新規陽性者数の推移(日別)」を借りました。
ファイル > インポート > アップロード
神奈川県の、直近30日の新規感染者の総数とか出してみます。
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に出力
セルを直接指定すれば入力もやってくれます
## おわりに
お疲れ様でした。
これで実行できるようになったのであとはアルゴリズムやら別のAPIやら勉強してRPAできるように精進します!!