Rails6にいつ上げるか?
Roppongi.rb 2019/07/31(水)
1
自己紹介
名前: 神速
所属: フリーランス
GitHub: @sinsoku (アイコン右上)
Twitter: @sinsoku_listy (アイコン右下)
Rails歴: それなり
2
Forkwell Jobsの手伝い(週1)
3
話すこと、話さないこと
•
!
Rails 6の新機能の紹介
•
"
Railsのアップグレードについて
•
#
6.0.0.rc2で起きた問題の紹介
4
WEB+DB PRESS Vol.1111
松田さん、y-yagiさんが書いたWEB+DBの記事
1 
https://www.amazon.co.jp/dp/B07TCL8Q8T
5
y-yagiさんのスライド2
2 
Rails 6.0についてのはなし - https://blog.y-yagi.tech/posts/rails_0600/
6
⭐
Railsのアップグレードについて
7
Railsのアップグレードについて
• いつ始めるか?
• 何をするのか?
• どう進めるのか?
8
Railsのアップグレードについて
• いつ始めるか?
• 何をするのか?
• どう進めるのか?
9
Timeline for the release of Rails 6.03
3 
https://weblog.rubyonrails.org/2018/12/20/timeline-for-the-release-of-Rails-6-0/
10
おすすめはRC1のとき
• 新機能の追加が終わっている
• 大きなバグは無い(...はず)
• コントリビュートしやすい
• RCのバグは報告・解決しやすい
11
12
#kamipoさんはすごい人
13
Railsのアップグレードについて
•
✅
いつ始めるか?
• 何をするのか?
• どう進めるのか?
14
アップグレードの手順
1. (前準備) Rails以外のgemを最新にする
2. 新しいバージョンについて調べる
3. Railsのバージョンを上げる
4. CIでテストを流してみる
5. 失敗したテストを直す
15
Rails以外のgemを最新にする
Dependabotで定期的にアップデートをすると楽です。
16
あまり上げていない人向け
developmentとtestを先に上げ、その後に1つずつgemを上げる。
$ bundle update --conservative --group development test
$ bundle update --conservative <gem_name>
17
sinsoku/bundler-diff
GitHubの比較URLを生成するgemを公開してます。
18
新しいバージョンについて参考になる資料
Rails Guides(Edge)
https://edgeguides.rubyonrails.org/
upgradingrubyon_rails.html
RailsDiff
http://railsdiff.org/5.2.3/6.0.0.rc2
各gemのCHANGELOG
rails/rails/blob/6-0-stable/activerecord/CHANGELOG.md19
Railsのバージョンを上げる
Gemfileでrailsのバージョンを変更します。
gem "rails", "6.0.0.rc2"
そして、 bundle update を実行します。
$ bundle update --conservative rails actionmailer 
actionpack actionview activejob activemodel 
activerecord activesupport railties
20
CIでテストを流してみる
Rails 6は config.load_defaults "5.2" でもテストの実行ができ
たので、とりあえずCIで実行してみると良いです。
エラーが出たり、テストが失敗するので1つずつ直します。
21
Railsのアップグレードについて
•
✅
いつ始めるか?
•
✅
何をするのか?
• どう進めるのか?
22
Draftプルリクを作る
23
Draftプルリクで対応を進める
24
5.2 でも動く変更を先にマージする
25
Draftプルリクをリベース
26
大きなタスクを作らない
「Rails 6にアップグレードする」のように大きなタスクを作ら
ず、毎週少しずつ対応するのがおすすめです。
多くの変更は Rails 5.2 のままで修正できます。
27
!
6.0.0.rc2で起きた問題の紹介
(時間あるかな...)
28
param option can't contain colons
(ArgumentError).
コロンが使えなくなったようです。
- resources :reports, param: 'year/:month', only: :show
+ get 'reports/:year/:month', to: 'reports#show', as: :report
29
including スコープでエラーが起きる
ActiveRecord::Relation に同名メソッドが追加された。
You tried to define a scope named "including" on the model "Foo",
but ActiveRecord::Relation already defined an instance method with the same name. (ArgumentError)
日付の比較のために including を使っていました。
scope :including, lambda { |day|
ransack(start_on_lteq: day, end_on_gteq: day).result
}
30
as_json でdatetimeのカラムがStringになる
created_at = User.first.as_json['created_at']
pp created_at.class #=> String
pp created_at #=> "2019-07-31T06:27:06.452Z"
as_json を使っているテストコードが失敗しました。
attrs = foo.user_attrs
expect(attrs).to have_attributes user.as_json
31
empty? が呼ばれなくなった
ActiveRecord::Core#blank? が定義された。4
class Foo < ApplicationRecord
def empty?
min_value.blank? && max_value.blank?
end
+ alias blank? empty?
end
foo = Foo.find_by(id: param[:id])
something if foo.blank?
4 
rails/rails@cc2d614
32
テストで ActiveJob が動かなくなった
Request Specで自動的にTestAdapterが使われるようになりました。5
describe "example", type: :request do
around { |ex| Sidekiq::Testing.inline!(&ex) }
it "xxx" do
+ FooJob.disable_test_adapter
# ...以下略
end
end
5 
rails/rails#33849
33
ファイルのダウンロードのテストが失敗した
Content-Disposition の値が変わりました。6
expected: "attachment; filename="foo.csv""
got: "attachment; filename="foo.csv"; filename*=UTF-8''foo.csv"
ファイル名だけ確認するように変更して対応。
- expect(headers['Content-Disposition']).to eq "attachment; filename="foo.csv""
+ expect(headers['Content-Disposition']).to include "filename="foo.csv""
6 
rails/rails#33829
34
関連モデルのバリデーションの呼び出しが変わった
!
再現コードのデモ
発表後にissueを登録しました。
!
rails/rails#36822
35
まとめ
• rcが出たら試しみる
• 怪しい挙動を見つけたら再現コードを書いてみる
• gemは定期的にアップデートしておく
• 少しずつ対応して、rails6ブランチは小さく保つ
!
ぜひ 6.0.0.rc2 でテストを実行してみましょう!
36

