rails永遠の初心者の備忘録

物忘れの激しい経営者による備忘録

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を利用

これで欲しかった日ごとのユーザー登録数が取得できました。もっとうまいやり方がありそうだけど、取りあえずこれで動きそうなので動かします。