SlideShare a Scribd company logo
Rails6.1 → Rails7.0アップデート記録
Omotesando.rb#87 Toshio Maki(@Kirika̲K2)
自己紹介
• Toshio Maki(@Kirika̲K2)
• RubyとRailsは15年ぐらいやってます。
本日のテーマ
• LTネタが集まらなかったときのために、1,2日でできそうな手頃
なテーマとしてRailsのバージョンアップを選びました。
• Railsバージョンアップはドメイン関係ないし、全員共通の課題なの
で、LTが不足しているなと思ったら、みんなRailsのバージョンアッ
プをしてLTをしましょう。
Rails 6.1.7.4 → Rails 7.0.5
+----------------------+--------+--------+---------+---------+-----+-------+
| Name | Lines | LOC | Classes | Methods | M/C | LOC/M |
+----------------------+--------+--------+---------+---------+-----+-------+
| Controllers | 5970 | 5495 | 87 | 352 | 4 | 13 |
| Jobs | 2865 | 2360 | 51 | 137 | 2 | 15 |
| Models | 29882 | 21384 | 252 | 960 | 3 | 20 |
| Mailers | 4 | 4 | 1 | 0 | 0 | 0 |
| Channels | 8 | 8 | 2 | 0 | 0 | 0 |
| Views | 14 | 13 | 0 | 0 | 0 | 0 |
| Libraries | 10707 | 9095 | 171 | 386 | 2 | 21 |
| Interactor specs | 64431 | 58409 | 0 | 4 | 0 | 14600 |
| Job specs | 1293 | 1139 | 0 | 0 | 0 | 0 |
| Lib specs | 1519 | 1424 | 0 | 0 | 0 | 0 |
| Model specs | 47952 | 43255 | 0 | 11 | 0 | 3930 |
| Request specs | 26393 | 22205 | 0 | 0 | 0 | 0 |
+----------------------+--------+--------+---------+---------+-----+-------+
| Total | 218750 | 187765 | 564 | 1850 | 3 | 99 |
+----------------------+--------+--------+---------+---------+-----+-------+
Code LOC: 38359 Test LOC: 149406 Code to Test Ratio: 1:3.9
• 本体コード38k、テストコードは150kのプロ
ジェクト
• Rubyのバージョンは3.1.3
• テストは割と書いている方(書けてないところ
もあるにはある)
• DependabotでGemの最新化を日々実施してい
て、Gemは大体最新になっている
• APIアクセスが殆どで、ViewはActiveJobを経由
した帳票作成機能以外なし
Railsアップグレードガイドに従って上げていく
• https://railsguides.jp/upgrading̲ruby̲on̲rails.html
• Gem
fi
leのRailsのバージョンを6.1から7.0に変更して、bundle updateする
• bin/rails app:updateを実行
• 生成されたRails7.0用パラメータを見ながら、取り込み可否判断をする
• アップグレード用のDBマイグレーションを実行する
• あとはCIに雑に投げて、落ちたテストを全て直す
bin/rails app:update
• Rails7用のapplication.rb、development.rb / test.rb /
production.rbや、その他必要なファイルを更新してくれる
• 既存ファイルが存在する場合はOverwriteするかどうかを聞いてく
るので、gitに履歴は全部残っているので、一旦全部上書きを選択し
た
ここでの罠
• production.rbのActiveStorageの保存先サービス名をドサクサに
紛れてローカルに変更されていた(これで2、3時間ぐらい浪費し
た)
credencial.yml.encの削除
• 元々はsecret̲key̲baseを保存しておくための、暗号化されたファイル
• master.keyと対になっていて、master.keyはgitで管理してはいけない。
• 環境変数SECRET̲KEY̲BASEで代用できるため、credential.yml.encは使
用しておらず、master.keyもなかったが、Railsのattr̲encryptedのための
キー情報も管理されるようになったため、ファイルが存在すると問答無用で
開きに行こうとする。
• Master.keyはすでに存在しておらず、起動時にエラーになるため、ファイル
ごと削除した。
application.rbのパラメータ見直し
• default̲loads 7.0をセットすることで、Rails7.0のデフォルト値を
使用する。
• bin/rails app:updateを実行して、default̲loads 6.1+Rails7で増
えたパラメータとの差分を検証したあと、default̲loads 7.0に変更
する
Rails7で増えたパラメータへの対処
• 基本的に全部Rails7.0のデフォルトに寄せた
• セッションCookieやEtagに使用するハッシュアルゴリズムが
SHA1→SHA256に変更される影響が気になったが、セッション
Cookieは使用していなかったし、Etagも再キャッシュし直せばよ
さそうなので、デフォルトに寄せた
雑にCIに投げた結果
• ここからはCIのテスト結果を見ながら1件1件対処していく
各種Gemのアップデート
• activerecord̲json̲schemaがRails7になったことで、1.3.0 →
2.1.5にアップデート
• 文字列を渡すとJSONそのものが渡されたと解釈されてしまうた
め、Pathnameを渡すように変更する(to̲sを取るだけ)
String#to̲s(:currency)を
String#to̲fs(:currency)に変更する
• 123456789.to̲s(:currency)
=> “$123,456,789.00"
• Rails 6.1から警告が出ていたらしく、Rails7.0で使用できなくな
り、代わりにto̲fs(:currency)でアクセスする。
• :phone、:percentage、:rounded、:human̲size、:humanなど、
to̲sに引数を取るものは全て対象となる
あとは実機上でテスト
• 一通り試してみて、動くことを確認したのでレビューしてもらって
マージ。
• あとはQA環境でテストして、来週リリースです。
まとめ
• 昔はすごく大変な印象もあったが、Gemの最新化やテストを足し続
けたこともあり、Rails 6.1 → Rails 7.0の移行は約2日でできた。
おまけ
• Rails 7.0化が思ったより早くできたので、Ruby 3.1.3 → Rails
3.2.2にもチャレンジしてみました…が
Rails 6.1 → 7.0アップデート記録
Rails 6.1 → 7.0アップデート記録
Ruby 3.1.3 → Ruby 3.2.3
• YJITを有効化
• Rubyのアップデートに伴う修正は特になし
• まだ本番環境に入れてないので効果は分からないが、CIでのテスト
時間が16分18秒 → 13分50秒に短縮(16%短縮)
• アップデートにかかった時間は1時間程度
• 所感「YJITすげー」

