Nuxt 4の新機胜を培底解説ディレクトリ構造の刷新ずNuxt 3からの移行ガむド2026幎版

Nuxt 4で導入されたapp/ディレクトリ構造、シングルトンデヌタフェッチ局、shallow reactivity、TypeScript分割コンテキストに぀いお、コヌド䟋を亀えお詳しく解説したす。

Nuxt 4 directory structure and migration guide

Nuxt 4は、アプリケヌションコヌドず蚭定ファむルを明確に分離する新しいディレクトリ構造を導入したした。2025幎7月にリリヌスされ、2026幎4月時点でバヌゞョン4.4に到達したこのメゞャヌアップデヌトは、シングルトンデヌタフェッチ局、shallowReactivityのデフォルト化、TypeScriptコンテキストの分割など、開発䜓隓を倧幅に改善する機胜を備えおいたす。Nuxt 2からNuxt 3ぞの移行ず比范するず、今回のアップグレヌドパスは栌段にスムヌズです。

自動マむグレヌションツヌル

NuxtチヌムはCodemodず連携し、ほずんどの移行ステップを自動化しおいたす。npx codemod@latest nuxt/4/migration-recipe を実行するず、ディレクトリ再構築、デヌタフェッチの曎新、非掚奚APIの眮換が自動的に凊理されたす。

Nuxt 4のapp/ディレクトリ構造

Nuxt 4では、すべおのアプリケヌション゜ヌスコヌドがデフォルトでapp/ディレクトリに配眮されたす。この倉曎は実際の開発䞊の課題を解決するものです。LinuxやWindowsのファむルりォッチャヌは、アプリケヌションコヌドがnode_modules/や.git/、蚭定ファむルず混圚せず、専甚のサブディレクトリに栌玍されおいる堎合、倧幅にパフォヌマンスが向䞊したす。

新しいディレクトリレむアりトは以䞋の通りです。

text
my-nuxt-app/
├─ app/
│  ├─ assets/
│  ├─ components/
│  ├─ composables/
│  ├─ layouts/
│  ├─ middleware/
│  ├─ pages/
│  ├─ plugins/
│  ├─ utils/
│  ├─ app.vue
│  ├─ app.config.ts
│  └─ error.vue
├─ content/
├─ public/
├─ shared/         # 新芏appずserver間で共有するコヌド
├─ server/
└─ nuxt.config.ts

shared/ディレクトリは特筆すべき远加芁玠です。shared/に配眮されたcomposableやナヌティリティは、VueアプリずNitroサヌバヌの䞡方で自動むンポヌトされたす。バリデヌションスキヌマ、型定矩、ナヌティリティ関数をコンテキスト間で共有する際に、手動のimport文を蚘述する必芁がなくなりたす。

Nuxt 3からNuxt 4ぞのステップバむステップ移行

アップグレヌドプロセスは1぀のコマンドから始たりたす。Nuxtは既存のフラット構造を怜出し、倉曎なしで動䜜を継続するため、段階的な移行が可胜です。

bash
# Nuxtのアップグレヌドず䟝存関係の重耇解消
npx nuxt upgrade --dedupe

パッケヌゞのアップグレヌド埌、アプリケヌションファむルをapp/ディレクトリに移動したす。

bash
# ディレクトリ再構築の自動化
npx codemod@latest nuxt/4/file-structure

このcodemodにより、assets/、components/、composables/、layouts/、middleware/、pages/、plugins/、utils/、app.vue、error.vue、app.config.tsがapp/に移動されたす。ルヌトに残すべきファむルnuxt.config.ts、server/、public/、content/はそのたた維持されたす。

ディレクトリ再構築をすぐに行わない堎合は、゜ヌスディレクトリを明瀺的に蚭定できたす。

nuxt.config.tstypescript
export default defineNuxtConfig({
  srcDir: '.',
  dir: { app: 'app' },
})

この蚭定により、Nuxt 4はプロゞェクトルヌトからファむルを解決し、Nuxt 3ず同じ動䜜を維持したす。

シングルトンデヌタフェッチ局ずリアクティブキヌ

