SlideShare una empresa de Scribd logo
1 de 36
Descargar para leer sin conexión
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

Más contenido relacionado

Similar a Rails6にいつ上げるか?

RailsのRailから解放される始めの一歩
RailsのRailから解放される始めの一歩RailsのRailから解放される始めの一歩
RailsのRailから解放される始めの一歩Masato Noguchi
 
Rails 5.0.0.beta2 触ってみた
Rails 5.0.0.beta2 触ってみたRails 5.0.0.beta2 触ってみた
Rails 5.0.0.beta2 触ってみたKenji Mori
 
HerokuでRails3.2 we love herokuの事例
HerokuでRails3.2 we love herokuの事例HerokuでRails3.2 we love herokuの事例
HerokuでRails3.2 we love herokuの事例Naoto Koshikawa
 
Next GAE Heroku を使って 3分でRailsアプリをリリース
Next GAE Heroku を使って 3分でRailsアプリをリリースNext GAE Heroku を使って 3分でRailsアプリをリリース
Next GAE Heroku を使って 3分でRailsアプリをリリースよしだ あつし
 
Railsバージョンアップを 段階的に行うために Rails3/4並行稼動させる仕組み を作ってる話
Railsバージョンアップを段階的に行うためにRails3/4並行稼動させる仕組みを作ってる話Railsバージョンアップを段階的に行うためにRails3/4並行稼動させる仕組みを作ってる話
Railsバージョンアップを 段階的に行うために Rails3/4並行稼動させる仕組み を作ってる話Masayuki Morita
 
Rails templateで開発の初速を上げよう
Rails templateで開発の初速を上げようRails templateで開発の初速を上げよう
Rails templateで開発の初速を上げよう豊明 尾古
 
Long Life RailsApp in the case of REJOB
Long Life RailsApp in the case of REJOBLong Life RailsApp in the case of REJOB
Long Life RailsApp in the case of REJOBDaisuke Yamasaki
 
ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発Takafumi ONAKA
 
RESTful API (JAX-RS) 書くだけで仕様書も 自動で作られていく話 with MicroProfile Open API
RESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open APIRESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open API
RESTful API (JAX-RS) 書くだけで仕様書も 自動で作られていく話 with MicroProfile Open APIKohei Saito
 
Sprocketsを捨てたい
Sprocketsを捨てたいSprocketsを捨てたい
Sprocketsを捨てたいMasato Noguchi
 
bootsnapはどれくらい早くなるのか
bootsnapはどれくらい早くなるのかbootsnapはどれくらい早くなるのか
bootsnapはどれくらい早くなるのかota42y
 
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選Ruby 2.4 / Rails 5.0に上げた際のパッチ5選
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選Koichi ITO
 
Railsチュートリアル(second)を終えて
Railsチュートリアル(second)を終えてRailsチュートリアル(second)を終えて
Railsチュートリアル(second)を終えてHirata Tomoko
 
Java + React.jsでSever Side Rendering #reactjs_meetup
Java + React.jsでSever Side Rendering #reactjs_meetupJava + React.jsでSever Side Rendering #reactjs_meetup
Java + React.jsでSever Side Rendering #reactjs_meetupToshiaki Maki
 
Bundler 2 の胎動
Bundler 2 の胎動Bundler 2 の胎動
Bundler 2 の胎動Koichi ITO
 
2015年GMOペパボ新卒エンジニア研修 Web開発研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Web開発研修イントロダクション2015年GMOペパボ新卒エンジニア研修 Web開発研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Web開発研修イントロダクションTakahiro Okumura
 
『健全なフロントエンド開発をしよう 〜Railsに乗っかるという選択編〜』 アップ用
『健全なフロントエンド開発をしよう 〜Railsに乗っかるという選択編〜』 アップ用『健全なフロントエンド開発をしよう 〜Railsに乗っかるという選択編〜』 アップ用
『健全なフロントエンド開発をしよう 〜Railsに乗っかるという選択編〜』 アップ用kotaro_hirayama
 