More Related Content

PDF
目grep入門 +解説
PDF
0章 Linuxカーネルを読む前に最低限知っておくべきこと
PDF
闇魔術を触ってみた
PDF
Native Memory Tracking
PDF
組み込みでこそC++を使う10の理由
PPTX
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
PDF
第14回 配信講義 計算科学技術特論A(2021)
PPTX
Tensor コアを使った PyTorch の高速化
目grep入門 +解説
0章 Linuxカーネルを読む前に最低限知っておくべきこと
闇魔術を触ってみた
Native Memory Tracking
組み込みでこそC++を使う10の理由
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
第14回 配信講義 計算科学技術特論A(2021)
Tensor コアを使った PyTorch の高速化

What's hot (20)

PDF
すごい constexpr たのしくレイトレ!
PDF
Googleの新しい検索技術 Knowledge Graphについて
PDF
【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術
PPTX
最速C# 7.x
PDF
中3女子が狂える本当に気持ちのいい constexpr
PDF
計算機アーキテクチャを考慮した高能率画像処理プログラミング
PDF
tcolorboxによる装飾表現(TeXユーザの集い2015)
PDF
明日使えないすごいビット演算
PDF
ログ解析を支えるNoSQLの技術
PDF
TensorFlow Lite Delegateとは?
PDF
私にとってのテスト
PDF
【メタサーベイ】Video Transformer
PDF
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
PDF
中3女子でもわかる constexpr
PDF
【Unity道場スペシャル 2017京都】スマホゲーム開発者なら知っておくべきチートのリスク&対策
PPT
ジェネリクスの基礎と クラス設計への応用
PDF
Rust製の全文検索エンジンライブラリ(tantivy bayard)を試してみた
PDF
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
PDF
MCC CTF講習会 pwn編
PDF
論文紹介:Temporal Action Segmentation: An Analysis of Modern Techniques
すごい constexpr たのしくレイトレ!
Googleの新しい検索技術 Knowledge Graphについて
【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術
最速C# 7.x
中3女子が狂える本当に気持ちのいい constexpr
計算機アーキテクチャを考慮した高能率画像処理プログラミング
tcolorboxによる装飾表現(TeXユーザの集い2015)
明日使えないすごいビット演算
ログ解析を支えるNoSQLの技術
TensorFlow Lite Delegateとは?
私にとってのテスト
【メタサーベイ】Video Transformer
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
中3女子でもわかる constexpr
【Unity道場スペシャル 2017京都】スマホゲーム開発者なら知っておくべきチートのリスク&対策
ジェネリクスの基礎と クラス設計への応用
Rust製の全文検索エンジンライブラリ(tantivy bayard)を試してみた
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
MCC CTF講習会 pwn編
論文紹介:Temporal Action Segmentation: An Analysis of Modern Techniques
Ad