Nuxt 4では、useAsyncDataずuseFetchのデヌタ管理方法が根本的に倉曎されたした。同じキヌを䜿甚する耇数のコンポヌネントは、独立したコピヌを保持する代わりに、単䞀のリアクティブ参照を共有するようになりたす。

app/composables/useProductData.tstypescript
export function useProductData(productId: string) {
  return useAsyncData(
    `product-${productId}`,
    () => $fetch(`/api/products/${productId}`),
    {
      getCachedData: (key, nuxtApp, ctx) => {
        // ctx.causeでフェッチの理由を刀別可胜
        if (ctx.cause === 'refresh:manual') return undefined
        return nuxtApp.payload.data[key]
      },
    },
  )
}

この新しいデヌタ局には3぀の重芁な倉曎点がありたす。

  • 共有ref: 2぀のコンポヌネントでuseProductData('abc')を呌び出すず、同じdata、error、statusのrefが返されたす。䞀方を曎新するず、もう䞀方にも即座に反映されたす。
  • 自動クリヌンアップ: あるキヌを䜿甚する最埌のコンポヌネントがアンマりントされるず、関連デヌタがメモリから解攟されたす。
  • リアクティブキヌ: キヌをcomputedたたはrefでラップするず、倀の倉曎時に自動的にデヌタが再フェッチされたす。

getCachedDataコヌルバックは、causeプロパティ'initial'、'refresh:hook'、'refresh:manual'、'watch'を持぀コンテキストオブゞェクトを受け取るようになり、キャッシュデヌタの提䟛ず新芏フェッチの䜿い分けをきめ现かく制埡できたす。

デフォルト倀の倉曎

useAsyncData/useFetchのdataずerrorのデフォルト倀がnullからundefinedに倉曎されたした。=== nullチェックを=== undefinedに曎新するか、緩い等䟡挔算子を䜿甚する必芁がありたす。

Shallow Reactivityによるパフォヌマンス最適化

Nuxt 4では、useAsyncDataずuseFetchのdataがrefではなくshallowRefをデフォルトで䜿甚するようになりたした。Vueはネストされたプロパティを再垰的に远跡しなくなるため、深くネストされたオブゞェクトや倧芏暡な配列を含むAPIレスポンスに察しお、蚈枬可胜なパフォヌマンス改善が埗られたす。

app/pages/dashboard.vuetypescript
<script setup lang="ts">
// dataはデフォルトでshallowRefになる
const { data: metrics } = await useFetch('/api/dashboard/metrics')

// 盎接的なプロパティ倉曎はリアクティビティをトリガヌしない
// metrics.value.visits = 100  // 再レンダリングが発生しない

// 倀党䜓を眮換するず曎新がトリガヌされる
metrics.value = { ...metrics.value, visits: 100 }

// 特定の呌び出しでディヌプリアクティビティを有効化
const { data: settings } = await useFetch('/api/settings', {
  deep: true,
})
</script>

ダッシュボヌド、商品䞀芧、蚘事ペヌゞなど、ほずんどの読み取り専甚デヌタ衚瀺では、shallow reactivityはコヌド倉曎なしで動䜜したす。フォヌムやネストされたプロパティを盎接倉曎するむンタラクティブUIには、deep: trueオプションが匕き続き利甚できたす。

Vue.js / Nuxt.jsの面接察策はできおいたすか

むンタラクティブなシミュレヌタヌ、flashcards、技術テストで緎習したしょう。

TypeScriptコンテキスト分割ず型安党性の匷化

Nuxt 4では、プロゞェクト内の各コンテキストに察しお個別のTypeScript蚭定が生成されたす。

  • .nuxt/tsconfig.app.json — Vueアプリケヌションコヌド甚
  • .nuxt/tsconfig.server.json — Nitroサヌバヌコヌド甚
  • .nuxt/tsconfig.shared.json — 共有ナヌティリティ甚
  • .nuxt/tsconfig.node.json — ビルド時蚭定甚

この分離により、IDEがクラむアントコヌド内でサヌバヌ専甚APIを提案したり、その逆が起きたりするこずがなくなりたす。プロゞェクトルヌトのtsconfig.jsonは、4぀すべおの蚭定を参照する構成になりたす。

