Google スプレッドシートを Ruby で扱う方法を確認できたので方法をメモがてら記事にします。
正直、Google Spreadsheets を操作するよりも、アプリの登録のアクセスキーの取得のほうがよほど面倒なので、そこからメモします。
目次
参考
- github - gimite/google-drive-ruby
- github - gimite/google-drive-ruby - Authorization
- virment - Google Drive API の有効化とクライアント ID、クライアントシークレットの取得方法
準備
前提
GCP へのログインをしていることを前提して以下をすすめていきます。
プロジェクトを作成
今回はプロジェクトの選択があるので、新規に作成します。
ヘッダー部分から開きます。
「新しいプロジェクト」を開きます。
プロジェクト名を任意に設定して、作成します。
現在のプロジェクトを作成したものに変えておきます。
ライブラリの追加
[API とサービス]=>[ライブラリ]の順に開きます。
Google Drive API と Google Sheets API それぞれを有効にします。
OAuth 同意画面
[API とサービス]=>[OAuth 同意画面]の順に開きます。
私のカウントは Gsuite のアカウントではないので、「外部」を設定します。
以下の情報を登録します。
- アプリ情報
- アプリ名
- ユーザーサポートメール
- デべロッパーの連絡先情報
- メールアドレス
「スコープを追加または削除」を開きます。
以下の 2 つにチェックを入れて更新します。
- Google Drive API - Google ドライブのすべてのファイルの表示、編集、作成、削除
- Google Sheets API - Google ドライブのスプレッドシートの表示、編集、作成、削除
スコープにチェックを入れた項目が増えているので、「保存して次へ」で進めます。
自分しか使わないものなので、「ADD USERS」自分自身のメールアドレスを登録しておきます。「保存して次へ」で進めます。
認証情報
[API とサービス]=>[認証情報]の順に開きます。
認証情報を作成から「OAuth クライアント ID」を選択して進めます。
アプリケーションの種類を「デスクトップアプリ」に設定し、「作成」で進めます。
クライアント ID、クライアントシークレットの値が表示されるので、控えておきます。
実装
アクセス確認
最初に、API へのアクセスができるかだけを確認します。
次の手順で用意を進めます。
1 | # 適当なディレクトリで |
続けて、アプリケーション本体のapp.rb
と認証情報を記載したconfig.json
を作成します。
1 | require 'google_drive' |
1 | { |
こちらをbundle exec ruby ./app.rb
で起動します。
すると以下のように、以下のように URL を開くことを求められます。
表示された URL をブラウザで開くと、次の画面になります。
公開していないアプリケーションではないためか警告が出ますが進めます。
権限を求められるので、順番に許可します。
権限を許可すると、コードが表示されるのでコンソールに貼り付けます。
エラーにならなければ、問題ありません。
config.json
をこのタイミングで見ると、scope
とrefresh_token
の 2 つが書き足されています。
1 | { |
Google SpreadSheets を操作する(読み込み)
スプレッドシートの API は、以下のような階層になっていました。
- スプレッドシート
- ワークシートの配列
- ワークシート
- 行(以下は配列として取得できる)
- 列
- 行(以下は配列として取得できる)
- ワークシート
- ワークシートの配列
スプレッドや Excel でも馴染みあるというか、まぁそうなるだろう階層化がされています。
以下のように、app.rb
を編集しデータにアクセスします。
1 | require 'google_drive' |
こちらをbundle exec ruby ./app.rb
で実行すると以下のように表示されます。
1 | > bundle exec ruby .\app.rb |
以上の方法でスプレッドシートの中身を取得できました。
Google SpreadSheets を操作する(書き込み)
続けて書き込みを試します。app.rb
を以下のように編集して試します。
1 | require 'google_drive' |
こちらをbundle exec ruby ./app.rb
で実行するとスプレッドシートは以下のようになります。
今回は、ruby から Google SpreadSheet を操作してみました。
基本的には RDS を使うのでしょうが速度の要求もあまりなくテーブルの管理したいのであれば選択肢にできそうです。
CLI を作るときのデータベースとしてはかなり良さそうです。
ではでは。