brand logo

ドキュメント

互換性

Nuxt Kitは、異なるNuxtバージョンとの互換性をモジュールで確認するためのユーティリティを提供します。

Nuxt Kitのユーティリティは、Nuxt 3、Bridgeを使用したNuxt 2、さらにはBridgeを使用しないNuxt 2でも使用できます。すべてのバージョンと互換性があることを確認するために、checkNuxtCompatibilityassertNuxtCompatibilityhasNuxtCompatibility関数を使用できます。これらの関数は、提供された制約を現在のNuxtバージョンが満たしているかどうかを確認します。また、より詳細なチェックのためにisNuxt2isNuxt3getNuxtVersion関数を使用することもできます。

checkNuxtCompatibility

現在のNuxtバージョンが制約を満たしているかどうかを確認します。満たしていない場合、メッセージの配列を返します。Nuxt 2バージョンではbridgeサポートも確認します。

使用法

import { defineNuxtModule, checkNuxtCompatibility } from '@nuxt/kit'

export default defineNuxtModule({
  async setup (_options, nuxt) {
    const issues = await checkNuxtCompatibility({ nuxt: '^2.16.0' }, nuxt)
    if (issues.length) {
      console.warn('Nuxtの互換性に問題があります:\n' + issues.toString())
    } else {
      // 何かを実行
    }
  }
})

function checkNuxtCompatibility(constraints: NuxtCompatibility, nuxt?: Nuxt): Promise<NuxtCompatibilityIssues>;

パラメータ

constraints: チェックするバージョンとビルダーの制約。以下のプロパティを受け入れます:

