$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Exceptional Rails
Search
Shinichi Maeshima
October 27, 2023
6
7.9k
Exceptional Rails
kaigi on rails 2023での発表内容です
https://kaigionrails.org/2023/talks/willnet/
Shinichi Maeshima
October 27, 2023
Tweet
Share
More Decks by Shinichi Maeshima
See All by Shinichi Maeshima
メタプログラミングRuby問題集の活用
willnet
2
1.1k
rails g authenticationから学ぶRails8.0時代の認証
willnet
5
4k
What's a well-behaved Rails extension gem?
willnet
0
670
Sidekiq vs Solid Queue
willnet
14
13k
どうしてこうなった?から理解するActive Recordの関連の裏側
willnet
6
1.6k
Breaking the Flaky Test Cycle
willnet
2
2.3k
mrskで広がるインフラの選択肢
willnet
1
1.1k
アプリケーションを長期にわたって無理なく運用するためのたったひとつの方法
willnet
2
2.2k
HotwireからDHHが考えるこれからのRailsとJSの付き合い方を知る
willnet
14
14k
Featured
See All Featured
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
Optimizing for Happiness
mojombo
379
70k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
69k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.3k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.4k
Designing for Performance
lara
610
69k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.8k
The Cult of Friendly URLs
andyhume
79
6.7k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.8k
Transcript
!XJMMOFU &YDFQUJPOBM3BJMT
Shinichi Maeshima @netwillnet @willnet https://blog.willnet.in Willnet Inc.
ٕज़ސۀΛ͍ͯ͠·͢
͓ࣄ4/4తͳͷΛ։ൃ ͍ͯ͠·͢
&YDFQUJPOBM 3BJMT
None
3BJMTΞϓϦέʔγϣϯʹ͓ ͚Δྫ֎ͱͷ͖߹͍ํʹ ͍ͭͯ͠·͢
3BJMTΞϓϦέʔγϣϯʹ͓ ͚Δྫ֎ͱͷ͖߹͍ํʹ ͍ͭͯ͠·͢
lྫ֎ͱɺ௨ྫͷݪଇʹ͋ͯ ·͍ͬͯͳ͍͜ͱɻҰൠͷ ݪଇͷద༻Λड͚ͳ͍͜ͱɻz IUUQTKBXJLJQFEJBPSHXJLJ&#&#&"
3VCZ3BJMTͷจ຺ͰSBJTF
3BJMTΞϓϦέʔγϣϯʹ͓ ͚Δྫ֎ͱͷ͖߹͍ํʹ ͍ͭͯ͠·͢
ྫ֎ͱͷ͖߹͍ํɺͱ w ͍ͭྫ֎Λൃੜͤ͞Δ͔ w ൃੜͨ͠ྫ֎Λ͍ͭͲͷΑ͏ʹSFTDVF͢Δͷ͔ w ௨͕ඞཁͳྫ֎ΛͲͷΑ͏ʹ։ൃऀʹ௨͢Δ͔ w ΤϥʔϖʔδΛϢʔβʹͲ͏දࣔ͢Δͷ͔
3BJMTΞϓϦέʔγϣϯͰ ͍ͭྫ֎Λൃੜͤ͞Δ͔
ʮඞཁ͕͋Δͱ͖͚ͩ ྫ֎Λൃੜͤ͞Δʯ
ݴ͍͑Δͱ ʮྫ֎Λൃੜͤ͞ͳͯ͘ ͳ͍ͱ͖ൃੜͤ͞ͳ͍ʯ
ͳͥʁ
ྫ֎ϑϩʔ͕͔ΓͮΒ͘ͳΔ
None
None
SBJTFʹΑΔϑϩʔͷΘ͔ΓͮΒ͞ w SBJTFରԠ͢ΔCFHJOʜSFTDVF·ͰભҠ͢ΔͷͰҰݟ͚ͨͩ͠ͰͲ͜ʹભ Ҡ͢Δ͔Θ͔Βͳ͍ࣄ͕͋Δ w CFHJOʜSFTDVF͕ผϝιουʹॻ͔Ε͍ͯͨΒͳ͓͞Β͔ΓͮΒ͍ w SFTDVFͰิ͢ΔΤϥʔ༰ʹΑͬͯɺྫ֎ൃੜݩ͕ෳ͋Δ͔ʁ w Ͳ͏͍͏ભҠΛͨͲΔ͔͔ΓͮΒ͍
ྫ֎͍
None
None
ഒҎ্͍
ʮඞཁ͕͋Δͱ͖͚ͩ ྫ֎Λൃੜͤ͞Δʯ
ඞཁ͕͋Δͱ͖ͱʁ
ݪଇͱͯ͠ҟৗܥ
ਖ਼ৗܥɺ४ਖ਼ৗܥɺҟৗܥ
͜ͷݴ༿ͷఆٛ͋͘·Ͱ ͜ͷൃදʹ͓͍ͯ͜ͷΑ͏ʹఆ ٛ͠·͢ɺͱ͍͏ͷͰ͢
ਖ਼ৗܥͷྫ ϩάΠϯϑΥʔϜʹਖ਼͍͠ϝʔ ϧΞυϨεͱύεϫʔυΛೖྗ ͯ͠ϩάΠϯͰ͖ͨ
४ਖ਼ৗܥͷྫ ϩάΠϯϑΥʔϜʹؒҧͬͨϝʔϧ ΞυϨεͱύεϫʔυΛೖྗͯ͠ ʮϝʔϧΞυϨε·ͨύεϫʔυ ͕ؒҧ͍͑ͯ·͢ʯͱදࣔ͞Εͨ
ҟৗܥͷྫ %#αʔόͷଓʹ ࣦഊͨ͠
ҟৗܥͰྫ֎Λൃੜͤ͞Δ࣮ྫ
དྷΔͣͷͳ͍ذʹདྷͯ͠· ͬͨ
None
Ϣʔβೖྗʹґଘ͠ͳ͍ Ϟσϧมߋͷࣦഊ
None
None
Ϣʔβೖྗແ͠Ͱআ͢ΔͷͰ͋Ε جຊޭ͢Δͣ
ͳΜΒ͔ͷཁҼͰআʹࣦഊͨ͠ͱ͖ʹ ྫ֎Λൃੜͤͯ͞ؾ͚ΔΑ͏ʹ͓ͯ͘͠
Λ͚ͭΕΔͱʜʁ
আʹࣦഊͨ͠ͱ͖Ϣʔβʹzআ͠ ·ͨ͠zͱදࣔ͞Εͯ͠·͏
ϢʔβೖྗΛΘͣ %#Λߋ৽͢Δͱ͖zzΛ ͚ͭͯؾ͚ΔΑ͏ʹ͢Δ
ݪଇͱͯ͠ҟৗܥ
ݪଇʹର͢Δྫ֎
४ਖ਼ৗܥͰྫ֎Λൃੜͤ͞Δ ेͳϝϦοτ͕͋Ε👌
ྫ"DUJWF3FDPSE3FDPSE/PU'PVOE
ྫ֎Λආ͚Δͱ͜͏ͳΔ
શ෦ͷͰ͜ΕΛΔͷ͍ͨΜ
ྫ֎Λ্͛ͯҐͷϨΠϠʹ ॲཧΛͤΔͱָ
ྫ֎Λ͍ͭͲͷΑ͏ʹSFTDVF͢Δ͔
ྫ֎Λ͍ͭͲͷΑ͏ʹSFTDVF͢Δ͔
͖ͬͨ͞͠ʮྫ֎Λൃੜͤ͞Δʯ έʔεҎ֎ͳΔ͘ૣ͘SFTDVF ͢Δ
ૣ͘SFTDVFͨ͠΄͏͕ϑϩʔ͕ Θ͔Γ͍͢
ྫ
None
None
ྫ֎Λ͍ͭͲͷΑ͏ʹSFTDVF͢Δ͔
ͳΔ͘۩ମతʹྫ֎Λࢦఆ͢Δ
None
UZQP͍ͯ͠Δͷʹؾ͚ͳ͍
ఆ͍ͯ͠ͳ͍ྫ֎Λิͯ͠͠·͏ ͱෆ۩߹ʹؾ͘ͷ͕ΕΔ
None
ͳΔ͘CFHJOʜSFTDVFΛڱ͘͢Δ
None
9QPTUʹࣦഊͨ͠ΒGBMTFΛฦ͍ͨ͠
None
VQEBUF͕ྫ֎Λग़ͨ͠Β9QPTU͕ ޭ͍ͯ͠ΔͷʹGBMTF͕ฦͬͯ͠·͏
ఆ͍ͯ͠ͳ͍ྫ֎Λิͯ͠͠·͏ ͱෆ۩߹ʹؾ͘ͷ͕ΕΔ
None
VQEBUF͕ྫ֎Λൃੜͤͨ͞Β ͙͢ؾ͚Δ
։ൃऀʹର͢Δ௨Λ Ͳ͏͢Δ͔
VQEBUF͕ྫ֎Λग़ͯ͠ ϢʔβʹΤϥʔը໘ݟͤͨ͘ͳ͍ͱͨ͠Βʁ
None
ϩάʹॻ͖ग़͚ͩͩ͢ͱ ຒΕͯ͠·͍·͢Ͷ
ΤϥʔτϥοΩϯάαʔϏε w 4FOUSZ w 3PMMCBS w )POFZ#BEHFS w "JSCSBLF w
3BZHVO w FUD
ϢʔβʹΤϥʔΛݟͤͣʹ ։ൃऀʹ௨͢Δ
3BJMTҎ߱͜͏ॻ͚Δ
ϒϩοΫͰࢦఆͨ͠ྫ֎্͕͕ͬͨ Βɺࣄલʹొ͓͍ͯͨ͠ॲཧΛߦ͏
ʮ4FOUSZʹྫ֎ใΛૹΔʯ Λࣄલొ͢Δઃఆ
࣮ࡍʹઃఆ͞ΕΔίʔυ
IBOEMFͷͱ͖ྫ֎ΛѲΓͭͿ͢
SFDPSEͷͱ͖࠶SBJTF͢Δ
ࡉ͔͍༷3BJMTΨΠυΛݟͯͶ
͜͜௨͢Δඞཁ͕͋Δʁͳ͍ʁ
ઈରͷਖ਼ղͳ͍͚Ͳ ҰൠతʹͲ͏அ͢ΔͱΑͦ͞͏ʁ
։ൃऀʹྫ֎Λ௨͢Δஅج४ w Ͳ͏͍͏ঢ়گͰΤϥʔ͕ى͖Δ͔Λߟ͑Δ w ྫ9ͷαʔό͕ෆௐˠෆௐΛͪ͜ΒଆͰղফ͢Δ͜ͱͰ͖ͳ͍ w ྫ"1*ΩʔΛؒҧ͍͑ͯͯΤϥʔˠΩʔΛઃఆͤ͠ղফ͢Δ w ରԠͰ͖ͳ͍Τϥʔʹ͍ͭͯ௨͕དྷͯϊΠζʹͳΔͷͰආ͚Δ w
ྫ͑4FOUSZʹXBSOJOHɺEFCVHͳͲͷϨϕϧ͕ઃఆͰ͖ͯ௨ৗͷྫ֎ͱ۠ ผ͢Δ͜ͱ͕Ͱ͖Δ w ࠓճͷྫͰXBSOJOHʹઃఆ͞Εͨྫ֎͕ظؒʹͨ͘͞Μൃੜ͢ΔΑ͏ͳΒ ௨͢ΔɺΑ͏ͳΓํ͕ྑͦ͞͏ʁ ଞͷղ͋Γͦ͏
None
͋Θ࣮ͤͯࢪ͍ͨ͠ɿෆཁͳΤ ϥʔΛ௨͠ͳ͍Α͏ʹௐ͢ Δɺ௨͞ΕͨͷΛτϦΞʔ δͯ͠ॗʑͱରԠͰ͖Δମ੍ͮ ͘Γ
ΤϥʔϖʔδΛ Ͳ͏ͬͯදࣔ͢Δ͔
None
͜ΕͰෆશ
͠SBDLͰ ྫ֎͕ى͖ͨΒʁ
None
3BJMTσϑΥϧτͰ ΤϥʔϖʔδΛදࣔ͢Δ 3BDLϛυϧΣΞΛ༻ҙ͠ ͍ͯΔ
ϖʔδΛදࣔ͢Δ Α͏ͳ൚༻తͳରԠ3BDL ϛυϧΣΞʹͤΔͱ%3:
SFTDVF@GSPN ಛผͳέʔεͰͷΈ͏
ΤϥʔϖʔδΛදࣔ͢Δ 3BDLϛυϧΣΞͬͯͲ͏ ಈ͍͍ͯΔʁ
3"*-4@&/7QSPEVDUJPO SBJMTNJEEMFXBSF
3BDLͰྫ֎Λิͨ͠ΒͲ͏ͳΔʁ w DPO fi HBDUJPO@EJTQBUDITIPX@FYDFQUJPOTͰΤϥʔϖʔδΛදࣔ͢Δ͔൱ ͔͕ܾ·Δ w ςετڥҎ֎σϑΥϧτʮදࣔ͢Δʯʹͳ͍ͬͯΔ w
ςετڥͰɺ3BJMT·Ͱ୯ʹʮදࣔ͠ͳ͍ʯ͕σϑΥϧτͩͬͨ ͕ɺ3BJMT͔Β ʮ"DUJPO%JTQBUDI&YDFQUJPO8SBQQFSSFTDVF@SFTQPOTFTʹଘࡏ͢Δྫ ֎ΫϥεͰ͋Εදࣔ͢Δʯͱ͍͏ઃఆʹͳ͍ͬͯΔ w Τϥʔϖʔδ͕දࣔ͞ΕΔ͜ͱΛςετ͍ͨ͠ϢʔεέʔεʹରԠ͍ͯ͠ Δ
3BDLͰྫ֎Λิͨ͠ΒͲ͏ͳΔʁ w DPO fi HDPOTJEFS@BMM@SFRVFTUT@MPDBMͰσόοά༻ͷΤϥʔϖʔδ͔ຊ൪༻ͷ Τϥʔϖʔδ͔͕ܾ·Δ w ຊ൪༻ͷΤϥʔϖʔδDPO fi
HFYDFQUJPOT@BQQʹઃఆ͞Εͨ3BDLΞϓϦέ ʔγϣϯΛDBMMͨ݁͠Ռ͕දࣔ͞ΕΔ w σϑΥϧτ"DUJPO%JTQBUDI1VCMJD&YDFQUJPOTΠϯελϯε͕ઃఆ͞ Ε͍ͯΔ
3BDLͰྫ֎Λิͨ͠ΒͲ͏ͳΔʁ w "DUJPO%JTQBUDI1VCMJD&YDFQUJPOT "DUJPO%JTQBUDI&YDFQUJPO8SBQQFSSFTDVF@SFTQPOTFTΛݟͯɺྫ֎Ϋϥεʹ ରԠ͢ΔϨεϙϯεεςʔλεΛಘΔ w ରԠ͕ͳ͍ྫ֎ JOUFSOBM@TFSWFS@FSSPS ѻ͍
w ϦΫΤετϑΥʔϚοτ͕IUNMͩͬͨΒɺQVCMJD\εςʔλε^IUNMΛදࣔ͢Δ w ରԠ͢ΔϑΝΠϧ͕ͳ͚Εۭ w ϦΫΤετϑΥʔϚοτ͕KTPOͩͬͨΒA\TUBUVT FSSPS#BE3FRVFTU^A ͷΑ͏ͳ+40/Λฦ͢
ಠࣗͷྫ֎ΫϥεΛରԠ͍ͤͨ͞ͱ͖͜͏ॻ͘
ಈతͳΤϥʔϖʔδΛදࣔ ͔ͨͬͨ͠ΒͲ͏͢Δʁ
DPOGJHFYDFQUJPOT@BQQΛಠࣗͷ 3BDLΞϓϦέʔγϣϯʹ͢Δ͜ͱ ͰಈతͳΤϥʔϖʔδΛ࡞Δ͜ͱ Ͱ͖Δ
ݸਓతʹσϑΥϧτͳ ΈΛͬͯ੩తͳϖʔδ Λදࣔͤ͞Δͷ͕͓͢͢Ί
ಈతͳΤϥʔϖʔδͷσϝϦοτ w ։ൃ࣌ʹຊ൪ͷΤϥʔϖʔδΛݟΔ͜ͱ͕΄΅ͳ͍ w ը໘่͕Ε͍ͯͯؾ͖ͮΒ͍ w ΤϥʔϖʔδΛදࣔ͢ΔϩδοΫʹόά͕͋ͬͯؾ͖ͮΒ͍ w ΤϥʔϖʔδΛදࣔ͢ΔλΠϛϯάͰΤϥʔʹͳΓɺਖ਼͘͠Τϥʔϖʔδ ΛදࣔͰ͖ͳ͍
Ͳ͏ͯ͠ಈతͳΤϥʔ ϖʔδ͕ඞཁͳΒ SBNCVMBODFΛ͏
SBNCVMBODFͷओͳػೳͱϝϦοτ w ϏϡʔςϯϓϨʔτΛར༻ͯ͠ಈతʹΤϥʔϖʔδΛ࡞Ͱ͖Δ w ʮΤϥʔϖʔδΛಈతʹදࣔ͢ΔʯΛࣗ࡞͢ΔͱϋϚΔϙΠϯτΛճආͰ͖ Δ w ΤϥʔϖʔδΛදࣔ͢Δ෦ͷ୯ମςετ͕؆୯ʹॻ͚Δ w ։ൃڥͰΤϥʔϖʔδΛ֬ೝ͢Δ͜ͱ͕Ͱ͖Δ
w FYIUUQMPDBMIPTUSBNCVMBODFOPU@GPVOE
ͱ͍͑·ͩߟ͑Δ͜ͱ͋Δ w ʮ%#ͱଓͰ͖ͳ͍ʯͳͲͷக໋తͳέʔεʹͲ͏ରԠ͢Δ͔ w ද่ࣔΕΛආ͚Δํ๏ w ϏδϡΞϧϦάϨογϣϯςετ
·ͱΊ w 3BJMTΞϓϦέʔγϣϯͰ͍ͭྫ֎Λൃੜͤ͞Δ͔ w ൃੜͨ͠ྫ֎ΛͲͷΑ͏ʹѻ͏͔ w ։ൃऀʹ௨͢Δํ๏ w ΤϥʔϖʔδΛදࣔ͢Δํ๏ w
ͳͲͳͲɺͦΕͧΕ۩ମྫΛަ͑ͯઆ໌͠·ͨ͠ w ࣭ͳͲ͋ͬͨΒ͜ͷ͋ͱXJMMOFUΛั·͑Δ͔ w EJTDPVSTFDMFBOSBJMTPSHʹτϐοΫΛ࡞͍ͬͯΔͷͰίϝϯτ͍ͩ͘͞
IUUQTEJTDPVSTFDMFBOSBJMTPSHUUPQJD