こんにちは!
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アプリを作成
そして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
ちゃんと保存されております!Userレコードが1,025件なので数字もあってます。
EC2のmicroインスタンスで動いているのですが全件同期で5秒ぐらいでした。
手前味噌ながらkintone_sync便利すぎる…。
kintone上でこうやって選択するだけで
こんな感じで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秒でした。
kintone上で上記のように設定されるとできました
だいたい平日が多くて土日に下がる感じかなと
利用者データと集中結果データを紐付ける
こんな感じで利用者アプリに「関連レコード」という肩のフィールドを追加するだけでこうなります。
最後に
今後は下記とかも試していきたいです!
- よく聞かれている時間帯
- 利用回数推移
- よく聞かれている曲