プロパティ必須説明
nuxtstringfalsesemver形式のNuxtバージョン。バージョンはNode.jsの方法で定義できます。例: >=2.15.0 <3.0.0。>`{lang="ts"}

nuxt: Nuxtインスタンス。提供されない場合、useNuxt()呼び出しを通じてコンテキストから取得されます。

assertNuxtCompatibility

現在のNuxtバージョンが制約を満たしていることを確認します。満たしていない場合、問題のリストを文字列として含むエラーをスローします。

// @errors: 2391
import type { Nuxt, NuxtCompatibility } from '@nuxt/schema'
// ---cut---
function assertNuxtCompatibility(constraints: NuxtCompatibility, nuxt?: Nuxt): Promise<true>;

パラメータ

constraints: チェックするバージョンとビルダーの制約。詳細はcheckNuxtCompatibilityの制約テーブルを参照してください。

nuxt: Nuxtインスタンス。提供されない場合、useNuxt()呼び出しを通じてコンテキストから取得されます。

hasNuxtCompatibility

現在のNuxtバージョンが制約を満たしているかどうかを確認します。すべての制約が満たされている場合はtrueを返し、そうでない場合はfalseを返します。Nuxt 2バージョンではbridgeサポートも確認します。

使用法

import { defineNuxtModule, hasNuxtCompatibility } from '@nuxt/kit'

export default defineNuxtModule({
  async setup (_options, nuxt) {
    const usingNewPostcss = await hasNuxtCompatibility({ nuxt: '^2.16.0' }, nuxt)
    if (usingNewPostcss) {
      // 何かを実行
    } else {
      // 別のことを実行
    }
  }
})

function hasNuxtCompatibility(constraints: NuxtCompatibility, nuxt?: Nuxt): Promise<boolean>;

パラメータ

constraints: チェックするバージョンとビルダーの制約。詳細はcheckNuxtCompatibilityの制約テーブルを参照してください。

nuxt: Nuxtインスタンス。提供されない場合、useNuxt()呼び出しを通じてコンテキストから取得されます。

isNuxtMajorVersion

現在のNuxtインスタンスが指定されたメジャーバージョンであるかどうかを確認します。

使用法

import { defineNuxtModule, isNuxtMajorVersion } from '@nuxt/kit'

export default defineNuxtModule({
  async setup () {
    if (isNuxtMajorVersion(3)) {
      // Nuxt 3用の処理
    } else {
      // 他のバージョン用の処理
    }
  }
})

function isNuxtMajorVersion(major: number, nuxt?: Nuxt): boolean;

パラメータ

major: チェックするメジャーバージョン。

nuxt: Nuxtインスタンス。提供されない場合、useNuxt()呼び出しを通じてコンテキストから取得されます。

isNuxt3

現在のNuxtバージョンが3.xであるかどうかを確認します。

代わりにisNuxtMajorVersion(2, nuxt)を使用してください。これは@nuxt/kit v5または将来のメジャーバージョンで削除される可能性があります。

function isNuxt3(nuxt?: Nuxt): boolean;

パラメータ

nuxt: Nuxtインスタンス。提供されない場合、useNuxt()呼び出しを通じてコンテキストから取得されます。

isNuxt2

現在のNuxtバージョンが2.xであるかどうかを確認します。

代わりにisNuxtMajorVersion(2, nuxt)を使用してください。これは@nuxt/kit v5または将来のメジャーバージョンで削除される可能性があります。

function isNuxt2(nuxt?: Nuxt): boolean;

パラメータ

nuxt: Nuxtインスタンス。提供されない場合、useNuxt()呼び出しを通じてコンテキストから取得されます。

getNuxtVersion

現在のNuxtバージョンを返します。

function getNuxtVersion(nuxt?: Nuxt): string;

パラメータ

nuxt: Nuxtインスタンス。提供されない場合、useNuxt()呼び出しを通じてコンテキストから取得されます。

tips

このセクションは公式ドキュメントの翻訳ではなく、本サイト独自の補足記事です。

Nuxtの互換性チェック機能とは?〜何が嬉しいのか〜

Nuxtはバージョンアップやビルダーの変更に伴い、挙動やAPIが変わることがあります。特にモジュール開発や大規模プロジェクトでは、使用しているNuxtのバージョンに依存したコードが動作しなくなるリスクがあります。そんな課題を解決するのが、Nuxt Kitが提供する「互換性チェック機能」です。

この機能を使うことで、現在のNuxt環境が指定したバージョンやビルダーの条件を満たしているかをプログラム的に判定できます。結果として、バージョン違いによる不具合を事前に検知し、適切な対応を取ることが可能になります。


まず結論:Nuxt互換性チェックのポイント

  • 複数のNuxtバージョン(Nuxt 2、Nuxt 3、Bridge利用のNuxt 2)に対応可能
  • checkNuxtCompatibilityで問題点の詳細なリストを取得できる
  • assertNuxtCompatibilityは条件未達時にエラーをスローし、処理を停止できる
  • hasNuxtCompatibilityは条件を満たすかどうかの真偽値を返すシンプルな判定に便利
  • ビルダー(vite、webpack、rspackなど)ごとのバージョン制約も指定可能
  • メジャーバージョン判定用のisNuxtMajorVersionも用意されている

いつ使うべきか?使わない方がよいケースは?

使うべきケース

  • モジュールやプラグイン開発時
    複数のNuxtバージョンに対応させる必要がある場合、互換性チェックで環境を判別し、バージョンごとに処理を分けることができます。

  • プロジェクトのビルドやデプロイ時の安全性確保
    CI/CDパイプラインやビルドスクリプト内で互換性をチェックし、想定外のNuxtバージョンでのビルドを防止できます。

  • ビルダーの切り替えを検討している場合
    viteやwebpackなど、ビルダーごとのバージョン制約を指定して動作確認を行う際に役立ちます。

使わない方がよいケース

  • 単一バージョンのNuxtを使い、バージョンアップの予定がない場合
    互換性チェックは不要で、コードの複雑化を避けるために使わない方がシンプルです。

  • ランタイムパフォーマンスが最優先で、起動時のチェックコストを極力減らしたい場合
    互換性チェックは非同期処理を伴うため、頻繁に呼び出すのは避けるべきです。


実務でよくあるユースケースとサンプルコード

1. モジュール内でNuxtバージョンを判定し処理を分岐

import { defineNuxtModule, checkNuxtCompatibility } from '@nuxt/kit'

export default defineNuxtModule({
  async setup (_options, nuxt) {
    const issues = await checkNuxtCompatibility({ nuxt: '>=3.0.0' }, nuxt)
    if (issues.length) {
      console.warn('このモジュールはNuxt 3以上で動作します。現在の環境では一部機能が制限されます。')
      // Nuxt 2向けの代替処理など
    } else {
      // Nuxt 3向けの処理
    }
  }
})

2. ビルド時に互換性を厳密にチェックし、問題があればエラーで停止

import { defineNuxtModule, assertNuxtCompatibility } from '@nuxt/kit'

export default defineNuxtModule({
  async setup (_options, nuxt) {
    await assertNuxtCompatibility({ nuxt: '^2.16.0', bridge: { vite: '>=2.0.0' } }, nuxt)
    // ここまで来たら互換性は保証されている
  }
})

3. 簡易的に互換性の有無だけを判定して条件分岐

import { defineNuxtModule, hasNuxtCompatibility } from '@nuxt/kit'

export default defineNuxtModule({
  async setup (_options, nuxt) {
    const isCompatible = await hasNuxtCompatibility({ nuxt: '^3.0.0' }, nuxt)
    if (isCompatible) {
      // Nuxt 3用の処理
    } else {
      // Nuxt 2用の処理
    }
  }
})

よくある落とし穴・注意点

1. SSR/CSRの違いによる影響

互換性チェックは基本的にビルド時やサーバー起動時に行うことが多いですが、クライアントサイドで動的に判定する場合は注意が必要です。Nuxtのバージョン情報はサーバー側の環境に依存するため、クライアント側での判定は信頼性が低くなる可能性があります。

2. Hydration時の不整合に注意

バージョンによっては、サーバーとクライアントで異なる処理を行うとHydrationエラーが発生することがあります。互換性チェック結果に基づく条件分岐は、できるだけサーバー側で完結させるか、クライアント側での差異を最小限に抑えましょう。

3. パフォーマンスへの影響

checkNuxtCompatibilityassertNuxtCompatibilityは非同期処理を伴うため、頻繁に呼び出すと起動時間やビルド時間に影響が出る可能性があります。モジュールのセットアップ時など、一度だけ呼び出す設計が望ましいです。

4. ビルダーのバージョン指定は正確に

ビルダー(vite、webpack、rspackなど)のバージョン制約を指定する場合、semver形式で正確に記述しないと意図しない判定結果になることがあります。公式ドキュメントの例を参考にしましょう。


まとめ

Nuxtの互換性チェック機能は、複数バージョン対応のモジュール開発やプロジェクトの安定運用に欠かせないツールです。checkNuxtCompatibilityassertNuxtCompatibilityhasNuxtCompatibilityを適切に使い分けることで、バージョン違いによるトラブルを未然に防げます。

ただし、SSR/CSRの違いやパフォーマンス面の注意点も理解した上で導入することが重要です。実務でのユースケースを踏まえ、必要な場面で効果的に活用してください。

Nuxtのメジャーバージョン判定にはisNuxtMajorVersionを使うとシンプルで便利です。将来的にisNuxt2isNuxt3は非推奨になる可能性があるため、こちらの利用を推奨します。