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
Vue.jsエコシステム動向2023
Search
kazupon
August 09, 2023
Programming
9.3k
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
940
Oxlint JS plugins
kazupon
1
1.4k
gunshi
kazupon
1
240
Nitro v3
kazupon
2
560
わたしのOSS活動
kazupon
3
630
Vapor Revolution
kazupon
3
4.2k
Vue.js最新動向
kazupon
3
1.6k
Vue 3.4
kazupon
13
4.9k
Vue & Vite Rustify
kazupon
4
2.5k
Other Decks in Programming
See All in Programming
エンジニア向け会社紹介/Findy Company Profile
findyinc
6
360k
Welcome to the "Parametricity" 🏙️ − Generic だけど Specific な世界 −
guvalif
1
110
なぜ関数型プログラミングで「型」と「証明」が語られるのか #fp_matsuri
kajitack
3
530
OSINT for SRE: 学術論文とポストモーテムから探る システム障害の共通パターン / SRE NEXT 2026
tomoyk
1
1.6k
OS アップデート対応の取り組み方がもっと共有されてほしい
andpad
0
110
Vite+ Unified Toolchain for the Web
naokihaba
0
670
LaravelLive Japan の裏方のすべて — 第188回 PHP勉強会@東京 (2026-06-24)
suguruooki
2
150
なぜ型を書くのか? TSKaigi2026で改めて考える #tskaigi_smarthr
kajitack
0
210
コンテキストの使い捨てをやめる — ビジネスルール駆動開発と miko —
ioki
0
270
フィードバックで育てるAI開発
kotaminato
1
100
関数型プログラミングのメリットって何だろう?
wanko_it
0
140
初めてのKubernetes 本番運用でハマった話
oku053
0
110
Featured
See All Featured
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
230
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.2k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
410
Designing for humans not robots
tammielis
254
26k
How GitHub (no longer) Works
holman
316
150k
SEO for Brand Visibility & Recognition
aleyda
0
4.6k
The Cost Of JavaScript in 2023
addyosmani
55
10k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
370
The Mindset for Success: Future Career Progression
greggifford
PRO
0
380
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
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! ❤