機能
新しい可能性を開くために、Nuxtのオプション機能を有効または無効にします。
Nuxtのいくつかの機能は、オプトインベースで利用可能であり、必要に応じて無効にすることもできます。
features
inlineStyles
HTMLをレンダリングする際にスタイルをインライン化します。これは現在、Viteを使用している場合にのみ利用可能です。
Vueコンポーネントのパスを受け取り、そのコンポーネントのスタイルをインライン化するかどうかを示すブール値を返す関数を渡すこともできます。
export default defineNuxtConfig({
features: {
inlineStyles: false // またはインライン化を決定する関数
}
})
noScripts
NuxtスクリプトとJSリソースヒントのレンダリングを無効にします。routeRules内で細かく設定することもできます。
export default defineNuxtConfig({
features: {
noScripts: true
}
})
future
将来の(おそらくメジャーな)バージョンでデフォルトになる新機能を早期にオプトインするためのfuture名前空間もあります。
compatibilityVersion
この設定オプションはNuxt v3.12+で利用可能です。現在のところ、Nuxt 4の動作にオプトインする各レイヤーで互換性バージョンを定義する必要があります。Nuxt 4がリリースされた後は必要ありません。
これにより、Nuxtの機能やフラグへの早期アクセスが可能になります。
compatibilityVersionを4に設定すると、Nuxt v4の動作にオプトインするためにNuxt設定全体のデフォルトが変更されますが、テスト時にNuxt v3の動作を細かく再有効化することができます(例を参照)。その場合は問題を報告してください。Nuxtまたはエコシステムで対処します。
export default defineNuxtConfig({
future: {
compatibilityVersion: 4,
},
// _すべての_ Nuxt v3の動作を再有効化するには、次のオプションを設定します:
srcDir: '.',
dir: {
app: 'app'
},
experimental: {
scanPageMeta: 'after-resolve',
sharedPrerenderData: false,
compileTemplate: true,
resetAsyncDataToUndefined: true,
templateUtils: true,
relativeWatchPaths: true,
normalizeComponentNames: false
defaults: {
useAsyncData: {
deep: true
}
}
},
features: {
inlineStyles: true
},
unhead: {
renderSSRHeadOptions: {
omitLineBreaks: false
}
}
})
typescriptBundlerResolution
これは、TypeScriptの'Bundler'モジュール解決モードを有効にします。これは、NuxtやViteのようなフレームワークに推奨される設定です。
exportsを使用する現代的なライブラリを使用する際の型サポートを向上させます。
オリジナルのTypeScriptプルリクエストを参照してください。
export default defineNuxtConfig({
future: {
typescriptBundlerResolution: true
}
})
tips
このセクションは公式ドキュメントの翻訳ではなく、本サイト独自の補足記事です。
Nuxtのfeaturesオプションとは?〜何が嬉しいのか〜
Nuxtのfeaturesオプションは、Nuxtアプリケーションの挙動を細かく制御し、パフォーマンスや開発体験を向上させるための設定群です。例えば、スタイルのインライン化やスクリプトの出力制御など、デフォルトでは有効になっている機能をオプトイン・オプトアウトできるため、プロジェクトの要件に合わせて柔軟に調整可能です。
これにより、以下のような課題を解決できます。
- ページの初期表示速度を改善したい
- 不要なJavaScriptの読み込みを抑制したい
- 将来のNuxtの新機能を先取りして試したい
- TypeScriptのモジュール解決を最適化したい
特に大規模プロジェクトやパフォーマンスに敏感なサイトでは、featuresの適切な設定がUX向上に直結します。
まず結論:featuresオプションの要点
-
inlineStyles
Vite利用時にCSSをHTMLにインライン化し、初期レンダリングを高速化できる。関数で制御も可能。 -
noScripts
Nuxtが自動で挿入するスクリプトやJSリソースヒントを無効化し、軽量なHTMLを生成できる。細かい制御はrouteRulesで。 -
future名前空間
将来のNuxtバージョンでデフォルトになる機能を先行利用可能。互換性を保ちながら新機能を試せる。 -
typescriptBundlerResolution
TypeScriptのモジュール解決を改善し、最新のライブラリとの互換性を向上させる。
いつ使うべきか?使わない方がよいケース
使うべきケース
-
パフォーマンス最適化を図りたいとき
例えば、inlineStylesを有効にすると、CSSの読み込みを減らし、初期表示を速くできます。 -
JavaScriptの読み込みを制御したいとき
SPA的な動作が不要な静的サイトやSEO重視のページで、noScriptsを使い不要なスクリプトを削減可能。 -
将来のNuxt機能を試験的に使いたいとき
future.compatibilityVersionを設定して、Nuxt 4の新機能を先行体験し、移行準備を進められます。 -
TypeScriptの最新機能を活用したいとき
typescriptBundlerResolutionでモジュール解決の問題を減らし、開発効率を上げられます。
使わない方がよいケース
-
Viteを使っていない場合
inlineStylesはVite専用機能なので、Webpackなど他のビルドツールでは効果がありません。 -
JavaScriptが必須のインタラクティブなページ
noScriptsを有効にするとNuxtのクライアントサイド機能が動作しなくなるため、動的なUIが必要な場合は避けるべきです。 -
安定性を最優先したい本番環境
futureの機能はまだ実験的なものもあるため、リスクを避けたい場合は慎重に検討してください。
実務でよくあるユースケースとサンプルコード
1. ページの初期表示を高速化したい場合
Viteを使っているプロジェクトで、CSSをインライン化してレンダリングを高速化します。
export default defineNuxtConfig({
features: {
inlineStyles: true
}
})
さらに、特定のコンポーネントだけインライン化したい場合は関数で制御可能です。
export default defineNuxtConfig({
features: {
inlineStyles: (componentPath) => {
// 特定のコンポーネントのみインライン化
return componentPath.includes('CriticalComponent.vue')
}
}
})
2. 静的サイトで不要なスクリプトを削減したい場合
静的なブログやドキュメントサイトで、JavaScriptを極力減らしたいときにnoScriptsを有効にします。
export default defineNuxtConfig({
features: {
noScripts: true
}
})
さらに、routeRulesでページ単位に制御も可能です。
export default defineNuxtConfig({
routeRules: {
'/about': { noScripts: true },
'/dashboard': { noScripts: false }
}
})
3. Nuxt 4の新機能を先行体験しつつ互換性を保つ
将来的な移行を見据えて、future.compatibilityVersionを設定しつつ、必要に応じて旧動作を再有効化します。
export default defineNuxtConfig({
future: {
compatibilityVersion: 4
},
experimental: {
scanPageMeta: 'after-resolve',
compileTemplate: true
}
})
よくある落とし穴・注意点
SSRとHydrationの影響
-
inlineStylesはSSR時にCSSをインライン化するため、Hydration時にスタイルの不整合が起きにくいですが、関数で制御する場合は対象コンポーネントのスタイルが正しく反映されているか確認が必要です。 -
noScriptsを有効にすると、クライアントサイドのJavaScriptが読み込まれず、Hydrationが行われません。結果として動的なUIが動作しなくなるため、静的コンテンツ向けに限定しましょう。
パフォーマンスへの影響
-
inlineStylesは初期表示を高速化しますが、CSSが大きい場合はHTMLサイズが増加し、ネットワーク負荷が増す可能性があります。適用範囲を限定するのが望ましいです。 -
noScriptsはJavaScriptの読み込みを減らせますが、ユーザー体験が制限されるため、必要な機能が動作しなくなるリスクを理解して使いましょう。
将来機能の安定性
future名前空間の機能はまだ開発中のものも多く、バグや挙動の変更が起こる可能性があります。本番環境での利用は慎重に検討し、十分なテストを行ってください。
まとめ
Nuxtのfeaturesオプションは、パフォーマンス最適化や将来の機能を先取りするための強力なツールです。適切に使うことで、初期表示速度の向上や不要なスクリプトの削減、TypeScriptのモジュール解決改善など、多くのメリットが得られます。
ただし、SSRやHydrationの挙動、JavaScriptの必要性、将来機能の安定性などに注意し、プロジェクトの要件に合わせて慎重に設定を選択しましょう。実務でのユースケースを参考にしながら、最適な設定を見つけてください。
Nuxtの公式ドキュメントと合わせて、実際のプロジェクトでの挙動を検証しながらfeaturesオプションを活用することをおすすめします。特にfutureの機能は頻繁に更新されるため、最新情報のキャッチアップも重要です。
※このページは Nuxt.js 公式ドキュメントの翻訳ページです。
公式ドキュメントの該当ページはこちら:
https://nuxt.com/docs/3.x/guide/going-further/features