Rails で端末の区別をするのに便利な gem rack-user_agent

シェアする

Rails で Web アプリ作ってる時にスマートフォンとPCで処理を分けたいところが出てきた。自分で User-Agent を見て判別する処理を書くのはだるいので gem を探したら rack-user_agent という調度良い gem があったので使ってみた。

説明を見ると woothee-ruby という User-Agent をパースする gem をより使いやすくしたもののようだ。

rails なら 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 でも使えるようだ。

おかげでスマートフォンとパソコンとの処理を簡単に分ける事ができた。

Sponsored Link

シェアする

フォローする