GoogleDocsのスプレッドシートを利用してスコアデータを蓄積させる

( Ruby )

サービスの日々の情報を解析するために、普段はDBに解析用のテーブル作成してそこで毎日もしくは毎月バッチを走らせてレコードを追加なんてことするだろうけど、スモールスタートしてる内とか個人のサービスとかはそこまで大げさにしなくてももっと気軽にデータを収集したいなと思いまして日々のデータをGoogleDocsのスプレッドシートにレコードを追加いくことにしました。これならいつでもやめれるし気軽にカラムも増やせるので便利。

便利だったのがgoogle-drive-rubyで、中の通信部分の処理をいい感じに抽象化してくれる便利gemです。

実際にwww.frustration.meのユーザ数やアイテム数を計測するために使用してみました。

まずは、gemでインストールしてrakeでバッチ処理を実装するだけです。

desc "send score data to google spreadsheet"
require 'google_drive'

namespace :batches do

  task total_scores: :environment do |t, args|
    fail 'no username' if ENV['GOOGLE_USERNAME'].blank?
    fail 'no password' if ENV['GOOGLE_PASSWORD'].blank?

    session = GoogleDrive.login(ENV['GOOGLE_USERNAME'], ENV['GOOGLE_PASSWORD'])
    spreadsheet = session.spreadsheet_by_key("input key name")
    worksheet = spreadsheet.worksheet_by_title(Rails.env)
    analyze_data = {
      date:           Time.now.strftime("%Y-%m-%d"),
      users_num:      User.all.count,
      items_num:      Item.all.count,
      comments_num:   Comment.all.count,
      categories_num: Category.all.count
    }
    worksheet.list.push(analyze_data)
    worksheet.save()
  end

end

これでrake batches:total_scoresで実行すると指定のスプレッドシートに情報が送信され、スプレッドシート側では

ss

な感じでどんどんレコードが追加されていきます。

便利。

ただし、注意点があります。今回はsqaleのcronで動かしているのですがログインで以下のように失敗することがあります。

$ bundle exec rake batches:total_scores
WARNING: Nokogiri was built against LibXML version 2.8.0, but has dynamically loaded 2.7.8
rake aborted!
Authentication failed for hogehoge@gmail.com: Response code 403 for post https://www.google.com/accounts/ClientLogin: Error=BadAuthentication
Url=https://www.google.com/accounts/ServiceLogin?service=wise#Email=hogehoge%40gmail.com
Info=WebLoginRequired
/home/sqale/current/vendor/bundle/ruby/2.0.0/gems/google_drive-0.3.6/lib/google_drive/session.rb:93:in `rescue in login'
/home/sqale/current/vendor/bundle/ruby/2.0.0/gems/google_drive-0.3.6/lib/google_drive/session.rb:86:in `login'
/home/sqale/current/vendor/bundle/ruby/2.0.0/gems/google_drive-0.3.6/lib/google_drive/session.rb:38:in `login'
/home/sqale/current/vendor/bundle/ruby/2.0.0/gems/google_drive-0.3.6/lib/google_drive.rb:18:in `login'
/home/sqale/current/lib/tasks/scores.rake:10:in `block (2 levels) in <top (required)>'
Tasks: TOP => batches:total_scores
(See full trace by running task with --trace)

これはGoogleがセキュリティ強化のため、変な場所からのログインは自動的に拒否しているためです。なので、通常通りWEBでGoogleにログインしてみてそのログインが大丈夫という設定をすれば問題無く通過できます。

ss

あとはグラフツール使って簡単に見やすくできるのでお手軽&便利メソッドでした。

まだ情報はすくないのであれです まだ情報は少ないのであれですがどんどん勝手にグラフ化されていくはず!