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
Demystifying Nuxt Bridge
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
wattanx
October 29, 2023
Programming
7.7k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Demystifying Nuxt Bridge
Vue Fes 2023
wattanx
wattanx
October 29, 2023
More Decks by wattanx
See All by wattanx
Nuxt Server Components
wattanx
0
370
フロントエンド技術選定の裏側
wattanx
1
120
Unlocking the potential of Nuxt Server Components
wattanx
2
740
Deep dive into Nuxt Server Components
wattanx
1
4k
Nuxt Test Utils で始める効率的な Nuxt アプリケーションのテスト
wattanx
4
4.3k
小さく進める Nuxt 3 移行
wattanx
0
2.1k
プロダクト開発を止めずに Composition API と TypeScript に 最速で移行するための戦い
wattanx
0
2.4k
Other Decks in Programming
See All in Programming
鹿野さんに聞く!『TypeScriptコードレシピ集』で磨く実践力
tonkotsuboy_com
4
970
act1-costs.pdf
sumedhbala
0
150
LLM本来の能力を解き放つサンドボックス技術とAI民主化への適用
yukukotani
3
4.8k
AI 輔助遺留系統現代化的經驗分享
jame2408
1
1.1k
そのテスト、説明できますか?~LWテスト戦略FW~のご紹介
nakahara
0
190
The Bowling Game- From Imperative to Functional Programming - Part 1
philipschwarz
PRO
0
220
Oxcを導入して開発体験が向上した話
yug1224
4
370
Go1.27で導入されるジェネリクスメソッドでできること
mackee
0
240
エンジニアにデザインハーネスを 〜デザインプロセスを規定するためのハーネス〜 / Design harness from an engineer's perspective
rkaga
2
590
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
350
どこまでゆるくて許されるのか
tk3fftk
0
300
任せる範囲はこう広がった / How the Scope of AI Delegation Has Expanded
nrslib
1
220
Featured
See All Featured
KATA
mclloyd
PRO
35
15k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
エンジニアに許された特別な時間の終わり
watany
107
250k
My Coaching Mixtape
mlcsv
0
160
Test your architecture with Archunit
thirion
1
2.3k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
300
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
550
Information Architects: The Missing Link in Design Systems
soysaucechin
0
1k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
The Limits of Empathy - UXLibs8
cassininazir
1
380
Transcript
STORES 株式会社 Demystifying Nuxt Bridge 〜 あなたがまだ見ぬ可能性とその活用法〜
目次 2 自己紹介 はじめに Nuxt Bridge を使った Nuxt 3 移行
Nuxt Bridge でもできない Nuxt 3 移行 STORES の事例 まとめ 01 02 03 04 05 06
自己紹介
渡邊 涼太(wattanx) ・STORES 株式会社 ソフトウェアエンジニア。 ・STORES ネットショップの開発に関わっている。 ・猫が好き。大阪在住。 ・Nuxt Bridge
のコアコントリビュータ。 ・https://twitter.com/pontaxx 自己紹介
はじめに
はじめに(今日話すこと) どのように Nuxt Bridge を導入して Nuxt 3 移行を進めるのがよいかを話します
はじめに(今日話さないこと) Nuxt 2 の機能や Nuxt 3 の機能はあまり深掘りません
はじめに Nuxt Bridge を知っていますか?
はじめに • https://github.com/nuxt/bridge • Nuxt 3 と上方互換性のあるライブラリ (Nuxt 3 の機能の一部が
Nuxt 2 でも使えるようなる) Nuxt Bridge とは
はじめに Nuxt 2 のプロジェクトで Nuxt 3 の機能を体験できる
はじめに Nuxt 2 のプロジェクトで Nuxt 3 の機能を体験できる
はじめに Nuxt 3 との差分を減らし、 Nuxt 3 への移行の負担を減らす
はじめに どれくらい Nuxt 3 との差分が少なくなるのか
はじめに https://github.com/wattanx/nuxt-migration-example
はじめに Nuxt 2 の状態で どれくらい Nuxt 3 への移行が進められるか
はじめに Bridgeでもできる Bridgeでもできる Bridgeでもできる Bridgeでもできる Bridgeでもできる Bridgeでもできる Bridgeでもできる Bridgeでもできる Bridgeでもできる
Bridgeでも一部できる
はじめに Nuxt Bridge の導入って何をするのか Nuxt Bridge 入れた Nuxt 3 移行ってどうやるのか
Nuxt Bridge を使った Nuxt 3 移行
Nuxt Bridge を使った Nuxt 3 移行 (Nuxt Bridge の導入) Nuxt
Bridge のインストール 〜 設定完了まで
Nuxt Bridge を使った Nuxt 3 移行 (Nuxt Bridge の導入) •
Nuxt 2 を最新バージョンにし、Nuxt Bridge をインストールする RCでも良い
Nuxt Bridge を使った Nuxt 3 移行 (Nuxt Bridge の導入) •
defineNuxtConfig つかうように修正する • bridge オプションを false にして config を設定する
Nuxt Bridge を使った Nuxt 3 移行 (Nuxt Bridge の導入) •
nuxt コマンドを nuxt2 コマンドに変更する
Nuxt Bridge を使った Nuxt 3 移行 (Nuxt Bridge の導入) •
@nuxt/cli (nuxi) が提供する nuxt コマンドと競合するので、nuxt2 に変更する必要がある。 ◦ Nuxt 3 では nuxt コマンドで nuxi を実行できるようにしている • 変更しない場合、nuxt 3 の nuxt コマンドだと認識されてしまう場合 がある。
Nuxt Bridge を使った Nuxt 3 移行 (Nuxt Bridge の導入) nuxt2
コマンドを実行してみてください 今までどおり Nuxt 2 のプロジェクトが動作するはず
Nuxt Bridge を使った Nuxt 3 移行 ここからは Nuxt 2 の状態でできる
Nuxt 3 移行
Nuxt Bridge を使った Nuxt 3 移行 • TypeScript • Plugins
and Middleware • Migrate New Composition API • Migrate Legacy Composition API • Meta Tags • Runtime Config • Nitro • Vite
Nuxt Bridge を使った Nuxt 3 移行 全部一度に対応する必要はない 少しずつ移行できる(Nuxt Bridge のメリット)
Nuxt Bridge を使った Nuxt 3 移行(TypeScript) • https://nuxt.com/docs/bridge/typescript • Nuxt
3 では @nuxt/typescript-build や @nuxt/typescript-runtime といったModule は もう必要ありません。 • Nuxt 3 と同じように TypeScript が利用できる。 TypeScript
• bridge.typescript オプションを true にする Nuxt Bridge を使った Nuxt 3
移行(TypeScript)
Nuxt Bridge を使った Nuxt 3 移行(TypeScript) • @nuxt/typescript-build や @nuxt/typescript-runtime
などの Module を削除する • tsconfig.json を修正する
Nuxt Bridge を使った Nuxt 3 移行(TypeScript) • tsconfig を拡張したい場合、nuxt.config にて設定する必要がある。
◦ https://nuxt.com/docs/api/configuration/nuxt-config#tsconfig • compilerOptions.paths を拡張したいときは、nuxt.config の alias に設定する必要がある。 ◦ https://nuxt.com/docs/api/configuration/nuxt-config#alias 注意点
Nuxt Bridge を使った Nuxt 3 移行(Plugins and Middleware) • https://nuxt.com/docs/bridge/plugins-and-middleware
• Nuxt 2 と Nuxt 3 では Plugins と Middleware の設定方法が大 きく変わる。 • Nuxt 3 と同じ書き方で Plugins や Middleware が設定できる。 Plugins and Middleware
Nuxt Bridge を使った Nuxt 3 移行(Plugins and Middleware) defineNuxtPlugin に変更する
Nuxt Bridge を使った Nuxt 3 移行(Plugins and Middleware) • Nuxt
3 では plugins ディレクトリの一番上の階層に配置され たファイルしか認識されない。 ◦ https://nuxt.com/docs/guide/directory-structure/p lugins#which-files-are-registered • Nuxt 2 のうちにディレクトリ構造を見直しておいた方がよい Plugins
Nuxt Bridge を使った Nuxt 3 移行(Plugins and Middleware) defineNuxtRouteMiddleware に変更する
Nuxt Bridge を使った Nuxt 3 移行(Migrate New Composition API) •
https://nuxt.com/docs/bridge/nuxt3-compatible-api • Nuxt2 では、@nuxtjs/composition-api を利用していた • Nuxt 3 では利用できないので、別の関数などに書き換える 必要がある。 • Nuxt 3 で提供される useNuxtApp などの関数は、Nuxt Bridge でも利用できる。 (Auto Import も使える) Migrate New Composition API
Nuxt Bridge を使った Nuxt 3 移行(Migrate New Composition API) 量が多いので一部を抜粋
• useContext -> useNuxtApp • Auto Import を使わない場合
Nuxt Bridge を使った Nuxt 3 移行(Migrate New Composition API) •
@nuxtjs/composition-api と併用できる。 • 1ページずつ、1コンポーネントずつみたいなかたちですこしずつ移行 できる。 Tips
Nuxt Bridge を使った Nuxt 3 移行 Nuxt 3 との差分少なくなってますよね
Nuxt Bridge を使った Nuxt 3 移行(Migrate Legacy Composition API) •
https://nuxt.com/docs/bridge/bridge-composition-api • @nuxtjs/composition-api の機能は全部 Nuxt Bridge に入った • この Migration を行わずに Migrate New Composition API を やってもいい Migrate Legacy Composition API
Nuxt Bridge を使った Nuxt 3 移行(Migrate Legacy Composition API) bridge.capi
オプションを true にする
Nuxt Bridge を使った Nuxt 3 移行(Migrate Legacy Composition API) •
@vue/composition-api や @nuxtjs/composition-api などの Module を削除する • 一部の関数は削除されていたり変更があるので対応する
Nuxt Bridge を使った Nuxt 3 移行(Migrate Legacy Composition API) •
@nuxtjs/composition-api という alias が Nuxt Bridge により提供 されているので、import文 を書き換える必要はなし (.nuxt/tsconfig.json)
Nuxt Bridge を使った Nuxt 3 移行 • TypeScript • Plugins
and Middleware • Migrate New Composition API • Migrate Legacy Composition API • Meta Tags(次はここの説明) • Runtime Config • Nitro • Vite
Nuxt Bridge を使った Nuxt 3 移行 全部一度に対応する必要はない 少しずつ移行できる(Nuxt Bridge のメリット)
Nuxt Bridge を使った Nuxt 3 移行(Meta Tags) • https://nuxt.com/docs/bridge/meta •
Nuxt 2 では useMeta という Composables をつかっていた。 • Nuxt 3 からは useHead に変更されている。 • Nuxt 3 同様 useHead が利用できる。 (@unhead/vue を使用) Meta Tags
Nuxt Bridge を使った Nuxt 3 移行(Meta Tags) bridge.meta オプションを true
にする
Nuxt Bridge を使った Nuxt 3 移行(Meta Tags) config を変更する app.head
に変更する
Nuxt Bridge を使った Nuxt 3 移行(Meta Tags) useMeta ではなく useHead
を使う (Options API の場合は defineNuxtComponent を使う)
Nuxt Bridge を使った Nuxt 3 移行(Meta Tags) nuxt.config の titleTemplate
は関数で設定できないので注意 ↓のようなコードを /layouts に含める必要がある。 注意点
Nuxt Bridge を使った Nuxt 3 移行(Nitro) • https://nuxt.com/docs/bridge/nitro • Nuxt
3 から Nitro というサーバーエンジンに変更されている。 • Nuxt Bridge でも Nitro が利用できる Nitro
Nuxt Bridge を使った Nuxt 3 移行(Nitro) bridge.nitro オプションを true にする
Nuxt Bridge を使った Nuxt 3 移行(Nitro) • @nuxt/nitro を削除する •
nuxi をインストールする • .gitignore に .output を追加する
Nuxt Bridge を使った Nuxt 3 移行(Nitro) • nuxt2 コマンドから nuxi
コマンドに変更する • target: static なら nuxi generate
Nuxt Bridge を使った Nuxt 3 移行(Nitro) nuxi dev コマンドを実行してみてください
Nuxt Bridge を使った Nuxt 3 移行(Nitro) • ~/server/middleware や ~/server/api
も利用できる https://nuxt.com/docs/guide/directory-structure/server
Nuxt Bridge を使った Nuxt 3 移行(Nitro) • Nitro にすると動かなくなる Nuxt
Module がある。 ◦ 例えば @nuxtjs/proxy 注意点
Nuxt Bridge を使った Nuxt 3 移行(Runtime Config) • https://nuxt.com/docs/bridge/runtime-config •
Nuxt 2 では publicRuntimeConfig や privateRuntimeConfig • Nuxt 3 では runtimeConfig に変更された • Nuxt Bridge でも runtimeConfig が利用できる。 (しかし Nitro を使える状態にあることが前提) Runtime Config
Nuxt Bridge を使った Nuxt 3 移行(Runtime Config) nuxt.config を修正する
Nuxt Bridge を使った Nuxt 3 移行(Runtime Config) useRuntimeConfig で nuxt.config
で設定した値が使える
Nuxt Bridge を使った Nuxt 3 移行(Vite) • https://nuxt.com/docs/bridge/vite • Nuxt
3 から webpack と Vite も選択できる。 • Nuxt Bridge でも Vite が利用できる。 (ただし、Nitro が使える状態であることが前提) Vite
Nuxt Bridge を使った Nuxt 3 移行(Vite) bridge.vite オプションを true にする
Nuxt Bridge を使った Nuxt 3 移行(Vite) • require を使った 動的
Asset URL が使えない ◦ :src=”require(‘@/images/hoge.png’)”のようなコード • 使えなくなる Nuxt Module がある。(@nuxt/sentry など) • 他にもあるかも... Vite に移行するならやることいっぱいある
Nuxt Bridge を使った Nuxt 3 移行 ほぼ Nuxt 3 です
Nuxt Bridge でもできない Nuxt 3 移行
Nuxt Bridge でもできない Nuxt 3 移行 Nuxt 3 への移行ガイドを参考に
Nuxt Bridge でもできない Nuxt 3 移行 • Configuration • Vue
3 への移行 • Vuex • Pages and Layouts
Nuxt Bridge でもできない Nuxt 3 移行 • https://nuxt.com/docs/migration/configuration • buildModules
-> modules へ置き換え • router.extendRoutes -> pages:extend hook Configuration
Nuxt Bridge でもできない Nuxt 3 移行 • https://v3-migration.vuejs.org/ • やるしかない
Vue 3 への移行
Nuxt Bridge でもできない Nuxt 3 移行 • https://nuxt.com/docs/migration/configuration#vuex • Nuxt
2 では store ディレクトリを使うだけで Vuex が使えた • Nuxt 3 では store ディレクトリがサポートされなくなる • Nuxt 3 では Pinia の使用が推奨されている。 (useState でも代替可能) Vuex
Nuxt Bridge でもできない Nuxt 3 移行 Nuxt 3 でも store
ディレクトリを使って Vuex を使えるようにする module がある https://github.com/wattanx/nuxt-vuex-module
Nuxt Bridge でもできない Nuxt 3 移行 • https://nuxt.com/docs/migration/pages-and-layouts • app.vue
の作成 • Layout の <Nuxt /> を <slot /> に変更する • Dynamic Routes ◦ 例えば _id.vue を [id].vue に変更する必要がある • Nested Routes ◦ 例えば <NuxtChild /> を <NuxtPage /> に変更する必要がある Pages and Layouts
Nuxt Bridge でもできない Nuxt 3 移行 • https://nuxt.com/docs/api/utils/define-page-meta#definepagemeta • middleware
や layout の指定が Component Option からできな くなる。 • layout と middleware のみ Nuxt Bridge でもサポートしている • layout と middleware 以外の移行作業が必要 definePageMeta
Nuxt Bridge でもできない Nuxt 3 移行 Nuxt Bridge でもできそうならぜひ Pull
Request を
STORES の事例
STORES の事例 自分でつくれる、 本格的なネットショップ むずかしい知識や技術いらずで 自分だけのネットショップをかんたんに。
STORES の事例 ネットショップを開設した事業者が触る 管理画面を Nuxt 3 に移行しようとしている
STORES の事例(なぜ Nuxt 3 へ移行するのか) Vue 3 使いたい
STORES の事例(なぜ Nuxt 3 へ移行するのか) Nuxt 2 の EOL は
2024/6/30
STORES の事例 STORES はどのような順番で進めているのか
STORES の事例
STORES の事例
STORES の事例 • TypeScript • Migrate Legacy Composition API ◦
必要だと思ってたので対応した • Migrate New Composition API • Meta Tags • Plugins and Middleware • Nitro(これから) • Runtime Config(これから) Nuxt Bridge を使った Nuxt 3 移行
STORES の事例 • Vitest への移行 • Vue 2.7 移行 •
Vue 3 移行 ◦ Vue 2 の状態でできる移行を先にやる。 ▪ Vue Test Utils の wrapper を作成したり極力差分を減らす ようにしている。 ◦ 社内ライブラリの Vue 3 移行を並行して進める。 Nuxt Bridge を使った Nuxt 3 移行以外
STORES の事例 • ネットショップ管理画面の Nuxt Bridge を使った Nuxt 3 移行
◦ Nitro ◦ Runtime Config ◦ 一旦 webpack で動かす予定なので Vite には移行しない • ネットショップ管理画面の Nuxt Bridge ではできない Nuxt 3 移行 あとなにが残っているのか
STORES の事例 おすすめの移行方法
STORES の事例 • 以下の対応を行う。(どれからやってもいい、並行して進めてもいい) ◦ TypeScript ◦ Migrate New Composition
API ◦ Plugins and Middleware ◦ Meta Tags ◦ Nitro • Nuxt Bridge ではできない Nuxt 3 移行をする 我々が考えるおすすめの移行方法
STORES の事例 • Vue 3 移行も並行で進めるのが良い。 ◦ Vue 2 の状態でできる移行がある
• Nuxt Modules が Nuxt 3 に対応しているのか調査しておくのが良い。 ◦ 自作しなければならない場合があるため。 • script setup への移行も並行できると良い。 ◦ https://wattanx-converter.vercel.app/vue-composition-converter/ ◦ https://wattanx-converter.vercel.app/vue-script-setup-converter/ 我々が考えるおすすめの移行方法
まとめ
まとめ Nuxt 2 のプロジェクトで Nuxt 3 の機能を体験できる
まとめ Nuxt 2 のプロジェクトで Nuxt 3 の機能を体験できる
まとめ Nuxt 3 との差分を減らし、 Nuxt 3 への移行の負担を減らす
まとめ 少しずつ Nuxt 3 に向けたマイグレーションができるのが Nuxt Bridge の良いところ
まとめ 紹介した移行方法がすべてではない
まとめ より良い方法があればぜひ Pull Request を
まとめ 今日話したことは全部ドキュメントに書きました https://nuxt.com/docs/bridge/overview
おまけ いまから Nuxt Bridge RC.2 をリリースします