Rails で Web アプリ作ってる時にスマートフォンとPCで処理を分けたいところが出てきた。自分で User-Agent を見て判別する処理を書くのはだるいので gem を探したら rack-user_agent という調度良い gem があったので使ってみた。
説明を見ると woothee-ruby という User-Agent をパースする gem をより使いやすくしたもののようだ。
https://github.com/woothee/woothee-rubyrails なら Gemfile に gem 'rack-user_agent' と書いて bundle install すれば使えるようになる。
rack-user_agent を利用すると以下のようなメソッドを利用し、アクセスしてきた端末の情報を得る事ができる。
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
詳しい解説は github を見て欲しいが、見ての通り User-Agent だけでなくそれがスマートフォンなのか PC なのか、OS は何なのかを request から簡単に取得できる。
上記ではコントローラ内に記述してあるがもちろん View 内でも以下のように利用できる。
%div
- if request.from_pc?
-# パソコンのときの表示
- else
-# スマホの時の表示
- if request.os == 'Android
-# Android の時の表示
タイトルでは Rails と書いたが自分が Rails しか使ってないだけで Sinatra でも使えるようだ。
おかげでスマートフォンとパソコンとの処理を簡単に分ける事ができた。