Upgrade to Pro — share decks privately, control downloads, hide ads and more …

とある企業のモバイル対応 / Rails Developers Meetup 2017

とある企業のモバイル対応 / Rails Developers Meetup 2017

Rails Developers Meetup 2017(2017/12/09)

Yuichi Goto

December 09, 2017
Tweet

More Decks by Yuichi Goto

Other Decks in Programming

Transcript

  1. self.inspect • ピクスタ株式会社  技術推進チームリーダー • Twitter: @_yasaichi • GitHub: yasaichi

    • Blog: http://web-salad.hateblo.jp 2 他社さんにおける技術基盤のようなチームです
  2. Ruby on Rails側での対応 • レスポンシブデザインを利用する場合: 特に何もする必要なし • UAによって表示内容を振り分ける場合: ActionPack Variantsを利用

    • デバイスごとに異なるViewを表示するためにRailsが用意している機能 • リクエストごとにグローバルな変数 request.variant が用意され、
 これを操作・参照する 9
  3. ActionPack Variantsの利用例 class ApplicationController < ActionController::Base before_action :set_request_variant private def

    set_request_variant request.variant = :mobile if request.user_agent =~ /iPhone/ end end 10 <% if request.variant.mobile? %> # do something <% end %> *.html+mobile.erbのようなViewが存在すればそれが使われる
  4. 解決策: viewportを動的に適用する 15 class ApplicationController < ActionController::Base private def not_yet_migrated_to_responsive

    request.variant = :pc end end class ProjectsController < ApplicationController before_action :not_yet_migrated_to_responsive, only: %i(new) end <% unless request.variant.pc? %> <meta name="viewport" content="width=device-width,initial-scale=1"> <% end %> ActionPack Variantsのリクエストごとに グローバルな変数という側面だけ利用