Nuxtとは、Vue.jsで作るWebアプリケーションにサーバー実行環境とディレクトリ規約を足したフルスタックフレームワークです。素のVue.jsではブラウザ側でしか動かなかった画面を、サーバー側でHTMLに描画してから返せるようになります。
この記事では「Nuxtとは何か」を定義から押さえたうえで、Vite・Nitroという内部構成、SSR・SSG・CSRの選び分け、URLごとに方式を書き分ける設定の書き方、3系から4系へ移行するときに実際に直す箇所、そして受託開発で採用してよい条件と見送るべき場面までを実装者の視点で整理します。版の状況は2026年9月時点の公式情報で確認しました。3系のサポートはすでに終了しているため、着手時期の判断に直結する材料になります。
まとめ:Nuxtの要点と、採用してよい条件
- 定義:NuxtはVue.jsの上に「サーバー実行環境(Nitro)」「ファイル規約によるルーティング」「自動インポート」を載せた枠組みです。Vue.jsが画面部品の仕組みなのに対し、Nuxtはアプリ1本を組み立てる土台にあたります。
- 内部構成:ビルドはVite、サーバー側はNitroが担当します。開発時も本番時も同じ設定ファイル(
nuxt.config.ts)から挙動を切り替えます。 - レンダリング:既定はSSRで、
ssr: falseにすればCSR、事前生成すればSSG、routeRulesを使えばURL単位で方式を混在できます。 - 版の現在地:2026年9月8日時点でnpmの
latestが指すのは4.5.2(2026-08-05公開)です。3系のサポートは2026年7月31日で終了済み、5系はロードマップ上「2026年Q4」の予定として残っています。 - 移行:3系から4系への差分の中心はディレクトリ構造(ソースを
app配下へ寄せる)とデータ取得層の挙動です。公式が用意したcodemodで機械的に片づく範囲が広く、手作業の量は見た目ほど多くありません。 - 採用条件:Vue前提のチームがあり、公開画面に初期表示・SEO要件があり、同じリポジトリにBFFを置きたい案件では採用してよいと判断します。
- 見送る条件:React資産が主軸の組織、SEO不要の社内管理画面のみ、更新のないコーポレートサイトの3つは見送りが妥当です。
NuxtとはVue.jsにサーバー機能と規約を足したフレームワーク
Vue.jsは、画面部品(コンポーネント)を定義して組み合わせるためのライブラリです。ブラウザ上でJavaScriptが実行されて初めてHTMLが組み立てられるため、単体ではサーバー側での描画に対応していません。そのぶん、初回表示の速さや、JavaScriptを実行しないクローラーからの見え方に弱さが残ります。
Nuxtはこの隙間を埋めるために作られました。サーバー側でVueコンポーネントを描画してHTMLを返し、ブラウザ側で操作可能な状態に接続し直す(ハイドレーション)一連の流れを、設定なしで動く既定として提供します。公式ドキュメントはこの既定の動きをUniversal Renderingと呼び、サーバーで完全に描画されたHTMLを返したあとブラウザ側のVue.jsが制御を引き継ぐ、と説明しています。開発者が書くのはVueのコードのままで、サーバーを自分で立てる必要はありません。
もう一つの中身は「規約」です。どのディレクトリに何を置けばどう扱われるかがあらかじめ決まっており、ルーティング定義やインポート文を人手で書く量が大きく減ります。フレームワークが決めた置き場所に従うかわりに、設定作業を肩代わりしてもらう関係だと考えてください。
したがって、NuxtはVue.jsの代替ではありません。Vue.jsを内側に含んだうえで、アプリ1本として動かすために足りないもの(サーバー、ルーター、ビルド設定、データ取得の作法)をまとめて用意した層にあたります。React側でこの位置にいるのがNext.jsで、両者の違いはNext.jsとNuxtの違いを比較|React・Vueとの関係と選び方で整理しています。逆に、ページの一部だけに軽い対話性を足したいならAlpine.jsとは?18ディレクティブの実装とCSP対応・採用判断を解説で扱った軽量な選択肢のほうが釣り合う場面も少なくありません。
Nuxtの構成要素:Vite・Nitro・自動インポート・ファイル規約
Nuxtの中身は単一の巨大な仕組みではなく、役割の異なる部品の組み合わせです。トラブル調査のときに「どの層の問題か」を切り分けられるよう、主要な部品を先に押さえておきます。
| 部品 | 役割 | 実装時に触る場所 |
|---|---|---|
| Vite | 開発サーバーとビルド | 設定ファイルのvite項目 |
| Nitro | サーバー実行と配信形態 | serverディレクトリ |
| Vue Router | 画面遷移の制御 | pagesディレクトリ |
| 自動インポート | import文の省略 | composables等の配置 |
| モジュール | 機能の後付け拡張 | 設定ファイルのmodules |
Viteは開発時の即時反映と本番ビルドを受け持ちます。変更したファイルだけを差し替えて画面へ反映するため、規模が大きくなっても待ち時間が伸びにくい構造です。
Nitroはサーバー側のエンジンで、Nuxtの配信形態を決めている部分でもあります。同じソースからNode.jsサーバー向けの成果物も、静的ファイル一式も、エッジ環境向けの成果物も出力できるのはNitroの働きによるものです。サーバー側のAPIエンドポイントもここに置きます。Nitro側のディレクトリ規約やデプロイプリセットの決まり方はNitroとは?Nuxtを支えるサーバーエンジンの仕組みとv3移行の判断軸を解説で扱っています。
ディレクトリ規約は、app配下のpagesに置いたファイルがそのままURLになる、という形で現れます。componentsやcomposablesに置いたものはimport文を書かずに参照でき、コードの見た目が短くなります。裏返すと、置き場所を外れたファイルは自動では拾われないため、既存プロジェクトから部品を持ち込むときは配置の確認が先です。serverやpublicをルート直下に残す点は公式のserverディレクトリのドキュメントで確認できます。
app
components
composables
layouts
pages
server
api
public
nuxt.config.ts
状態管理はNuxt本体には含まれていません。画面をまたいでデータを共有する場面ではPiniaを併用するのが定番で、導入手順はPiniaとは?Vueの状態管理ライブラリの使い方とVuexとの違いにまとめています。
レンダリング方式の選び分け:SSR・SSG・CSR・ハイブリッド
Nuxtを採用したあと、設計上で最初に決めるのがレンダリング方式です。既定はSSR(サーバー側描画)で、そのまま作ればサーバーがHTMLを組み立ててブラウザへ返します。
| 方式 | HTML生成の場所 | 向く画面 |
|---|---|---|
| SSR | リクエスト時のサーバー | 更新の多い公開ページ |
| SSG | ビルド時に事前生成 | 更新の少ない紹介ページ |
| CSR | ブラウザ側のみ | ログイン後の管理画面 |
| ハイブリッド | URL単位で切り替え | 公開と管理の混在サイト |
SSGはビルド時にHTMLを作り置きする方式です。配信はファイルを返すだけになるため、実行環境の維持費を抑えられます。反面、内容を変えるにはビルドし直す必要があるので、更新頻度の高い一覧画面には向きません。
CSRは素のVue.jsに近い動き方で、初期HTMLはほぼ空の状態から始まります。認証の内側にある管理画面のように、検索エンジンに読ませる必要がない領域であれば、この方式で十分に成立します。
公式ドキュメントは、CDNのエッジで実行するEdge-Side Renderingを「レンダリングモードというより実装対象」と位置づけています。つまり選択肢は3つで、どこで動かすかは配信先の話として切り離して考えるのが素直です。方式そのものの一般的な比較はSSR・CSR・SSG・ISG・ISRの違いと使い分けとレンダリングとは?ブラウザ描画の仕組みとCSR/SSR/SSGの違い・選定基準を解説で扱っています。Nuxt側の判断としては「公開画面はSSRかSSG、認証後はCSR、迷ったらSSRのまま」を出発点に置くと設計が崩れにくくなります。
routeRulesでURLごとに描画方式を書き分ける設定と確認手順
実務で効いてくるのが、URLごとに方式を混在させるハイブリッド構成です。routeRulesにパターンを書けば、トップは事前生成、管理画面はブラウザ描画、APIはCORS許可、といった指定を1か所にまとめられます。書ける項目はnuxt.configのAPIリファレンスに一覧があり、2026年9月時点ではprerender、ssr、cors、headers、redirect、swr、isr、noScripts、appMiddlewareが並んでいます。
export default defineNuxtConfig({
routeRules: {
'/': { prerender: true },
'/about': { prerender: true },
'/news/**': { swr: 600 },
'/admin/**': { ssr: false },
'/api/**': { cors: true },
'/old-page': { redirect: '/news' }
}
})
この設定は、上から順に「トップとaboutはビルド時に作り置き」「お知らせ配下は600秒だけサーバー側の応答を再利用」「管理画面はブラウザ描画」「APIはCORSヘッダーを自動付与」「旧URLはサーバー側でリダイレクト」という意味になります。swrとisrは似ていますが、isrはNetlifyやVercelのCDNキャッシュに載せる想定である点が違いです。
書いたあとは、意図どおりに効いているかをHTMLの中身で確かめます。SSRやSSGで返っている画面なら、HTMLの本文がレスポンスに入っているはずです。CSRにした画面は、同じ確認をすると本文がほぼ空で返るので、両者を見比べれば設定の当たりはずれがすぐ分かります。
npm run build
node .output/server/index.mjs
curl -s http://localhost:3000/ | head -40
curl -s http://localhost:3000/admin | head -40
curl -s -I http://localhost:3000/old-page
公開画面のほうに本文テキストが含まれ、管理画面のほうには含まれず、旧URLが301か302で返っていれば設定は効いています。逆に、公開画面まで空で返るときはssr: falseの適用範囲が広すぎるので、パターンの書き方を見直してください。画面遷移時の読み上げ対応をあわせて整える場合は、Nuxt v3.12以降のNuxtRouteAnnouncerによる画面遷移のアクセシビリティ対応で扱った仕組みが使えます。
Nuxtでできること・できないことをプロジェクト構成から把握
Nuxtでできることの中心は、画面とサーバー処理を同じリポジトリで完結させる点にあります。server配下のapiにファイルを置けば、それがそのままエンドポイントになります。外部APIの鍵を隠す中継役や、フォーム送信の受け口をこの層に置く構成が定番です。
export default defineEventHandler(function (event) {
return { status: 'ok', service: 'health-check' }
})
このファイルをserver/api/health.tsとして置くと、開発サーバー起動中に/api/healthへアクセスするだけでJSONが返ります。疎通の確認はブラウザでもcurlでも構いません。
curl -s http://localhost:3000/api/health
データ取得にはuseFetchやuseAsyncDataが用意されています。サーバー側で取得した結果をHTMLに埋め込み、ブラウザ側では再取得せずに引き継ぐ動きが既定なので、同じデータを二重に取りにいく実装ミスを避けられます。
一方、Nuxtが面倒を見ない範囲もはっきりしています。データベース接続、認証基盤、ジョブ実行、権限設計はいずれも別途の設計が必要です。管理画面のUI部品も本体には含まれないため、Nuxt UIなどのモジュールを追加するか、自前で構築する判断が要ります。
運用面では、SSRを選んだ時点でNode.jsが動く実行環境の維持が前提になる点に注意してください。静的配信だけで済ませたい案件では、SSGを選んで実行環境そのものを持たない構成にするほうが総所有コストは下がります。
Nuxtのモジュールと周辺エコシステムで不足機能を補う進め方
Nuxt本体に含まれない機能は、モジュールという単位で後から足します。設定ファイルのmodulesに名前を並べるだけで、ディレクトリ規約や自動インポートまで含めて統合されるのが、素のライブラリを個別に組み込む場合との違いです。
| 用途 | 代表的なモジュール | 導入判断の目安 |
|---|---|---|
| 画像配信 | Nuxt Image | 画像点数が多い公開サイト |
| 記事管理 | Nuxt Content | CMSを別途持たない構成 |
| 多言語対応 | Nuxt i18n | 言語別URLの要件がある |
| UI部品 | Nuxt UI | 管理画面を短期で作る |
導入で気をつけたいのは、モジュール側の対応版がNuxt本体に追いついているかという点です。本体の版を上げた直後は、一部のモジュールが未対応のまま残ることがあります。案件で使うモジュールを決めたら、その時点で各モジュールの対応状況を一覧にしておくと、移行時期の判断材料になります。
数を増やしすぎない設計も大切にしてください。モジュールは1つ増えるごとに、版追従とビルド時間の負担が積み上がります。自前で20行書けば済む処理にモジュールを充てるより、要件の中心にあるものだけを選び、周辺は素のコードで書くほうが保守は楽になります。
バージョンの現在地:4.5系が安定版で3系はサポート終了済み
Nuxtは版ごとにサポート期限が公開されており、着手時期の判断に直結します。公式ロードマップを2026年9月時点で確認すると、次の状況でした。
| 版 | 初回リリース | サポート終了 |
|---|---|---|
| 5.x(予定) | 2026年Q4想定と記載 | 未定 |
| 4.x(安定版) | 2025-07-16 | 5.x公開の6か月後 |
| 3.x(終了済) | 2022-11-16 | 2026-07-31(終了済) |
| 2.x | 2018-09-21 | 2024-06-30(終了済) |
2026年9月8日時点でnpmのlatestタグが指すのは4.5.2で、公開日は2026年8月5日でした。同じ日に3系側も3.21.11が出ていますが、これはサポート終了日をまたいだ後始末にあたる版です。GitHubのリリース一覧で、4系と3系の更新がどこで途切れているかは自分の目で確かめられます。新規案件を3系で始める理由は、もう残っていません。
5系の見込みはロードマップ上で書き換わりました。以前は「Q1 2026想定」と記載されていましたが、2026年9月時点では「2026年Q4」の予定として並んでいます。中身としてはNitro v3への更新を含む変更が予告されており、そこが固まるまで出せない状態が続いていると読めます。4系は5系が出てから最低6か月は保守されると明示されているため、いま4系で作り始めたコードがすぐ行き場を失う状況にはなりません。
3系から4系への具体的な差分、インストール手順、移行時に引っかかりやすい箇所はNuxt 4とは?インストール・最新バージョン確認・Nuxt 3との違いとPinia連携まで使い方を解説で個別に扱っています。版の移行作業に入る段階では、そちらを手順書として参照してください。
Nuxt 4.5系で入った変更点を確認して自分の設定へ反映する手順
4系は小刻みに更新が入るため、「4系だから同じ」とは限りません。手元の版が何かを先に見てから、リリースノートを読む順序にすると無駄がありません。版の確認は次の3行で足ります。
npm view nuxt version
npm ls nuxt
npx nuxt info
1行目が公開されている最新版、2行目が手元のプロジェクトに入っている版、3行目がNuxt本体とビルダー、モジュールの版をまとめて出します。差分を見るときは4.5系のリリースノートを読みます。公式が挙げているのは、ビルド層がVite 8とRspack 2へ上がったこと、SSRストリーミングが実験的機能として入りボットに対しては自動で無効になること、解決済みレイアウトを読むuseLayoutが加わったこと、名前付きビューに対応したこと、そしてエラーコードがNUXT_E1001のような固定の識別子として安定したことです。
エラーコードの安定は、運用の場面で効いてきます。ログ監視のルールを文字列ではなくコードで書けるようになるため、文言が変わるたびに検知が漏れる問題を切り離せます。既存プロジェクトの監視設定を持っているなら、版を上げるタイミングで見直してください。
SSRストリーミングは、最初のバイトが返るまでの時間を縮める仕組みです。実験的機能である以上、公開案件へいきなり入れる判断は勧めません。検証環境で有効にして、レスポンスヘッダーと描画の見え方を確認してから判断してください。useFetchとuseAsyncDataに取得の実行を制御するオプションが加わった点も、条件付きでデータを取る画面では書き方が短くなります。
Nuxt 3系から4系へ移行するときに実際に直す箇所とコマンド
3系のサポートが終わった以上、稼働中のプロジェクトは移行が前提になります。公式の移行ガイドを読むと、影響が大きいと明示されているのはディレクトリ構造の変更で、その次がデータ取得層の挙動です。
ディレクトリ構造の変更は、assets、components、composables、layouts、middleware、pages、plugins、utilsとapp.vue、error.vue、app.config.tsを新しいappディレクトリの下へ移す、という内容です。nuxt.config.tsとserver、public、modules、layers、shared、contentはルートに残します。この移動は手作業ではなくcodemodで実行できます。
npx nuxt upgrade
npx codemod@latest nuxt/4/file-structure
npx [email protected] nuxt/4/migration-recipe
1行目で本体の版を上げ、2行目でディレクトリ構造だけを移し、3行目で4系向けのcodemodをまとめて流す形です。3行目の版を固定しているのは公式ガイドの記載に合わせたもので、実行結果の差分は必ずコミット前に読んでください。旧構造のまま置いても後方互換が効くと書かれてはいますが、新しく入る人の理解コストを考えると、移行の機会に寄せておくほうが後が楽になります。
データ取得層のほうは、同じキーで呼んだuseAsyncDataとuseFetchが同一のdata・error・statusを共有する挙動へ変わりました。最後のコンポーネントが外れた時点でデータが破棄される点も併せて変更されています。キーを使い回している実装では、片方の画面での更新がもう片方へ波及するため、移行後に画面をまたいだ表示の食い違いが出ていないかを確認してください。挙動を戻す設定も用意されているので、期限に追われている案件では一時的にそちらへ逃がす手も残っています。
5系への備えをいま入れておきたい場合は、futureのcompatibilityVersionに5を指定して手元で動かす方法があります。ケースセンシティブなルーティングやTyped Pagesの既定有効化など、5系で入る挙動を先に踏めるため、移行時の驚きを減らせます。本番へそのまま入れるものではなく、検証用の切り替えとして扱ってください。
受託開発でNuxtを採用する条件と見送るべき場面を条件付きで示す
ここからは、案件でNuxtを選ぶかどうかの判断を言い切ります。判定軸は「保守を誰が引き継ぐか」「公開画面に初期表示要件があるか」「サーバー層を同居させたいか」の3点です。
採用してよい条件(すべて満たすなら迷わず採用)
- 開発と保守を担う側がVue前提であること。Vueの経験者がいる体制なら、Nuxtの規約は学習の追加負担になりません。
- 公開画面に初期表示速度またはSNS共有時のカード表示(OGP)の要件があること。この要件はサーバー描画がないと満たせません。
- 公開画面と管理画面が1つのプロダクトに同居し、URL単位で描画方式を変えたいこと。
routeRulesがそのまま解になります。 - 外部APIの鍵を隠す中継層を同じリポジトリに置きたいこと。Nitroのサーバールートで完結します。
見送るべき場面(1つでも当てはまるなら別の選択肢を検討)
- 組織の資産と採用計画がReact中心である場合。フレームワークの優劣ではなく、引き継ぎ可能性の問題としてNext.js側を選びます。
- 認証の内側にある社内管理画面だけで、検索流入も共有カードも不要な場合。Vite+Vueの単純なSPAで足り、Nuxtのサーバー層は運用対象を増やすだけです。
- 更新頻度が低く、担当者がHTMLを触らないコーポレートサイトの場合。CMSでの構築のほうが運用が回ります。
- 3系を指定して新規着手しようとしている場合。サポートが切れた版で作り始める設計は認められません。
判断が割れやすいのが「5系を待つべきか」です。ここは待たないと決めてよいと考えます。5系の公開時期は2026年Q4の予定として置かれているだけで確定しておらず、4系は5系の公開から最低6か月の保守が約束されているため、着手を止めて待つ側のリスクのほうが大きくなります。移行を見据えるなら、待つのではなく4系で書き、非推奨の記法を避け、compatibilityVersionで先に踏んでおく進め方が現実的です。
なお、既存のVueアプリを持っている場合に、Nuxtへ載せ替えるべきかという相談もよく受けます。判定は単純で、SSRかSSGが要件として要るなら載せ替え、要らないなら現状維持です。要件がないまま移行すると、規約への適合作業だけが工数として残ります。自社での判断が難しい規模であれば、業務用・Webアプリ開発の相談窓口で、既存構成の棚卸しから移行範囲の切り分けまで対応しています。
Nuxtの導入手順:プロジェクト作成からサーバールート実装まで
実際に手を動かす流れを押さえておきます。前提としてNode.jsが動く環境が必要で、公式のインストール手順に沿えば、雛形の作成から開発サーバーの起動までは数分で終わります。
npx nuxi@latest init my-app
cd my-app
npm install
npm run dev
起動したら、まずapp配下のpagesにファイルを1つ足して、URLが自動で生えることを確認してください。ここで規約の感触をつかんでおくと、後の設計判断が速くなります。
次にnuxt.config.tsを開き、描画方式の方針を書き込みます。全画面をブラウザ描画にするならssr: false、URLごとに分けるならrouteRulesです。この設定は後から変えられますが、途中で方針を変えるとデータ取得の書き方も見直しになるため、着手時に決めておく価値があります。
サーバー処理が要るならserver配下にapiを作り、エンドポイントを1本置いて疎通を見ます。ここまでで、画面・ルーティング・サーバーの3層が動く状態になります。あとは要件に応じてモジュールを足し、状態管理や認証を組み込む段取りです。
本番に出す前に確認したいのが、ビルド成果物の形です。SSRならnpm run buildでサーバー向けの成果物、SSGならnpm run generateで静的ファイル一式が出ます。どちらを配るのかを、インフラ側の担当と着手前に合わせておいてください。
npm run build
npm run preview
npm run generate
npx serve .output/public
上の2行がSSR向け、下の2行がSSG向けの確認です。previewはビルド済みの成果物をローカルで動かす確認用で、開発サーバーとは挙動が違う場面があるため、公開前に一度は通しておいてください。
よくある質問
NuxtとVue.jsはどちらを先に学ぶべきですか?
Vue.jsが先です。Nuxtの規約はVueのコンポーネントとリアクティブの理解を前提に組まれているため、土台がないまま入ると「なぜ動くのか」が追えなくなります。コンポーネントとcomposablesの書き方を押さえてから、Nuxtの規約を上に載せる順序をおすすめします。
Nuxt 3で動いている既存プロジェクトは今すぐ移行が必要ですか?
3系のサポートは2026年7月31日で終了しました。稼働中のプロジェクトは、移行計画を立てる段階ではなく実行する段階に入っています。ただし即日停止するわけではありません。セキュリティ修正が提供されない状態をリスクとして評価し、公開範囲の広い案件から順に4系へ寄せてください。
nuxtの使い方を覚えるには何から手をつけるとよいですか?
雛形を作って開発サーバーを起動し、pagesにファイルを1つ足してURLが生えることを見るところからです。次にserver配下へAPIを1本置いて疎通を取り、最後にrouteRulesで描画方式を分けます。この3つを一度通せば、Nuxtが引き受けている範囲が体で分かります。
SSRを使わずCSRだけで運用してもNuxtを使う意味はありますか?
意味はあります。ファイル規約によるルーティング、自動インポート、モジュールによる機能追加はssr: falseのままでも効く仕組みです。ただしサーバー層を使わないのであれば、Vite+Vueの構成と比べた利点は規約と開発体験に限られるため、その差をどう評価するかの判断になります。
NuxtでSEOを担保するには何を設定すればよいですか?
まず対象URLがSSRかSSGで返っていることを確認します。そのうえでタイトルとmeta descriptionをページ単位で設定し、構造化データと正規URLを付与する流れです。JavaScriptを切った状態でHTMLに本文が含まれているかを実際に見て確かめる手順を、公開前チェックに入れてください。
Nuxt 5が出たらNuxt 4のコードはそのまま動きますか?
そのまま動くとは限りません。5系はNitro v3への更新を含む変更が予告されており、破壊的変更が入る前提で読むべきです。一方で4系は5系公開から最低6か月の保守が明示されているため、公開直後に慌てて移行する必要はありません。compatibilityVersionを5にして手元で試し、引っかかる箇所を先に洗い出しておくと移行が短く済みます。
関連記事
- Nuxt 4とは?インストール・最新バージョン確認・Nuxt 3との違いとPinia連携まで使い方を解説
- Next.jsとNuxtの違いを比較|React・Vueとの関係と選び方
- SSR・CSR・SSG・ISG・ISRの違いと使い分け|定義・SEO・速度を比較
- レンダリングとは?ブラウザ描画の仕組みとCSR/SSR/SSGの違い・選定基準を解説
- Piniaとは?Vueの状態管理ライブラリの使い方とVuexとの違い
- Nitroとは?Nuxtを支えるサーバーエンジンの仕組みとv3移行の判断軸を解説
- Nuxt v3.12以降のNuxtRouteAnnouncerによる画面遷移のアクセシビリティ対応
- Alpine.jsとは?18ディレクティブの実装とCSP対応・採用判断を解説