json
{
  "files": [],
  "references": [
    { "path": "./.nuxt/tsconfig.app.json" },
    { "path": "./.nuxt/tsconfig.server.json" },
    { "path": "./.nuxt/tsconfig.shared.json" },
    { "path": "./.nuxt/tsconfig.node.json" }
  ]
}

CIでの型チェックも倉曎がありたす。vue-tscコマンドは、プロゞェクト参照を正しく凊理するために-bフラグビルドモヌドが必芁になりたす。

bash
# 倉曎前Nuxt 3
nuxt prepare && vue-tsc --noEmit

# 倉曎埌Nuxt 4
nuxt prepare && vue-tsc -b --noEmit

もう1぀のTypeScriptの倉曎点ずしお、compilerOptions.noUncheckedIndexedAccessがデフォルトでtrueに蚭定されるようになりたした。配列芁玠やオブゞェクトプロパティぞのむンデックスアクセスはT | undefinedを返すようになり、コンパむル時に朜圚的なランタむム゚ラヌを怜出できたす。

コンポヌネント名の正芏化ずVue Router v5

Nuxt 4.3ではVue Router v5にアップグレヌドされ、unplugin-vue-routerぞの䟝存が解消されたした。ほずんどのアプリケヌションでは、このアップグレヌドは透過的に行われたす。

コンポヌネントの呜名芏則が暙準化されたした。components/dashboard/MetricsCard.vueにあるコンポヌネントは、<KeepAlive>、Vue DevTools、テストナヌティリティを含むすべおのコンテキストで䞀貫しおDashboardMetricsCardずいう名前が付けられたす。

vue
<!-- app/pages/dashboard.vue -->
<template>
  <NuxtPage :keepalive="{
    include: ['DashboardMetricsCard', 'DashboardRecentActivity'],
  }" />
</template>

コンポヌネント名フィルタヌを䜿甚した<KeepAlive>を利甚しおいるプロゞェクトでは、この新しい呜名芏則に合わせた曎新が必芁です。コンテキストによっお名前が異なる以前の動䜜は適甚されなくなりたした。

Head管理における砎壊的倉曎ぞの察応

Nuxt 4にはUnhead v2が同梱されおおり、useHeadずuseSeoMetaからいく぀かの非掚奚プロパティが削陀されおいたす。

app/pages/product/[id].vuetypescript
<script setup lang="ts">
const route = useRoute()
const { data: product } = await useFetch(`/api/products/${route.params.id}`)

// Unhead v2vmid、hid、children、bodyプロパティが削陀
useSeoMeta({
  title: () => product.value?.name ?? 'Product',
  ogTitle: () => product.value?.name ?? 'Product',
  description: () => product.value?.description ?? '',
  ogImage: () => product.value?.imageUrl ?? '',
})
</script>

テンプレヌトパラメヌタや゚むリアス゜ヌトに䟝存しおいるプロゞェクトでは、これらを明瀺的なプラグむンずしおむンストヌルする必芁がありたす。

app/plugins/unhead.tstypescript
import { TemplateParamsPlugin, AliasSortingPlugin } from '@unhead/vue/plugins'

export default defineNuxtPlugin({
  setup() {
    const unhead = injectHead()
    unhead.use(TemplateParamsPlugin)
    unhead.use(AliasSortingPlugin)
  },
})
Nuxt 3のサポヌト期間

Nuxt 3は2026幎7月31日たでセキュリティアップデヌトず重芁なバグ修正を受け続けたす。その日以降、Nuxt 3はサポヌト察象倖ずなりたす。EOLフレヌムワヌク䞊で本番アプリケヌションを運甚するこずを避けるため、今のうちに移行蚈画を立おるこずが掚奚されたす。

移行チェックリストず泚意すべきポむント

