プログラミングと旅と映画の日々

普段はスマホ決済サービスの会社でバッグエンドを担当しているエンジニアです。プログラミングと趣味の映画、株、時々うどんに関してブログを書いていこうと思います。海外ドラマ、クロスバイクも好きです。

【Ruby on Rails5】railsでデバイスごとに処理を分けるのに便利なgem rack-user_agent

海外ドラマの感想を共有するSNS mitanoというサービスを運営しております。
www.mitano.jp


PCの場合にはこの画像、スマホの場合にはこの画像を表示

ということがしたい。

mitanoのドラマのimage情報はアマゾンのイメージサーバーのURLをDBに以下のように保持しています。

https://images-na.ssl-images-amazon.com/images/I/91L4NTy4XgL._SY300_.jpg

これをスマホの場合

https://images-na.ssl-images-amazon.com/images/I/91L4NTy4XgL._SY150_.jpg

ロジックで150にサイズを変更したい

便利なgemを発見したので使ってみます。
GitHub - k0kubun/rack-user_agent: Rack::Request extension for handling User-Agent


gemを以下のように追加。

gem 'rack-user_agent' 

bundleでインストール

$ bundle

こんな風に簡単に判定できます。

class ApplicationController < ActionController::Base

  before_action :set_request_variant
  def index
    request.user_agent       #=> "Mozilla/5.0 (Macintosh; ..."
    request.device_type      #=> :pc
    request.os               #=> "Mac OSX"
    request.browser          #=> "Chrome"
    request.from_pc?         #=> true
    request.from_smartphone? #=> false
  end

  private
  def set_request_variant
    request.variant = request.device_variant # :pc, :smartphone
  end
end

いちばんやさしいグロースハックの教本 人気講師が教える急成長マーケティング戦略 「いちばんやさしい教本」シリーズ