Ruby
Rails
管理画面
245cloud
kintone
kintoneDay 23

Railsで運用しているサービスのKPI管理画面kintoneで作る

More than 1 year has passed since last update.

こんにちは!
kintone Advent Calendar 2016 の23日目の記事です。

Railsで運用しているサービス

音楽を聞きながら作業に集中するためのサービス
245cloud(ニシコクラウド)
http://245cloud.com/
を個人で開発・運用しています。
ソースはここで公開しています。
https://github.com/pandeiro245/245cloud

もともとDBはparse.comっていうBaaSに保存してて
イケてるDashboardがあったからそれが管理画面的な感じだったんですけど
(毎日アクティブユーザ数とかメールで送ってくれたりもしたし)
サービス終了ということでデータをparse.comからEC2上のMySQLに移管し、
管理画面はもっぱらRailsコンソールです。

irb(main):002:0> User.count
   (0.5ms)  SELECT COUNT(*) FROM `users`
=> 1025

ユーザ数1,025人かみたいなw

KPI管理画面

過去に3回「管理画面チラ見せ♡ナイト」というイベントを開催しました。

1回目:https://atnd.org/events/53193
2回目:https://atnd.org/events/57411
3回目:https://connpass.com/event/31779/

登壇者にRailsの事例は多く、
RailsAdminやActiveAdminを試すんだけど
色々辛いですよねみたいな話でした。

あと非エンジニアもSQL覚えて参照用のMySQLユーザでデータ取っているみたいな話も聞きました。

さくっと管理画面を作ることにベストプラクティスは存在しないように思いました。
なので試してみたい。kintoneで管理画面を作れないかと。

kintone

kintoneは2015年末に出会ったのでちょうどkintone歴1年になります。

年末に「kintone_sync」というfreeeやGitHubやTwitterなどのデータをkintoneと同期するgemを作りました。
http://www.slideshare.net/pandeiro245/api-kintone-rubygem-2016-0122-kintone-cafe

Gemfileに

gem 'kintone'
gem 'kintone_sync', github: 'pandeiro245/kintone_sync'

と追記してbundle installし、
.envというファイルを作って

KINTONE_HOST='hoge.cybozu.com'                                                             
KINTONE_USER='hoge'
KINTONE_PASS='hoge'

と記載してコンソール再起動するだけで動きます

とりあえずDaily新規登録ユーザ数

利用者毎の登録時間はusersテーブルのcreated_atカラムなのでこんなkintoneアプリを作成
image

そしてUserモデルに下記を追加して実行すると…。

  def self.sync(app_id)
    start = Time.now
    k = KintoneSync::Kintone.new(app_id)
    records = User.find_each.map{ |user| {created_at: user.created_at } }
    k.create_all!(records)
    puts "created: #{Time.now - start} seconds"
  end 

image

ちゃんと保存されております!Userレコードが1,025件なので数字もあってます。

EC2のmicroインスタンスで動いているのですが全件同期で5秒ぐらいでした。

手前味噌ながらkintone_sync便利すぎる…。

image

kintone上でこうやって選択するだけで

image

こんな感じで12月のデイリー新規登録者数が確認できます。
(12月7日(水)が多めだけど理由はわからず)

とりあえず24分間集中(Workload)がちゃんと達成された数を知りたい

workloadsテーブルは8万件ぐらいあったのでひとまずこんな感じで5,000件だけ同期。

  def self.sync(app_id)
    start = Time.now
    k = KintoneSync::Kintone.new(app_id)
    records = self.order('id desc').limit(5000).map{ |w| {created_at: w.created_at, facebook_id: w.facebook_id, music_key: w.music_key, title: w.title, is_done: w.is_done}}
    k.create_all!(records)
    puts "created: #{Time.now - start} seconds"
  end 

所要時間は19秒でした。

image

image

kintone上で上記のように設定されるとできました

image

だいたい平日が多くて土日に下がる感じかなと

利用者データと集中結果データを紐付ける

image

こんな感じで利用者アプリに「関連レコード」という肩のフィールドを追加するだけでこうなります。

image

最後に

今後は下記とかも試していきたいです!

  • よく聞かれている時間帯
  • 利用回数推移
  • よく聞かれている曲