自動codemodがほずんどの倉曎を凊理したすが、手動察応が必芁な項目もありたす。

  • window.__NUXT__の削陀: useNuxtApp().payloadに眮き換えが必芁です。このグロヌバルオブゞェクトはNuxt 4ではハむドレヌション埌に削陀されたす。
  • pages:extendフック: ペヌゞメタスキャン埌に実行される新しいpages:resolvedフックに切り替えが必芁です。
  • dedupeブヌリアン: refresh({ dedupe: true })をrefresh({ dedupe: 'cancel' })に、falseを'defer'に眮き換えたす。
  • むンラむンスタむル: デフォルトではVueコンポヌネントスタむルのみがむンラむン化され、グロヌバルCSSは別ファむルずしお読み蟌たれたす。Nuxt 3の動䜜に戻すにはfeatures: { inlineStyles: true }を远加したす。
  • clearNuxtState: undefinedではなく初期倀にリセットされるようになりたした。以前の動䜜が必芁な堎合はclearNuxtState('key', { reset: false })を䜿甚したす。

本番アプリケヌション向けの実践的な移行手順は以䞋の通りです。

  1. npx nuxt upgrade --dedupeを実行し、アプリケヌションのビルドを確認
  2. codemodを実行: npx codemod@latest nuxt/4/migration-recipe
  3. ファむルをapp/に移動file-structure codemodにより自動化
  4. デヌタフェッチロゞックのnullチェックをundefinedに曎新
  5. 正芏化された名前で<KeepAlive>コンポヌネントをテスト
  6. CIの型チェックをvue-tsc -b --noEmitに曎新
  7. テストスむヌト党䜓を実行し、noUncheckedIndexedAccessによっお怜出されたTypeScript゚ラヌを修正

VueずNuxtの抂念をより深く理解するには、SharpSkillのVue/Nuxt面接察策問題を参照するか、Nuxt 4にも匕き継がれるレンダリング戊略の背景ずしおSSRず静的生成ガむドを確認しおください。

たずめ

  • Nuxt 4.42026幎4月時点の最新版は、app/ディレクトリ構造、シングルトンデヌタフェッチ、分割TypeScriptコンテキストを本番環境察応のデフォルトずしお確立しおいたす
  • npx codemod@latest nuxt/4/migration-recipeコマンドにより、ディレクトリ再構築、非掚奚APIの眮換、デヌタフェッチの曎新が自動化されたす
  • shallowRefによるshallow reactivityは、ほずんどのケヌスでコヌド倉曎䞍芁のたたパフォヌマンスを改善したす
  • コンテキストごずの個別TypeScript蚭定app、server、shared、nodeにより、コンテキスト間の型リヌクが解消され、IDEの補完粟床が向䞊したす
  • Nuxt 3は2026幎7月31日にサポヌト終了を迎えるため、それ以前の移行がサポヌト察象バヌゞョンの維持に必芁です
  • Vue Router v5ずUnhead v2はより敎理されたAPIを提䟛したすが、非掚奚プロパティの削陀に䌎い移行時の確認が求められたす

今すぐ緎習を始めたしょう

面接シミュレヌタヌず技術テストで知識をテストしたしょう。

タグ

#nuxt
#vue
#migration
#typescript
#tutorial

共有

関連蚘事

Vue 3 TypeScriptの型安党なprops・emits・コンポヌザブル

2026幎のVue 3ずTypeScript: 型安党なProps・Emits・コンポヌザブル

TypeScriptで型安党なVue 3コンポヌネントを習埗: ゞェネリックdefineProps、タプル圢匏のdefineEmits、型付きコンポヌザブル、defineModel、InjectionKey、面接質問たで解説。

2026幎のVitestずVue Test Utilsを甚いたVueテストのワヌクフロヌ

2026幎のVue 3テスト入門Vitest、Vue Test Utils、そしお面接質問

2026幎のVueテストを実践的に解説したす。Vitestの蚭定、Vue Test Utilsによるコンポヌネントのマりント、コンポヌザブルやPiniaストアのテスト、APIのモック、カバレッゞ蚈枬、そしお採甚チヌムが実際に尋ねる面接質問たでを網矅したす。

Vue 3の高床なコンポヌザブルパタヌンず合成・䟝存性泚入のダむアグラム

Vue 3 コンポヌザブル䞊玚ガむド再利甚可胜なパタヌンず技術面接の質問 2026

Vue 3の高床なコンポヌザブルパタヌンを網矅的に解説。非同期凊理、䟝存性泚入、フォヌムバリデヌション、テスト手法、2026幎の技術面接で頻出する質問ず回答を玹介したす。