Submit Search
Upload
食べログ流 - Rails Upgrade Practices
•
1 like
•
574 views
K
Kaito Minatoya
Follow
Slides for Rails Developers Meetup 2018 Day 4 Nouvelle Vague.
Read less
Read more
Technology
Report
Share
Report
Share
1 of 54
Download now
Download to read offline
Recommended
The Essence of Using Ruby on Rails in Corporations
The Essence of Using Ruby on Rails in Corporations
Koichiro Ohba
Rails解説セミナー: Railsのアップグレード編
Rails解説セミナー: Railsのアップグレード編
Yohei Yasukawa
クラウドカンファレンスIn静岡 r cloud
クラウドカンファレンスIn静岡 r cloud
Kazuki Aranami
Rails解説セミナー: リリースノート解説編
Rails解説セミナー: リリースノート解説編
Yohei Yasukawa
20160720 aws development-tools-and_hybrid_cdp
20160720 aws development-tools-and_hybrid_cdp
Yukitaka Ohmura
DOO-014_日本でもできる! マイクロソフト技術をフル活用した DevOps の具体的実現手法!
DOO-014_日本でもできる! マイクロソフト技術をフル活用した DevOps の具体的実現手法!
decode2016
Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発
Koichi Shimozono
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
Ryosuke MATSUMOTO
Recommended
The Essence of Using Ruby on Rails in Corporations
The Essence of Using Ruby on Rails in Corporations
Koichiro Ohba
Rails解説セミナー: Railsのアップグレード編
Rails解説セミナー: Railsのアップグレード編
Yohei Yasukawa
クラウドカンファレンスIn静岡 r cloud
クラウドカンファレンスIn静岡 r cloud
Kazuki Aranami
Rails解説セミナー: リリースノート解説編
Rails解説セミナー: リリースノート解説編
Yohei Yasukawa
20160720 aws development-tools-and_hybrid_cdp
20160720 aws development-tools-and_hybrid_cdp
Yukitaka Ohmura
DOO-014_日本でもできる! マイクロソフト技術をフル活用した DevOps の具体的実現手法!
DOO-014_日本でもできる! マイクロソフト技術をフル活用した DevOps の具体的実現手法!
decode2016
Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発
Koichi Shimozono
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
Ryosuke MATSUMOTO
日本で DevOps を ロケットスタートする方法
日本で DevOps を ロケットスタートする方法
Puppet
Ruby on Rails3 Tutorial Chapter1
Ruby on Rails3 Tutorial Chapter1
Sea Mountain
Rails composerでrails newを楽にしよう
Rails composerでrails newを楽にしよう
健太 田上
サーバーレスの今とこれから
サーバーレスの今とこれから
真吾 吉田
Amazon ECSとDevOps
Amazon ECSとDevOps
Amazon Web Services Japan
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選
Koichi ITO
Ruby In Wheezy
Ruby In Wheezy
Youhei SASAKI
Rubykansai 81
Rubykansai 81
Satomi Tsujita
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
Yukihiko SAWANOBORI
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
Developers Summit
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
Rakuten Group, Inc.
Rails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd edition
Goh Matsumoto
Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレード
Kazuhiro Hara
Qlik Senseで無制限精度の数値演算 - Windows版Qlikエンジンのサーバーサイド拡張を実現する
Qlik Senseで無制限精度の数値演算 - Windows版Qlikエンジンのサーバーサイド拡張を実現する
QlikPresalesJapan
ハイブリットクラウド環境におけるモダンアプリケーション開発
ハイブリットクラウド環境におけるモダンアプリケーション開発
政雄 金森
普通のRailsアプリをdockerで本番運用する知見
普通のRailsアプリをdockerで本番運用する知見
zaru sakuraba
JavaScript And Keywords
JavaScript And Keywords
uupaa
Rails初心者レッスン lesson4 2edition
Rails初心者レッスン lesson4 2edition
Satomi Tsujita
LL2021 Java update
LL2021 Java update
torutk
Railsの開発環境作るぞ
Railsの開発環境作るぞ
Yoichi Toyota
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
More Related Content
Similar to 食べログ流 - Rails Upgrade Practices
日本で DevOps を ロケットスタートする方法
日本で DevOps を ロケットスタートする方法
Puppet
Ruby on Rails3 Tutorial Chapter1
Ruby on Rails3 Tutorial Chapter1
Sea Mountain
Rails composerでrails newを楽にしよう
Rails composerでrails newを楽にしよう
健太 田上
サーバーレスの今とこれから
サーバーレスの今とこれから
真吾 吉田
Amazon ECSとDevOps
Amazon ECSとDevOps
Amazon Web Services Japan
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選
Koichi ITO
Ruby In Wheezy
Ruby In Wheezy
Youhei SASAKI
Rubykansai 81
Rubykansai 81
Satomi Tsujita
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
Yukihiko SAWANOBORI
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
Developers Summit
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
Rakuten Group, Inc.
Rails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd edition
Goh Matsumoto
Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレード
Kazuhiro Hara
Qlik Senseで無制限精度の数値演算 - Windows版Qlikエンジンのサーバーサイド拡張を実現する
Qlik Senseで無制限精度の数値演算 - Windows版Qlikエンジンのサーバーサイド拡張を実現する
QlikPresalesJapan
ハイブリットクラウド環境におけるモダンアプリケーション開発
ハイブリットクラウド環境におけるモダンアプリケーション開発
政雄 金森
普通のRailsアプリをdockerで本番運用する知見
普通のRailsアプリをdockerで本番運用する知見
zaru sakuraba
JavaScript And Keywords
JavaScript And Keywords
uupaa
Rails初心者レッスン lesson4 2edition
Rails初心者レッスン lesson4 2edition
Satomi Tsujita
LL2021 Java update
LL2021 Java update
torutk
Railsの開発環境作るぞ
Railsの開発環境作るぞ
Yoichi Toyota
Similar to 食べログ流 - Rails Upgrade Practices
(20)
日本で DevOps を ロケットスタートする方法
日本で DevOps を ロケットスタートする方法
Ruby on Rails3 Tutorial Chapter1
Ruby on Rails3 Tutorial Chapter1
Rails composerでrails newを楽にしよう
Rails composerでrails newを楽にしよう
サーバーレスの今とこれから
サーバーレスの今とこれから
Amazon ECSとDevOps
Amazon ECSとDevOps
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選
Ruby In Wheezy
Ruby In Wheezy
Rubykansai 81
Rubykansai 81
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
Rails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd edition
Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレード
Qlik Senseで無制限精度の数値演算 - Windows版Qlikエンジンのサーバーサイド拡張を実現する
Qlik Senseで無制限精度の数値演算 - Windows版Qlikエンジンのサーバーサイド拡張を実現する
ハイブリットクラウド環境におけるモダンアプリケーション開発
ハイブリットクラウド環境におけるモダンアプリケーション開発
普通のRailsアプリをdockerで本番運用する知見
普通のRailsアプリをdockerで本番運用する知見
JavaScript And Keywords
JavaScript And Keywords
Rails初心者レッスン lesson4 2edition
Rails初心者レッスン lesson4 2edition
LL2021 Java update
LL2021 Java update
Railsの開発環境作るぞ
Railsの開発環境作るぞ
Recently uploaded
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
sugiuralab
Recently uploaded
(8)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
食べログ流 - Rails Upgrade Practices
1.
食べログ流 Rails Upgrade Practices @kamina_zzz 湊谷
海斗
2.
湊谷 海斗 @kamina_zzz 2 食べログ DevOps チーム
兼 データサイエンスチーム ● 各種バージョンアップ ● ライブラリ( gem など)の作成 ● 機械学習のモデル構築 ● 日本酒 🍶 ● バンド 🎸 Minatoya Kaito
3.
1. 食べログと Rails
の歩み 2. バージョンアップ戦略 3. 得られた知見 3
4.
食べログと Rails 4
5.
5 RAILS_GEM_VERSION = '1.2.2' Tabelog
meets Rails
6.
v1.2.2 6 README.md lib Application specific libraries.
Basically, any kind of custom code that doesn't belong under controllers, models, or helpers. This directory is in the load path. https://rubygems.org/gems/rails/versions/1.2.2
7.
食べログと Rails の歩み 7 サービスの成長 2007
2018201620132010 v2.0 v3.0 v4.0 v5.0 v6.0 ?Release Rails も成長
8.
Rails way との乖離
その1 8 サービスの成長 2007 2018201620132010 v2.0 v3.0 v4.0 v5.0 v6.0 ?Release # 急成長するサービス & 急成長するフレームワーク サービス成長 vs バージョンアップ
9.
Rails way との乖離
その1 9 サービスの成長 2007 2018201620132010 v2.0 v3.0 v4.0 v5.0 v6.0 ?Release サービス成長 vs バージョンアップ ⇓ 将来への負債ということは理解した上で 戦略的に Rails へモンキーパッチ # 急成長するサービス & 急成長するフレームワーク
10.
Rails way との乖離
その2 10 サービスの成長 2007 2018201620132010 v2.0 v3.0 v4.0 v5.0 v6.0 ?Release # 若いサービス & 若いフレームワーク サービスの成長を加速したい
11.
Rails way との乖離
その2 11 サービスの成長 2007 2018201620132010 v2.0 v3.0 v4.0 v5.0 v6.0 ?Release # 若いサービス & 若いフレームワーク サービスの成長を加速したい ⇓ 自分たちが使いやすいように機能拡張 第二の ActiveSupport みたいな
12.
Tabelog way 12 Rails Way
ではなく Tabelog Way な Rails ができていく ⇓ Rails ちょっとわかる人が入ってくる ⇓ 「Rails ちょっとできるのに Tabelog できない…」 ⇓ Rails できるひとに活躍してもらえないのはまずい
13.
そして Rails way
へ… 13
14.
本題 14
15.
Rails バージョンアップ PJ 15
16.
16 認証 社内管理 販売管理 メディア アプリAPI 外部連携 店舗オーナー Rails services バッチジョブ
17.
PJ の進み方 17 調査 キックオフ アップグレード対応 リグレッションテスト 新バージョンへリプレース
18.
調査 18 調査 キックオフ アップグレード対応 リグレッションテスト 新バージョンへリプレース - EOL スケジュールの確認 -
次バージョンの決定 - 想定される障壁 - “過去の宿題” の選定 - スケジュールの見積もり
19.
キックオフ 19 調査 キックオフ アップグレード対応 リグレッションテスト 新バージョンへリプレース - PJ チームで決めたことを共有 -
次のバージョン - スケジュール - バージョン間の差異
20.
アップグレード対応 20 調査 キックオフ アップグレード対応 リグレッションテスト 新バージョンへリプレース - 新バージョンの Gemfile -
テスト環境の整備 - ざっくりテスト&対応 - rspec のコケたところ対応
21.
バージョン間差分に対する戦略 21 前提: Rails way
にしていく
22.
簡単にレールに乗せられないパターン 22 - grep できない -
具体例は後述 - ヘビーユースしてる機能が次バージョンで廃止になる - シンプルに対応コストがデカい - 独自に実装していた機能が Rails に追加された - が、思ってたんと違う
23.
リグレッションテスト 23 調査 キックオフ アップグレード対応 リグレッションテスト 新バージョンへリプレース - サービス開発チーム総出 - ホワイトボックス -
食べログのコードに対して
24.
新バージョンへリプレース 24 調査 キックオフ アップグレード対応 リグレッションテスト 新バージョンへリプレース - 影響度低い順 - ある種のカナリー
25.
キツかった話 1 25
26.
escape_javascript 26
27.
escape_javascript def escape_javascript(javascript) if javascript result
= javascript.gsub(/(|</|rn|342200250|3422002 51|[nr"'])/u) { |match| JS_ESCAPE_MAP[match] } javascript.html_safe? ? result.html_safe : result else "" end end 27 JS のセグメントの “nr” とかを エスケープしてくれるやつ
28.
patch for `escape_javascript` def escape_javascript(javascript) super(javascript.to_s) end 28 String じゃなかったら to_s
する ⇓ Rails way にしよう
29.
alias_method :j, :escape_javascript 29
30.
grep できない! 30
31.
Numeric 31
32.
NumericExt module NumericExt def to_a [self] end end Numeric.__send__(:prepend,
NumericExt) 32 Numeric の独自拡張
33.
1.to_a 100_000.to_a 99.99.to_a 33
34.
grep できない! 34
35.
対応した 35 該当箇所を処理したらログに出すようにパッチを当てる - 同じ箇所で何回もログに出さない - ログ行数の上限
36.
キツかった話 2 36
37.
Dalli 37
38.
昔話 38 session_store に memcached
を使用 Rails デフォルトが Rack::Session::Memcache
39.
昔話 39 Dalli がイケてるらしい
40.
昔話 40 Dalli 導入
41.
昔話 41 # 不満 - Marshal -
key
42.
不満 42 - Rails のバージョンが変わる -
Marshal.dump ↔ Marshal.load に失敗 - Symbol でも String でも取得したい
43.
Dalli へパッチ # Dalli::Client#get json
= ActiveSupport::JSON.decode(raw) json.keys.each do |key| json[key] = json[key].with_indifferent_access end json 43 memcached から取得して JSON デコードして #with_indifferent_access
44.
#with_indifferent_access 44
45.
with_indifferent_access # activesupport/lib/active_support/hash_with_indifferent_access.rb if
value.is_a? Hash if options[:for] == :to_hash value.to_hash else value.nested_under_indifferent_access end elsif value.is_a?(Array) if options[:for] != :assignment || value.frozen? value = value.dup end value.map! { |e| convert_value(e, options) } else value end 45 Hash, Array ぽかったら ネストした中身まで HWIA 化していく
46.
session[:test] = {very:
{'nested' => {symkey: 'hoge'}}} session[:test].class #=> ActiveSupport::HashWithIndifferentAccess session[:test]['very'][:nested]['symkey'] #=> hoge 46
47.
対応まだできてない 47 session の中身がどのように使われているかわからない session で
grep すると膨大なヒット
48.
学び 48 気軽にパッチを当てるとすごいことが起きる Ruby, Rails への理解はとても大切
49.
ラクした話 49
50.
警告を抑えたい 50 Deprecation Warning があまりに多い →
今は対応しないので一旦抑制したい
51.
WarningSuppressor 51 def warn(message =
nil, callstack = nil) return if silenced callstack ||= caller_locations(2) deprecation_message(callstack, message).tap do |m| behavior.each { |b| b.call(m, callstack) } unless WarningSuppressor.suppress?(m) end end
52.
まとめ 52
53.
まとめ 53 - Rails way
ではない実装になっていないか? - やりたいことに対して過剰な実装ではないか? - Rails に限らずバージョンアップはずっと発生するイベント - ラクしよう - フレームワークのコードリーディングは非常に有用
54.
We're hiring! 54 @kamina_zzz reply or
DM =>
Download now