Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Vue.jsから始めるDOMにデータを持たせないアプリケーション開発への第1歩
Search
Kazumune Katagiri
March 25, 2017
Technology
4.7k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Vue.jsから始めるDOMにデータを持たせないアプリケーション開発への第1歩
第51回 長岡IT技術者勉強会
Kazumune Katagiri
March 25, 2017
More Decks by Kazumune Katagiri
See All by Kazumune Katagiri
50歳目前開発者の AI との付き合い方
nemuzuka
0
54
AWS を使ったシステムのテスト方針 #jawsug #jawsug_niigataken #nds60
nemuzuka
2
3.1k
フリーランスで割と長くリモートでやってる僕が気をつけていること
nemuzuka
1
13k
わたしがみんなにオススメするBetter JavaとしてのScala
nemuzuka
1
890
ScalaでもDBのテストをしよう
nemuzuka
0
390
Other Decks in Technology
See All in Technology
WAF 運用改善の承認サイクル/SRE_BizReach_MIXI_1
visional_engineering_and_design
2
440
AIで開発は速くなったのに、なぜ現場は楽にならないのか 〜あなたの組織のボトルネックを突き止めるワークショップ〜
jacopen
1
320
すぐできる衛星通信対応 あとは山奥に行くだけ
tatetate55
0
110
アプリをもっと"iOSアプリっぽく"する小さな工夫 / Small Touches That Make Your App Feel More Like an iOS App
matsuji
1
560
SQL文一行も書けない人事がCortexもろもろを使って人事業務を楽にしてみる
ponponmikankan
1
220
enechainの内製セルフサービスプラットフォーム
hiyosi
0
160
AI 駆動 Terraform 開発/SRE_BizReach_MIXI_2
visional_engineering_and_design
4
2k
AIで実装は速くなった。なのにプロダクトは速くならない。職能の壁を越えて価値のフローを設計する
nwiizo
8
7.9k
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
5
25k
TinyGo 開発サイクルを高速化する:Go で作るエミュレータ入門
zozotech
PRO
1
620
Snowflakeのコスト最適化を支えるアーキテクチャ設計
ktatsuya
1
1.5k
synctest時代のhttptest Go 1.27で変わるHTTPサーバテストの裏側 / go conference2026 synctest and httptest
budougumi0617
1
2.6k
Featured
See All Featured
BBQ
matthewcrist
89
10k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
490
Statistics for Hackers
jakevdp
799
230k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
490
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
430
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
400
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
330
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
470
A Tale of Four Properties
chriscoyier
163
24k
Transcript
Vue.js͔Β࢝ΊΔ DOMʹσʔλΛ࣋ͨͤͳ͍ ΞϓϦέʔγϣϯ։ൃͷୈ1า 2017/3/25 @nemuzuka ୈ51ճ ԬITٕज़ऀษڧձ
ࣗݾհ • ยۅ Ұफ(͔ͨ͗Γ ͔ͣΉͶ) • id:nemuzuka / @nemuzuka •
Java / JavaScript / Scala • ݸਓࣄۀओ(vss.jp.net)
NDS 50+1 ճ ͓ΊͰͱ͏͍͟͝·͢ʂ
࠷ۙͷWebΞϓϦ։ൃ
αʔό JSONฦͯ͘͠ΕΕ ԿͰ͍͍ɻ Ͱɺը໘ͷϨϯμϦϯά Ͳ͏։ൃ͠Α͏͔ʁ
1. jQueryͰΨϯόΔ jsίʔυ্ʹ ɾDOMཁૉͷ࡞ ɾΠϕϯτͷొ ɾσʔλՃ ͕ͪ͝Όͪ͝ΌʹͳΓɺमਖ਼ͮ͠Β͘ͳΔͷͦ͏ԕ͘ͳ͍ jQueryͰσβΠϯ͢ΔͷπϥΠ... 1ճ͖ͬ͜ΓͳΒؤுΕΔ͚Ͳɺ cssϑϨʔϜϫʔΫͷมߋͱ͔͞ΕΔͱ…Δؾ͕…
2. jsςϯϓϨʔτΤϯδϯಋೖ [html+template] [js]
ex. Hogan.js • htmlͷςϯϓϨʔτͱjs͕Ͱ͖ͯεοΩϦʂ • jQueryଆͰDOMΛߏங͢Δྔݮͬͨ • templateͱσʔλΛඥ͚ͨ݁ՌΛappend͢ Δॲཧඞཁ •
σβΠϯͷมߋͦΜͳʹා͘ͳ͘ͳͬͨ
ෆศͳ͜ͱ͋Γ·͕͢ ·͊·͊͜ͷߏͰ ຬ͍ͯ͠·ͨ͠ (40 உੑ) clickΠϕϯτΛݩʹ֤ཁૉΛදࣔ/ඇදࣔ͢Δͷख͚ؒͩͲ ·͊Կͱ͔ͳΔ͠ɺ ੈͷதReactͱ͔Angular2ͱ͔͕ྲྀߦͬͯΔ͚Ͳɺ ͕ࣗ࡞ΔͷॴḨۀΞϓϦ͔ͩΒผʹྑ͍... ֮͑ͳ͖Ό͍͚ͳ͍͓࡞๏λά͕ଟ͍ΜͰ͠ΐ…
ਖ਼ ৽͍ٕ͠ज़֮͑Δͷ (ಛʹϑϩϯτΤϯυ) ͓ͳ͔͍ͬͺ͍
ͨͩɺγεςϜͷن͕େ͖͘ ͳͬͯ͘Δͱ • DOMͷidཁૉ͕ඃΒͳ͍Α͏ʹɺͩΜͩΜ͘ͳͬͯ͘Δ • ͜ͷclass໊ͬͯม͑ͯྑ͍Μ͚ͩͬʁͦͦstyle༻ʁjQuery༻ʁ • طଘΛյ͞ͳ͍Α͏ʹ৽͍͠class࡞… • selector͕Ϝμʹ͘͠
• DOMʹΞΫηεͯ͠σʔλ(data-* / value)ΛҾͬுͬͯ͘Δͷ໘ • άϩʔόϧมʹΞΫηε͍ͯ͠Δͱಉٛ • Ͳ͔͜ΒΞΫηεͰ͖ΔͷͰɺଞͷॲཧʹલఏ݅ͷσʔλΛফ͞ΕΔ / ্ॻ͖͞ΕΔ͜ͱ͋Δ • ॲཧΛ͏ͷʹDOMͷมԽΛ͏ඞཁ͕͋Δ DOMʹσʔλΛ࣋ͨͤΔ͜ͱʹݶքΛײ࢝͡ΊΔ (2016 ळ)
͋ΔɺVue.js 2.0 ͕ ϦϦʔε͞Εͨͱ͍͏هࣄ͔Β νϡʔτϦΞϧΛݟͯΈΔͱ...
͋Εɺ ࢲʹແཧͳ͘Ͱ͖Δ͔ʁ Vue.js 2.0 σϏϡʔܾҙʂ(2016 ౙ)
ಠश Vue.js 2.0 [جຊػೳ]
1. σʔλΛDOM্ʹඳը [html(template)] [js]
2. ํσʔλόΠϯσΟϯά [html(template)] [js] js෦/ࢀর෦ʹө͞ΕΔ (ํσʔλόΠϯσΟϯά) textʹೖྗ͢Δͱ…
3. Arrayσʔλදࣔ [html(template)] [js] ߦ͕૿͑Δ js্Ͱ ͱ࣮ߦ͢Δͱ…
͜ͷ࣌Ͱɺ͔ͳΓศར • ڥscriptλάͰಡΈࠐΊ͍͍ • npmͱ͔babelͱ͔ෆཁʂ͙࢝͢ΊΒΕΔʂ • templateػೳ • ʮ{{ʯ /
ʮ}}ʯ ͰΛදࣔ͢Δ • jsଆͰDOMཁૉҙࣝ͢Δඞཁͳ͠ • Arrayͷมߋʹैͯ͠DOMมߋͯ͘͠ΕΔ • ํσʔλόΠϯσΟϯά • htmlଆͷมߋˠjsଆʹөɺjsଆͷมߋˠhtmlଆʹөͯ͘͠ΕΔ • αʔόͷϦΫΤετύϥϝʔλjs্ͷVueΠϯελϯεͷdataϓϩύςΟ͚ͩҙ͓͚ࣝͯ͠ྑ͍ • data-*ͱ͔hiddenͱ͔ෆཁ • Ϣʔβ͕ೖྗͨ͠Λidͱ͔selectorΛ༻ͯ͠ɺjsͰरͬͯύϥϝʔλ࡞͢Δ͜ͱෆཁ • σʔλͱDOMͷಉظ͔Βղ์͞ΕɺjsσʔλͱϩδοΫ͚ͩʹूதͰ͖Δ
4. Πϕϯτͱॲཧͷඥ͚ͮ [html(template)] [js] onclick methodsͷؔʹ͓͍ͯɺ 1. thisVueΠϯελϯε ɹˠthis.nameͰΞΫηεՄೳ ɹɹ(dataলུͰ͖Δ)
2. eventωΟςΟϒDOMΠϕϯτ
5. ಈత߲ / ද੍ࣔޚ • ಈతʹclassΛΓସ͍͑ͨ(ex. ݅Λຬͨͨ࣌͠) • v-bind:class •
ಈతʹidཁૉΛઃఆ͍ͨ͠ • v-bind:id • ݅ʹΑ߲ͬͯΛඇදࣔʹ͍ͨ͠ • v-if লུه๏Ͱʮ:classʯʮ:idʯͱॻ͚Δ →ʮ:ʯͰ࢝·͍ͬͯΕಈతͳ߲ →seen͕trueͳΒཁૉදࣔ
͜ΕΒΛΈ߹ΘͤΔ͜ͱͰɺ click࣌ʹද߲ࣔΛΓସ͑Δ࣌ɺ ͦͷΠϕϯτॲཧͰdataΛมߋ͢Δ ͚ͩͰ݁͠·͢ɻ jQueryͰΨϯόΔΑΓ ָʹͳΓͦ͏ͳؾ͕͠·ͤΜ͔ʁ
ಠश Vue.js 2.0 [ίϯϙʔωϯτ]
ίϯϙʔωϯτʁ • ҙຯͷ͋Δ୯ҐͰtemplate/data/ΠϕϯτΛ·ͱΊΔ • SPAΛࢦͯ͠ɺ1ͭͷը໘ʹڊେͳhtml͕͋ΔΑΓҙຯ͋ Δ୯ҐͰ·ͱΊΕอक͘͢͠ͳΔ • ίϯϙʔωϯτͰͷ͕͖ͬΓ͢ΔͷͰՄಡੑ্͕Δ ͖ͬ͞ͷ ͜ͷ෦ΛίϯϙʔωϯτԽ
demo͠·͢
Vue.jsͰ࡞ͬͨToDoΞϓϦͷίϯϙʔωϯτ https://github.com/nemuzuka/nds51 5P%P*UFN 5P%P-JTU 5P%P&EJU%JBMPH "QQ "QQ 5P%P&EJU%JBMPH 5P%P-JTU 5P%P*UFN
ίϯϙʔωϯτͷؔ
ίϯϙʔωϯτͷϧʔϧ • ࣗͷ(্Ґ) / ࢠ(ԼҐ)ίϯϙʔωϯτͷΈҙࣝ͢Δ(1֊͚ͩ) • ࢠίϯϙʔωϯτʹσʔλΛ͍ͨ͠ʂ(ҰཡͷσʔλΛ͍ͨ͠) • ɿࢠίϯϙʔωϯτ্Ͱv-bindͰ͢(:todos=“filteredTodos") •
ࢠɿ͔ΒpropsͰड͚औΔ͜ͱΛఆٛ͢Δ(props: [“todos"]) • ίϯϙʔωϯτʹΠϕϯτ௨͍ͨ͠(ߦΛclick͞Εͨ࣌ʹμΠΞϩάΛOpen͢ΔΠϕϯτΛʹ͍͛ͨ) • ࢠɿʹ͚ͯ$emitͰΠϕϯτΛૹ৴͢Δ(this.$emit(‘OpenModalDialog', …ύϥϝʔλ)) • ɿࢠίϯϙʔωϯτ্ͰΠϕϯτ͕ૹ৴͞Εͨ࣌ͷॲཧΛఆٛ͢Δ(@OpenModalDialog=“openModalDialog") • ࢠίϯϙʔωϯτͷॲཧΛݺͼ͍ͨ(μΠΞϩάΛOpen͍ͨ͠) • ɿࢠίϯϙʔωϯτʹrefࣝผࢠΛఆٛ͢Δ(ref="modalDialog") • ݺͼग़࣌͢ɺ$refs.”ࣝผࢠ”.ϝιου(this.$refs.modalDialog.openDialog)
ਤʹ͢Δͱ͜Μͳײ͡ ίϯϙʔωϯτ ࢠίϯϙʔωϯτ [σʔλΛ͍ͨ͠] v-bind (:xxx) props [Πϕϯτ௨͍ͨ͠] $emit v-on
(@xxx) ࢠ [ॲཧΛݺͼ͍ͨ] ref
ίϯϙʔωϯτͷԿ͕ྑ͍ͷʁ • ίϯϙʔωϯτͷin/out͕ཧղ͘͢͠ͳΔ • ༻͢Δࢠίϯϙʔωϯτ • components • ίϯϙʔωϯτ͔ΒདྷΔσʔλ •
props • ෦σʔλ / ॲཧ • data / methods / computed • ʹ௨͢ΔΠϕϯτ • $emitͷՕॴ • ࣗίϯϙʔωϯτͷΠϕϯτ(@click) / ࢠίϯϙʔωϯτ͔Β௨͞ΕΔΠϕϯτ • template্ʹهࡌ ίϯϙʔωϯτͷΈʹ͔ͬΔ͜ͱͰ ෦ॲཧͷݟ௨͕͠jQuery + Hogan.jsͷ࣌ʹൺͯ ֨ஈʹྑ͘ͳΔʂʂ
ίϯϙʔωϯτԽɺ࠷ߴ
εάʹ࢝Ί·͠ΐ͏ʂ
ίϯϙʔωϯτͷొ • άϩʔόϧͳొ • Vue.component • ϩʔΧϧͳొ • VueΠϯελϯεͷcomponentsʹొ
vue-cli Λ͍·͠ΐ͏
<template> <tr @click.stop="openModalDialog"> <td>{{index + 1}}</td> <td class="text-left">{{todo.context}}</td> <td>{{todo.lastUpdateDate}}</td> <td>
<button type="button" class="btn btn-danger b <i class="glyphicon glyphicon-remove"></i> </button> </td> </tr> </template> <script> export default { name: 'todo-item', props: ["todo", "index"], methods: { openModalDialog(e) { const self = this; self.$emit('OpenModalDialog', e, self.todo); }, deleteItem(e) { const self = this; self.$emit('DeleteItem', e, self.todo); } } } </script> <style scoped> tr { cursor: pointer; } </style> vue-cliΛ͏ͱͲ͏ͳΔͷʁ • ίϯϙʔωϯτຖʹvueϑΝΠϧΛ1ͭ࡞(࠷ऴతʹjsʹͳΔ) • template(HTML) • Pug͑Δ༷ • script(js) • templateʹ͢dataɺmethodsΛఆٛ • style • cssɻ͜ͷίϯϙʔωϯτʹ͚ͩͯΔɺͱ͍͏ఆٛՄೳ ίϯϙʔωϯτΛ1ͭͷvueϑΝΠϧͰ݁͢ΔΑ͏ʹॻ͚ͯɺόονϦʂ(୯ҰϑΝΠϧίϯϙʔωϯτ) html/js/css ෳϑΝΠϧΛߦͬͨΓདྷͨΓ͠ͳͯ͘ྑ͍ʂൃࢄ͕ͪ͠ͳը໘։ൃʹடংΛʂʂʂ
ͨͩ͠ɺnode.js͍·͢
ͪΐͬͱͰڵຯ͕ग़͖ͯͨਓɺ https://github.com/nemuzuka/nds51
·ͱΊ • Vue.jsΛ͏ͱDOMʹσʔλΛ࣋ͨͤΔඞཁ͕ݮΓ·͢ • ԾDOM / ํσʔλόΠϯσΟϯάͷ͋Γ͕ͨ͞ • ͏ࣗલͰΠϕϯτरͬͯDOMॻ͖͑ͳΜͯͨ͘͠ͳ͍ʂʂ •
DOMૢ࡞༻ͷidclassࢦఆ͕େ෯ʹݮͬͨɻΧελϜσʔλଐੑΘͳ͘ͳͬͨ • ίϯϙʔωϯτԽͰॲཧͷσʔλͷείʔϓ͕ߜΕΔΑ͏ʹͳͬͨ • vue-cliͷߟ͑ํʹܹ͘͠ڞײ • 1ίϯϙʔωϯτ = 1vueϑΝΠϧͷ͕ؔγϯϓϧͰΠΠ • ʮ͜ͷϑΝΠϧݟ͓͚ͯେମ͑Δײ͡ʯ͕࠷ߴʹ͋Γ͕͍ͨɻϑΝΠϧҠಈ͢Δͱ಄ͷΓସ͕͑… • jsͰhtml(template)ॻ͖ͨ͘ͳ͍ΜͰ͢Α… • ͍ͭͰʹϒϥβjsΛES6Ͱॻ͚ΔΑ͏ʹͳΓ·͢ • πϥΠͷڥ࡞Δ(ཧղ͢Δ)·Ͱ • ʮ1ճ࡞ͬͯऴΘΓʯ͡Όͳ͍ΞϓϦͳΒɺVue.jsྑ͍ͱࢥ͍·͢ʂ
ͪͳΈʹɺ2016 ळ࣌ͷࢲͷεϖοΫ • jQueryͬͯΔɺͬͯΔ • Javascriptৄ͘͠Βͳ͍ • ES5/ES6ͷษڧαϘͬͯͨ • node.jsͷଘࡏ͍ͬͯΔ͕Πϯετʔϧͨ͜͠ͱͳ͍
• jsϑΝΠϧscriptλάͰ֎෦͔Β࣋ͬͯ͘Δํ͔ࣜͬͨ͜͠ͱͳ͍ • Reactͱ͔Angularͱ͔ͷଘࡏ͍ͬͯΔ͕νϡʔτϦΞϧͬͯͳ͍
ͦΕ͕3ϲ݄͘Β͍Ͱ… 1. npm / webpack 2. vue-cli 3. ES6Ͱॻ͍ͯBabelͰϏϧυ ͢Δ·ͰʹͳΓ·ͨ͠ʂʋ(˜ʆ)ϊ
※جຊతʹνϡʔτϦΞϧͰԿͱ͔ͳͬͨͷͰ Vue.jsࣗମͷֶशίετ͍ͱࢥ͍·͢ [͓ੈʹͳΓ·ͨ͠] OQNͱXFCQBDLͰϏϧυK2VFSZ͔Βͷ࣍ͷεςοϓ
Ͱɺ1ͭΞϓϦΛ࡞ͬͯΈͨɻ
VSS Kanban • αʔόαΠυ : Scala(Skinny Framework) • ΫϥΠΞϯταΠυ :
Vue.js ScalaVue.jsΛֶͿͨΊͷͱ͔͔ͬΓʹͯ͠Β͑Δͱخ͍͠σε https://github.com/nemuzuka/vss-kanban