brand logo

ドキュメント

プログラムによる使用

Nuxt Kit は、Nuxt をプログラムで操作するための一連のユーティリティを提供します。これらの関数を使用すると、Nuxt の読み込み、ビルド、Nuxt 設定の読み込みが可能です。

プログラムによる使用は、例えば CLI ツールテストユーティリティ を構築する際に、Nuxt をプログラムで使用したい場合に役立ちます。

loadNuxt

Nuxt をプログラムで読み込みます。Nuxt の設定を読み込み、インスタンス化し、Nuxt インスタンスを持つプロミスを返します。

function loadNuxt (loadOptions?: LoadNuxtOptions): Promise<Nuxt>

パラメータ

loadOptions: Nuxt の読み込み条件。loadNuxt は内部で c12 を使用しているため、c12.loadConfig と同じオプションを受け入れ、いくつかの追加オプションがあります:

プロパティ必須説明
devbooleanfalsetrue に設定すると、Nuxt は開発モードで読み込まれます。
readybooleantruetrue に設定すると、loadNuxt 呼び出し後に Nuxt を使用する準備が整います。false に設定すると、Nuxt を使用する準備が整っていることを確認するために nuxt.ready() を呼び出す必要があります。

buildNuxt

Nuxt をプログラムでビルドします。ビルダー(現在は @nuxt/vite-builder または @nuxt/webpack-builder)を呼び出してアプリケーションをバンドルします。

function buildNuxt (nuxt: Nuxt): Promise<any>

パラメータ

nuxt: ビルドする Nuxt インスタンス。コンテキストから useNuxt() 呼び出しを通じて取得できます。

loadNuxtConfig

Nuxt 設定を読み込みます。設定オブジェクトを持つプロミスを返します。

function loadNuxtConfig (options: LoadNuxtConfigOptions): Promise<NuxtOptions>

パラメータ

options: c12loadConfig 呼び出しに渡すオプション。

writeTypes

tsconfig.json を生成し、プロジェクトの buildDir に書き込みます。

function writeTypes (nuxt?: Nuxt): void

パラメータ

nuxt: ビルドする Nuxt インスタンス。コンテキストから useNuxt() 呼び出しを通じて取得できます。

tips

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

Nuxtをプログラムで操作するメリットと概要

Nuxtは通常、コマンドラインや設定ファイルを通じて操作しますが、プログラムから直接操作できる機能も備えています。これにより、CLIツールの開発や自動テスト、カスタムビルドプロセスの構築など、より柔軟で高度な開発環境を実現可能です。

プログラム的にNuxtを操作することで、以下のような課題を解決できます。

  • Nuxtの設定やビルド処理を自動化し、手動操作の手間を削減
  • テスト環境でNuxtインスタンスを動的に生成し、統合テストを効率化
  • 複数のNuxtプロジェクトを一括管理・操作するツールの開発

この補足記事では、Nuxtのプログラム的操作に関する基本的なAPIの使い方から、実務での活用例、注意すべきポイントまでを丁寧に解説します。


まず結論:Nuxtプログラム操作の要点

  • loadNuxt でNuxtインスタンスをプログラムから読み込み可能。設定の自動読み込みと初期化を行う。
  • buildNuxt でプログラムからビルド処理を実行。ビルダーを呼び出してアプリケーションをバンドルできる。
  • loadNuxtConfig で設定ファイルのみを読み込み、設定内容を取得・加工できる。
  • writeTypes で型定義ファイルを自動生成し、TypeScript環境の補助が可能。
  • これらは主にCLIツールやテストユーティリティの開発、カスタムビルドパイプラインで活用される。

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

