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エコシステム動向2023
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
kazupon
August 09, 2023
Programming
9.4k
17
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Vue.jsエコシステム動向2023
kazupon
August 09, 2023
More Decks by kazupon
See All by kazupon
プラグインで拡張される Context をtype-safe にする難しさと設計判断
kazupon
2
1.6k
Oxlint JS plugins
kazupon
1
1.4k
gunshi
kazupon
1
250
Nitro v3
kazupon
2
600
わたしのOSS活動
kazupon
3
640
Vapor Revolution
kazupon
3
4.3k
Vue.js最新動向
kazupon
3
1.7k
Vue 3.4
kazupon
13
4.9k
Vue & Vite Rustify
kazupon
4
2.5k
Other Decks in Programming
See All in Programming
AI × TiDD / 2026.09.05 Redmine 大阪
tokudiro
1
170
FreeBSDでZabbixを動かす.pdf
kenkino
0
270
アクセシビリティから考える情報設計
high_g_engineer
0
370
How I Stole PSI from Android Studio - DroidKaigi2026
worker8
0
130
Omarchy Tokyo やると聞いて UMPC 買ってセットアップしてきた
mtsmfm
0
140
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
210
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
190
Security issues being discussed on Web Platforms
petamoriken
0
940
大喜利で理解するLLM as a Judge / Understanding LLM-as-a-Judge through Ogiri
rockname
0
100
iOSDC Japan 2026 - Swiftで作って学ぼう!データベース自作入門
kaseken
2
160
テストを司るデーモンに会いに行く 〜隔離した仮想マシンでテストを通すまで〜
h1d3mun3
1
360
Jetpack Compose メカニズム
skydoves
0
410
Featured
See All Featured
Believing is Seeing
oripsolob
1
220
Visualization
eitanlees
152
17k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
エンジニアに許された特別な時間の終わり
watany
109
250k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.9k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
Crafting Experiences
bethany
1
340
Embracing the Ebb and Flow
colly
88
5.2k
Become a Pro
speakerdeck
PRO
31
6.3k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
280
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
67
58k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
510
Transcript
Vue.js ΤίγεςϜಈ 2023 v-tokyo#18 2023.08.08 @kazupon
ࣗݾհ
PLAID, inc. Vue.js Core Team Member Nuxt Community team
Vue.js Japan User Group Organizer Creator of Vue I18n & Intlify Maintainer of Nuxt I18n @kazu_pon kazupon kazupon
͡Ίʹ
v-tokyo#18 ͷςʔϚ https://vuejs-meetup.connpass.com/event/288920/
ࠓ͢͜ͱ • Vue Fes Japan ͰΠϕϯτָ͕͠ΊΔΑ͏ɺVue.js ͱΤίγεςϜपลͷ͜͜࠷ۙͷಈΛ͠·͢ʂ
Vue.js
Vue 3
Vue 3 ͷϦϦʔελΠϜϥΠϯ • 2020/09/18: 3.0 (One Piece) • 2021/06/08:
3.1 (Pluto) • 2021/08/05: 3.2 (Quintessential Quintuplets) • 2023/05/11: 3.3 (Rurouni Kenshin)
Vue 3 ͷϦϦʔελΠϜϥΠϯ • 2020/09/18: 3.0 (One Piece) • 2021/06/08:
3.1 (Pluto) • 2021/08/05: 3.2 (Quintessential Quintuplets) • 2023/05/11: 3.3 (Rurouni Kenshin) 3.3. ϦϦʔε·Ͱ2͔͔͍ۙͬͯ͘Δ ͳͥͰ͠ΐ͏ʁ
Vue 3.2 ۄ • SFC script setup • 3.2 Ҏલ·Ͱ
setup ͷதʹॻ͍ͯ ͍ͨ • script setup ͷొ ʹΑΓγϯϓϧʹ ͳͬͨ 3.2 3.2 Ҏલ
ͨͩɺSFCपΓͰ·͕ͩ… • TypeScript • ܕ͕ޮ͔ͳ͍෦͕·ͩ͋Δ (ྫ: slots) • API •
ײతͰͳ͍ͯͮ͘Β͍෦͕͋Δ (ྫ: ref ͱ reactive ʹΑΔϦΞΫςΟϏςΟ)
ͨͩɺSFCपΓͰ·͕ͩ… • TypeScript • ܕ͕ޮ͔ͳ͍෦͕·ͩ͋Δ (ྫ: slots) • API •
ײతͰͳ͍ͯͮ͘Β͍෦͕͋Δ (ྫ: ref ͱ reactive ʹΑΔϦΞΫςΟϏςΟ) SFC Vue ͷίϯηϓτͰ͋ΓίΞػೳͰ͋Δ Α͍ DX Λఏڙ͢ΔͨΊʹ͞ΒͳΔվળ͕ඞཁ
Vue 3.3 Ͱ DX վળʹϑΥʔΧε • SFC HTML ϕʔεͷίϯϙʔωϯτγεςϜ
• SFC ͷ DX ΤσΟλ͕ఏڙ͢Δ DX ʹࠨӈ͞ΕΔ • Vue Language Tools (چ:Volar) ʹΑΔαϙʔτ͕ ඞਢ • RFC Ͱ SFC վળʹ͍ͭͯϑΟʔυόοΫΛಘͭͭ ৻ॏʹۛຯ͍ͯͬͨ͠ • ྫ: Reactivity Transform
Vue 3.3
Vue 3.3 ͷϦϦʔε༰ • ओͳͷҎԼͷͱ͓Γ • <script setup> Ͱͷ TypeScript
पΓDX վળ • ࣮ݧతػೳ
<script setup> Ͱͷ TypeScript पΓDX վળ
<script setup> Ͱͷ TypeScript पΓDX վળ • SFC ֎Ͱఆٛͨ͠ܕΛ import
ͯ͠ϚΫϩͰར༻Ͱ ͖ΔΑ͏ͳͬͨ
<script setup> Ͱͷ TypeScript पΓDX վળ • TypeScript ͷ Generics
ΛͬͨίϯϙʔωϯτΛ ఆٛͰ͖ΔΑ͏ͳͬͨ generics ଐੑͷதͰ extends ͳͲ TS ͷ Generics ͱಉ͡ͷ͕͑Δ
<script setup> Ͱͷ TypeScript पΓDX վળ • de fi neEmits
͕͍͘͢ͳͬͨ 3.2 3.3 ʙ TypeScript ͷ labeled tuple elements ͰఆٛͰ͖Δ
<script setup> Ͱͷ TypeScript पΓDX վળ • de fi neSlots
Ͱ slots ΛܕΛޮ͔ͤΒΕΔΑ͏ʹͳͬ ͨ
࣮ݧతػೳ
de fi neProps ͷׂೖ • ݩʑ Reactivity Transform Ͱαϙʔτ͢Δͣ ͩͬͨͷ
• σϑΥϧτͷఆٛΛ withDefaults Θͳͯ͘ JavaScript ͷׂೖߏจͰ props ΛఆٛͰ͖Δ
de fi neModel • <script setup> Ͱ v-model ͰόΠϯυ͢Δ props
Λ ఆٛͰ͖Δ syntax sugar ͷΑ͏ͳϚΫϩ 3.2 3.3 ʙ
Vue 3.3 Ͱ…
Reactivity Transform https://ja.vuejs.org/guide/extras/reactivity-transform.html#reactivity-transform
Reactivity Transform ͕ ೖΒͳ͔ͬͨͷ ͳͥʁ🤔
ͦΕ…
৽ͨͳʹΑͬͯ Vue ͕ෳࡶʹͳͬͯ͠·͏͔Β
Reactivity Transform https://speakerdeck.com/kazupon/reactivity-transform?slide=6
ϦΞΫςΟϒपΓͷDXΛվળ͢Δͣͩͬͨ… https://speakerdeck.com/kazupon/reactivity-transform?slide=9
͕ͩɺ৽ͨͳ͕ੜ͡Δ͜ͱ͕Θ͔ͬͨ • Reactivity Transform ʹΑΔੜ͡Δ • ίʔυͷϦΞΫςΟϏςΟίϯςΩετ͕͔Γ ͮΒ͘ͳΔ • Reactivity
Transform ϕʔεͷίʔυͱͦΕΛ Θͳ͍ίʔυؒͷίϯςΩετεΠον • ref Λཁٻ͢Δ I/F Λ࣋ͬͨؔͳͲ͕ಈ͔ͳ͘ ͳΔ
࠷େͷ • ։ൃऀͰஅ͕ى͖ΔϦεΫ • Reactivity Transform JavaScript ͷηϚϯςΟ Ϋεʹ͍ͦͬͯͳ͍
• Reactivity Transform Λ͏ v.s. Θͳ͍
͜͏ͨ͠ཧ༝͔Β… • Evan ࢯ Reactivity Transform ͷ Drop Λܾఆ͠ɺ ΠϕϯτͰΞφϯε
https://youtu.be/OrT0tHGXyqE?t=844 Vue.js Nation ΑΓ
͠ɺReactivity Transform Λ͍ͬͯΔ߹… • ݩͷ Reactivity API ͷίʔυʹ͍ͨ͠߹: • CLIπʔϧ
`drop-reactivity-transform` ͰίʔυΛม ͢Δ͜ͱ͕Ͱ͖Δ `npx dropReactivityTransform src` https://github.com/edison1105/drop-reactivity-transform • ͦͷ··͍ଓ͚͍ͨ߹: • Vue Macro ͷ `@vue-macros/reactivity-transform` Ͱ ͍ଓ͚Δ͜ͱͰ͖Δ https://vue-macros.sxzz.moe/features/reactivity-transform.html
Vue 3.3 ͦͷଞ
de fi neOptions • <script setup> Ͱ Options API ͕͑ΔΑ͏ʹͳͬ
ͨ <script> ͕ͳͯ͘ <script setup> ͷΈͰ Options API ΛఆٛͰ͖ΔΑ͏ʹͳͬͨ
toRef / toValue • Reactivity API पΓͷศརϢʔςΟϦςΟΛఏڙ • toRef
ref ʹਖ਼نԽ͢ΔϢʔςΟϦςΟؔ
toRef / toValue • toRef ʹର͠ɺtoValue ʹਖ਼نԽ͢ΔϢʔςΟ ϦςΟؔ
Vue.js ެࣜϓϥάΠϯ & πʔϧ
ެࣜҰཡ • routing: vue-router • store: pinia • eslint: eslint-plugin-vue
• testing tools: vue-test-utils • devtools: vue-devtools • cli: create-vue • editor: vue-language-tools (چ: volar) • bundler tools: vue-loader / @vite/plugin-vue • docs: vitepress
ެࣜҰཡ • routing: vue-router • store: pinia • eslint: eslint-plugin-vue
• testing tools: vue-test-utils • devtools: vue-devtools • cli: create-vue • editor: vue-language-tools (چ: volar) • bundler tools: vue-loader / @vite/plugin-vue • docs: vitepress Vue ͱؔ࿈ͯ͠େ͖͍ಈ͖͕͋ͬͨ
vue-language-tools ͱ • Volar ʹมΘΔ৽໊͍͠শ • Volar v1 2022/10/10
ʹϦϦʔε͞Εͨ • ͦͷޙίΞ෦͕ Volar.js ͱͯ͠நग़͞ΕɺVue ؔ ࿈ͷϞδϡʔϧɺύοέʔδ͕ vue-language-tools ͱͳͬͨ
ߏ https://github.com/vuejs/language-tools#high-level-system-overview “High Level System Overview” ΑΓ
ߏ VSCode Ҏ֎ͷΤσΟλͰ͑ΔΑ͏ʹͳ͍ͬͯΔʂ
Volar.js ଞʹΘΕ࢝Ί͍ͯΔ • ݱࡏͰ࡞ऀͷ Johnson Chu ࢯ͕ϑ ϧλΠϜͰऔΓΜͰ͍Δ • StackBliz
͕ Volar.js ϑϧλΠϜ OSS Λࢧ͍͑ͯΔ
Volar.js ʹ͍ͭͯৄ͘͠… • Volar.js ͷηογϣϯτʔΫ͕ Vue Fes Japan 2023 ʹ͋ΔͷͰͥͻࢀՃͯ͠ฉ͖·͠ΐ͏ʂ
VitePress ʁ • ͪΐ͏Ͳ͜ͷλΠϛϯά (v-tokyo#18) Ͱ v1.0 RC ͕ ϦϦʔε͞Εͨʂ
https://twitter.com/KiaKing85/status/1688869807733772288
VitePress ͷݕࡧपΓ͕ڧԽ • VitePress ͷݕࡧɺAlgolia Ҏ֎ʹ minisearch Ͱ ϩʔΧϧͰݕࡧͰ͖ΔΑ͏ʹͳ͍ͬͯΔ
Nuxt
ຊʹೖΔલʹ…
Nuxt 3 ʹ͍ͭͯೖ͍ͨ͠ํ 💁 • ushironoko ͞ΜͷεϥΠυΛࢀߟʹʂ Nuxt 3
ೖ͍ͨ͠ํʹػೳ Composables ʹͭ ͍ͯΑ͘·ͱ·͍ͬͯΔ https://slides.com/ushironoko/beginning-nuxt-3-reiwa Nuxt3 ೖ ྩ ࠷৽
Nuxt ͱ https://nuxt.com/ Vue.js ͚ͷ Web ϑϨʔϜϫʔΫ
Nuxt ͷಛ • ࣗಈԽͱنʹΑͬͯ։ൃʹઐ೦Ͱ͖ΔڥΛఏڙ • αʔόʔαΠυϨϯμϦϯάΛඪ४Ͱఏڙ • ϢχόʔαϧͳαʔόʔΤϯδϯͰͲ͜Ͱಈ࡞͢Δ • ϞδϡʔϧγεςϜͰ
Nuxt Λ֦ுͰ͖Δ
Nuxt ͷϦϦʔελΠϜϥΠϯ • 2016/10/25: Nuxt.js 0.1 Vue 2.0
ϦϦʔεޙ & ಉ࣌ظʹϦϦʔε͞Εͨ Next.js ʹ৮ൃ͞Εͯnuxtlabs ۀऀ sebastian Chopin ࢯʹΑͬͯੜ • 2018/01/09: Nuxt.js 1.0 Nuxt.js ੜޙɺܑ Alexandre Chopin ࢯ Pooya ࢯɺClark ࢯͳͲϝϯόʔ͕δϣΠϯɻ Pooya ࢯʹΑͬͯ Nuxt Modules ͕ಋೖ͞Εͨɻ https://medium.com/@nuxt_js/nuxt-js-1-0-is-out-bab1af459972 • 2018/09/21: Nuxt.js 2.0 create-nuxt-appɺwebpack4 & babel7 ରԠͳͲͯ͠ϦϦʔεɻ ݱࡏͷ Nuxt team ϝϯόʔͷ ManniL ࢯδϣΠϯ https://medium.com/@nuxt_js/nuxt-js-2-0-webpack-4-esm-modules-create-nuxt-app-and- more-6936ce80d94c
ͦͯ͠…
͍ͭʹ Nuxt 3 ͕དྷͨʂ • 2022/11/16 ͍ͭʹϦϦʔεʂ • ։ൃظؒ •
beta ϦϦʔε(2021/10)͔Β1ӽ͠ https://nuxt.com/blog/nuxt3-beta • R & D(2020͔ΒNuxt 3ͷ։ൃ͡·͍ͬͯΔ)ΛؚΊΔ ͱ2͝͠ https://nuxt.com/blog/nuxt-on-the-edge • Nuxt 3 ͔Β “.js” ͕औΕͯදه “Nuxt” ʹ • ݱࡏͷ࠷৽όʔδϣϯ(v-tokyo#18 ࣌) 3.6
ݱࡏͷ Nuxt ։ൃମ੍ • ϑϨʔϜϫʔΫνʔϜϝϯόʔʹΑͬͯίϛϡχ ςΟͷϑΟʔυόοΫ & RFC ϕʔεʹ։ൃ͍ͯ͠Δ •
2023͔Β Nuxt 3 ։ൃ্ཱ͔ͪ͛ΒϦʔυͯͨ͠ Pooya ࢯ͔Β Daniel ࢯʹότϯλον https://nuxt.com/blog/vision-2023#nuxt-a-vision-for-2023 • Pooya ࢯݱࡏ unjs & nitro ʹϑΥʔΧε
৽͍͠ Nuxt ͷΞʔΩςΫνϟ • ίΞΤϯδϯ: nuxt • όϯυϥ: @nuxt/vite-builder &
@nuxt/webpack-builder • CLI: nuxi • αʔόʔΤϯδϯ: nitro • ։ൃΩοτ: @nuxt/kit • Nuxt 2 ϒϦοδ: @nuxt/bridge
৽͍͠ Nuxt ͷΞʔΩςΫνϟ • ίΞΤϯδϯ: nuxt • όϯυϥ: @nuxt/vite-builder &
@nuxt/webpack-builder • CLI: nuxi • αʔόʔΤϯδϯ: nitro • ։ൃΩοτ: @nuxt/kit • Nuxt 2 ϒϦοδ: @nuxt/bridge Nitro ৽͍͠ Nuxt Λࢧ͑ΔίΞٕज़
None
Nitro ͱ • Ͳ͜Ͱಈ࡞͢Δ WebαʔόʔΛߏங͢ΔͨΊͷϑ ϨʔϜϫʔΫ • ϓϩδΣΫτ։࢝࣌ɺΤοδαΠυͰಈ࡞͢ΔΑ ͏తͰαʔόʔΤϯδϯΛ࡞͍ͬͯͬͨ •
ίʔυωʔϜ: sigma https://www.npmjs.com/package/@nuxt/sigma • express ΛΘͣʹϑϧεΫϥον͔Β࡞ͬͨ • h3: https://github.com/unjs/h3
Nitro ͷಛ
Nitro Ͳ͜Ͱಈ͘ʂ • ఏڙ͢ΔϓϩόΠμʔ & ϓϦηοτ͏ͱͲ͜Ͱ ϗεςΟϯάͰ͖Δ https://nitro.unjs.io/deploy Aws Lambda
Azure Bun Cleavr Cloudflare Deno DigitalOcean Edgio Firebase Flightcontrol GitHub Pages Heroku IIS Lagon Netlify Render.com StormKit Vercel
Nitro unjs ͷҰ෦ • unjs ͷ OSS ͱͯ͠࡞ΒΕ ͍ͯΔ
Uni fi ed JavaScript Tools: https://github.com/unjs • unjs ʹ͍ͭͯ CFP ηογϣ ϯτʔΫ͕ Vue Fes Japan 2023 ʹ͋ΔͷͰׂѪʂ
Nitro Framework agnostic! • Nitro Λ͑ଞͷϞϊΛಈ͔͢ Web ϑϨʔϜ ϫʔΫΛ࡞Δ͜ͱͰ͖Δ!
(ϝλϑϨʔϜϫʔΫ) • Daniel ࢯʹΑΔ࣮ূσϞ GitHub repo: https://github.com/danielroe/agent-conf-2023 https://www.youtube.com/watch?v=hdHLU0qHKhA AgentConf 2023 Youtube
Nitro Λͬͨͷ͕ੜ·Εͭͭ͋Δ • vinxi • GitHub repo: https://github.com/nksaraf/vinxi • ݱ࣌(v-tokyo#18)Ͱ
React ͱ Solid ͷΈ?
Nuxt ͕αϙʔτ͢Δ ϨϯμϦϯάϞʔυ
ैདྷ͔Βαϙʔτ͍ͯ͠Δ ϨϯμϦϯά
ϢχʔόαϧϨϯμϦϯά (SSR) • Nuxt 3ͰσϑΥϧτ ON https://nuxt.com/docs/guide/concepts/rendering#universal-rendering
ϢχʔόαϧϨϯμϦϯά (SSR) • Pros • ύϑΥʔϚϯε͕Α͍ • SEO •
Cons • αʔόʔίετ͕͔͔Δ • ։ൃ࣌ʹαʔόʔͱϒϥβΛҙࣝ͠ͳ͍ͱ͍͚ ͳ͍
ΫϥΠΞϯταΠυϨϯμϦϯά (CSR) • nuxt.con fi g Ͱ `ssr: false` Ͱ༗ޮʹͰ͖Δ
(͍ΘΏΔ SPA Ϟʔυ) https://nuxt.com/docs/guide/concepts/rendering#client-side-rendering
ΫϥΠΞϯταΠυϨϯμϦϯά (CSR) • Pros • αʔόʔίετ͕͔͔Βͳ͍ • ։ൃϒϥβڥͷΈΛҙࣝ͢ΕΑ͍ • Cons
• ύϑΥʔϚϯε • SEO
Nuxt 3͔Βαϙʔτ͢Δ ϨϯμϦϯά
ϋΠϒϦουϨϯμϦϯά • Nitro ͷ `routeRules` Ͱϖʔδ/ϧʔτ୯ҐͰ SSR / CSR /
ISR / SWR ͳͲϨϯμϦϯάΛࡉ੍͔͘ޚͰ ͖Δ https://nuxt.com/docs/guide/concepts/rendering#hybrid-rendering
ΤοδαΠυϨϯμϦϯά(ESR) • CDN ͷΤοδαʔόʔ্ͰϨϯμϦϯά͢Δ͜ͱ ͰɺԠͪ࣌ؒΛॖʹΑͬͯΤϯυϢʔβʔ ͷ UX Λ্ͤ͞Δ
ΤοδαΠυϨϯμϦϯά(ESR) • ҎԼͷΤοδڥΛ࣋ͭϓϥοτϑΥʔϜʹσϓϩ ΠͰ͖Δ • Cloudflare Pages • Vercel Edge
Functions • Netlify Edge Functions • Lagon
ΤοδαΠυϨϯμϦϯά(ESR) • σϓϩΠɺҎԼͷΑ͏ʹNitro ͷϓϦηοτΛࢦ ఆ͢Δ (Cloudflare Pages θϩίϯϑΟά) • nuxt.con
fi g ͷέʔε • ڥมͷέʔε $ NITRO_PRESET=vercel-edge nuxi build
ΤοδαΠυϨϯμϦϯά(ESR) • h3 ͕ v1.8 Ҏ͔߱Β Web ඪ४ API (Request/Response,
ReadableStream) ͱΠ ϯςάϨʔγϣϯͰ͖ ΔΑ͏ʹͳͬͨ • ࠓޙ͞ΒʹରԠϓϥο τϑΥʔϜ͕૿͑Δ https://twitter.com/_pi0_/status/1686911793954729984
ࠓޙ Nuxt Ͱಋೖ͞ΕΔ ಛघͳϨϯμϦϯά
⚠ ҙ ⚠ ͜Ε͔Β͢͜ͱ ·࣮ͩݧతػೳঢ়ଶ & WIP
৽ͨʹಋೖ͞ΕΔಛघͳϨϯμϦϯά • Nuxt Server Components • Nuxt Island
Nuxt Server Components
Nuxt Server Components • ίϯϙʔωϯτΛαʔόʔ্ͰϨϯμϦϯάͯ͠ɺ ϨϯμϦϯά͞ΕͨίϯϙʔωϯτͷHTMLΛϒϥ β্ʹࠩ͠ࠐΉ ϒϥβ αʔόʔ Server
Component Ϩϯμϥ (Nitro) Server Component ϦΫΤετ(fetch) HTMLจࣈྻ (payload) ϨϯμϦϯά
Nuxt Server Comonents 2 छྨ͋Δ • Standalone Server Components
୯ಠͰಈ࡞͢Δͷ • Paired with a `.client` component ϒϥβ্ͰͷΈಈ࡞͢Δίϯϙʔωϯτͱ߹ͤ Λఆͯ͠ಈ͘ͷ
Nuxt Server Components ͷఆٛํ๏ • Nuxt Server Components ͱͯ͠ڍಈ͍ͤͨ͞߹ ίϯϙʔωϯτϑΝΠϧ໊ʹ
`.server` ͷαϑΟο ΫεΛೖΕΔ
ͱ͜ΖͰ `.client` ίϯϙʔωϯτͱʁ • ϒϥβ(ΫϥΠΞϯτ)ͰͷΈϨϯμϦϯά͞ΕΔ (CSR) ͞ΕΔίϯϙʔωϯτͷ͜ͱɻ • CSR ͍ͤͨ͞ରίϯϙʔωϯτͷϑΝΠϧ໊ʹ
`.client` ͷαϑΟοΫεΛೖΕΔ
Standalone Server Components • ରίϯϙʔωϯτ͕ϒϥβͰϨϯμϦϯά͞Ε ΔλΠϛϯάͰαʔόʔʹϦΫΤετΛඈͯ͠ɺ SSR ͷ݁Ռʹஔ͖͑Δ
Standalone Server Components ͷ͍ํ • ϑΝΠϧ໊ʹαϑΟοΫε `.server` ೖΕͯఆٛ • ͏࣌௨ৗͷίϯϙʔωϯτͷ͍ํͱಉ͡
Nuxt `.server` ͳίϯϙʔωϯτΛϏϧυ࣌ʹ ΫϥΠΞϯτʹ৴͢Δ JS ʹόϯυϧ͠ͳ͍ʂ αʔόʔαΠυͷΈόϯυϧ
Paired with a `.client` component • `.server` ίϯϙʔωϯτ SSR ͞Εͯɺ`.client`
ί ϯϙʔωϯτɺϚϯτ͞Εͨ (`onMounted`)ޙ ʹ CSR ͞ΕΔ
Paired with a `.client` component ͷ͍ํ • ϑΝΠϧ໊ʹαϑΟοΫε `.client`ɺ`.server`Λ •
͏࣌௨ৗͷίϯϙʔωϯτͷ͍ํͱಉ͡ ͨͩɺϋΠυϨʔγϣϯϛεϚον͕ى͖ͳ͍Α͏ʹ ͠ͳ͍ͱ͍͚ͳ͍
Nuxt Server Components ͷར • ΫϥΠΞϯτͷόϯυϧαΠζΛݮΒͤΔ • ηΩϡΞʹͳΔ • αʔόʔ͕ෆཁͳ੩తϗεςΟϯάͰಈ͔ͤΔ
• ௨ৗͷίϯϙʔωϯτͱޓੑ͕͋Δ
͠ Nuxt Server Components Λ͏ͱ͖… • ·࣮ͩݧతػೳͳͷͰɺnuxt.con fi g Ͱ
`experimental.componentIslands` ͰΦϓτΠϯΛ Εͣʹʂ
Nuxt Island
Nuxt Island ͱ • Nuxt ൛ΞΠϥϯυΞʔΩςΫνϟ • `<NuxtIsland>` ίϯϙʔωϯτͰΞΠϥϯυΛߏங Ͱ͖Δ
https://nuxt.com/docs/api/components/nuxt-island#nuxtisland
ͦͷલʹ
ΞΠϥϯυΞʔΩςΫνϟͱ🏝 • ΞΠϥϯυΞʔΩςΫνϟͷ ໋໊ऀ Katie Sylor-Miller ࢯ • ϖʔδʹ੩త෦ͱಈత෦ Λಉډͤ͞Δ͜ͱ͕Ͱ͖Δ
• ඞཁͳλΠϛϯάͰ JS ͕ ϩʔυ͞ΕΔ͜ͱͰɺ෦త ͳϋΠυϨʔγϣϯ͕Մೳ https://docs.astro.build/ja/concepts/islands/ ੩తͳ෦Λʮւʯಈతͳ෦Λʮౡʯͱଊ͑ͨϝλϑΝ
Nuxt ൛ΞΠϥϯυΞʔΩςΫνϟԿ͕ҧ͏ʁ • `<NuxtIsland>` ίϯϙʔωϯτͰϨϯμϦϯά͞Ε Δίϯςϯπ੩తίϯςϯπ • Nuxt ͷ߹ΞΠϥϯυΛ੩తͱͯ͠ॲཧ͢Δ •
ΞΠϥϯυΫϥΠΞϯτͷ JS ʹόϯυϧͯ͠ ৴͠ͳ͍ Nuxt ൛ΞΠϥϯυΞʔΩςΫνϟ ಈతͳ෦Λʮւʯ੩తͳ෦Λʮౡʯͱ͢Δ ٯͷΞϓϩʔν
Nuxt Island ͷϢʔεέʔε • ݱ࣌ (v-tokyo#18) ͰɺύϑΥʔϚϯε্ • ϦϞʔτιʔεͷΞΠϥϯυΛϨϯμϦϯά͢Δ͜ ͱ͕Ͱ͖ΔͷͰϚΠΫϩϑϩϯτΤϯυతͳ༻్
Մೳ͔
͔ͯ͠͠ Nuxt Island Nuxt Server Components? • ݱ࣌ (v-tokyo#18)
Ͱ Yes • Nuxt Server Components ͕ Nuxt Island Λ֦ுͯ͠ ࣮͍ͯ͠Δ • ͕ɺNuxt Server Components ·ͩൃల్্ͷͨ ΊࠓޙมΘΔՄೳੑ͕͋Δ
Nuxt Server Components ͷϩʔυϚοϓ • ϦϞʔτιʔεରԠ ଞαΠτͷ Nuxt Server
Components ͷಡࠐΈɻ ͜Ε͕Ͱ͖Δͱ Nuxt Microservices ͕Ͱ͖ΔΑ͏ʹͳ ΔΒ͍͠ɻ (طʹ࣮ࡁΈɻv3.7ͰϦϦʔε༧ఆ) • ԆϩʔυରԠ Nuxt Server Components ϩʔυதʹφϏήʔγϣϯΛ ͛ͳ͍Α͏ϑΥʔϧόοΫΛදࣔͰ͖ΔΑ͏ʹͳΔ (࣮ࡁΈ & ϦϦʔεࡁΈ) https://roe.dev/blog/nuxt-server-components#roadmap
Nuxt Server Components ͷϩʔυϚοϓ • ΠϯλϥΫςΟϒରԠ slots Ҏ֎ͰΠϯλϥΫςΟϒͳίϯϙʔωϯτ ͷಈ࡞ΛՄೳʹ͢Δ
(ະ࣮) • `<ServerOnly>` ίϯϙʔωϯτ `<ClientOnly>` ίϯϙʔωϯτͷΑ͏ʹλάͷதʹ ͋ΔϞϊΛ SSR ͢ΔΑ͏ࣗಈม (ະ࣮) https://roe.dev/blog/nuxt-server-components#roadmap
Nuxt Server Components ͷϩʔυϚοϓ • ϩʔυϚοϓͷਐḿঢ়گ GitHub Issues Ͱཧ
͞Ε͍ͯΔ https://github.com/nuxt/nuxt/issues/ 19772
Nuxt ͷ։ൃπʔϧ
Nuxt DevTools • Nuxt 3 ͔ΒΑΓΑ͍ DX Λఏڙ͢ΔͨΊʹ Nuxt ʹ
ಛԽͨ͠ DevTools ͕ Nuxt Modules Ͱఏڙ͞ΕΔ Α͏ʹͳͬͨ https://devtools.nuxtjs.org/
Nuxt DevTools ศརʂ • Nuxt Ͱ WebΞϓϦΛ࡞Δਓ Nuxt ΤίγεςϜΛ ։ൃ͢ΔਓʹΑ͍
DX Λఏڙͯ͘͠ΕΔ • ϑϨʔϜϫʔΫʹΑͬͯநԽ͞Ε͍ͯΔ෦ಈ ͖Λ֬ೝͰ͖Δ • Կ͕Ͱ͖Δ͔ৄࡉ Nuxt ެࣜϒϩάͰʂ https://nuxt.com/blog/introducing-nuxt-devtools
ͦͷଞ Nuxt ຊମपΓͰ ࠓਐΊ͍ͯΔ͜ͱ
৽͍͠ΠϯςάϨʔγϣϯͷఏڙΛݕ౼͍ͯ͠Δ • Nuxt Scripts • Nuxt Fonts • Nuxt Assets
• Google Chome Aurora νʔϜͱ࿈ܞͯ͠ಈ͍͍ͯΔ • ·ͩݱࡏ RFC ͰٞϑΣʔζ https://twitter.com/danielcroe/status/1677261172427333632
Nuxt Scripts • WebαΠτͷύϑΥʔϚϯεͱίϯϓϥΠΞϯεΛ ଛͳΘͣʹɺNuxt ΞϓϦʹαʔυύʔςΟʔεΫ ϦϓτΛಋೖ͢ΔͨΊͷΈΛఏڙ͠Α͏ͱͯ͠ ͍Δ • RFC
https://github.com/nuxt/nuxt/discussions/22016
Nuxt Fonts • ։ൃऀ͕ Nuxt ΞϓϦͷϑΥϯτΛ؆୯ʹઃఆͰ͖Δ Α͏ʹ͠Α͏ͱ͍ͯ͠Δ • ͞·͟·ଘࡏ͢ΔWebϑΥϯτΛϓϩόΠμʔͰऔΓ ѻ͍ΒΕΔΑ͏ʹ͢Δ
• Nuxt Assets ͱ࿈ಈͯ͠ϏϧυॲཧͰϑΥϯτΛॲ ཧ͠ɺϑΥϯτ/ϑΥϯτCSSͷμϯϩʔυपΓͷ࠷ దԽݕ౼͍ͯ͠Δ • RFC https://github.com/nuxt/nuxt/discussions/22014
Nuxt Assets • ։ൃऀ͕αʔυύʔςΟʔ͕ఏڙ͢ΔΑ͏ͳΞηοτ ΛϓϩάϥϚϒϧʹϩʔυॲཧͰ͖ΔΈΛఏڙ͠ Α͏ͱ͍ͯ͠Δ • എܠ: Ξηοτ (εΫϦϓτɺϑΥϯτɺCSSͳͲ)
αʔυύʔςΟʔͷґଘؔͦΕͧΕͷҟͳΔ ΩϟογϡઓུʹΑͬͯϩʔυ͕͘͠ɺϨϯμϦϯ άΛϒϩοΫ͢ΔͷͰύϑΥʔϚϯεԼͷݪҼʹ ͳ͍ͬͯΔ • RFC https://github.com/nuxt/nuxt/discussions/22012
Nuxt Studio
Nuxt Studio • Nuxt Λͬͨ CMS αʔϏε • ݱࡏ beta
(ॱ࣍ট੍) • GitHub ͱ࿈ܞ͍ͯ͠ΔͨΊ ؆୯ʹϗεςΟϯάͰ͖Δ (GitHub Pages ʹσϓϩΠͰ ͖Δ) • ͪΖΜଞͷϓϥοτϗʔϜ ʹσϓϩΠՄೳ https://nuxt.studio/
·ͱΊ
Vue.js ͷಈ • ͜͜࠷ۙେ͖ͳػೳϦϦʔεͳ͘ɺSFC पΓ ͷ DX վળʹऔΓΜͰ͍Δ • Vue
ެࣜपΓͷΤίγεςϜͰ Vue ຊମͱ͍ͬ ͠ΐʹऔΓΜͰ͖ͨ Volar ͕҆ఆԽ • Volar Volar.js ͱͯ͠ Vue.js Ҏ֎ͷΤίγεςϜ ʹ DX ఏڙΛ࢝Ί͍ͯΔ
Nuxt ͷಈ • Vue 3 ͕ϦϦʔε͞Ε͔ͯΒ 2ܦաΑ͏͘ Nuxt 3 ͕
ϦϦʔε͞Εͨ • Nuxt 3 ͷίΞٕज़ Nitro Ͳ͜Ͱαʔόʔ͕ಈ࡞͢Δ Α͏֦ுੑߴ͘ઃܭ͞Ε͍ͯΔ • ͦͷͨΊɺ͜͜࠷ۙͷ Web ϑϩϯτΤϯυपΓͷτϨ ϯυʹॊೈʹରԠՄೳʹͳ͍ͬͯΔ • ·ͨ DX ʹྗΛೖΕ͓ͯΓɺDevTools Webϑϩϯ τΤϯυͷ DX ΛߴΊΔͨΊʹ৽͍͠औΓΈ࢝Ίͯ ͍Δ
࠷ޙʹ
Vue Fes Japan 2023 ʹߦ͜͏ʂ • Vue.jsɺNuxt ɺVite ͦͯ͠ΤίγεςϜͷ։ൃʹؔ Θ͍ͬͯΔίΞνʔϜ͕ήετεϐʔΧʔͱͯ͠དྷ
ͯ͠ηογϣϯͰ͠·͢ʂ • ࠓͷΛ౿·͑ͭͭɺͦ͏ͨ͠ํʑͷηογϣϯ Λฉ͍ͯ͞Βʹਂ۷ͬͯΒ͑Εͱʂ • ·ͨɺίϛϡχςΟ͔Βͷັྗతͳ CFP ηογϣ ϯ͋ΔͷͰੋඇࢀՃָͯ͠͠ΜͰ͍ͬͯΒ͑Ε ͱʂ
Thank You! ❤