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
高度なUI/UXこそHotwireで作ろう Kaigi on Rails 2025
Search
Naofumi Kagami
September 26, 2025
Programming
12k
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
高度なUI/UXこそHotwireで作ろう Kaigi on Rails 2025
Naofumi Kagami
September 26, 2025
More Decks by Naofumi Kagami
See All by Naofumi Kagami
RailsTokyo 2026#4: AI様があれば、 Hotwireの弱点は消えるか?
naofumi
5
1.1k
Other Decks in Programming
See All in Programming
為什麼你並不需要ViewModel / No, you don't need a ViewModel
lovee
1
480
琵琶湖の水は止められてもNet--HTTPのリトライは止められない / You might be able to stop the water flow of Lake Biwa but you can't stop Net::HTTP retries
luccafort
PRO
0
550
AI Engineeringは、AIプロダクトだけのものか? 〜AIがソフトウェアを作る時代の新しい当たり前〜 / No AI in your product. AI Engineering in your development.
rkaga
4
360
Foundation Models frameworkで画像分析
ryodeveloper
1
510
Android CLI
fornewid
0
210
言語を使う側から、作る側へ。 自作 Lisp で得た新たな気づき。
andpad
0
150
ソフトウェア設計に溶けるインフラ ― AWS CDK のインフラ認識論
konokenj
3
750
Embedded SREと共に達成した会員管理システムのAWS移行 - SRE NEXT 2026 ランチスポンサーセッション
niftycorp
PRO
1
3.4k
今さら聞けない .NET CLI
htkym
0
180
Claude Code全社展開のためにやったことn選~プラグイン302個・コミッター271人を支えるために~
kenchan
4
1.3k
Apache Hive: そしてCloud Native Lakehouseへ
okumin
1
200
【やさしく解説 設計編・中級 #1】一つの車に、運転手は一人 ~ある倉庫システムの事例から~
panda728
PRO
0
200
Featured
See All Featured
A Tale of Four Properties
chriscoyier
163
24k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
530
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
240
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Speed Design
sergeychernyshev
33
2k
Six Lessons from altMBA
skipperchong
29
4.4k
Paper Plane (Part 1)
katiecoart
PRO
1
10k
Rails Girls Zürich Keynote
gr2m
96
14k
WCS-LA-2024
lcolladotor
0
790
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.5k
Being A Developer After 40
akosma
91
590k
Transcript
Ճʑඒ࢙!OBPGVNJ ,BJHJPO3BJMT ߴͳ6*69ͦ͜ )PUXJSFͰ࡞Ζ͏
(JUIVCOBPGVNJ ༀاۀͰόΠΦܥݚڀऀ όΠΦؔ࿈ϚʔέςΟϯά ʹόΠΦܥϝσΟΞ 3BJMT Ͱىۀ ΦϨΦϨ41"ϑϨʔϜϫʔΫ ,BNJTIJCBJKT όΠΦؔ࿈ηʔϧε όΠΦༀཧ
͔ΒϑϦʔϥϯε 3BJMT !OBPGVNJ
K2VFSZͰ;FOOͷ τοϓΛऔͬͨΓ ͍ͪૣ͘,BNBMΛਪͨ͠Γ
3FBDUΛ3BJMTʹ౷߹͢Δํ๏Λ HFNʹͨ͠Γ ϑϩϯτΤϯυϦϓϨΠεͷ ϓϩδΣΫτʹ͍ͭͯޠͬͨΓ
ϑϩϯτΤϯυ 3BJMT ΤϯδχΞ )PUXJSFਪ͠ͷ
/FYUKTΞϓϦΛ ,BNBMͰσϓϩΠ "1*SPVUFT্ͷ&+4Ͱ )PUXJSFΛՔಇ /FYUKT3FBDUͱ)PUXJSFͰ ಉ͡6*Λ࡞͠ɺσϞͱղઆ /FYUKTWT)PUXJSF IUUQTIPUXJSFOOFYUDBTUMFDPN
3BJMTΞϓϦΛ ,BNBMͰσϓϩΠ )PUXJSFʹ͍ͭͯࢥͬͨ͜ͱ ίʔυྫͱσϞ ߟ͑ํ )PUXJSFΑ· IUUQTIPUXJSFBOFDEPUBDBTUMFDPN
ͦͦ)PUXJSFͬͯͳʹʁ
ೆేཚΕΔ࣌ ేݱΔ 3FBDU )PUXJSF
None
)PUXJSF 4UJNVMVTΠϕϯτॲཧΛఆܕԽɾ؆ུԽ K2VFSZϕετϓϥΫςΟε ϥΠϑαΠΫϧΈ͍ͨͳײ͡ 5VSCPαʔό௨৴Λ؆ུԽɾ࠷దԽ
3FBDU ͑ͯεςʔτҰຊʹߜΔ 0OFXBZEBUBqPXΛڧ੍ εςʔτ%0.Λ࠷దԽ IUUQTKBSFBDUEFWMFBSOUIJOLJOHJOSFBDU 3FBDUͷྲّྀ
3FBDU ͑ͯεςʔτҰຊʹߜΔ 0OFXBZEBUBqPXΛڧ੍ εςʔτ%0.Λ࠷దԽ IUUQTKBSFBDUEFWMFBSOUIJOLJOHJOSFBDU 3FBDUͷྲّྀ ଞͷબࢶΛࣺͯͨ ͷ͕ಛ
)PUXJSF εςʔτΛ͍͍ͨ࣌ 4UJNVMVTͷWBMVFTUBUF͕ศར εςʔτߋ৽ εςʔτߋ৽ εςʔτߋ৽
IUUQTTUJNVMVTIPUXJSFEEFWSFGFSFODFWBMVFT
)PUXJSFϞʔμϧ +4ͳ͠ɺͦΕͱ͋Γ )PUXJSF5VSCP 4UJNVMVT ແཧʹ+BWB4DSJQUΛলུͤͣɺΉ͠Ζੵۃతʹ+BWB4DSJQUΛ׆༻͢Δ ͬ ͞ Γ ײ
ࠓͷຊ
ʮཧը໘)PUXJSFͰ࡞Γɺ ɹϢʔβը໘3FBDUͰ࡞Ζ͏ʯ ͳ ͥ ʁ Α͘ฉ͘ݴ༿
)PUXJSFߴ։ൃͰ͖Δ͔Β ཧը໘͖ ͰෳࡶͰߴͳ6*693FBDU ͡Όͳ͚Ε࡞Εͳ͍ ຊ ʁ +40/"1*͍ Β ͳ
͍ ͠ ͦ Γ Ό ͦ ͏ ͩ Ͷ
ࠓͷ * )PUXJSF༗໊αΠτͷϢʔβը໘Ͱ༻͞Ε͍ͯΔ ͱ͍͏ࣄ࣮ ** /FYUKTΑΓ)PUXJSFͷํ͕ྑ͍6*69͕࡞Γ͍͢ ͱ͍͏ࣄ࣮ *** )PUXJSFͰෳࡶͳ6*͕࡞ΕΔͱ͍͏ࣄ࣮ ࡞Γํͷίπ
3VCZPO3BJMTͷੜՈ w ΠϯϥΠϯฤूͳͲΛ༻ w ߴͳը໘ભҠ #BTFDBNQ
ແ ྉ ϓ ϥ ϯ ʂ IUUQTCBTFDBN QDPN
IUUQTUFDIMJGFDPPLQBEDPN FOUSZ )PUXJSF
ࠓͷ * )PUXJSF༗໊αΠτͷϢʔβը໘Ͱ༻͞Ε͍ͯΔ ͱ͍͏ࣄ࣮ ** /FYUKTΑΓ)PUXJSFͷํ͕ྑ͍6*69͕࡞Γ͍͢ ͱ͍͏ࣄ࣮ *** )PUXJSFͰෳࡶͳ6*͕࡞ΕΔͱ͍͏ࣄ࣮ ࡞Γํͷίπ
3FBDUͱ&3# K2VFSZͷݟ͚ͬͯͭ͘ʁ ϨΨγʔϑϩϯτΤϯυΛ/FYUKTʹϦϓϨΠε ʮ։ൃੜ࢈ੑͷ্ʯΛײͤͯ͘͡͞Εͨͭͷ͜ͱ IUUQTMPHNJKQNBJOUFDIOPMPHZ ͘ࡏ੶͍ͯ͠ΔਓͰ ʮͬͯ͜͜3FBDUͩͬͨΜͩʯ ʮͬͯ͜͜3BJMTͩͬͨΜͩʯ Έ͍ͨͳձ͕ग़ͯ͘Δ ݟ͚͔ͭͳ͍Β͍͠ʂ
3FBDUͷϖʔδͱ3BJMTͷϖʔδ ͷݟ͚ํ
ҙ⚠ ͔͜͜ΒϑϩϯτΤϯυ༻ޠ͕ ͨ͘͞Μग़͖ͯ·͢
/FYUKTQBHFTSPVUFSͷ443͕ ͬ͞Γ͢ΔͷΑ͋͘Δ՝ )PUXJSF5VSCP%SJWF σϑΥϧτͰରࡦࡁΈ σϑΥϧτͷϩʔσΟϯά6* 483ܕͷΩϟογϡ ϖʔδભҠ IUUQTIPUXJSFOOFYUDBTUMFDPNBQJIPUXJSFVTFST
None
483 4UBMF8IJMF3FWBMJEBUF ܕΩϟογϡ ΩϟογϡͷΛղফ͠ɺ ྑ͍ͱ͜औΓΛͯ͘͠ΕΔ
෦తͳը໘ͷॻ͖͑ 1SFGFUDIޮ͍ͯψϧαΫ 5VSCP'SBNFT λϒϝχϡʔ IUUQTIPUXJSFOOFYUDBTUMFDPNBQJIPUXJSFUBCCFE@TFHNFOUT@UVSCPGSBNFT
/FYUKT1BSBMMFM3PVUFTͰλϒΛ࣮
)PUXJSF5VSCP'SBNFTͰλϒΛ࣮
)PUXJSF5VSCP'SBNFTͰλϒΛ࣮ λϒΛඇಉظͰ ࠩ͠ସ͑ 63-Λಉظͯ͠ ϒοΫϚʔΫՄೳ
සൟʹ͏6*69Ͱ )PUXJSFͷํ͕༏Ε͍ͯΔ
࡞Γࠐ·ͳ͍ݶΓ )PUXJSFͷํ͕6*69͕ྑ͍
ຊʹ6*69ͷͨΊʹ 3FBDUΛ͍ͬͯΔͷʁ
ຊʹ6*69ͷͨΊʹ 3FBDUΛ͍ͬͯΔͷʁ ϑϩϯτΤϯυͷϦϓϨΠεʹɺ͍ͭ·Ͱ͔͚ΔΜͩʁ %9 ࠾༻ͷ͜ͱ͔Γݴͬͯͳ͍ʁ
3BJMTϑϩϯτΤϯυͷ%9ͱݴ͑ .BSDP3PUI͞Μ IUUQTLBJHJPOSBJMTPSHUBMLTNBSDPSPUIEBZ
ࠓͷ * )PUXJSF༗໊αΠτͷϢʔβը໘Ͱ༻͞Ε͍ͯΔ ͱ͍͏ࣄ࣮ ** /FYUKTΑΓ)PUXJSFͷํ͕ྑ͍6*69͕࡞Γ͍͢ ͱ͍͏ࣄ࣮ *** )PUXJSFͰෳࡶͳ6*͕࡞ΕΔͱ͍͏ࣄ࣮ ࡞Γํͷίπ
3FBDUʹ͔͠Ͱ͖ͳ͍ෳࡶͳ6*ͳΒ )PUXJSFʹຒΊࠐΊྑ͍ ͍͟ͱͳͬͨΒ
w DPOOFDU EJTDPOOFDU w AEBUB WBMVFATUBUF w 7BMVF$IBOHFE
DBMMCBDLT ຒΊࠐΈ4UJNVMVTͷΦϋί طଘ%0.ͱ+BWB4DSJQUίϯϙʔωϯτΛ ಉظͤ͞Δͷಘҙதͷಘҙ IUUQTIPUXJSFBOFDEPUBDBTUMFDPNPUIFS@MJCSBSJFTDIBSUKTTUJNVMVT
3FBDUຒΊࠐΈ༻ϥΠϒϥϦΛͬͯྑ͍ IUUQTHJUIVCDPNTLSZVLPWUVSCPNPVOU
%BJDIJ,6%0͞Μ 8FC$PNQPOFOUTͰ࣮ݱ͢Δ)PUXJSFͱ ϑϩϯτΤϯυϑϨʔϜϫʔΫͷڮ͠ IUUQTLBJHJPOSBJMTPSHUBMLTLVEPBTEBZ
Ͱ࣮ࡍɺ)PUXJSF͚ͩͰ ෳࡶͳ6*69શવ࡞ΕΔ
ͦͦෳࡶͳ6*ͱʁ
ʮ)PUXJSFͰ ɹ͜͜·ͰͰ͖ΔΑʂʯ
"3FBDUؔͳ͍͡ΌΜʂ جຊ͡ΌΜͦΕͬʂ
ෳࡶͬΆ͍͚Ͳ؆୯ʹ࡞ΕΔ6* %BUFQJDLFS DPMPSQJDLFS EJBMPH QPQPWFS➜ϒϥβσϑΥϧτ͋Γ υϥοάˍυϩοϓ➜7BOJMMB+4ͷϥΠϒϥϦ͋Γ ϝχϡʔɺυϩοϓμϯɺίϯϘϘοΫεɺπʔϧνοϓͳͲ ➜7BOJMMB+4ͷϥΠϒϥϦ͋Γ όϦσʔγϣϯ➜ϒϥβωΠςΟϒ͋Γ ෳࡶͳ6*Λ୳͢ͷ݁ߏେม
7BOJMMB+4)FBEMFTT6*ϥΠϒϥϦ 5BJMXJOE1MVT&MFNFOUT IUUQTUBJMXJOEDTTDPNCMPHWBOJMMBKTTVQQPSUGPSUBJMXJOEQMVT
7BOJMMB+4ʹΑΔ )FBEMFTT6*ϥΠϒϥϦ ͷ৽ைྲྀ
3FBDU͕ಘҙͱ͢Δෳࡶͳ 6*69ͱԿʁ
IUUQTXXXZPVUVCFDPNXBUDI WQ%R+7E/B
3FBDUϦΞϧλΠϜ μογϡϘʔυ༻ʹ ੜ·Εͨ
(P'.FEJBUPSύλʔϯ 3FBDUTUBUFͱPOFXBZEBUB qPXʹΑΔNFEJBUPSΛڧ੍ +49ʹΑΓɺTUBUF͔ΒྲྀΕΔ એݴత6*Λఏڙ 3FBDUͷڧΈ
IUUQTSFGBDUPSJOHHVSVEFTJHOQBUUFSOTNFEJBUPS # εύήοςΟ (P'.FEJBUPS1BUUFSO 0OFXBZEBUBqPX
3FBDUόʔδϣϯ εςʔτϑϩϯτͰཧ )PUXJSF5VSCPόʔδϣϯ εςʔταʔόͰཧ 4UJNVMVTόʔδϣϯ εςʔτϑϩϯτͰཧ "QQMF4UPSFࣸ IUUQTIPUXJSFBOFDEPUBDBTUMFDPNFYBNQMFTTUPSF
None
εύήοςΟԽ ͍͢͠
3FBDU POFXBZ EBUBqPX
αʔόαΠυ Σϒ.7$ αʔόαΠυ.7$ POFXBZEBUBqPXʹ ͳΔ͔͠ͳ͍ 5VSCPNPSQIJOH༻ 3FBDUͷࠩݕग़ॲཧͬΆ͍
4UJNVMVT POFXBZ EBUBqPX
Πϕϯτϋϯυϥ ࠶ϨϯμϦϯά એݴత6*ߋ৽
None
)PUXJSFͰTUBUF͓Αͼ POFXBZEBUBqPXΛ͏ͱ ෳࡶͳ6*͕࡞Γ͍͢
)PUXJSFͰάϩʔόϧεςʔτཧ ;VTUBOEΛͬͯΈΔ
7BOJMMB+4Ͱ͑Δ άϩʔόϧεςʔτཧ 1VC4VCػೳ ;VTUBOE
IUUQTIPUXJSFBOFDEPUBDBTUMFDPNFYBNQMFTESBXFS
None
;VTUBOEͷTUPSF TMJEF%SBXFS4UPSF
4UJNVMVT$POUSPMMFS 4MJEF%SBXFS$POUSPMMFS
άϩʔόϧεςʔτͰͰ͖Δ͜ͱ ΫϥΠΞϯταΠυ͚ͩͰʮԼॻ͖ʯʮอଘʯػೳ
άϩʔόϧεςʔτͰͰ͖Δ͜ͱ ΫϥΠΞϯταΠυ͚ͩͰϚϧνεςοϓͷϑΥʔϜ
ࠓͷ * )PUXJSF༗໊αΠτͷϢʔβը໘Ͱ༻͞Ε͍ͯΔ ͱ͍͏ࣄ࣮ ** /FYUKTΑΓ)PUXJSFͷํ͕ྑ͍6*69͕࡞Γ͍͢ ͱ͍͏ࣄ࣮ *** গͳ͘ͱ3FBDUఔʹ ෳࡶͳ6*͕࡞ΕΔͱ͍͏ࣄ࣮
࡞Γํͷίπ
)PUXJSFͷ·ͱΊ ༗໊αΠτͷϢʔβ͚ը໘ʹ༻͞Ε͍ͯΔ සൟʹ༻͢Δ6*69Ͱͱͯ༏Ε͍ͯΔ 3FBDUͳΒͰͷෳࡶͳ6*69Λ୳ͯ͠Έ͕ͨʜ )PUXJSF$IBSUKT3FBDUΛ؆୯ʹຒΊࠐΊΔ )PUXJSFͰTUBUFΛҙࣝ͠ɺPOFXBZEBUBqPXΛ͏ͱྑ͍ 4UJNVMVTͷWBMVFTUBUFศརʂ ;VTUBOE͑Δʂ
+40/ جૅࣄ $ ࣮͕͜͜ ݁ߏෳࡶ
ʮཧը໘)PUXJSFͰ࡞Γɺ ɹϢʔβը໘)PUXJSFͰ࡞Ζ͏ʯ