railsで日ごとの登録ユーザー数を取得する方法
毎日どれだけユーザーが増えたかは非常に大事な要素で、毎日データを追っていますが、ぶっちゃけ今までは手集計してエクセルに放り込むというあり得ない運用をしていました。リニューアル用のコードを書くのを機にそういった非効率を改めようとコードを書こうとしたら思いのほか手間取ったのでメモ。
今回はこちらのサイトを参考にさせてもらいました。
RailsでHighcharts(lazy_high_charts)を使って綺麗なグラフを描画する - nishio-dens's diary
配列からハッシュを作成する - ハッシュ(Hash)クラス - Ruby入門
目次
・月初から今日までの日にちを取得
・日にちごとのユーザー登録数を取得
月初から今日までの日にちを取得
railsではactive_supportのおかげで、日にちの取得がだいぶ楽になっているようなのでありがたく使わせてもらいます。
Date.today.beginning_of_month
こう書くだけで、今月の月初の日にちが取得できます。 同様に
Date.today.end_of_month
これで月末の日にちが取得できるみたいです。便利。 最終的に今日までの日にちが欲しいので、
Date.today.beginning_of_month..Date.today
として日にちは完了。
日にちごとのユーザー登録数を取得
これに結構手間取りました。悩んだ末にmap使って取得するようにしました。
days = (Date.today.beginning_of_month..Date.today).to_a #後々、usersとtransposeする予定なので、rangeではなく、arrayに変更 users = days.map { |item| User.where(:created_at => item.beginning_of_day..item.end_of_day).count } #mapでそれぞれの日にちに登録されたユーザー数をカウント #ここでも、active_supportのbeginning_of_dayとend_of_dayを利用
これで欲しかった日ごとのユーザー登録数が取得できました。もっとうまいやり方がありそうだけど、取りあえずこれで動きそうなので動かします。