たくろぐ!

世界一のチラ裏

【Rails Tutorial】Userモデル(app/model/User.rb)

内容

class User < ApplicationRecord
  attr_accessor :remember_token, :activation_token
  before_save   :downcase_email
  before_create :create_activation_digest
  validates :name,  presence: true, length: { maximum: 50 }
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, presence: true, length: { maximum: 255 },
                    format: { with: VALID_EMAIL_REGEX },
                    uniqueness: { case_sensitive: false }
  has_secure_password
  validates :password, presence: true, length: { minimum: 6 }, allow_nil: true

  # 渡された文字列のハッシュ値を返す
  def User.digest(string)
    cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST :
                                                  BCrypt::Engine.cost
    BCrypt::Password.create(string, cost: cost)
  end
    
  # ランダムなトークンを返す
  def User.new_token
    SecureRandom.urlsafe_base64
  end

  # 永続セッションのためにユーザーをデータベースに記憶する
  def remember
    self.remember_token = User.new_token
    update_attribute(:remember_digest, User.digest(remember_token))
  end

  # トークンがダイジェストと一致したらtrueを返す
  def authenticated?(attribute, token)
    digest = send("#{attribute}_digest")
    return false if digest.nil?
    BCrypt::Password.new(digest).is_password?(token)
  end
  
  # ユーザーのログイン情報を破棄する
  def forget
    update_attribute(:remember_digest, nil)
  end
  
  # アカウントを有効にする
  def activate
    update_attribute(:activated,    true)
    update_attribute(:activated_at, Time.zone.now)
  end

  # 有効化用のメールを送信する
  def send_activation_email
    UserMailer.account_activation(self).deliver_now
  end
  
  private

    # メールアドレスをすべて小文字にする
    def downcase_email
      self.email = email.downcase
    end

    # 有効化トークンとダイジェストを作成および代入する
    def create_activation_digest
      self.activation_token  = User.new_token
      self.activation_digest = User.digest(activation_token)
    end
end

Treasure Dataで使うべきUDFってなんぞや

ログデータを分析する

Treasure Data(以下TD)で分析する対象のデータは業務データよりログデータが多いのでは?
- アクセス日時
- アクセス元IP
- リファラ
- アクセス先URL
- ユーザエージェント
こんなんを分析するということらしい。
もちろん、業務データとログデータを組み合わせてどんな場合にどんなものが売れたかみたいなことも分析するから一概にログデータが全てということではない。
個人的にログデータを使うことが多いのではと思った理由は以下。

データを加工するということ

単にデータを取得するみたいなことではなく、雑多なデータの関連性を見つけるためにデータを加工するためのクエリが多い。
雑多なデータというのは、ログデータに多いと思う。

Google Analyticsがイメージしやすい

Webマーケターだった経験から個人的にGoogle Analyticsをイメージすると理解できた。
たとえば、TD_FIRSTという関数を使うと、リファラーと流入先URLが取得できる、
逆にTD_LAST関数は離脱URLと離脱先が取得できる。
まさにGoogle Analyticsの世界やないか。

UDF(User Defined Functions)ってなに?

直訳すると、ユーザが定義した関数ってことになる。
TDではあらかじめよく使う関数が作られててそれを利用すればデータ分析できるみたいな。
ここで言うユーザはTDのことだとおもうんだな、うん。
TDはこのUDFをむっちゃ持ってて、それをうまく使えよな!ってブログに書いてる。

クエリ集 - Treasure Data

導入としては以下が読みやすい。

http://yebisupress.dac.co.jp/2015/12/24/tdwebloganalytics/

まとめ

TD_から始まる関数はTreasure DataのUDFだぞ。
これを使えばユーザの行動が分析できて仮説に基づいた施作が打ち放題!