Similar to Rails 6.1 → 7.0アップデート記録 (20)

PDF
Rubykansai 81
PDF
Rails解説セミナー: Railsのアップグレード編
PDF
毎日gemをアップグレードする生活
PDF
食べログ流 - Rails Upgrade Practices
PDF
Rails解説セミナー: リリースノート解説編
PDF
Rails3.1rc4を試してみた
PDF
小規模個人アプリをRails 7.xにバージョンアップした話
PDF
Winodws7のruby2でrails4を遊ぶ環境を作るのだ。
PDF
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座
PDF
Railsの開発環境作るぞ
PPT
Ruby on Rails Tutorial Chapter8-10
PDF
Rails6にいつ上げるか?
PDF
成長を加速する minne の技術基盤戦略
PPT
Ruby on Rails Tutorial Chapter5-7
PDF
nomlab_okayamaruby_slide
PPT
Ruby on Rails3 Tutorial Chapter3
PDF
ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜
PDF
Rails 7.1 の新機能が使いたくて調べてみた@【Techouse × Leaner共同開催】Ruby / Rails勉強会
PDF
最適化計算エンジンを備えた Ruby on Rails アプリケーションのアーキテクチャーと進化
PDF
How to upgrade your rails application to rspec3
Rubykansai 81
Rails解説セミナー: Railsのアップグレード編
毎日gemをアップグレードする生活
食べログ流 - Rails Upgrade Practices
Rails解説セミナー: リリースノート解説編
Rails3.1rc4を試してみた
小規模個人アプリをRails 7.xにバージョンアップした話
Winodws7のruby2でrails4を遊ぶ環境を作るのだ。
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座
Railsの開発環境作るぞ
Ruby on Rails Tutorial Chapter8-10
Rails6にいつ上げるか?
成長を加速する minne の技術基盤戦略
Ruby on Rails Tutorial Chapter5-7
nomlab_okayamaruby_slide
Ruby on Rails3 Tutorial Chapter3
ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜
Rails 7.1 の新機能が使いたくて調べてみた@【Techouse × Leaner共同開催】Ruby / Rails勉強会
最適化計算エンジンを備えた Ruby on Rails アプリケーションのアーキテクチャーと進化
How to upgrade your rails application to rspec3
Ad

More from Maki Toshio (11)

PDF
自社サービスのAPIをOAuth2対応にして公開した
PDF
Searched gems which supports only ruby 2.6
PPTX
ActiveRecordで複雑なクエリを書くのは間違っているのか
PPTX
やさしいGemパッチの作り方
PPTX
ファイルシステムのスナップショット機能でバックアップを取得する
PPTX
Cloud Foundry Day in Tokyo Lightning Talk - Cloud Foundry over the Proxy
PDF
メール製品を作って気づいたmailライブラリの光と闇について語る
KEY
明日から使える(?)Rubyトリビア
ZIP
Rubyで簡単にremote access apiを実行する
ZIP
レガシーコード改善ガイド
PPT
Ruby on rails on hudsonの活用事例
自社サービスのAPIをOAuth2対応にして公開した
Searched gems which supports only ruby 2.6
ActiveRecordで複雑なクエリを書くのは間違っているのか
やさしいGemパッチの作り方
ファイルシステムのスナップショット機能でバックアップを取得する
Cloud Foundry Day in Tokyo Lightning Talk - Cloud Foundry over the Proxy
メール製品を作って気づいたmailライブラリの光と闇について語る
明日から使える(?)Rubyトリビア
Rubyで簡単にremote access apiを実行する
レガシーコード改善ガイド
Ruby on rails on hudsonの活用事例

Rails 6.1 → 7.0アップデート記録