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
JSフレームワークを振り返る
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Teruo Kunihiro
February 12, 2017
Programming
2.4k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
JSフレームワークを振り返る
合同勉強会 in 福岡で発表した資料
https://connpass.com/event/49117/
Teruo Kunihiro
February 12, 2017
Other Decks in Programming
See All in Programming
ソフトウェア設計に溶けるインフラ ― AWS CDK のインフラ認識論
konokenj
2
200
鹿野さんに聞く!『TypeScriptコードレシピ集』で磨く実践力
tonkotsuboy_com
4
1.1k
AI時代、エンジニアはどう育つのか -未経験エンジニアの成長を間近で見て考えたこと-
thasu0123
0
110
Claude Opus 4.6以後の受託開発エンジニアの変化(Claude Code開発ノウハウ大公開スペシャルbyクラスメソッド)
iidatakuma
1
640
気圧・高度・GPSを記録&可視化するアプリ「Koudo」を作った話
hjmkth
1
350
信頼性について考えてみる(SRE NEXT 2026 miniLT)
hayama17
0
170
【やさしく解説 設計編・中級 #4】ルールの寿命と、システムの年輪
panda728
PRO
2
130
Contextとはなにか
chiroruxx
1
390
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
kotetuco
0
170
ローカルLLMでどこまでコードが書けるか -縮小版 / How much code can be written on a local LLM Shortened
kishida
2
190
Creating Composable Callables in Contemporary C++
rollbear
0
200
20260623_Loop Engineeringで自分の分身の問い合わせBotを作る
ryugen04
0
210
Featured
See All Featured
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
360
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
450
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.4k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
380
Typedesign – Prime Four
hannesfritz
42
3.1k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.6k
Mobile First: as difficult as doing things right
swwweet
225
10k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
490
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.8k
Transcript
JSϑϨʔϜϫʔΫΛ ৼΓฦΔ IN 2017 2017/02/11 Teruo Kunihiro
➤ ࡢ9݄͔Β גࣜձࣾNulab & Ԭ ➤ ۀ: HTML5ͷCacooͷ։ൃͱ͔ ➤ ࠓ·ͰJS։ൃҊ͕݅ଟ͔ͬͨͷͰओʹJSॻ͍
ͯ·͢ Twitterͱ͔Qiitaͱ͔ͨ·ʹGithub @knhr__ ➤ I love JavaScript!!But I want to study another languages. ࣗݾհ
CACOOʹ͍ͭͯ
͡Ίʹ ϑϩϯτΤϯυʹ͓͍ͯͷॲཧͷϓϩηε Event + DataStore => DOM ͔͠͠DOMͷมͷࡍʹViewʹ߹ΘͤͨDataͷՃ͕ඞཁ Event or
DataStore => DataStore + Data(For View) => DOM ͜ͷॲཧΛղ͘ͷ͕ϑϨʔϜϫʔΫ
͡Ίʹ ➤ ༻ޠ Model = DataStore, DataͷೖΕɺϏδωεϩδοΫ Controller = Πϕϯτड͚ͨΓɺ߹ʹΑͬͯView༻ͷσʔλ
ՃɺEvent Handleɻ ViewModel = View༻ͷσʔλՃɺEventͷϋϯυϦϯάɺσʔ λͷอ࣋ View = ͨͩͷςϯϓϨʔτ, JSXͱ͔ => ͨͩͷݴ༿ͳͷͰదͳ֓೦ͱͯ͠ଊ͑Δ
JSϑϨʔϜϫʔΫԿΛ͍·͔ͨ͠ʁ ➤ Backbone.js ➤ Knockout.js ➤ angular ➤ React ➤
Polymer ➤ riot.js ➤ angular2 ➤ Vue
ͦͷมԽʁ ➤ Componentࢦ ➤ jQueryʹΑΔDOMૢ࡞͔ΒVirtualDOM ➤ Stateཧํ๏ͷมԽ
WEBCOMPONENTͱ ➤ 2011ʹఏҊ͞ΕͨΞΠσΞ ➤ ωΠςΟϒͳAPIݱࡏChormeͷΈʹ࣮͞Ε͍ͯΔ ➤ ༷ࡦఆʹߤ͓ͯ͠Γͣͬ͜͜ͱDraftঢ়ଶ
WEBCOMPONENTͱ DOMͰݴ͑ҎԼͷΑ͏ͳλάΛࢦ͢ <hello-world></hello-world> => <div>hello world</div> DOMɺৼΔ͍ɺState(JS)ɺσβΠϯ(CSS)ɺ(JS)͕ΧϓηϧԽ͞ Εͨλά Data(for View)
+ DOM ϑϩϯτΤϯυͷViewͱಠཱͨ͠ίϯϙʔωϯτͷू߹ମͱଊ͑ Δ͜ͱ͕Ͱ͖Δ
COMPONENTͷ(ͩͬͨ) ➤ DOMͷߋ৽ͷॲཧ͕ॏ͍ DOMؙ͝ͱΛೖΕସ͑ΔͨΊDOMͷߋ৽ॲཧ͕ॏ͔ͬͨɻ ͔͠͠Componentͷߋ৽ҰׅͰߦΘͳ͍ͱෆ߹͕ى͖Δ ࠓ·Ͱͦ͜ΛjQueryͰؤுΔɻ ͘͠Two-way-data-bindingͰؤு͍ͬͯͨ jQueryͰؤுΓͨ͘ͳ͍ɻɻɻ
COMPONENTͷվળ DOMͷߋ৽ΛͰࠩߋ৽(Virtual DOMͳͲʹΑΓ)Ͱߦ͏ϑϨʔϜϫʔΫ͕ ಄͖ͯͨ͠ ࠩߋ৽ϥΠϒϥϦͤʹͰ͖Δ͜ͱʹΑͬͯɺରͷComponentͷߋ৽ ΛҰׅͰߦ͑ΔΑ͏ʹͳͬͨ ͨͩ͠WebComponent࣏తʹ࣮ݱ·ͩ·ͩͬΆ͍ͷͰ֤छϑϨʔϜ ϫʔΫ͕ݸผʹؤு͍ͬͯΔঢ়گ ͳͷͰWebComponentͷํͱׂͱҧ͏ͷ͋ΔɻReactͱ͔ https://github.com/reactjs/react-future/tree/master/02%20-
%20Web%20Components
COMPONENTࢦʹ͍ͭͯ ͰෳͷComponentͲͷΑ͏ʹ࿈ܞ͢Δͷ͔ ࢠͷίϯϙʔωϯτ͕ࢠίϯϙʔωϯτʹରͯ͠σʔλΛྲྀ͠ɺΠϕ ϯτΛड͚औΔΑ͏ʹಈ࡞ͤ͞Δ Component͕૿͑ͨΒঢ়ଶͷཧେมɻɻɻ
ΞϓϦέʔγϣϯͷSTATEཧ ➤ ෳͷComponentͷStateΛݸผʹ࿈ܞͤͯ͞ཧͤ͞Δͷ ݁ߏେม ➤ ͢ΔͱStateཧ·ͨผͰߦ͍͍ͨ!!ͬͯͳΔ ➤ શମͷStateཧݱࡏFluxϥΠΫ(͍͍ͩͨRedux)ͳͷ ͕ओྲྀͱͳ͍ͬͯΔ
STATEͷมભ ➤ MVCϑϨʔϜϫʔΫ ➤ ํόΠϯσΟϯά ➤ Elm / Flux /
Redux ͷΑ͏ͳؔܕϥΠΫͳStateཧ
MVCͱ ➤ Model - ΞϓϦݻ༗ͷσʔλ, ϏδωεϩδοΫ ➤ View - HTML,
ModelͷΛදࣔ ➤ Controller - ViewͷೖྗΛड͚औΔ, ModelΛૢ࡞ View͕ModelΛࢀরͯ͠ඳը͢Δɻ
MVCͱ ➤ ҰํํͳσʔλͷྲྀΕ ➤ ViewModelΛࢹ͍ͯ͠Δ ➤ ControllerΠϕϯτΛड͚ औͬͯModelΛߋ৽͢ΔͷΈ ➤ දతͳϑϨʔϜϫʔΫ
Backbone.js
MVCͱ VitrualDOMҎલͷMVCʹ͍͔͕ͭ͋ͬͨ͘ɻ ➤ DOMঢ়ଶΛอ͍࣋ͯ͠ΔͨΊʹ͠DOMΛશʹ࠶ඳը͢ ΔͱࣦΘΕΔσʔλ͕ଘࡏ͢ΔɻEventListernerͳͲ ➤ DOMͷૢ࡞ͱ͍ͯͨΊʹɺஞҰ࠶ඳըΛߦ͏ͷύ ϑΥʔϚϯεΛ͔ͳΓࣦ͏͜ͱʹͳΓ͏Δ ➤ ࠶ඳըͤͨ͘͞ͳ͍ͷͰɺControllerʹσʔλΛอ࣋ͤͯ͞Ξ
ϓϦέʔγϣϯͷঢ়ଶ͕͙ͪΌ͙ͪΌʹͳͬͨʢମݧஊʣ
MVVMͱ ➤ MVCΛݩʹͨ͠σβΠϯύλʔϯ ➤ ViewΛϏδωεϩδοΫΞϓϦέʔγϣϯͷৼΔ͍͔Β MVCΑΓ໌֬ʹͤ͞Δ ➤ Model - MVCͱಉ͡ɻViewModelͱ݁߹
➤ ViewModel - ModelͱViewͷσʔλͷՃɺσʔλͷอ࣋ ➤ View - ViewModelͱͷ݁߹ɻData-bindings, Event
MVVMͱ ➤ ViewModelͱͷؔ࿈Λ࣋ͨ ͳ͍ɻViewৗʹViewModelͱ ಉظ͢Δ ➤ σʔλͷํҰํํͰͳ͍ ➤ Ͳ͏ΒTwo-way-binding͕͋Δ ͷΛMVVMͱݴͬͯΔͬΆ͍
➤ ComponentࢦʹࣅͯViewʹର ͢ΔStateΛอ࣋͢Δ ➤ දతͳϥΠϒϥϦ Knockout.js
MVVMͱ ➤ όΠσΟϯά͞Ε͍ͯΔσʔλ෦ͷΈͷDOMΛߋ৽͢Δ͜ ͱͰɺMVVMMVCͷஞ࣍શ࠶ඳըͷΛղܾͨ͠ ➤ UI͝ͱʹViewModelΛ࡞͢Ε͍͍ͷͰUIͷฒྻ։ൃΛ؆ ୯ʹͨ͠ʢComponentࢦʣ ͔͠͠MVVMҎԼͷΛҾ͖ى͜͠·ͨ͠ ➤ εςʔτϑϧͳ֊ͷ૿ՃʹΑΓσʔλͷෳࡶ্͕ͬͨ
FLUX(REDUX)ͱ ➤ 2014͝ΖʹFacebook͕ൃදͨ͠Ұํํσʔλϑϩʔ ➤ ؔܕνοΫͳStateཧϑϨʔϜϫʔΫ ➤ ReduxFluxϥΠΫͳσʔλϑϩʔͷछྨͷҰͭ https://facebook.github.io/flux/docs/in-depth-overview.html#content
ͦͯ͠FLUX ➤ React͕ग़͖ͯͯDOMͷஞ࣍ߋ৽ͷίετ͕ݮͬͨ => σʔλͷมߋΛݕؙͯ͠͝ͱViewΛೖΕସ͑ΔॲཧΛؾ ܰʹߦ͑ΔΑ͏ʹͳͬͨ ➤ MVVM(Component)εςʔτϑϧͳ෦Λ૿ͯ͠͠ ·ͬͨ ➤
ͦͯ͠ModelҎ֎εςʔτϨεͳҰํํσʔλϑϩʔͰ͋ ΔMVCతͳΞʔΩςΫνϟ͕ඞཁͱͳͬͨ
TODO MVCΛݟͯΈΑ͏ ➤ TodoͷMVCͷྫΛݟͯݟ·͠ΐ͏
TODO MVCΛݟͯΈΑ͏ ➤ Model͕૿͑Δ ➤ View, Modelͷґଘ͕ؔෳ ࡶʹͳΔ ➤ ༷ʑͳσʔλͷߋ৽ʹରͯ͠
͜ͷΞϓϦέʔγϣϯ༧ଌ Մೳͳঢ়ଶΛҡ࣋Ͱ͖ΔͰ͠ΐ ͏͔
FLUXͳΒ ➤ Storeͷґଘؔ֊ߏʹ อͨΕɺͯ͢ͷStoreͷߋ৽ ͕ߦΘΕΔ·ͰViewʹө͞ Εͳ͍ ➤ StoreΛ৮Δ͜ͱ͕Ͱ͖ͳ ͍ɻಛఆͷAction͔Βৗʹ ಉ݁͡ՌΛಘΔ͜ͱ͕Ͱ͖Δ
ͨΊʹΞϓϦέʔγϣϯͷঢ় ଶΛ༧ଌՄೳʹͰ͖Δ
FLUXͱ ➤ Α͘ݟΔͱMVCͷম͖͠Ͱશ͘৽͍֓͠೦ͱ͍͏͜ͱͰ ͳ͍͕ɺΑΓڧ͍نͰറΒΕΔΠϝʔδ ➤ ΞϓϦέʔγϣϯͷঢ়ଶStoreʢͱComponentʣʹ͚ͩด͡ ࠐΊΒΕΔͨΊʹMVVMͷ࣌ΑΓ༧ଌՄೳͳΞϓϦέʔγϣ ϯ ➤ Stateͷߋ৽ৗʹ
f(State, Actions) => NewState
FLUX(REDUX)ͷ ➤ ݁ߏɻҰͭͷػೳΛՃ͢ΔͨΊʹView࡞ͬͯAction ࡞ͬͯStoreͷߋ৽࡞ͬͯStoreͷใΛComponentʹͭͳ͍Ͱ ͱͨ͘͞ΜͷϑΝΠϧΛฤू͢Δඞཁ͕͋Δɻ ➤ ඇಉظͷॲཧɺFormͷσʔλɺRoutingͷσʔλͳͲΛ্ख͘ ѻ͓͏ͱࢥ͏ͱ͍ΖΜͳϥΠϒϥϦΛೖΕΔ͜ͱʹͳͬͯͱ ʹ͔͘ർΕΔ
ྫ͑REDUX
·ͱΊɾݱঢ় ➤ ίϯϙʔωϯτԽ(WebComponentؔͳ͘)Λߟྀ͞Ε͍ͯ Δ ➤ VirtualDOMతͳDOMΛࠩͰඳըΛߦ͏ͷ͕ଟ͍ ➤ MV*తͳΞϓϩʔν͕ѱ͍Θ͚Ͱͳ͍ ➤ ݱঢ়Reduxʹ͕͋ΔͷͰɺ͍ΖΜͳσʔλϑϩʔͷ
StateཧϑϨʔϜϫʔΫ͕ཚཱ͍ͯ͠Δɻ ➤ ͱ͍͑࠷ۙReduxϥΠΫͳͷ͕ଟ͍ͷͰษڧ͍ͨ͠ਓ ਓ·ͣReduxΛͬͯΈΑ͏!!
༨ஊ(CACOOͷHTML5Խͷ) ➤ HTMLͷViewriotͬͯΔ ➤ riotcomponentࢦͷϑϨʔϜϫʔΫɻVirtualDOMͰͳ ͍͕DOMͷࠩߋ৽Λߦͬͯ͘ΕΔ ➤ StateཧࣗલͰͬͯΔɻComponent͝ͱͷStateͱΞϓϦ શମͷStateΛཧ ➤
ΞϓϦશମͷStateindexedDBʹ֨ೲ͍ͯ͠Δ