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エンジニアがStimulus + 生JSだけで約半年のプロジェクトを終えた今思うこと
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Masayoshi Tokumoto
February 21, 2019
Technology
340
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
RailsエンジニアがStimulus + 生JSだけで約半年のプロジェクトを終えた今思うこと
Masayoshi Tokumoto
February 21, 2019
More Decks by Masayoshi Tokumoto
See All by Masayoshi Tokumoto
プロダクト・人・チームをいい感じにするためのシステム思考
sasumasa
0
66
RxJS と Netflix から学ぶリアクティブプログラミング
sasumasa
0
51
GraphQL を完全に理解する
sasumasa
0
47
Stimulus × Jest × Direct Upload × Image Fluxで カオスなJS環境と画像アップロード機能を改善しつつユーザーの投稿率を上げた話
sasumasa
1
390
キャパを超えた大型プロジェクトから学んだこと
sasumasa
0
1.5k
IKUSEI on Rails
sasumasa
2
1.9k
文系から半年でRuby(Sinatra, Rails)を学んだら人生変わった@沖縄Ruby会議02
sasumasa
9
19k
Other Decks in Technology
See All in Technology
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
110k
AI時代の開発生産性は、個人技からチーム設計へ
moongift
PRO
4
2.5k
どこまでAIに任せるか 〜確率論と決定論の境界決定〜
shukob
0
450
AIツールを導入しても生産性はあがらない? カオナビが直面した 3つの壁と乗り越え方。/ Overcoming 3 Barriers to AI-Driven Productivity at kaonavi
kaonavi
0
170
Jitera Company Deck
jitera
0
270
書籍セキュアAPIについて
riiimparm
0
240
第67回コンピュータビジョン勉強会CVPR2026読会前編
tsukamotokenji
0
160
それでも、技術なブログを書く理由 #kichijojipm / Why I Still Write Tech Blogs Even Now
shinkufencer
0
390
生成AI×AWS CDK×AWS FISで"振り返れる"ミニGameDayをつくろう
yoshimi0227
2
530
AI時代におけるテストの基礎の再定義 / Rethinking the Fundamentals of Testing in the AI Era
mineo_matsuya
14
4.5k
OpenTelemetryにおけるGoのゼロコード・コンパイル時計装について #fukuokago
quiver
0
210
「休む」重要さ
smt7174
6
1.6k
Featured
See All Featured
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
420
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
470
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
440
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
So, you think you're a good person
axbom
PRO
2
2.1k
Deep Space Network (abreviated)
tonyrice
0
230
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Optimizing for Happiness
mojombo
378
71k
Ruling the World: When Life Gets Gamed
codingconduct
0
290
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.7k
Transcript
3BJMTΤϯδχΞ͕ 4UJNVMVT ੜ+4͚ͩͰ ͷϓϩδΣΫτΛऴ͑ͨࠓࢥ͏͜ͱ ಙݩকٛʢ!NBTBʣ
ࣗݾհ w ಙݩকٛʢͱ͘ͱɹ·͞Α͠ʣ w ԭೄग़ w גࣜձࣾΈΜͳͷΣσΟϯά w 3VCZ3BJMT+BWB4DSJQUK2VFSZ4UJNVMVT(P
ݴ͍͍ͨ͜ͱ w 3BJMTΤϯδχΞ͕γϯϓϧͳػೳΛ+4Ͱ࣮͢Δ࣌ K2VFSZΛͿΜճ͢ΑΓ4UJNVMVT ੜͷ +BWB4DSJQU ΛબͿํ͕ͣͬͱྑͦ͞͏ w ͨͩ͠ɺ+BWB4DSJQUͰ؆ܿʹॻͨ͘Ίͷݟ͕ʢຊਓɾ ࣾʹʣແ͍ͱԕճΓͯ͠͠·͏ڪΕ͕͋ΔͷͰҙ
ϓϩδΣΫτͰͬͨ͜ͱʢҰ෦ʣ w +4ͷϑϨʔϜϫʔΫͱ+4ͷςεςΟϯάϑϨʔϜϫʔΫͷબ ఆɾಋೖ w ෳຕͷը૾ΛඇಉظͰ"84ͷ4μΠϨΫτΞοϓϩʔυ w ໊ࣜͷαδΣετػೳͷ࣮ w Ϣʔβʔͷॻ͖ࠐΈ༰ͷࣗಈอଘػೳͷ࣮
ϓϩδΣΫτͰͬͨ͜ͱʢҰ෦ʣ w +4ͷϑϨʔϜϫʔΫͱ+4ͷςεςΟϯάϑϨʔϜϫʔΫͷબఆɾಋ ೖ w ෳຕͷը૾ΛඇಉظͰ"84ͷ4μΠϨΫτΞοϓϩʔυ w ॺ໊͖ͭ63-ͷऔಘ w σʔλͷૹ৴
w αϜωΠϧͷදࣔ w ໊ࣜͷαδΣετػೳͷ࣮ w Ϣʔβʔͷॻ͖ࠐΈ༰ͷࣗಈอଘػೳͷ࣮ ࠓ͜ͷ̎ͭʹ͍ͭͯ৮Εͳ͕Β 4UJNVMVT+4ʹ͍ͭͯ͠·͢
͖͔͚ͬʮK2VFSZ٫ʯ w K2VFSZศར͗͢Δ w Πϕϯτͱͷόϯυϧɺ%0.ૢ࡞ɺΞχϝʔγϣϯɺ"KBYʜ w ຕͷϑΝΠϧͰશ෦Ͱ͖ͯ͠·͏ w +4ʹৄ͍͠Θ͚Ͱͳ͍αʔόʔαΠυΤϯδχΞ͕ॻ͘ w
Ԛ͍ίʔυͰॻ͔Εͯ͠·͏ʢແ๏ଳʣ w K2VFSZݹ͍ϑϨʔϜϫʔΫ w ϒϥβؒͷ͕ࠩॖ·Γͭͭ͋Δ w ৽͍͠ϓϩδΣΫτͰΘ͟Θ͟͏ʁ w ৽ଔ͔ΒֶͿ͖ʁ
৽͍͠ϑϨʔϜϫʔΫͱ ςεςΟϯάϑϨʔϜϫʔΫͷબఆ w ϑϨʔϜϫʔΫ4UJNVMVT w ͖͔͚ͬΤϯδχΞͷ্͕࢘ʮྑͦ͞͏͔ͩΒௐͯΈͯʯͱݴͬͨ͜ͱ w 3BJMTΤϯδχΞ͕Λ͚ͯॻ͖ͦ͢͏ʢ#BTFDBNQ͕࡞ͬͨʣ w γϯϓϧͰ͋Δʢֶशίετ͕͘ɺػೳ࠷ݶʣ
w ςεςΟϯάϑϨʔϜϫʔΫ+FTU w 34QFDʹࣅͨॻ͖ํͰۙײ͕͋Δ w ͜Ε͔ΒࣾͰ͏͔͠Εͳ͍ʢͱݴΘΕ͍ͯͨʣ3FBDUͱੑ͕͋ Δ
4UJNVMVTͱ 4UJNVMVTJTB+BWB4DSJQUGSBNFXPSLXJUINPEFTUBNCJUJPOT 6OMJLFPUIFSGSBNFXPSLT 4UJNVMVTEPFTO`UUBLFPWFSZPVS BQQMJDBUJPO`TFOUJSFGSPOUFOE3BUIFS JU`TEFTJHOFEUP BVHNFOUZPVS)5.-CZDPOOFDUJOHFMFNFOUTUP +BWB4DSJQUPCKFDUTBVUPNBUJDBMMZ Ҿ༻ݩɿIUUQTTUJNVMVTKTPSHIBOECPPLJOUSPEVDUJPO
4UJNVMVTͱ <div data-controller="hello"> <input data-target="hello.name" type="text"> <button data-action="click->hello#greet">Greet</button> <span data-target="hello.output"></span>
</div> // hello_controller.js import { Controller } from "stimulus" export default class extends Controller { static targets = [ "name", "output" ] greet() { this.outputTarget.textContent = `Hello, ${this.nameTarget.value}!` } }
ϥΠϒϥϦΛ͍ͬͯͳ͍ਏΈ ʢͷҰ෦ʣ
%0.ͷੜ͕ਏ͍ @DSFBUF5IVNCOBJM'JFME EBUB \ DPOTUUIVNCOBJM'JFME-JTUEPDVNFOURVFSZ4FMFDUPS AKT@\UIJTDBUFHPSZ^UIVNCOBJMpFMEMJTUA DPOTUUIVNCOBJM'JFME8SBQQFSEPDVNFOUDSFBUF&MFNFOU EJW
UIVNCOBJM'JFME8SBQQFSEBUBTFUDPOUSPMMFSTUSJOHDPVOUFS UIVNCOBJM'JFME8SBQQFSEBUBTFUUBSHFUUIVNCOBJMpFMEJUFN UIVNCOBJM'JFME8SBQQFSEBUBTFUTUSJOH$PVOUFS.BY UIVNCOBJM'JFME8SBQQFSDMBTT/BNFQPTUQJDUVSFTBUUBDINFOUT DPOTUUIVNCOBJM'JFME#BDLHSPVOEEPDVNFOUDSFBUF&MFNFOU EJW UIVNCOBJM'JFME#BDLHSPVOEDMBTT/BNFPTDPOUBJOFSCBDLHSPVOE UIVNCOBJM'JFME#BDLHSPVOEDMBTT-JTUBEE CBDLHSPVOEDPMPSHPME UIVNCOBJM'JFME#BDLHSPVOEDMBTT-JTUBEE NBSHJOCPUUPN. DPOTUIJEEFO0CKFDU,FZUIJTDSFBUF)JEEFO0CKFDU,FZ EBUBPCKFDU,FZ DPOTUIJEEFO$BUFHPSZUIJTDSFBUF)JEEFO$BUFHPSZ DPOTUIJEEFO$POUFOU5ZQFUIJTDSFBUF)JEEFO$POUFOU5ZQF SFWJFX UIJT@DSFBUF3FWJFX5IVNCOBJM'JFME \ EBUB UIVNCOBJM'JFME#BDLHSPVOE IJEEFO0CKFDU,FZ IJEEFO$POUFOU5ZQF IJEEFO$BUFHPSZ ^ UIVNCOBJM'JFME8SBQQFSBQQFOE$IJME UIVNCOBJM'JFME#BDLHSPVOE UIVNCOBJM'JFME-JTUBQQFOE$IJME UIVNCOBJM'JFME8SBQQFS ^ ͜ͷதͰͭͭͷཁૉΛ ಉ͡ཁྖͰҰੜݒ໋࡞ͬͯΔ
%0.ͷੜ͕ਏ͍ w ʮআϘλϯʯʮαϜωΠϧʯʮઆ໌จʯͱ%0.Λੜ ͢ΔϝιουΛ͚ͯɺͦͷத͕DSFBUF&MFNFOU TFU"UUSJCVUF BQQFOE$IJMEͷ܁Γฦ͠ w σβΠϯ͕มߋʹͳΔͱσβΠφʔ͞ΜʹϚΠφεͷΦʔ ϥΛ์ͬͯ͠·͏͕͍ࣗΔʢະख़ʣ
w ͍͍αʔϏε͕࡞Γ͍ͨͷಉ͡ؾ࣋ͪͳͷʹɾɾɾ
ͦͷ࣌ͷࣗ 4UJNVMVTͱ͔ ੜͷ+4͡Όμϝͩɻ K2VFSZͳΒ·ͩϚγͳ Μ͡Όʢུʣ Ծ%0.Λѻ͏ϥΠϒ ϥϦΛ͏ͷ͕͍͍Μ͡Ό ͳ͍ʢࡶʣ
ઌഐ͕ϦϑΝΫλϦϯά
ઌഐ͕ϦϑΝΫλϦϯά w ը૾Ξοϓϩʔυॲཧ͕ऴΘͬͨΒ.VUBUJPOPCTFSWFS ͰPCTFSWF͍ͯ͠ΔཁૉͷEBUBଐੑͷΛ+40/จࣈྻͱ ͯ͢͠ w ಉҰ7JFXϑΝΠϧͰEJTQMBZOPOFͰϨϯμϦϯά͍ͯ͠ ΔαϜωΠϧͷςϯϓϨʔτΛ$MPOF͍ͯ͠ɺαϜωΠ ϧΛ࡞͢Δ
ͦͷ࣌ͷࣗ ࣗͷܦݧ͕ࣝ Γ͍ͯͳ͔ͬͨͩ ͚͔ͩͬͨ ͝ΊΜ4UJNVMVTɺ ͝ΊΜ+4ɾɾɾ
ݴ͍͍ͨ͜ͱʢ࠶ܝʣ w 3BJMTΤϯδχΞ͕γϯϓϧͳػೳΛ+4Ͱ࣮͢Δ࣌ K2VFSZΛͿΜճ͢ΑΓ4UJNVMVT ੜͷ +BWB4DSJQU ΛબͿํ͕ͣͬͱྑͦ͞͏ w ͨͩ͠ɺੜͷ+BWB4DSJQUͰ؆ܿʹॻͨ͘Ίͷݟ͕ʢຊ ਓɾࣾʹʣແ͍ͱԕճΓͯ͠͠·͏ڪΕ͕͋ΔͷͰҙ
͓·͚ 4UJNVMVTͰ%0.ͷੜΛ؆୯ʹͯ͘͠ΕΔΈ͕ͳ͍ͷɺ 3BJMTͷ5VSCPMJOLTͱҰॹʹ͏ͷ͕ఆ͞Ε͍ͯΔ͔Βʢͩ ͱࢥ͏ʣ ࢀߟʢXJMMOFU͞ΜͷεϥΠυʣɿIUUQTTQFBLFSEFDLDPNXJMMOFUTUJNVMVT w αϜωΠϧදࣔʹ͍ͭͯϦϑΝΫλϦϯά͞Εͨ༰ɺ5VSCPMJOLT Λ༗ޮʹͨ͠ঢ়ଶͰ)5.-Λ࠶ϨϯμϦϯάͨ͠ঢ়ଶʹࣅ͍ͯΔ w %0.Λͦͷ··͓͍࣋ͬͯͯࠩͷΈΛදࣔ͢Δͱ͍͏ҙຯͰԾ
%0.ʹࣅ͍ͯΔ
͋Γ͕ͱ͏͍͟͝·ͨ͠