先に要点
- Nuxt は、Vue.js を土台に、ルーティング、SSR、SSG、API まわりまでまとめて扱いやすくしたフレームワークです。
- Vue.js 単体は画面づくりの本体、Nuxt はその画面をサイトやアプリとして組み立てる枠組み、と考えると違いがつかみやすいです。
- Vue 単体で始めて後から Nuxt へ移す場合、
vue-routerの手書き設定やmain.jsのエントリ、Vite 設定の引き継ぎ方で詰まりやすく、移行前に対象を切り分けておくと安全です。 - SSR と SSG はページ単位で混在でき、
routeRulesで公開ページは事前生成、ログイン後は CSR、と分けるのが実務的です。
「Nuxt って Vue と何が違うの」「Vue を知っていればそのまま使えるの」という疑問はかなり多いです。 名前だけ見ると Vue の仲間っぽいもので終わりがちですが、実際には役割がかなり違います。
Vue.js は UI を作るためのフレームワーク、Nuxt はその Vue を土台にして、ルーティング、データ取得、SSR、SSG、API まで一式をまとめる枠組みです。 ここが分からないまま選ぶと、「Vue だけで十分だった」か「最初から Nuxt にしておけばよかった」のどちらかで迷いやすくなります。
この記事では、Nuxt の立ち位置を、Vue.js との違い、向いているサイトやアプリ、実務での判断軸まで含めて整理します。さらに監査で不足が指摘された「Vue 単体から後で Nuxt へ移すときの詰まりどころ」「Nuxt 2 から Nuxt 3 への移行の注意」「SSR と SSG をページ単位で混在させる構成」を、コード例とつまずきの対処まで含めて加筆しました。2026年6月時点で Nuxt 公式ドキュメントと Vue 公式ドキュメントを確認してまとめています。
そもそも Nuxt とは何か
Nuxt は、Vue をベースにしたフルスタック寄りの Web フレームワークです。 公式ドキュメントでも、フロントエンド開発を直感的にしつつ、型安全、パフォーマンス、実運用に必要な機能をまとめて扱える枠組みとして案内されています。
初心者向けに言い換えると、Vue でサイトや Web アプリを作るときに、最初から必要になりやすいものを一式そろえてくれる土台です。
Nuxt が引き受けてくれる主なものは次の通りです。
- ファイルベースルーティング(
pages/ディレクトリ) - SSR と SSG
- レイアウト分割(
layouts/) - データ取得のしやすい仕組み(
useFetch/useAsyncData) - サーバー API(
server/api/) - ビルドと配信まわりの整理
ここで大事なのは、Nuxt は Vue を置き換えるものではなく、Vue を土台にその外側を整えるものだということです。
Vue.js と Nuxt の違い
いちばん大きい違いは、どこまで面倒を見てくれるかです。
| 観点 | Vue.js 単体 | Nuxt |
|---|---|---|
| 役割 | UI を作る本体 | UI + ルーティング + 配信構成まで含む枠組み |
| ルーティング | Vue Router を自分で選んで組む | ファイルベースでまとまりやすい |
| SSR / SSG | 別途構成が必要 | 最初から選択肢に入る |
| API | 別バックエンドが前提になりやすい | Nitro で同居しやすい |
| プロジェクト構成 | 自由度が高い | 作法が整理されている |
| 向いている場面 | 小さめの UI、既存サイトの一部改修 | 公開サイト、会員機能つきサイト、Vue 主体の Web アプリ |
つまり、Vue.js 単体は部品を作るための中心、Nuxt はその部品をどう並べてサイトやアプリとして動かすかまで含めた仕組みです。
実務では、次のように考えると分かりやすいです。
- 画面の一部分だけ Vue で動かしたい → Vue.js 単体でも十分
- サイト全体やアプリ全体を Vue で組みたい → Nuxt が有力
- SEO や初期表示速度も意識したい → Nuxt の方が整理しやすい
Vue 単体で始めて、後から Nuxt へ移すときの詰まりどころ
「まず Vite + Vue で小さく作り、規模が出てきたら Nuxt へ移す」という流れは現場でよくあります。ただし Nuxt は単なる Vue の上位プラグインではなく、ルーティングとビルドの主導権を握る枠組みなので、Vue 単体のプロジェクトをそのまま npm install nuxt しても動きません。移行は「載せ替え」ではなく「枠への差し込み直し」になります。代表的な詰まりどころを整理します。
エントリポイントが消える
Vue 単体の main.js にある createApp(App).use(router).mount('#app') は Nuxt では書きません。アプリ起動は Nuxt が握り、追加処理は plugins/ の defineNuxtPlugin に移します。
ルーティングの主導権が変わる
手書きの vue-router の routes 配列は捨て、pages/ 配下のファイル名でルートを表現し直します。動的ルートは pages/posts/[id].vue の形です。
window 参照が SSR で落ちる
Vue 単体は常にブラウザ前提なので window や localStorage を直に触れますが、Nuxt は既定が SSR でサーバー側に window が無く、初回実行で例外になります。
とくに最後の SSR 起因のエラーは、移行直後に最も多く出ます。失敗例を現象から回避まで並べておきます。
その他、移行前にチェックしておきたい点です。
- 環境変数:
VITE_接頭辞でのimport.meta.env参照は、Nuxt ではruntimeConfigとuseRuntimeConfig()に置き換える。秘匿値をクライアントへ漏らさない区分けがここで明確になる。 - ビルド設定:
vite.config.jsの独自設定(エイリアス、プラグイン)はnuxt.config.tsのviteキー配下へ移す。丸ごとコピーは効かない。 - ライブラリの初期化: グローバル登録していた UI ライブラリやアイコンは、プラグインとして
nuxtApp.vueApp.use(...)で登録し直す。 - 移行は一気にやらず、まず
pages/index.vue1枚だけ通して SSR の挙動を確認してから残りを移すと、原因の切り分けがしやすいです。
Nuxt 2 から Nuxt 3 への移行で気をつけること
既存資産が Nuxt 2 の場合、Nuxt 3 への移行は「ほぼ別物への作り直し」に近い規模です。内部エンジンが Nitro に変わり、Vue 自体も 2 系から 3 系へ上がり、ディレクトリ構造とデータ取得 API が刷新されています。公式も小さなプロジェクトは直接移行、規模が大きいものは互換レイヤの Nuxt Bridge で段階移行することを案内しています。
主な非互換ポイントを表にまとめます。
| 項目 | Nuxt 2 | Nuxt 3 |
|---|---|---|
| Vue 本体 | Vue 2 / Options API 中心 | Vue 3 / Composition API 中心 |
| データ取得 | asyncData / fetch |
useAsyncData / useFetch |
| サーバーエンジン | Connect ベース | Nitro |
| 設定ファイル | nuxt.config.js(CommonJS 可) |
nuxt.config.ts(ESM のみ) |
| state 管理 | Vuex 前提 | Pinia 推奨 / useState |
| ストア取得 | this.$store |
composable で取得 |
ここでつまずきやすいのは、見た目が似ているのに挙動が違う asyncData から useFetch への移行です。失敗例で示します。
移行を始める前のチェックリストです。
nuxt.configからmodule.exportsやrequireを排し、export default defineNuxtConfig({})の ESM へ書き換える。CommonJS は非対応です。- 使っている全モジュールとプラグインの Nuxt 3 対応状況を先に棚卸しする。更新されたもの、放置されたもの、別物に置き換わったものが混在します。
- Vuex を使っているなら Pinia への移行計画を併せて立てる。
- 新規開発なら迷わず Nuxt 3(または最新系)を選ぶ。Nuxt 2 は EOL を迎えており新規採用の理由はほぼありません。
SSR と SSG をページ単位で混在させる構成
Nuxt の実務で効くのが、サイト全体を一律 SSR か一律 SSG に倒すのではなく、ページ(ルート)ごとにレンダリング方式を変えられる点です。Nuxt 3 では nuxt.config.ts の routeRules でパス単位に指定します。たとえば「トップとブログは事前生成、商品一覧は短時間キャッシュ、管理画面は CSR」を一括で表現できます。
// nuxt.config.ts
export default defineNuxtConfig({
routeRules: {
// トップは事前生成(<a href="/glossary/ssg">SSG</a> 相当・最速)
'/': { prerender: true },
// ブログ詳細は ISR で 1時間ごとに裏で再生成
'/blog/**': { isr: 3600 },
// 商品一覧は SWR(配信しつつ裏で更新)
'/products/**': { swr: 600 },
// 管理画面はサーバー描画を切って CSR にする
'/admin/**': { ssr: false },
// 旧 URL はサーバー側でリダイレクト
'/old-page': { redirect: '/new-page' },
},
})
各キーの意味を整理します。
| キー | 挙動 | 向く場面 |
|---|---|---|
prerender: true |
ビルド時に HTML を生成し静的配信 | ほぼ変わらない公開ページ |
isr: 3600 |
初回アクセス後に CDN へ生成・キャッシュし、指定秒で再生成 | 更新はあるが毎分は変わらない記事 |
swr: 600 |
キャッシュを返しつつ裏で更新 | 在庫や一覧など準リアルタイム |
ssr: false |
サーバー描画せずブラウザ側で描画 | ログイン後の管理画面・ダッシュボード |
運用上の注意点を押さえておきます。
- ISR と SWR はホスティングに依存する: これらの裏側更新は Vercel や Netlify、Cloudflare など対応プラットフォームの機能に乗ります。自前サーバーやプラットフォーム非対応の構成では SWR が単なる毎回 SSR に近い動きになることがあるため、デプロイ先の仕様を先に確認してください。
- prerender は動的ルートを自動で全網羅しない:
/blog/[slug]のような動的ページをprerenderしたい場合、Nuxt はクロールで辿れたリンクしか生成しません。どこからもリンクされていない URL は出力されないので、nitro.prerender.routesに明示するか、一覧ページから確実にリンクを張ります。 - SSR を切ったページは SEO とメタ情報が弱くなる:
ssr:falseのパスは初回 HTML が空に近く、クローラーが内容を読みにくくなります。検索流入を狙うページには使わず、管理画面など非公開系に限定します。 - 混在時はキャッシュ起因の不具合が出やすい: 「更新したのに古い内容が出る」という現象は、SWR/ISR のキャッシュが残っているのが原因のことが多いです。再現したら、まずブラウザではなく CDN 側のキャッシュ TTL とデプロイ後のパージ動作を確認します。
Nuxt が便利と言われる理由
Nuxt の便利さは、機能が多いことより、最初から筋のよい構成に寄せやすいことにあります。
1. ルーティングを整理しやすい
ページ単位の構成が見えやすく、どこが公開ページで、どこが管理画面なのかを把握しやすいです。 小さなチームや、途中参加のメンバーが多い案件ではここが地味に効きます。
2. SSR と SSG を最初から考えやすい
公開サイトや採用サイト、オウンドメディアのように、検索流入や初期表示を意識したい場面では、SSR や SSG を自然に選べるのが強みです。前章のとおりページ単位で混在できるため、サイト全体を一方式に縛らずに済みます。
Vue 単体でも実現はできますが、最初から Nuxt の流れに乗った方が、後で構成を組み直す手間が減ります。
3. サーバー側の役割も同じプロジェクトで持ちやすい
Nuxt では、Nitro によってサーバー処理や API を同じプロジェクトで扱えます。 もちろん大規模な業務ロジックは別バックエンドへ分けた方がよいこともありますが、問い合わせ送信、一覧取得、軽い認証補助のような処理なら同じ枠の中で持ちやすいです。
4. Vue チームなら立ち上がりが早い
React 系で Next.js が自然なように、Vue 系では Nuxt を土台にした方が、ルーティングや配信の話までまとめて判断しやすくなります。
どんなサイトやアプリに向いているか
Nuxt が向いている場面は、画面が主役で、かつサイト全体の構成も整理したい案件です。
向いている場面
- コーポレートサイト
- 採用サイト
- オウンドメディア
- 会員機能つきサイト
- 管理画面やダッシュボード
- Vue を中心にしたフロントエンド主導の Web アプリ
特に、公開ページもあるし、ログイン後の画面もあるという案件で使いやすいです。
公開側は SSR / SSG、ログイン後は CSR 寄り、のように routeRules で分けて考えやすいからです。
相性がよい例
公開サイト + 問い合わせ導線
SEO と表示速度を意識したいページが多いなら、Nuxt の SSR / SSG が活きやすいです。
会員ページつきサービス
Vue が得意なチームの業務アプリ
管理画面やダッシュボード中心でも、構成やルーティングを揃えやすいのが強みです。
向いていない、または慎重に考えたい場面
Nuxt は便利ですが、何にでもベストというわけではありません。
1. 画面が少なく、ちょっとした UI だけを足したい
既存のサーバーサイドレンダリング環境に、インタラクティブな部品を少し足すだけなら、Vue.js 単体の方が軽いことがあります。
2. バックエンドの業務ロジックがかなり重い
認証、ワークフロー、複雑な権限、帳票、監査ログなど、バックエンドの役割が大きい業務システムでは、Laravel や Spring Boot など別のサーバー側基盤を中心に据えた方が整理しやすいことがあります。
3. チームに Vue の知見がほとんどない
Nuxt が便利でも、Vue の書き方や考え方に慣れていないと立ち上がりに時間がかかります。 その場合は Nuxt がよいかではなく、チームに合うフレームワークは何かから見た方が失敗しにくいです。
Next.js との違いはどう見るべきか
Nuxt と Next.js は、立ち位置がかなり近いです。 違いを一言でまとめるなら、Vue 派なら Nuxt、React 派なら Next.js がいちばん現実的です。
| 観点 | Nuxt | Next.js |
|---|---|---|
| ベース | Vue.js | React ベース |
| 向いているチーム | Vue に慣れている | React に慣れている |
| サーバー処理 | Nitro | Route Handlers / Server Components |
| 立ち位置 | Vue 系のフルスタック枠 | React 系のフルスタック枠 |
機能面だけで無理に差を作るより、チームの経験や既存資産を見た方が実務ではうまくいきます。 Next.js 側から見た比較を読みたいなら、Next.jsは他のフレームワークと何が違う?|React単体・Nuxt・バックエンド系との比較で整理 もあわせて読むとつながりやすいです。
実務ではどう選ぶと失敗しにくいか
迷ったときは、次の順で考えると判断しやすいです。
| 確認したいこと | Nuxt が向きやすい答え |
|---|---|
| チームは Vue に慣れているか? | はい |
| SEO や初期表示速度を気にする公開ページがあるか? | はい |
| 画面とルーティングを整理したいか? | はい |
| API や軽いサーバー処理も一緒に持ちたいか? | はい |
| 重い業務ロジックは別バックエンドへ分けられるか? | はい |
逆に、公開ページはほぼない、既存のバックエンドが主役、Vue への慣れがない、なら別の構成の方が合うこともあります。
よくある誤解
Nuxt は Vue の完全上位互換?
そうではありません。 Nuxt は Vue を土台にしたフレームワークで、Vue の代わりではなく Vue の外側を整える枠です。
Nuxt を使えばバックエンドはいらない?
軽い API や SSR まわりは Nuxt 側でも持てますが、複雑な業務ロジックまで全部 Nuxt に寄せると重くなりやすいです。 どこまでを Nuxt で持ち、どこからを別バックエンドに分けるかは早めに決めた方が安全です。
Vue.js を覚えていれば Nuxt はほぼそのまま?
Vue の知識はそのまま活きますが、Nuxt にはプロジェクト構成、配信、レンダリング、サーバー処理の考え方が追加されます。 そのため、Vue が分かる イコール Nuxt もすぐ全部分かる、ではありません。
NuxtとVue.jsに関するよくある質問
Q. Vue.js だけで作るのと Nuxt を使うのはどちらが学びやすいですか?
A. 学習目的なら Vue.js 単体の方が概念がすっきりして覚えやすいです。実務では SSR、ルーティング、サーバー処理を自分で組むのは大変なので、Nuxt を使う方が早いことが多いです。
Q. Vue 単体で作った既存プロジェクトを Nuxt へ移すのは大変ですか?
A. ファイル数が少なければ数日規模ですが、難所は決まっています。main.js のエントリ廃止、vue-router の手書き設定の pages/ 化、そして既定 SSR による window is not defined 系のエラーです。まず1ページだけ通して SSR 挙動を確認してから残りを移すと安全です。
Q. Nuxt 2 と Nuxt 3 は別物ですか?
A. ほぼ別物と考えた方が安全です。内部エンジン(Nitro)、Composition API への切り替え、ディレクトリ構造、asyncData から useFetch へのデータ取得 API、設定ファイルの ESM 化まで大きく変わっています。規模が大きければ Nuxt Bridge で段階移行、新規なら最新系一択です。
Q. SSR と SSG はどちらを選べば良いですか?
A. 内容が頻繁に変わるサイトは SSR、ほぼ静的でビルド時に HTML 化できるサイトは SSG が向きます。Nuxt は両方サポートしており、routeRules でページ単位に切り替えられます。
Q. ページごとに SSR と SSG を混在させるとき注意点はありますか?
A. isr や swr の裏側更新は Vercel や Netlify などホスティング機能に依存します。また ssr:false にしたページは初回 HTML がほぼ空で SEO に弱いので、検索流入を狙うページには使わないでください。
Q. Nuxt の API ルートは本格的なバックエンドの代わりになりますか?
A. 軽い API や BFF(フロント専用バックエンド)としては使えますが、本格的な業務ロジック、ORM、認証、ジョブキューなどを Nuxt 内に押し込むのは重くなります。Laravel や Rails と併用する構成も普通です。
Q. Nuxt は静的サイトジェネレータとして単体で使えますか?
A. 使えます。npx nuxi generate で完全静的な HTML を書き出せます。ただし動的ルートはクロールで辿れた URL しか出力されないため、リンクされていないページは nitro.prerender.routes に明示します。出力先を Netlify、Vercel、Cloudflare Pages にデプロイすればサーバー不要で運用できます。
まとめ
Nuxt は、Vue.js を土台に、ルーティング、SSR、SSG、サーバー処理までまとめて扱いやすくしたフレームワークです。 Vue.js 単体よりサイトやアプリとしての形を整えやすく、公開サイト、会員機能つきサイト、管理画面、Vue 主体の Web アプリで特に力を出しやすいです。
一方で、すべての案件で最初から Nuxt が正解というわけではありません。Vue 単体で十分か、SSR や配信まで含めて整えたいか、バックエンドをどこまで持つかを見て決めるのが実務ではかなり大事です。Vue 単体からの移行や Nuxt 2 からの移行を見込むなら、SSR 起因のエラーやデータ取得 API の差を移行前に把握しておくと、つまずきをかなり減らせます。
フレームワーク全体の比較から見たい場合は、代表的なフレームワーク7選|向いている用途・特徴・選び方をわかりやすく解説 もあわせて読むと整理しやすいです。
参考リンク
- Nuxt 公式 Introduction: https://nuxt.com/docs/getting-started/introduction
- Nuxt 公式 Rendering(routeRules): https://nuxt.com/docs/guide/concepts/rendering
- Nuxt 公式 Server Engine(Nitro): https://nuxt.com/docs/guide/concepts/server-engine
- Nuxt 公式 Bridge / Migration: https://nuxt.com/docs/bridge/overview
- Vue 公式 What is Vue?: https://vuejs.org/guide/introduction.html