The Good relation
between Vue.js and
Web Components
To the future
Takanori Oki @Vue Fes Japan
Slide 2
Slide 2 text
Self Introduction
• Takanori Oki (@takanorip)
• Frontend Developer at FOLIO Inc.
• Use Nuxt.js/Vue.js, React, Polymer
• A member of Polymer Japan
• I love font and webfont
Slide 3
Slide 3 text
No content
Slide 4
Slide 4 text
What are
Web Components?
Slide 5
Slide 5 text
Web Components
w 8FCඪ४ٕज़ͰɺΧϓηϧԽ͞Εͨ
ίϯϙʔωϯτʢ෦ʣͷ࠶ར༻ΛՄೳʹ
͢Δ֓೦
w 8FCඪ४ٕज़ͳͷͰɺಛఆͷπʔϧ
ϥΠϒϥϦʹґଘ͠ͳ͍
w ͦͷ··ϒϥβͰಈ࡞͢Δ
Slide 6
Slide 6 text
Browser Support
Slide 7
Slide 7 text
production-ready!
Slide 8
Slide 8 text
We
don't need to use
polyfill library!!!!
(except for IE and Edge)
Slide 9
Slide 9 text
Specifications
• Custom Elements
• Shadow DOM
• HTML Template
• ES ModulesʢHTML Importsʣ
HTML Modules
Slide 10
Slide 10 text
Custom Elements
w ಠࣗͷػೳݟͨΛ࣋ͬͨ)5.-ཁૉΛ
ఆٛͰ͖ΔΑ͏ʹ͢ΔͨΊͷ༷
w ఆٛͨ͠)5.-ཁૉͷλάΛ)5.-தʹ
هड़ͯ͠༻͢Δ
w ͜ΕҎ߱ʮಠࣗͷػೳݟͨΛ࣋ͬͨ)5.-
ཁૉʯͷ͜ͱΛʮΧελϜཁૉʯͱݺͿ
Slide 11
Slide 11 text
No content
Slide 12
Slide 12 text
No content
Slide 13
Slide 13 text
Shadow DOM
w %0.ͷΧϓηϧԽΛ࣮ݱ͢ΔͨΊͷ༷
w 4IBEPX3PPUԼʹ4IBEPX5SFFͱ
ݺΕΔ/PEF5SFF͕ੜ͞ΕΔ
w άϩʔόϧͷ$44+BWB4DSJQU
4IBEPX%0.෦ʹӨڹ͠ͳ͍
Slide 14
Slide 14 text
No content
Slide 15
Slide 15 text
No content
Slide 16
Slide 16 text
HTML Template
w ཁૉΛ༻͠)5.-υΩϡϝϯτ
Ͱ)5.-ͷܗΛѻ͏ͨΊͷ༷
w ͜Ε8)"58(%0.4UBOEBSEͷҰ෦ʹ
औΓࠐ·Ε͍ͯΔ
w +BWB4DSJQU͔Βѻ͍͘͢͢ΔͨΊͷػೳ
֦ு͕ٞਐΜͰ͍Δ
Slide 17
Slide 17 text
No content
Slide 18
Slide 18 text
ES Modules
w &4Ͱಋೖ͞Εͨ&4.PEVMFTͷػೳΛ
ར༻ͯ͠ɺ֎෦Ͱఆٛ͞ΕͨΧελϜཁૉΛ
ಡΈࠐΉ
w ͦͷલʹ)5.-*NQPSUTͱ͍͏༷͕
ଘࡏ͍͕ͯͨ͠ɺഇࢭ͞Εͨ
w HTML Modulesͱ͍͏༷͕ٞ͞Ε͍ͯΔ
Slide 19
Slide 19 text
HTML Imports
w )5.-Λ)5.-ͰಡΈࠐΉͨΊͷ༷
w ࣅͨػೳΛ࣋ͭ&4.PEVMFTͷ༷͕҆ఆ͠
ϒϥβ࣮͕ग़ଗͬͨ͜ͱͰɺ
ඇਪʹͳͬͨ
w ݱࡏ།Ұ࣮͞Ε͍ͯΔ(PPHMF$ISPNF
͔Βय़ʹআ͞ΕΔ༧ఆ
Slide 20
Slide 20 text
HTML Modules
w )5.-Λ+BWB4DSJQUͷதʹ*NQPSUՄೳ
ʹ͢Δ༷
w 8FCQBDLͷIUNMMPBEFSʹࣅͨػೳΛ
ϒϥβͰαϙʔτ͠Α͏ͱ͍͏ͷ
w ·ͩ(JU)VCͷ*TTVFͰٞ͞Ε͍ͯΔஈ֊
ʢ$44.PEVMFTಉ࣌ʹٞ͞Ε͍ͯΔʣ
Slide 21
Slide 21 text
How to use
Web Components
with Vue.js?
Slide 22
Slide 22 text
No content
Slide 23
Slide 23 text
No content
Slide 24
Slide 24 text
How to build
Web Components
with Vue.js?
Slide 25
Slide 25 text
Vue CLI 3 Build Targets
w 7VF$-*ͰCVJME͢Δͱ͖ɺ--target wcͱ
͍͏ΦϓγϣϯΛ͚ͭΔͱɺ7VFKTͷ
ίϯϙʔωϯτΛ8FC$PNQPOFOUTʹ
มͯ͠CVJME͢Δ͜ͱ͕Ͱ͖Δ
w ͜ΕͰੜ͞ΕͨϑΝΠϧɺ୯ମͰ
8FC$PNQPOFOUTͱͯ͠ಈ࡞͢Δ
Slide 26
Slide 26 text
No content
Slide 27
Slide 27 text
No content
Slide 28
Slide 28 text
@vue/web-component-wrapper
w 7VFίϯϙʔωϯτΛϥοϓͯ͠
ΧελϜཁૉͱͯ͠ొ͢Δ
w #VJME5BSHFUTͰ͜ΕΛ༻͍ͯ͠Δ
w 7VFKTΛϥοϓ͍ͯ͠ΔͷͰɺ
௨ৗͷ8FC$PNQPOFOUTͱൺͯ
ϑΝΠϧαΠζ͕େ͖͍
Slide 29
Slide 29 text
No content
Slide 30
Slide 30 text
͜ͷػೳΛ͏͜ͱͰ
Vue.jsͷίϯϙʔωϯτΛ
Web Components
εϜʔζʹҠߦͰ͖Δ
Slide 31
Slide 31 text
·ͨɺWeb Componentsͷ
෦తͳಋೖʹཱͭ
Slide 32
Slide 32 text
Why we use
Web Components?
Slide 33
Slide 33 text
1. We can use the same
component with any
JavaScript Libraries
Slide 34
Slide 34 text
For example...
w 6*ϑϨʔϜϫʔΫΛ౷Ұ͍ͨ͠
+BWB4DSJQUϑϨʔϜϫʔΫ͝ͱʹ6*ϑϨʔϜ
ϫʔΫ͍͚Δͷɺޮѱ͍
w ϑϨʔϜϫʔΫΛมߋ͠ͳͯ͘ͳΒͳ͘ͳͬ
ͨͱ͖ɺ6*෦Λ͍ճ͢͜ͱ͕Ͱ͖Δ
w ֎෦ެ։͍͢͠
Slide 35
Slide 35 text
2. Fully Scoped
Slide 36
Slide 36 text
For example...
w େ͖͍ϓϩδΣΫτͰ$44ͷґଘ͕ؔ
Α͘Θ͔Βͳ͍ͷͰɺHMPCBMͳ$44ʹӨڹ
͞Εͳ͍࣮͕͍ͨ͠
w ֎෦ެ։͍ͨ͠
Slide 37
Slide 37 text
Demerit
w ଐੑʹ4USJOHܕ͔ͤ͠ͳ͍
w ֎෦͔Β͞ΕΔΠϕϯτͷϋϯυϦϯά͕
͍͠
w %0.ཁૉͷऔΓճ͕͠໘
w $44ͷઃܭΛେ෯ʹݟ͢ඞཁ͕͋Δ
Slide 38
Slide 38 text
ਖ਼ɺ7VFKTͷػೳΛͬͯίϯϙʔωϯτ
࡞ͬͨ΄͏͕ॊೈͰػೳతͰ؆ܿ
Slide 39
Slide 39 text
3. Micro Frontends
Slide 40
Slide 40 text
Micro Frontends?
• Be Technology Agnostic
• Isolate Team Code
• Establish Team Prefixes
• Favor Native Browser Features over
Custom APIs
• Build a Resilient Site
Slide 41
Slide 41 text
Think about a web app
as a composition of
features