Similar a Rails6にいつ上げるか? (20)

RailsのRailから解放される始めの一歩
RailsのRailから解放される始めの一歩RailsのRailから解放される始めの一歩
RailsのRailから解放される始めの一歩
 
ENGINEER WORK!!
ENGINEER WORK!!ENGINEER WORK!!
ENGINEER WORK!!
 
Rails 5.0.0.beta2 触ってみた
Rails 5.0.0.beta2 触ってみたRails 5.0.0.beta2 触ってみた
Rails 5.0.0.beta2 触ってみた
 
HerokuでRails3.2 we love herokuの事例
HerokuでRails3.2 we love herokuの事例HerokuでRails3.2 we love herokuの事例
HerokuでRails3.2 we love herokuの事例
 
Next GAE Heroku を使って 3分でRailsアプリをリリース
Next GAE Heroku を使って 3分でRailsアプリをリリースNext GAE Heroku を使って 3分でRailsアプリをリリース
Next GAE Heroku を使って 3分でRailsアプリをリリース
 
Railsバージョンアップを 段階的に行うために Rails3/4並行稼動させる仕組み を作ってる話
Railsバージョンアップを段階的に行うためにRails3/4並行稼動させる仕組みを作ってる話Railsバージョンアップを段階的に行うためにRails3/4並行稼動させる仕組みを作ってる話
Railsバージョンアップを 段階的に行うために Rails3/4並行稼動させる仕組み を作ってる話
 
Rails templateで開発の初速を上げよう
Rails templateで開発の初速を上げようRails templateで開発の初速を上げよう
Rails templateで開発の初速を上げよう
 
Long Life RailsApp in the case of REJOB
Long Life RailsApp in the case of REJOBLong Life RailsApp in the case of REJOB
Long Life RailsApp in the case of REJOB
 
ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発
 
Rails2&Me
Rails2&MeRails2&Me
Rails2&Me
 
Application Bootstrap
Application BootstrapApplication Bootstrap
Application Bootstrap
 
RESTful API (JAX-RS) 書くだけで仕様書も 自動で作られていく話 with MicroProfile Open API
RESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open APIRESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open API
RESTful API (JAX-RS) 書くだけで仕様書も 自動で作られていく話 with MicroProfile Open API
 
Sprocketsを捨てたい
Sprocketsを捨てたいSprocketsを捨てたい
Sprocketsを捨てたい
 
bootsnapはどれくらい早くなるのか
bootsnapはどれくらい早くなるのかbootsnapはどれくらい早くなるのか
bootsnapはどれくらい早くなるのか
 
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選Ruby 2.4 / Rails 5.0に上げた際のパッチ5選
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選
 
Railsチュートリアル(second)を終えて
Railsチュートリアル(second)を終えてRailsチュートリアル(second)を終えて
Railsチュートリアル(second)を終えて
 
Java + React.jsでSever Side Rendering #reactjs_meetup
Java + React.jsでSever Side Rendering #reactjs_meetupJava + React.jsでSever Side Rendering #reactjs_meetup
Java + React.jsでSever Side Rendering #reactjs_meetup
 
Bundler 2 の胎動
Bundler 2 の胎動Bundler 2 の胎動
Bundler 2 の胎動
 
2015年GMOペパボ新卒エンジニア研修 Web開発研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Web開発研修イントロダクション2015年GMOペパボ新卒エンジニア研修 Web開発研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Web開発研修イントロダクション
 
『健全なフロントエンド開発をしよう 〜Railsに乗っかるという選択編〜』 アップ用
『健全なフロントエンド開発をしよう 〜Railsに乗っかるという選択編〜』 アップ用『健全なフロントエンド開発をしよう 〜Railsに乗っかるという選択編〜』 アップ用
『健全なフロントエンド開発をしよう 〜Railsに乗っかるという選択編〜』 アップ用
 

Más de sinsoku listy

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

Más de sinsoku listy (17)

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

Rails6にいつ上げるか?