More Related Content

PDF
毎日gemをアップグレードする生活
PDF
Laravel Meetup Tokyo Vol.3 告知 LT
PDF
Laravel5にアップグレードする際に詰まった点
PDF
mod_perlプログラマーがYAPCで語るレガシー開発論
PDF
Live the knight 6
PDF
Rails Testing on Fargate
PDF
1000speakers Sendai1
PPTX
meguro.rb LT
毎日gemをアップグレードする生活
Laravel Meetup Tokyo Vol.3 告知 LT
Laravel5にアップグレードする際に詰まった点
mod_perlプログラマーがYAPCで語るレガシー開発論
Live the knight 6
Rails Testing on Fargate
1000speakers Sendai1
meguro.rb LT

More from sinsoku listy (18)

PDF
Search Form for Rails
PDF
ENGINEER WORK!!
PDF
自己修復的なインフラ -Self-Healing Infrastructure-
PDF
Rails 5.2: credentials
PDF
Randomly Failing Specs
PDF
技術的負債とリファクタリング
PDF
Git 初心者講座 by forkwell
PDF
Swift on Docker
PDF
ES2015のカバレッジ計測
PDF
CSSのカバレッジツール
PDF
本当にあった怖い話 7つの幽霊 7つの成仏
PDF
Awsでwindowsゲームを動かす
PDF
Action pack variantsの話
PDF
LT_Gitのfast fowardと継続的デリバリー
PDF
バージョン管理とGit
PDF
Git天空闘技場_ハンズオン
PDF
DVCSとGitの基礎
ODP
20101001 5分でわかるtrac pluginの作り方_slideshare
Search Form for Rails
ENGINEER WORK!!
自己修復的なインフラ -Self-Healing Infrastructure-
Rails 5.2: credentials
Randomly Failing Specs
技術的負債とリファクタリング
Git 初心者講座 by forkwell
Swift on Docker
ES2015のカバレッジ計測
CSSのカバレッジツール
本当にあった怖い話 7つの幽霊 7つの成仏
Awsでwindowsゲームを動かす
Action pack variantsの話
LT_Gitのfast fowardと継続的デリバリー
バージョン管理とGit
Git天空闘技場_ハンズオン
DVCSとGitの基礎
20101001 5分でわかるtrac pluginの作り方_slideshare
Ad

Rails6にいつ上げるか?