基本的には下記記事のとおりにやって対応完了なんだけど、
https://qiita.com/zucay/items/23f960112b4a7e7cace8#step5-css%E3%81%AE%E5%AF%BE%E5%BF%9C
いくつか動かなかったりがあったりした。編集リクエストを送るのも面倒なので、このブログに差分を書いておく。
https://qiita.com/zucay/items/23f960112b4a7e7cace8#step5-css%E3%81%AE%E5%AF%BE%E5%BF%9C
いくつか動かなかったりがあったりした。編集リクエストを送るのも面倒なので、このブログに差分を書いておく。
Step5. CSSの対応
についてはProductionの場合に読み込んだCSSをhtml_safeで出力していないためHTMLエスケープされてしまっていた。従ってhtml_safeをつける必要がある。
style[amp-custom] - controller = params[:controller] - if Rails.application.assets && Rails.application.assets["amp/amp_#{controller_name}"] = Rails.application.assets["amp/amp_#{controller_name}"].to_s.html_safe - else = File.read "#{Rails.root}/public#{stylesheet_path("amp/amp_#{controller_name}", host: nil).html_safe}"
Step6. image_tagヘルパーのフック
これについては、Rails5からは alias_method_chain が deprecated になり、Rails6では動かなかった。
したがって、alias_methodに置き換える必要がある。置き換え後のコードはこちら。
したがって、alias_methodに置き換える必要がある。置き換え後のコードはこちら。
module ActionView module Helpers module AssetTagHelper def amp_image_tag(source, options = {}) src = options[:src] = ActionController::Base.helpers.path_to_image(source, skip_pipeline: options.delete(:skip_pipeline)) unless src.start_with?('cid:', 'data:') || src.blank? options[:alt] = options.fetch(:alt) { ActionController::Base.helpers.image_alt(src) } end options[:layout] ||= 'fixed' ActionController::Base.helpers.tag('amp-img', options) end # amp-imgかimgかをrequest.formatによって使い分ける。 def image_tag_with_amp(source, options = {}) if amp? amp_image_tag(source, options) else image_tag_without_amp(source, options) end end def amp? Thread.current[:format] == 'amp' end # alias_method_chain :image_tag, :amp alias_method :image_tag_without_amp, :image_tag end end end
まとめ
- もっと難しいかなぁとかは思っていたけど、意外と簡単だった。
- 遊びでやってみたけど、AMPに向くコンテンツ向かないコンテンツってあって、今の業務領域では多分使うことはないだろうな、と思った。