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
Exceptional Rails
Search
Shinichi Maeshima
October 27, 2023
6
7.7k
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
rails g authenticationから学ぶRails8.0時代の認証
willnet
5
2.5k
What's a well-behaved Rails extension gem?
willnet
0
290
Sidekiq vs Solid Queue
willnet
14
12k
どうしてこうなった?から理解するActive Recordの関連の裏側
willnet
6
1.5k
Breaking the Flaky Test Cycle
willnet
2
2.2k
mrskで広がるインフラの選択肢
willnet
1
1.1k
アプリケーションを長期にわたって無理なく運用するためのたったひとつの方法
willnet
2
2.2k
HotwireからDHHが考えるこれからのRailsとJSの付き合い方を知る
willnet
14
14k
Rails6.1で新しく入る機能について
willnet
12
16k
Featured
See All Featured
The Power of CSS Pseudo Elements
geoffreycrofte
79
6k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Practical Orchestrator
shlominoach
190
11k
Thoughts on Productivity
jonyablonski
70
4.9k
Balancing Empowerment & Direction
lara
4
670
The Invisible Side of Design
smashingmag
301
51k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
2.6k
The Cult of Friendly URLs
andyhume
79
6.6k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
51k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
The Pragmatic Product Professional
lauravandoore
36
6.9k
Building Applications with DynamoDB
mza
96
6.6k
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