使うべきケース

  • CLIツール開発
    Nuxtプロジェクトのビルドや起動を自動化する独自CLIを作る場合に便利です。
  • テスト環境構築
    統合テストやE2EテストでNuxtインスタンスを動的に生成し、テストのセットアップ・クリーンアップを効率化できます。
  • カスタムビルドパイプライン
    CI/CD環境でNuxtのビルドをプログラム的に制御したい場合に役立ちます。
  • 複数プロジェクト管理
    複数のNuxtプロジェクトを一括で操作・管理するツールを作る際に有効です。

使わない方がよいケース

  • 単純な開発やデプロイ
    通常の開発やデプロイでは、Nuxtの標準CLIコマンドで十分です。プログラム操作は過剰になることがあります。
  • 軽微な設定変更のみ
    設定ファイルを直接編集するだけで済む場合は、プログラム的操作は不要です。
  • パフォーマンスが最重要なリアルタイム処理
    Nuxtの起動やビルドは重い処理なので、リアルタイム性が求められる場面では適しません。

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

1. テスト環境でのNuxtインスタンス生成

統合テストでNuxtをプログラム的に読み込み、テスト終了後にクリーンアップする例です。

import { loadNuxt } from 'nuxt'

async function setupTestNuxt() {
  const nuxt = await loadNuxt({ dev: false, ready: true })
  await nuxt.ready()
  return nuxt
}

async function teardownTestNuxt(nuxt) {
  await nuxt.close()
}

// テスト内での利用例
(async () => {
  const nuxt = await setupTestNuxt()
  // テストコード実行
  await teardownTestNuxt(nuxt)
})()

2. カスタムビルドスクリプトの作成

CI/CDパイプラインでNuxtをプログラムからビルドし、ビルド結果を制御する例です。

import { loadNuxt, buildNuxt } from 'nuxt'

async function buildProject() {
  const nuxt = await loadNuxt({ dev: false })
  await buildNuxt(nuxt)
  console.log('ビルド完了')
}

buildProject()

3. 設定ファイルの動的読み込みと加工

loadNuxtConfig を使って設定を読み込み、動的に変更してから利用する例です。

import { loadNuxtConfig } from 'nuxt'

async function getModifiedConfig() {
  const config = await loadNuxtConfig({ rootDir: './my-nuxt-app' })
  // 例: 開発モードを強制的に有効化
  config.dev = true
  return config
}

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

SSR/CSRの違いによる挙動の理解

プログラム的にNuxtを読み込む際は、SSR(サーバーサイドレンダリング)とCSR(クライアントサイドレンダリング)の違いを意識しましょう。loadNuxt はサーバー側でNuxtインスタンスを生成するため、クライアント側のブラウザ環境では動作しません。

Hydrationエラーに注意

テストやビルド時に設定や環境が不整合だと、Hydration(サーバーで生成したHTMLをクライアントで再利用する処理)でエラーが発生することがあります。特に動的に設定を変更する場合は、状態の一貫性を保つことが重要です。

パフォーマンスへの影響

loadNuxtbuildNuxt は重い処理です。頻繁に呼び出すとビルド時間やテスト実行時間が大幅に増加するため、キャッシュや再利用を検討してください。

ready オプションの使い分け

loadNuxtready オプションは、呼び出し後にNuxtが完全に初期化されているかどうかを制御します。false にすると明示的に nuxt.ready() を呼ぶ必要があり、非同期処理のタイミング管理に注意が必要です。


まとめ

Nuxtをプログラムから操作するAPIは、CLIツールやテスト環境の構築、カスタムビルドパイプラインの開発に非常に有用です。loadNuxt でインスタンスを読み込み、buildNuxt でビルドを実行し、loadNuxtConfig で設定を柔軟に扱えます。

ただし、これらのAPIは重い処理を伴うため、使うべき場面を見極め、パフォーマンスや状態管理に注意しながら活用することが重要です。適切に使いこなせば、Nuxt開発の自動化や効率化に大きく貢献します。


プログラム的にNuxtを操作する際は、公式のAPIドキュメントと合わせて、実際のユースケースに応じたテストを十分に行うことをおすすめします。