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

このエントリーは、GMOアドマーケティング Advent Calendar 2018 の 12/04 の記事です。
GMOアドマーケティングとしては初のAdvent Calendar参戦です。

はじめに

こんにちは。
GMOアドマーケティングのT.Iです。
以前に私が執筆した以下の記事の後半で、RubyとGoogle スプレッドシート(以下: スプレッドシート)の連携について触れました。

こんにちは。GMOアドマーケティングのT.Iです。突然ですが、Netatmoウェザーステーションをご存知でしょうか?Netatmoウェザーステーションは屋内外の環境を計測するモジュールで、スマートフォンと連携することで様々な環境(気温や湿度、騒音など)をほぼリアルタイムで計測することが出来ます。気温や湿度であればその他様々な製品でも計測することが出来ますが、この「Netatmoウェザーステーション」の特徴は二酸化炭素(CO2)濃度を可視化出来ることです。今回は、そのCO2濃度をSlackに通知するシステムを作成したので、その"き...

 

社内ではNetatmoの数値の可視化以外にも、自社プロダクトの目標に対する進捗の可視化や特定条件の売上の定点観測など、様々なシーンでRubyとスプレッドシートを活用してレポートを自動的に作成しております。

今回は上記の記事で紹介できなかったRubyとスプレッドシートの連携方法と、その使い方について紹介します。

1. Google API Consoleで前準備

Ruby側での実装の前に、まずはGoogle API Console(APIライブラリ)からGoogle Drive APIとGoogle Sheets APIを有効化します。
まずはじめに APIライブラリ にアクセスし、「新しいプロジェクト」から新規プロジェクトを作成します。

 

作成したプロジェクトを選択し、「Google Drive API」と「Google Sheets API」を有効化します。

続いて、「APIとサービス」> 「認証情報」へと進み、「認証情報を作成」>「OAuth クライアント ID」を選択します。

その後に表示される同意画面で必要事項を入力し、「アプリケーションの種類」から「その他」を選択して作成すると、クライアントIDとクライアントシークレットが発行されます。

2. google-drive-rubyの導入

Rubyとスプレッドシートの連携にはgoogle-drive-rubyを使います。
基本的にはGitHubのREADMEに書いてる通りですが、自分がやったことを書きます。

2-1. google-drive-rubyのインストール

適当なディレクトリに以下のようなGemfileを用意して 「bundle install --path vendor/bundle」を実行します。

2-2. 初回の認証

初回実行時のみAPIの認証が必要になります。
Google API Consoleで作成したクライアントIDとクライアントシークレットから、以下のようなjsonファイルを作成します。
今回は「config.json」というファイル名で作成しました。

次に、jsonファイルと同じディレクトリに以下のようなコードを作成し、実行します。
bundle exec をつけて実行する必要があります
※ プログラムを実行する前に、作成したスプレッドシートに適当な名前をつけて保存しておきましょう

実行すると
1. Open this page: https://accounts.google.com/xxx
と表示されるので、出力されたURLをブラウザで開き、表示された文字列を選択してターミナルに貼り付けます。
これで初回の認証が完了するので、以降は自由にスプレッドシートを操作することが可能です。
※この認証が完了すると先ほど作成したjsonファイルが自動で更新されます

上記のサンプルコードでは、指定したスプレッドシートの「A1」の位置に「hello world!」と出力するよう記述したものなので、正常に動作した場合はスプレッドシート側も更新されています。

3.  google-drive-rubyの機能紹介

google-drive-rubyでは様々な機能が実装されていますが、実際に私がよく使っている機能をいくつか紹介します。

3-1 書き込みたいスプレッドシートの指定

スプレッドシートの指定方法はいくつかあります。
私の場合は、spreadsheet_by_key でキーを指定し、worksheet_by_titleでタイトルを指定することが多いです。

 

3-2 スプレッドシートへの書き込み

書き込み方法もいくつかありますが、基本的にはsheets[行番号,列番号]での書き込み方さえ知っておけば不便はないと思います。

3-3 スプレッドシートの情報を取得

スプレッドシートに書き込まれている情報の取得方法です。
sheets[行番号, 列番号]  での指定さえ覚えておけば問題ないですが、状況によっては input_value も活躍します。

3-4 スプレッドシートやワークシートの作成

日毎や月毎にワークシートやスプレッドシートを作成することが多いので、社内ではadd_worksheetcopyをよく活用してます。

3-5 ファイルやディレクトリの操作

Google Drive上でのディレクトリ操作についてのコードです。

 

さいごに

今回はRubyとGoogleスプレッドシートの連携について紹介しました。
スプレッドシートの連携といえばGoogle Apps Scriptがありますが、個人的にRubyの方が扱いやすく、より高度なことを行おうとするとRubyの方が実装が早いことがほとんどなので、GASよりもRubyを使ってスプレッドシートを操作することが多いです。
例えば、データベースとの連携や特定の環境へ接続したいなどの要件が発生した場合、Rubyで実装した方がストレスなく開発が行えることが多いと思います。
一度環境さえ整えてしまえばRubyでの実装もGASと同じぐらい簡単なので、気になる方はぜひ試してみてください。

告知

明日は、2018年下期に開催したライトニングトーク大会についてのお話です。
お楽しみに!
クリスマスまで続くGMOアドマーケティング Advent Calendar 2018
ぜひ今後も投稿をウォッチしてください!

■Wantedlyページ ~ブログや求人を公開中!~
https://www.wantedly.com/projects/199431
■エンジニア採用ページ ~福利厚生や各種制度のご案内はこちら~
https://www.gmo-ap.jp/engineer/
■エンジニア学生インターン募集中! ~有償型インターンで開発現場を体験しよう~
https://hrmos.co/pages/gmo-ap/jobs/0000027