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をホームにするWeb技術者ができること/let-o...
Search
MOROHASHI Kyosuke
March 23, 2019
Programming
2
2k
全体がいい感じになるために、私たちRailsをホームにするWeb技術者ができること/let-our-whole-system-grow
RailsDM 2019 での発表資料です
MOROHASHI Kyosuke
March 23, 2019
Tweet
Share
More Decks by MOROHASHI Kyosuke
See All by MOROHASHI Kyosuke
dynamic!
moro
10
14k
Identifying User Idenity
moro
23
24k
Simplicity on Rails -- RDB, REST and Ruby
moro
18
20k
ちょうどよい Rails E2E テスト/enough-good-rails-e2e-test
moro
6
2.6k
フレームワークを作らない方法/How NOT to build frameworks
moro
4
1.3k
フォームオブジェクトとの向き合い方/Grow Form Objects up
moro
1
2.1k
チームによるいきいきとしたソフトウェア開発/an-alive-team-grows-software
moro
3
3.5k
Web-E2E-Testing-from-Ruby
moro
5
600
Joyful user foundation restructuring with Ruby
moro
9
19k
Other Decks in Programming
See All in Programming
Python札幌 LT資料
t3tra
7
1.1k
Basic Architectures
denyspoltorak
0
140
Flutter On-device AI로 완성하는 오프라인 앱, 박제창 @DevFest INCHEON 2025
itsmedreamwalker
1
170
TestingOsaka6_Ozono
o3
0
230
Grafana:建立系統全知視角的捷徑
blueswen
0
260
Vibe codingでおすすめの言語と開発手法
uyuki234
0
140
20251212 AI 時代的 Legacy Code 營救術 2025 WebConf
mouson
0
230
Combinatorial Interview Problems with Backtracking Solutions - From Imperative Procedural Programming to Declarative Functional Programming - Part 2
philipschwarz
PRO
0
120
The Art of Re-Architecture - Droidcon India 2025
siddroid
0
150
ゲームの物理 剛体編
fadis
0
390
大規模Cloud Native環境におけるFalcoの運用
owlinux1000
0
230
クラウドに依存しないS3を使った開発術
simesaba80
0
190
Featured
See All Featured
The #1 spot is gone: here's how to win anyway
tamaranovitovic
1
880
Context Engineering - Making Every Token Count
addyosmani
9
570
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.2k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
0
980
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
180
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.9k
Everyday Curiosity
cassininazir
0
110
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Designing for Timeless Needs
cassininazir
0
110
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
150
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
100
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
130
Transcript
શମ͕͍͍ײ͡ʹͳΔͨΊʹɺ ࢲͨͪ3BJMTΛϗʔϜʹ͢Δ 8FCٕज़ऀ͕Ͱ͖Δ͜ͱ 2019-03-23 Rails Developers Meetup 2019 ॾڮګհ
@moro
‣ ࣸਅ
Kyosuke MOROHASHI @moro
!5 SMS? What's SMSってなにをやってる会社なの?
https://twitter.com/sunaot/status/1002392476492038144
“ 情報インフラを構築することで、⾼齢社会を 取り巻く⼈びと、⾼齢社会で働く⽅や事業者の⽅、 ⾼齢者ご⾃⾝やそのご家族などがイキイキと ⽣活できる社会の実現を⽬指しています。 — https://www.bm-sms.co.jp/philosophy/
!8 &
吳䒭⠓爡ؒأ ٥ ؒي ٥ ؒأ 匌❨鿪庥⼒蓎Ⱅ㕦⡝♶⹛欵蓎Ⱅ㕦ةٙ٦ https://www.bm-sms.co.jp ؒٝآص،䱰欽؟؎ ز https://careers.bm-sms.co.jp/engineer/
join us!
શମ͕͍͍ײ͡ʹͳΔͨΊʹɺ ࢲͨͪ3BJMTΛϗʔϜʹ͢Δ 8FCٕज़ऀ͕Ͱ͖Δ͜ͱ
‣ 3BJMTੲͱࠓ ‣ ϢʔβʔʹՁΛಧ͚Δ͍ͬͯ͏͚Ͳ ‣ શମΛ͍͍ײ͡ʹ͢Δ ‣ ݁
3BJMTΛऔΓר͘ ੲͱࠓ
3BJMT ͳͲαʔόଆ8FCٕज़ ΛऔΓר͘ ੲͱࠓ
ٕज़τϐοΫͱͯ͠ͷ3BJMT ੲͱࠓ
‣ 3BJMT͕ग़࢝Ίͨɺ3BJMT8FCΞϓϦ ٕज़తτϐοΫͷ࠷ઌͷҰͭͩͬͨɻ ‣ 001 -JHIUXFJHIU-BOHVBHF ϑϧελοΫϑϨʔϜϫʔΫ ‣ "KBY 3&45
5%% ΞδϟΠϧ ษڧձ ҬίϛϡχςΟʔ ‣ ͍·ଓ͘ɺ͍ΖΜͳࢼΈ͕Ͱ͖ͯͨɻ ‣ ˞ͪΖΜʮ͕ͯ͢3BJMTͷ͓͔͛ʯͱ͍͏Θ͚Ͱͳ͍Α ࢲͷࢹͰ;Γ͔͑Δ ੲ
‣ ͷ࠷ઌͰͳͦ͞͏ɻ ‣ Ϟμϯ+4 .JDSPTFSWJDFT %FW0QT "* .- ʜ ‣
ʮ͋ͨΓ·͑ʯʹͳͬͨ ‣ ʮ࠷ઌʯʹ·ͨͳΔ͔͠Εͳ͍͠ɺ ͳΒͳ͍͔͠Εͳ͍ɻ ‣ ͨͩɺ·ͨ͠ͳͬͯલͱҧ͏ɻ ࠓ
‣ (PPEFOPVHIͱͯ͠ΘΕ͍ͯΔ ‣ ͢ͰʹͬͯΔͱ͜Ζͨ͘͞Μ͋Δ͠Ͷɻ ‣ ࠓͰ͍͍બࢶͩͱࢥ͏ ‣ ͪΖΜɺઈ໓ͯ͠΄͘͠ͳ͍ 3BJMTઈ໓͢Δ
‣ ୯Ұͷ3BJMTΞϓϦ͚ͩͰ݁͢Δ͜ͱ ͳ͘ͳ͖ͬͯͨɻ ͔ͱݴͬͯੲͱಉ͡Ͱͳ͍
‣ 3BJMTੲͱࠓ ‣ ࠷৽ͷٕज़Ͱͳ͘ͳ͖ͬͯͨ ‣ ϢʔβʔʹՁΛಧ͚Δ͍ͬͯ͏͚Ͳ ‣ શମΛ͍͍ײ͡ʹ͢Δ ‣
݁
3BJMTΞϓϦ ੲͱࠓ
‣ ୯Ұͷ8FCΞϓϦͰ΄΅݁͢Δɻ ‣ ಛఆͷαʔϏεɾۀɾϓϩμΫτ͕ؔ৺ͷର ‣ ֎෦࿈ܞಛผͳͱ͜Ζ͚ͩɻ ੲ3BJMT͕ग़࢝Ίͨࠒ
‣ 8FCͷαʔϏεͭͰ݁͢Δ͜ͱ ΄΅ͳ͍ɻ ‣ ʮαʔϏεͭʯͰɺଟ͘ͷཁૉٕज़͕ඞཁ ‣ ֎෦࿈ܞ͢Δͷ͕ৗɻ ࠓ
֎෦࿈ܞ͢Δͷ͕ৗ
֎෦࿈ܞ͢Δͷ͕ৗ
‣ ཁૉٕज़ͷઐԽ͕ਐΜͰ͍Δɻ ‣ ݸʑͷཁૉٕज़ʹ࠷దʹͳΔΑ͏ γεςϜׂ͕͞ΕΔɻ ‣ ͦΕͧΕͷz֎෦zʹͦΕͧΕͷతɾ ࢥ͕͋Δɻ
֎෦࿈ܞ͢Δͷ͕ৗ
‣ ʮඇಉظͬͯಉظΛߟ͑Δ͜ͱͩΑͶʯ ‣ !N@TFLJ͞Μ͕ݴͬͯͨؾ͕͢Δ ཁग़య ‣ׂ͞ΕͨࣄΛ߹ྲྀͤ͞Δɻ ‣߹ྲྀͤ͞ΔͱॳΊͯϢʔβʔʹಧ͘ɻ ʮׂͬͯ߹ྲྀ͢Δ͜ͱͩΑͶʯ
‣ ߦಈੳͯ͠.-ͰϦίϝϯυ͢Δ༰݁ՌΛ εϚϗΞϓϦʹͨ͠Γɻ ‣ छྨͷ.JDSPTFSWJDFTΤϯυϙΠϯτ͔Βͱ͖ͬͯ ͨσʔλΛ3FBDUΞϓϦʹΘͨͨ͠Γɻ ߹ྲྀͤ͞ΔͱॳΊͯϢʔβʔʹಧ͘
‣ αʔϏεͷӡӦελοϑ͕ɺͦΕͧΕͷઐࣝΛ ͱʹίϯςϯπΛՃߋ৽৹ࠪͨ͠Γɻ ιϑτΣΞ࣮͚ͩͰͳ͍
‣ ͍ΖΜͳઐՈՌ͕8FCٕज़Λ௨͍ͬͯ͘ɻ ‣ +40/PWFS)551ͱ͔ ‣ 41"ͱ͔ɺTJOHMFQBHF͡Όͳͯ͘+4 )5.-ͱ͔ ‣ ཧը໘ͱ͔ ‣
ͦͯ͠Ϣʔβʔʹಧ͘ɻ ߹ྲྀͷͱͯ͠ͷ8FCΞϓϦέʔγϣϯ
‣ 3BJMTੲͱࠓ ‣ ࠷৽ͷٕज़Ͱͳ͘ͳ͖ͬͯͨ ‣ ֎෦ͷ͍ΖΜͳͷͱ࿈ܞ͢Δඞཁ͕ग़͖ͯͨ ‣ ϢʔβʔʹՁΛಧ͚Δ͍ͬͯ͏͚Ͳ ‣
શମΛ͍͍ײ͡ʹ͢Δ ‣ ݁
3BJMTΞϓϦʹٻΊΒΕΔ͜ͱ ੲͱࠓ
‣ ୯ҰͷγεςϜͱͯ͠ɺσʔλͷ ग़͠ೖΕΛ্खʹߦ͏ɻ ‣ σʔλΛ͖Ε͍ʹೖΕΔɺೖΕ͘͢͢Δɻ ‣ շదͳҰށݐͯΛ࡞Δɻ ੲ
‣ ͞·͟·ͳਓ͕ͨͪ࣋ͪدΔՁΛ ߹ྲྀͤ͞ΔॴͱͳΔɻ ‣ ͍Ζ͍Ζͳਓͷॅ·͏֗ͷ׆ಈΛ͍͍ײ͡ʹ͢Δɻ ‣ ϩϘοτ͕࡞ͬͨΛϨʔϧͰӡΜͰίϯςφʹೖΕͯTIJQJUʙ̇ ࠓ
ྫ TFDSFRͷ͕͔͔࣌ؒΔ ϨίϝϯυΤϯυϙΠϯτΛ ܧଓͯ͠վળ͢Δࢪࡦ
‣ TFD͔͔Δͱ8FCಉظແཧ ‣ ඇಉظBOEPSΩϟογϡ ‣ ඇಉظͰऔΔͱ͖ͷ"1*Ͳ͏͢Δ ‣ Ωϟογϡ͢Δͱͯ͠ɺΩʔͱύʔδλΠϛϯάͷઃܭʜ
‣ Ϩίϝϯυ͢ΔࠜڌσʔλͷΘͨ͠ํ ‣ ‣ ྔ ‣ ϓϥΠόγʔ ‣ ޮՌΛͲ͏ͬͯଌఆ͠Α͏ ‣ ϩάऔಘͷΈɺ͍·͋ΔൣғͰΓΔ ‣ Ͳ͏͍͏ϩάΛͲ͏͍͏ޮՌͱΈͳ͍͍ͤ TFDSFRͷ͕͔͔࣌ؒΔϨίϝϯυΤϯυϙΠϯτΛܧଓͯ͠վળ͢Δࢪࡦ
‣ ୭͕Ͳ͏ੳ͢Δ ‣ ԿΛͬͯޮՌ͕͋ͬͨͱஅͰ͖Δ ‣ վળͷͨΊͷ৽ΞϧΰϦζϜΛͲ͏ͬͯػೳՃ͠Α͏ ‣ ύϥϝʔλมߋ͚ͩͰ͍͚Δ
‣ ͍͚ͳ͍ͱͯ͠ɺ͍ͭมߋͰ͖Δ ‣ ൺֱͷͨΊʹฒߦӡ༻͢ΔΈ ‣ ϨίϝϯυΤϯδϯ͕٧·ͬͨΓམͪͨΓͨ͠ΒͲ͏͠Α͏ ‣ ٕज़తʹΓͨ͠Γ ‣ ࠔͬͨϢʔβʔ͞ΜʹँͬͨΓॿ͚ͨΓ TFDSFRͷ͕͔͔࣌ؒΔϨίϝϯυΤϯυϙΠϯτΛܧଓͯ͠վળ͢Δࢪࡦ
‣ Ϛδ ‣ ҰݸҰݸ͕ɺٕज़తʹͪΐ͏εΰΠͱݶΒͳ͍ɻ ‣ ݸผʹʮ;ͭ͏ʯͷ͜ͱͷ΄͏͕ଟ͍ ‣ ͦΕͧΕͷͷઐՈͱͯ͠ɺͬͱεΰΠಉ྅ νʔϜϝϯόʔ͕͍ͨΓ͠·ͤΜ
ͥΜͿҰਓͰϚελʔ͢Δ
‣ ΞϓϦج൫ ‣ Πϯϑϥ43& ‣ "*ݚڀ։ൃ ‣ اըϚʔέλʔ ‣ Ϣʔβʔαϙʔτ
৭Μͳ৬ೳͷਓ͕͍ͨͪΔ
‣ଟ͘ͷ߹ɺ8FCΞϓϦͷίϛοτΛ͏ɻ ‣ҰݸҰݸͷػೳՃͦ͜·Ͱ͘͠ͳ͍ɻ ‣ͰͦΕΛܧଓతʹ͍͍ײ͡ʹ͢Δͷ͍͠ɻ ‣৭Μͳਓͷࢥ͕͋ΔͷͰɻ ࣋ͪدͬͨՌΛEFMJWFS͢Δ
‣ ͍͍ײ͡ʹ߹ྲྀ͢ΔʹͳΔɻ ‣ ૬ޓʹΑ͍ίϛϡχέʔγϣϯΛઃܭͯ͠ ‣ ՌΛྲྀ௨ͤ͞ΔΠϯλʔϑΣʔεΛఏڙ͢Δ ‣͍͠ɻ ‣͚ͲɺϢʔβʔʹՁΛಧ͚ΔͨΊʹඞཁͳ͜ͱɻ z8FCΞϓϦΛ࡞Δ৬ೳzΛ࣋ͭਓ͕ͨͪͰ͖Δͱ͍͍͜ͱ
‣ ͍͍ײ͡ʹ߹ྲྀ͢ΔʹͳΔɻ ‣ ૬ޓʹΑ͍ίϛϡχέʔγϣϯΛઃܭͯ͠ ‣ ՌΛྲྀ௨ͤ͞ΔΠϯλʔϑΣʔεΛఏڙ͢Δ ‣͍͠ɻ ‣͚ͲɺϢʔβʔʹՁΛಧ͚ΔͨΊʹඞཁͳ͜ͱɻ z8FCΞϓϦΛ࡞Δ৬ೳzΛ࣋ͭਓ͕ͨͪͰ͖Δͱ͍͍͜ͱ
‣ 3BJMTੲͱࠓ ‣ ࠷৽ͷٕज़Ͱͳ͘ͳ͖ͬͯͨ ‣ ֎෦ͷ͍ΖΜͳͷͱ࿈ܞ͢Δඞཁ͕ग़͖ͯͨ ‣ ৭Μͳ৬ೳͷਓ͕ͨͪग़ձ͏ʹͳ͖͍ͬͯͯΔ ‣ ϢʔβʔʹՁΛಧ͚Δ͍ͬͯ͏͚Ͳ
‣ શମΛ͍͍ײ͡ʹ͢Δ ‣ ݁
Ϣʔβʔʹ ՁΛಧ͚Δ ͍ͬͯ͏͚Ͳ
‣ ओޠ ‣ ࢲ͕ ‣ ࢲͨͪΤϯδχΞ͕ ‣ ࢲͨͪͷ\αʔϏε ࣄۀ
ձࣾ^શମ͕ ϢʔβʔʹՁΛಧ͚Δ͍ͬͯ͏͚Ͳ
‣ Ϣʔβʔͱ ‣ Πϯλʔωοτͷ͜͏ʹ͍ΔɺαʔϏεར༻ऀ ‣ ར༻ऀͷ͜ͱΛҰॹʹߟ͑Δɺ৫ͷؒ ‣ ͦ͏͍͏৫ͷ͕ؒ͏ιϑτΣΞϓϩμΫτ Λ࡞Δɺ։ൃνʔϜͷϝϯόʔ
ϢʔβʔʹՁΛಧ͚Δ͍ͬͯ͏͚Ͳ
‣ ʮࢲʯଞͷ৬ೳͷਓʹՁΛఏڙͯ͠ɻ ‣ ʮࢲͨͪʯΈΜͳ͕ͦΕͧΕͷ৬ೳΛੜ͔ͯ͠ ੈͷதΛ͍͖͍͖͍ͤͨ͞ɻ ഉଞͰͳ͘ϑϥΫλϧߏ
‣ ͍·ͷ8FCͷαʔόଆͬͯΑཱ͍ͪҐஔ ͩͱࢥ͏ɻ ‣ ৫֎ͷʰ͍ΖΜͳਓ͕ॅ·͏֗ʱ ͱͯ͠ͷιϑτΣΞશମΛ͍͍ײ͡ʹ͢Δɻ ‣ ʮΤίγεςϜʯͷγεςϜ શମΛ͍͍ײ͡ʹ͢Δ
‣ גࣜձࣾΤεɾΤϜɾΤεੵۃ࠾༻த ‣ 3BJMTੲͱࠓ ‣ ϢʔβʔʹՁΛಧ͚Δ͍ͬͯ͏͚Ͳ ‣ ʮࢲͨͪʯͱʮϢʔβʔʯͷϑϥΫλϧߏɻ11͡Όͳ͍Αɻ ‣ શମΛ͍͍ײ͡ʹ͢Δ
‣ ݁
શମΛ ͍͍ײ͡ʹ͢Δ
ιϑτΣΞʹॅ·͏ਓͨͪʹ͖߹͏
‣ ҰॹʹՁΛఏڙ͢ΔɺʮӡӦ͕ಘҙͳਓͨͪʯ͕ ;ͩΜॅ·͏ͱ͜Ζɻ ‣ ςʔϒ ϧΛ$36%͢Δ͚ͩͩͱΓͳ͍͜ͱ͕ଟ͍Αɻ ͨͱ͑ཧը໘
‣ ॅ·͏ਓͨͪͷϚΠϯυηοτΛଚॏͯ͠ɺ ιϑτΣΞʹ͠Α͏ɻ ‣ ϢϏΩλεݴޠɺυϝΠϯΤΩεύʔτɺ%$*ʜ ‣ Ϟδϡʔϧׂͷ͚ͩ͡Όͳ͍ ձ͠Α͏
‣ ੍ޚͷํͷܾఆݖΛɺॅ·͏ਓࣗʹҕͶΔɻ ‣ ίʔυϕʔεʹॅ·͏զʑɺίʔυϕʔεͷ͋ΓํΛ ৄ͘͠ͳ͍ਓʹܾΊΒΕͨ͘ͳ͍Ͱ͢ΑͶ ‣ ҙͯ͠ҭ͍ͯͯ͘ͱɺ݁Ռͱͯ͠Ͱ͖Δ ͜ͱ͋Δ
‣ 3BJMTϛϥΫϧ lϑϨʔϜϫʔΫzΛ࡞Βͳ͍
‣ ίʔυʹॅ·͏ࢲͨͪϓϩάϥϚʹ ‣ Α͍ΠϯλʔϑΣʔεͱίϛϡχέʔγϣϯͷ Λఏڙͯ͘͠Εɺ ‣ ιϑτΣΞͷ͍खʹՁΛಧ͚ΔͷΛ खॿ͚ͯ͘͠ΕΔɻ 3VCZ3BJMT
‣ ιϑτΣΞͷ͍खʹͱ͍͍ͬͯײ͡ʹɻ ‣ ʮ3BJMT͕ʰಈ͍ͯ΄͍͠Α͏ʹʱಈ͔ͳ͔ͬͨ ΒͦΕόάʯ ‣ Έ͍ͨͳ͜ͱΛ!ZVHVJ͞Μݴͬͯͨؾ͕ ཁग़య 3VCZ3BJMTͷΑ͏ʹৼΔ͏
ͱɺ͍͏ͷΛ Ұൠͱͯ͠ɺ ෆཁͱࢥ͏ਓ͋·Γ͍ͳ͍
‣ αʔϏε։ൃࢤΤϯδχΞ ‣ ʮࢲͷαʔϏεʯͰϢʔβʔʹՁΛఏڙ͍ͨ͠ ‣ ٕज़ࢤΤϯδχΞ ‣ ͜ͷ͍͢͝৽ٕज़Λద༻͍ͨ͠ ‣ ͦΕͧΕͷࢤͷͻͱ͕ʮશମʯʹͱͬͯେࣄ
ͳͷؒҧ͍ͳͯ͘ɻ ‣ ྑ͘͠·͠ΐ͏ ΩϟϦΞύεͱͯ͠ҙࣝ͢Δͷ͕͍͠
‣ ΈΜͳͷࣄΛ߹ྲྀͤ͞Δ͜ͱʹ ؔ৺Λ࣋ͭࢤੑʹɺ໊લ͕͋ΔͱΑ͍ɻ ‣ ͍͍ͷࢥ͍͍ͭͨΒڭ͍͑ͯͩ͘͞ ‣ ఆʮશମΛ͍͍ײ͡ʹ͢Δʯ ʲ؇ืʳ͜ͷࢤΛද͢Α໊͍લ
‣ 3BJMTੲͱࠓ ‣ ϢʔβʔʹՁΛಧ͚Δ͍ͬͯ͏͚Ͳ ‣ શମΛ͍͍ײ͡ʹ͢Δ ‣ ʮΈΜͳͷࣄΛ߹ྲྀͤ͞Δ͜ͱʯʹڵຯΛ࣋ͭɺͱ͍͏ ΩϟϦΞͷํੑΛ͝ఏҊͨ͠ɻ ‣
݁
݁
શମ͕͍͍ײ͡ʹͳΔͨΊʹɺ ࢲͨͪ3BJMTΛϗʔϜʹ͢Δ 8FCٕज़ऀ͕Ͱ͖Δ͜ͱ
"શମ͕͍͍ײ͡ʹ ͳΔ͜ͱʹڵຯΛ࣋ͪɺ ͦ͏͠Α͏ͱ͢Δ
‣ ͞·͟·ͳਓͨͪͷίϛϡχέʔγϣϯͷͱͳΔ͜ͱɺ ݩؾ͚ͮΔ͜ͱɻ ‣ ָͬͯ͘͠ͳΔΠϯλʔϑΣʔεΛ࡞Δ͜ͱɻ ‣ ͲΜͲΜࣄͨ͘͠ͳΔ6* ‣ ͲΜͲΜୟ͖ͨ͘ͳΔ"1* ‣
ࢲͨͪશһͰఏڙ͢ΔՁͷ૯Λେ͖͘͢Δ ͨΊʹٕज़Λ͏͜ͱɻ
‣ ͱ͍͏ࢤʹ֮ࣗతʹͳΓͳ͕Βɺ ͍ΖΜͳઐՈͱͷʑͷࣄΛָ͠Ή͜ͱɻ