Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Railsアップグレード百景
Search
r7kamura
March 22, 2019
Technology
11
6.6k
Railsアップグレード百景
2019年3月22日にRails Developers Meetup 2019で登壇した際の発表資料です。
r7kamura
March 22, 2019
Tweet
Share
More Decks by r7kamura
See All by r7kamura
個人開発のやっていき方
r7kamura
94
23k
amakanにおける書籍のシリーズ判定方法について 2016-08-21
r7kamura
10
6k
Tenkaichi Bot Butoukai
r7kamura
11
5.2k
Paging in API
r7kamura
3
8.6k
Chanko Hacking Guide
r7kamura
5
1.3k
Making things with something small
r7kamura
1
460
Hidden
r7kamura
0
78
Butsukari Geiko
r7kamura
10
36k
Casual CI Server
r7kamura
7
1.8k
Other Decks in Technology
See All in Technology
Cloud Spanner 導入で実現した快適な開発と運用について
colopl
1
600
アジャイル開発とスクラム
araihara
0
170
2.5Dモデルのすべて
yu4u
2
860
Moved to https://speakerdeck.com/toshihue/presales-engineer-career-bridging-tech-biz-ja
toshihue
2
740
飲食店予約台帳を支えるインタラクティブ UI 設計と実装
siropaca
7
1.8k
株式会社EventHub・エンジニア採用資料
eventhub
0
4.3k
自動テストの世界に、この5年間で起きたこと
autifyhq
10
8.5k
AndroidデバイスにFTPサーバを建立する
e10dokup
0
250
技術負債の「予兆検知」と「状況異変」のススメ / Technology Dept
i35_267
1
1.1k
次世代KYC活動報告 / 20250219-BizDay17-KYC-nextgen
oidfj
0
250
OpenID BizDay#17 KYC WG活動報告(法人) / 20250219-BizDay17-KYC-legalidentity
oidfj
0
240
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
6
57k
Featured
See All Featured
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
6
550
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
9
440
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Measuring & Analyzing Core Web Vitals
bluesmoon
6
240
Scaling GitHub
holman
459
140k
Become a Pro
speakerdeck
PRO
26
5.1k
Making the Leap to Tech Lead
cromwellryan
133
9.1k
Building an army of robots
kneath
303
45k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
114
50k
Fontdeck: Realign not Redesign
paulrobertlloyd
83
5.4k
Thoughts on Productivity
jonyablonski
69
4.5k
Transcript
RailsΞοϓάϨʔυඦܠ by r7kamura
ࣗݾհ • Ryo Nakamura • https://github.com/r7kamura • https://twitter.com/r7kamura • ϑϦʔϥϯεͰRailsͷࣄΛ͍ͬͯ·͢
• Rails 1͔Β6·ͰΞοϓάϨʔυͨ͜͠ͱ͋Γ
ࠓ͢͜ͱ ʮRailsͬͯ͜͏͍͏ײ͡ͰΞοϓάϨʔυ͍ͯ͘͠ͱ ྑ͍ͷͶʯͱ͍͏ͷ͕͔ͬͯΒ͑Δͱخ͍͠ • ࣄલ४උ • ΞοϓάϨʔυͷྲྀΕ (Rails 4, 5,
6͕ର) • ࣄྫू
ࠓ͞ͳ͍͜ͱ • Πϯϑϥͷ (1͚ͩΞοϓάϨʔυ͢ΔɺϦΫΤετΛෳ ͯ͠ݕূڥʹྲྀ͢) • ৫ίϛϡχέʔγϣϯͷ (ۀҕୗͰ୲͢Δ߹ͷ͋ Ε͜ΕɺϨϏϡΞʔׂͷ͋Ε͜Ε) •
QAख๏ͷ (ςετ߲ͷબఆํ๏ͳͲ) • ݩʑΞοϓάϨʔυͷ·ΓͲ͜Ζ100બʹ͢Δ༧ఆͩͬͨ
ࣄલ४උ
࡞ۀલʹ͓ͬͯ͘ͱྑ͍͜ͱ • GitHub Issuesͷϥϕϧͷཧ ← ࢁPRΛग़͢ͷͰ • ςετݕূڥͷඋ ← ԿσϓϩΠ͢ΔͷͰ
• ։ൃڥͷඋ ← ԿςετΛಈ͔͢ͷͰ • CIͷඋ ← Կಈ͔͢͜ͱʹͳΔͷͰ • RuboCopͷඋ ← ͍Ζ͍Ζॿ͔ΔͷͰ
GitHub Issuesͷϥϕϧͷཧ
ςετݕূڥͷඋ • RailsΞοϓάϨʔυ࣌ʹͦ͜ςετͷ͋Γ͕ͨ͞Λ ௧ײ͢Δ͜ͱʹͳΔ… • Pull Request͝ͱʹݕূڥ͕༻ҙ͞ΕΔ͕ͭ͋Δ ͱຊʹศར • μϛʔσʔλ͕༻ҙ͞Ε͍ͯΔݕূڥͩͱϕετ
ʢ2ͭҎ্Ϩίʔυ͕͋Δͱࣦഊ͢Δͱ͔͋Δʣ
CIͷඋ • ߴԽ (ྫ: Performance Pricing PlanରԠ) • ςετͷछྨͷݟ͠ (ྫ:
db:migrationςετ) • ϩάͷݟ͠ (ྫ: ςετதͷෆཁͳඪ४ग़ྗ) • ςετ݁Ռͷू (ྫ: CircleCIͷςεταϚϦʔରԠ)
None
None
RuboCopͷඋ • Bundler/Gemfileʹै͓ͬͯ͘ͱޙͷมߋ࡞ۀָ͕ • RailsΧςΰϦͷCop༗ޮԽ͓ͯ͘͠ͱḿΔ • ηΩϡϦςΟύϑΥʔϚϯεͷݟͯ͘ΕΔ • ݹ͍APIͷݺͼग़͠Λauto-correctͰ͖Δͷศར
GemfileͰͷఆٛॱংͷ᠘ • গͳ͘ͱrailsઌ಄ʹॻ͍͓͍ͯͨํ͕ྑ͍ • ͜͏͍͏ίʔυؚ͕·ΕΔGem͕͋ΔͨΊ if defined?(Rails) … end
ΞοϓάϨʔυͷྲྀΕ
ΞοϓάϨʔυͷྲྀΕ 1. bundle update 2. ςετͱमਖ਼ 3. masterͷऔΓࠐΈ (ਵ࣌σϓϩΠ) 4.
όʔδϣϯมߋΛσϓϩΠ 5. ࣄޙॲཧ
bundle update • جຊతʹ —conservative ΦϓγϣϯΛ͚Δ • bundle update --conservative
actionmailer actionpack actionview activemodel activerecord activesupport rails railties Έ͍ͨʹΔ • ґଘgemΛઌʹΞοϓάϨʔυ͠ͳ͍ͱ͍͚ͳ͍έʔε͋Δ • deviserails-i18nΈ͍ͨʹಉ͡όʔδϣϯͰRails 4 & 5྆ରԠ Ͱ͖ͳ͍gem͋ΔͷͰҙ (͜͏͍͏gem͕ຊʹհ)
None
ςετͱमਖ਼ 1. ςετ͕ਖ਼ৗʹ࣮ߦ͞ΕΔΑ͏ʹ͢Δ 2. ςετͷࣦഊΛ0݅ʹ͢Δ 3. ܯࠂͷΛݮΒ͍ͯ͘͠ 4. masterʹมߋ͕͋ΕऔΓࠐΜͰ1ʹΔ
ςετҎ֎Ͱ͓͢͢Ίͷ֬ೝࣄ߲ • rails console ͕ਖ਼ৗʹىಈ͢Δ͔? • RubyCSSͷϑΝΠϧΛฤूͨ͠ͱ͖ө͞ΕΔ͔? • Rails.application.eager_load! ͕ޭ͢Δ͔?
• rails db:rollback db:migration ͕ޭ͢Δ͔? • RAILE_ENV=production rails assets:precompile ͕ޭ͢Δ͔?
None
None
masterͷऔΓࠐΈ • Ұʹࢁมߋ͢ΔͱݕূrevertେมͳͷͰɺ όʔδϣϯมߋ࣌ͷࠩ࠷খԽ͍ͨ͠ • มߋ৽چόʔδϣϯ྆ରԠͳܗͰՃ͑Δ • ςετͷमਖ਼ͱฒߦͯ͠masterʹมߋΛೖΕ͍ͯ͘ (ͷͰ༧Ίcommit͚͓ͯ͜͏)
ࠩΛখ͘͢͞Δ • bundle update ͷ —conservative Φϓγϣϯ • rails_kwargs_testing •
activerecord-compatible_legacy_migration
rails_kwargs_testing • ςετͰͷϝιουҾ͕ get “/”, params: { page: “1” }
ʹ • RSpecͷϩά͕ܯࠂͰຒΊਚ͘͞Εͯ͠·͏ • 5.0Ҡߦͱಉ࣌ʹೖΕΔͱɺ࡞ۀதʹmasterଆͰςετ͕ॻ ͖ΘΔͱconflict͢Δ͠৭ʑେม • 4.2Ͱ৽ܗࣜͰॻ͚ΔΑ͏ʹͯ͘͠ΕΔͷ͕͜ͷgem
Rails/HttpPositionalArguments • લड़ͷϝιουҾΛݕࠪ͢ΔCop • લճrails5-spec-converterΛ͕ͬͨbuggy… • CopͰauto-correct͢Δͷ͕ྑͦ͞͏
activerecord-compatible_legacy_migration • class Foo < ActiveRecord::Migration[4.2]; end ͷΑ͏ʹόʔδϣ ϯΛࢦఆ͠ͳ͍ͱ͍͚ͳ͘ͳͬͨ (5.0Ͱܯࠂɺ5.1Ͱྫ֎)
• 4.2ͰActiveRecord::Migration[4.2]ͱॻ͚ͳ͍ͷͰɺࣄલʹର ԠͰ͖ͣɺόʔδϣϯมߋ࣌ʹ͜ͷରԠಉ࣌ʹؚ·Εͯ͠·͏ • 4.2Ͱ5.xͰಈ࡞͢ΔܧঝݩΛఏڙͯ͘͠ΕΔͷ͕͜ͷgem • ※·͋ԿରԠͤͣ5.0ʹͯ͠db:migration࣌ʹͪΐͬͱܯࠂ͕ ग़ΔΑ͏ʹͳΔ͚͔ͩͩΒɺͦΜͳʹॏཁͰͳ͍͔
ࣄྫू
Rails 4.2.9ʹͨ͠ΒparamsपΓͰྫ֎͕… • get “/search/:query”, to: “items#search” • Rails 4.2.9ͩͱURIύε͕ASCII-8BITʹͳΔ
• Rails 4.2.9ͰյΕͯ4.2.10Ͱͬͨ • RailsͷύονόʔδϣϯҰؾʹ࠷৽·Ͱ্͛Α͏
Rails 5ʹͨ͠ΒINSERTͰྫ֎͕… • `created_on` DATE DEFAULT ‘0’ • Rails 5͔ΒσϑΥϧτͰMySQLαʔόଆͷSQLϞʔυ
ߟྀ͢ΔΑ͏ʹͳͬͨ • ݁ՌతʹNO_ZERO_DATEͱSTRICT_TRANS_TABLES ͕༗ޮԽ͞ΕͯΤϥʔʹ • Rails 4ͷ͔Βݫ͓ͯ͘͘͠͠ͱ٢
Rails 5ʹͨ͠Βىಈ࣌ʹྫ֎͕… • ActiveSupport.on_load(:action_controller) { include Foo } • APIϞʔυͬͯͳ͍ͷʹ
ActionController::API ͕ྫ֎Λ ग़͢Α͏ʹͳͬͨͧ??? • ActiveSupport.on_load(:action_controller) ActionController::API ͷಡΈࠐΈ࣌ʹൃՐ͢Δ • Rails 4 ࣌ʹఆ͍ͯ͠ͳ͔ͬͨ͜ͱ͕ى͖ͨ
Rails 5ʹͨ͠Β404͕204ʹ… • ςϯϓϨʔτ͕ଘࡏ͠ͳ͍ͱ͖ͷڍಈ͕มΘͬͨ • Rails 4ͩͱྫ֎͕ൃੜͯ͠404 • Rails 5ͩͱ204
• ͜͜Ͱʮ͍ͭͰʹϦϑΝΫλϦϯάͯ͠͠·͓͏ʯ ͱ͔Γ࢝ΊΔͱຊʹྑ͘ͳ͍…
Rails 5ʹͨ͠ΒControllerͷςετ͕… post “/login”, name: “…”, password: “…” post “/articles”,
body: “…” • Rails 5.0 ʹROW_POST_DATA͕Ҿ͖ܧ͕ΕΔෆ۩߹͕ • Rails 5.2 Ͱमਖ਼͞Ε͍ͯΔ͕ 5.0 Ͱͦͷ·· • దʹΞϓϦଆͰύον͙ͯͯ྇ͷ͕ྑͦ͞͏
Rails 5ʹͨ͠ΒparamsपΓͰςετ͕… • get “/foo”, bar: nil, baz: Time.current •
Rails 4 ·ͰςετͰͨ͠paramsͱͯͨ͠͠ΦϒδΣΫ τ͕ControllerͰࢀর͞Ε͍ͯͨ • Rails 5͔Βී௨ʹΤϯίʔυ/σίʔυ͞ΕΔ • ຊདྷ͋Γಘͳ͍݅ͷςετ͕େྔʹଘࡏ͍ͯͨ͠ • Content-Typeparamsͷ༰Λࡉ͔͘ݟͯ͠ରԠ͢Δ
Rails 5ʹͨ͠ΒparamsपΓͰྫ֎͕… • ActionController::Parameters͕HashΛܧঝ͠ͳ͘ͳͬͨ (େม͗͢Δ) • ҰԠ5.0Ͱܯࠂ͖ͰHash૬ͷϝιου͕ݺͼग़ͤΔ Α͏ʹߟྀ͞Ε͍ͯΔ • ͔͠͠
params.is_a?(Hash) ʹഊ • ͜ͷܧঝݩมߋͷӨڹ͕Rails 5ԽͰҰ൪ා͍
Rails 5.1ʹͨ͠ΒparamsपΓͰςετ͕… • get “/”, params: nil ʹͯ͠ΔͱRails 5.1͔Βྫ֎͕ग़Δͧ??? •
υΩϡϝϯτΛݟΔݶΓparamsnilͰྑͦ͞͏ • Ͳ͏ΒRails 5.1ʹ͢Δͱ͖ʹ࣮ΛϛεͬͨͬΆ͍ • rails/rails#34737 Λग़ͯ͠mergeࡁΈ • Rails 6 ʹ͔͠ೖΒͳ͍ͷͰ 5 Ͱ݁ہ nil Λͤͳ͍
Rails 5.1ʹͨ͠ΒARͷthrough͕… • Rails 5.1͔Β has_many :b, through: a ͕ޮ͔ͳ͍ͧ???
• ௐࠪͨ͠ΒҰ࿈ͷincludeͷதͰ͜͏͍͏͜ͱ͕ى͖͍ͯͨ X.has_many :a X.has_many :b, through: :a X.has_many :a # ← ͜͜Ͱthrough: :aͷఆ͕ٛফ͑Δ
Rails 6ʹͨ͠Βvalidation͕… • Rails 6͔Βhas-and-belongs-to-manyͳதؒϨίʔυͰ ఆ͍ٛͯ͠Δvalidation͕ಈ͔ͳ͘ͳͬͨ…? • ࠶ݱίʔυॻ͍ͯTwitterͰΰωͯͨΒkamipo͞Μ͕ rails/rails#35116 Ͱͯ͘͠Εͨ
• ͜ͷޙผ݅Ͱ࠶ݱίʔυॻ͍ͯ2ʙ3ճΰωͯͨΒ kamipo͞Μ͕શ෦ͯ͘͠Εͨ…
Rails 6ʹͨ͠Βbelongs_toͷڍಈ͕… • ಉ͡Ϋϥε͔Βಉ͡Ϋϥεʹbelongs_toΛผ໊Ͱఆ ͍ٛͯ͠ΔϞσϧͰɺinverse_of͕ڞ༻͞Εͯ͠·͏ • ࠶ݱՄೳ͕ͩະղܾ • rails/rails#35204 ͰIssueΛཱͯͯௐࠪத
Tips1: Contributing to Rails͕ศར • rails/railsͷIssueͷग़͠ํ • Pull Requestͷग़͠ํ •
ςετͷಈ͔͠ํ • ࠷খͷ࠶ݱίʔυΛॻ͘ͱ͖ͷςϯϓϨʔτ
Tips2: r7kamuraʹؙ͛͢Δબࢶ • ࣮ࡍRailsΞοϓάϨʔυΛ୭͕୲͢Δͷ͔ʁ • ਓࣄධՁݸʑਓͷϞνϕʔγϣϯͷ͕͋Δ • ୲ऀΛ͚ͯۀҕୗͷਓʹؙ͛͢Δͱ͍͏ͷ ৭ʑߟ͑ΔͱΘΓͱ༗ޮͩͱࢥ͍ͬͯΔ •
RailsΞοϓάϨʔυͷࣄΛืू͍ͯ͠·͢
͓͞Β͍
͓͞Β͍ • ࡞ۀͱฒߦͯ͠։ൃج൫Λ͍͑ͯ͜͏ • ύονόʔδϣϯҰؾʹ্͛Α͏ • όʔδϣϯมߋ࣌ͷࠩΛ࠷খԽ͍ͯ͜͠͏ • ᠘ଟ͍͕ਅ໘ʹςετॻ͍ͯͨΒݕͰ͖Δ •
Railsଆ͕͓͔͍͠ͳͱࢥͬͨΒ࠶ݱίʔυΛॻ͜͏