Nuxt3→Nuxt4変更点【移行ガイド】
こんにちは、やむぅ。です。
今回のNuxt4正式にリリースに伴い、Nuxt3 から何が変わったのか、 Nuxt4 への移行はどうしたらいいのか、Nuxt4 の新機能、破壊的変更について書いていきます。
Nuxt4の変更点・新機能
Nuxt4 での主な変更・新機能は以下です。
- Vue3 へ完全移行
- Composition API の積極採用
- Nitro エンジンの統合強化
- 新しいディレクトリ構造
- データ取得の改善
- TypeScript型定義の向上
この中で特に移行に影響のある「データ取得の改善」「新しいディレクトリ構造」「TypeScript型定義の向上」について詳しく解説します。
Nuxt4:データ取得の改善
Nuxt4ではuseAsyncData
やuseFetch
がより使いやすく、より優れた機能になりました。
例えば、同じキーを使用する場合はそのデータを自動的に共有するようになりました。他にも、コンポーネントのアンマウント時に自動的にクリーンアップされるようになったり、必要に応じてデータを再取得できるようになりました。
特に気をつけるべき変更点は、
-
useAsyncData
とuseFetch
のデフォルト値がundefined
になる - 同じキーの
useAsyncData
とuseFetch
のdata
,error
が共有される -
useAsyncData
,useFetch
のキーがリアクティブの場合、それが変更されると自動的にデータを再取得する -
pending
オブジェクトが非推奨になり、status
で判別するようになった -
useAsyncData
,useFetch
,useLazyAsyncData
,useLazyFetch
のdata
オブジェクトがref
からshallowRef
になった -
useAsyncData
で取得したデータを使うコンポーネントをアンマウントするとデータを削除する -
refresh
に渡すことができたdedupe: boolean
が削除になった -
default
が設定されている場合、clear
かclearNuxtData
でデフォルト値にリセットされるようになった
Nuxt4:新しいディレクトリ構造
Nuxt4のプロジェクト(ディレクトリ)構造がガラッと変わりました。
これまではプロジェクト直下に配置していたpages
やcomponents
などといったディレクトリは、app/
内で置くようになりました。
・Nuxt3でのディレクトリ構造
プロジェクト
|- assets/
|- components/
|- composables/
|- layouts/
|- middleware/
|- pages/
|- plugins/
|- public/
|- server/
|- test/
|- utils/
|- app.vue
|- error.vue
|- nuxt.config.ts
・Nuxt4でのディレクトリ構造
プロジェクト
|- app/
|- assets/
|- components/
|- composables/
|- layouts/
|- middleware/
|- pages/
|- plugins/
|- utils/
|- app.vue
|- error.vue
|- public/
|- server/
|- test/
|- nuxt.config.ts
こうなったことでクライアント側かサーバー側、どちらに関係するコードなのかがはっきりしました。
僕的には、 Next.js のディレクトリ構造に近づいた感じがしてすごく良きです。
Nuxt4:TypeScript型定義の向上
Nuxt4からshared/
フォルダが使えるようになりました。これを使うことでクライアントとサーバー間で機能を共有することができます。
※正確にはNuxtv3.14
以降から使えるようになった機能です
今までは、UI側で作ったutils,typesはサーバー側では使えませんでした。そのため以下のように同じものをそれぞれに作る必要がありました。
プロジェクト
~~~~
|- server/
|- utils/ - サーバー側でのみ使える
|- types/ - サーバー側でのみ使える
|- utils/ - クライアント側でのみ使える
|- types/ - クライアント側でのみ使える
ですがshared/
を使うことで、UI側とサーバー側で同じutil関数や型を使うことができます。
プロジェクト
~~~
|- shared/
|- utils/
|- formatters.ts - クライアント、サーバー両方で使える
|- types/
|- user.d.ts - クライアント、サーバー両方で使える
その他変更点
- ルートメタデータの重複排除
- 正規化されたコンポーネント名
- タグ生成用UnHeadがバージョン2に更新
- indexファイルスキャン
- 実験的機能の削除・廃止
詳細は公式ガイドをご覧ください
また、QiitaでNuxt3からNuxt4への移行ガイドをつくってみたのでよければそちらもご覧ください!
今回の著者
現役でエンジニアやってるやむぅ。です!
フリーランスエンジニアとして働きながら、 「個人サービス運営」「エンジニアサポート」「YouTube発信」この三つを主軸に活動しています。直近では、「YouTubeをNuxt x FastAPI x MySQLで作ってみた」や「WebニュースのAI分析サービスのリリース」「Twitchクリップの検索・シェアサービスのリリース」をしました。
僕がエンジニアとして、失敗したことや上手くいったこと、実際にやってみたことをもとに書いてるので、ぜひ参考にしてください!
【最後に告知!】定期『ワークショップ』のご案内🔥
「プログラミングを始めたいけど、何から手をつけていいか分からない…」
「本や動画を試したけれど、途中で挫折してしまった…」
「HTML、CSS、JavaScriptの役割がごちゃごちゃになって、全体像が掴めない…」
そんなプログラミング未経験・初心者向けに「プログラミングのイメージを掴む」ことができるワークショップを開催します!
- HTML、CSS の基礎が学べる 「最初の一歩」
- Java/Go/Python の基礎が学べる 「システムエンジニアへの道」
- 流行りのフレームワークReactやVueの実践開発体験
- 人気バックエンドスキルの実践開発体験
…etc とさまざまなワークショップを定期的に開催します。
独学で詰まってる方や、エンジニアのリアルを知りたい・体験したいプログラミング未経験・初心者の方はぜひご参加ください!
お申し込みはこちらから
👉 開催予定のワークショップを確認する(Googleフォームに移動します)
【もひとつ告知!】僕が1 on 1でプログラミング教えます!
AI時代に求められる実務スキル & エンジニアのリアルを網羅したカリキュラムを実際の開発案件をもとに作り上げました!もちろん高校生や大学生も大歓迎で、今、プログラミングスクールを検討している方で、
- Web開発系エンジニアを目指している
- システムエンジニアを目指している
- AI時代でも生きていける技術力を身につけたい
そんな方々を対象とした、エンジニアという仕事に興味を持ち、頑張ってみようと思ったあなたを現役エンジニアが応援・サポートする完全1 on 1スクールですので、こちらぜひご検討ください!
※副業、Web制作を目指している方はお力になれません…ご了承ください。
Discussion