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.2k
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
650
Oxlint JS plugins
kazupon
1
1.3k
gunshi
kazupon
1
230
Nitro v3
kazupon
2
550
わたしのOSS活動
kazupon
3
620
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
不変条件と整合性境界—ビジネスが決める設計判断と実現パターン / Invariants and Consistency Boundaries
nrslib
13
3.7k
Signal Forms: Beyond the Basics @ngBaguette 2026 in Paris
manfredsteyer
PRO
0
240
AI 時代のソフトウェア設計の学び方
masuda220
PRO
29
12k
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
10
3.8k
「なぜそう決めたのか」を残し続ける仕組み ― Notion AI カスタムエージェント × Slack連携による設計判断の自動記録 - NIKKEI Tech Talk #47
niftycorp
PRO
0
140
運用エージェントは "作る" から "育てる" へ - 記憶と自己進化の3層設計パターン / self-evolving-agents-three-layer-agent-design
gawa
12
3.6k
Language Server 使ってる? 〜VSCode と Zed の場合〜 / Are you using a Language Server? ~For VS Code and Zed~
handlename
0
780
A2UI という光を覗いてみる
satohjohn
1
130
Signal Forms: Details & Live Coding @enterJS 2026 in Mannheim
manfredsteyer
PRO
0
110
タクシーアプリ『GO』の バックエンド開発のおける AI利活用と若者のすべて
pyama86
3
2k
「AIで開発し、AIを届ける」をEvalでつなぐ 〜AIネイティブに始めるプロダクト開発の実践〜 / Connecting "Develop with AI, deliver AI" with Eval
rkaga
4
5k
Claspは野良GASの夢をみるか
takter00
0
190
Featured
See All Featured
Measuring & Analyzing Core Web Vitals
bluesmoon
9
860
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
1
350
Everyday Curiosity
cassininazir
0
230
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
480
The Curse of the Amulet
leimatthew05
1
13k
Evolving SEO for Evolving Search Engines
ryanjones
0
220
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
190
Facilitating Awesome Meetings
lara
57
7k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
390
Technical Leadership for Architectural Decision Making
baasie
3
400
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! ❤