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
1.2k
Oxlint JS plugins
kazupon
1
1.4k
gunshi
kazupon
1
240
Nitro v3
kazupon
2
570
わたしのOSS活動
kazupon
3
630
Vapor Revolution
kazupon
3
4.3k
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
【やさしく解説 設計編 #0】DDDのコード、読めるのに分からない人へ
panda728
PRO
2
290
OpenSpecのproposalにbrainstormingを持たせてみた
tigertora7571
1
170
ルールを書いて終わらせないハーネスエンジニアリング
yug1224
4
1.8k
GDG Korea Android: 2026 I/O Extended ~ What's new in Android development tools
pluu
0
200
AIエージェントで 変わるAndroid開発環境
takahirom
2
760
霧の中の代数的エフェクト
funnyycat
1
450
作るコストが小さくなった時代 幸せに働くために改めて考えたいこと 〜エンジニアとして価値を出し続けるために注視している二分野〜
yuppeeng
0
160
PHP Application における Kubernetes 内 gRPC 通信
ganchiku
0
570
「寝てても仕事が進む」Claude Codeで組む第二の脳
tomoyafujita2016
0
240
テーブルをDELETEした
yuzneri
0
130
<title><a id="</title>君はこのHTMLをパースできるか"></a></title> #雑LT_study
pizzacat83
0
130
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
200
Featured
See All Featured
Testing 201, or: Great Expectations
jmmastey
46
8.2k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.9k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
190
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.7k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
780
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.1k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
Bash Introduction
62gerente
615
220k
A Tale of Four Properties
chriscoyier
163
24k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
230
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! ❤