brand logo

ドキュメント

自動インポート

Nuxt Kit は、自動インポートを利用するためのユーティリティを提供します。これらの関数を使用して、独自のユーティル、コンポーザブル、Vue API を登録できます。

Nuxt は、ヘルパー関数、コンポーザブル、Vue API を明示的にインポートすることなくアプリケーション全体で使用できるように自動インポートします。ディレクトリ構造に基づいて、すべての Nuxt アプリケーションは独自のコンポーザブルやプラグインの自動インポートも利用できます。

Nuxt Kit を使用すると、独自の自動インポートを追加することもできます。addImportsaddImportsDir を使用して、Nuxt アプリケーションにインポートを追加できます。addImportsSources を使用すると、サードパーティパッケージからリストされたインポートを Nuxt アプリケーションに追加できます。

これらのユーティリティは、Nuxt で使用される基盤となる自動インポートメカニズムを提供する unimport によって動作しています。

これらの関数は、独自のユーティル、コンポーザブル、Vue API を登録するために設計されています。ページ、コンポーネント、プラグインについては、特定のセクションを参照してください:ページコンポーネントプラグイン

Nuxt Kit の自動インポートユーティリティに関する Vue School のビデオを視聴してください。

addImports

Nuxt アプリケーションにインポートを追加します。これにより、手動でインポートする必要なく、Nuxt アプリケーションでインポートが利用可能になります。

使用法

import { defineNuxtModule, addImports } from "@nuxt/kit";

export default defineNuxtModule({
  setup(options, nuxt) {
    const names = [
      "useStoryblok",
      "useStoryblokApi",
      "useStoryblokBridge",
      "renderRichText",
      "RichTextSchema"
    ];

    names.forEach((name) =>
      addImports({ name, as: name, from: "@storyblok/vue" })
    );
  }
})

function addImports (imports: Import | Import[]): void

パラメータ

imports: 以下のプロパティを持つオブジェクトまたはオブジェクトの配列:

プロパティ必須説明
namestringtrue検出されるインポート名。
fromstringtrueインポート元のモジュール指定子。
prioritynumberfalseインポートの優先度。同じ名前のインポートが複数ある場合、最も高い優先度のものが使用されます。
disabledbooleanfalseこのインポートが無効かどうか。
metaRecord<string,>falseインポートのメタデータ。
typebooleanfalseこのインポートが純粋な型インポートかどうか。
typeFromstringfalse型宣言を生成する際に from 値として使用します。
asstringfalseこの名前としてインポートします。

addImportsDir

ディレクトリから Nuxt アプリケーションにインポートを追加します。ディレクトリ内のすべてのファイルを自動的にインポートし、手動でインポートする必要なく Nuxt アプリケーションで利用可能にします。

使用法

import { defineNuxtModule, addImportsDir, createResolver } from '@nuxt/kit'

export default defineNuxtModule({
  meta: {
    name: '@vueuse/motion',
    configKey: 'motion',
  },
  setup(options, nuxt) {
    const resolver = createResolver(import.meta.url)
    addImportsDir(resolver.resolve('./runtime/composables'))
  },
})

function addImportsDir (dirs: string | string[], options?: { prepend?: boolean }): void

パラメータ

プロパティ必須説明
dirsstring | string[]{lang="ts"}trueインポート元のディレクトリへのパスを持つ文字列または文字列の配列。
options{ prepend?: boolean }{lang="ts"}falseインポートに渡すオプション。prependtrue に設定されている場合、インポートはインポートリストの先頭に追加されます。

addImportsSources

リストされたインポートを Nuxt アプリケーションに追加します。

使用法

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

export default defineNuxtModule({
  setup() {
    addImportsSources({
      from: 'h3',
      imports: [
        'defineEventHandler',
        'getQuery',
        'getRouterParams',
        'readBody',
        'sendRedirect'
      ],
    })
  }
})

function addImportsSources (importSources: ImportSource | ImportSource[]): void

パラメータ

importSources: 以下のプロパティを持つオブジェクトまたはオブジェクトの配列:

プロパティ必須説明
fromstringtrueインポート元のモジュール指定子。
importsPresetImport | ImportSource[]{lang="ts"}trueインポート名、インポートオブジェクト、またはインポートソースであるオブジェクトまたはオブジェクトの配列。

tips

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

Nuxtの自動インポート機能を深掘り:実務での活用と注意点

Nuxtの自動インポート機能は、VueやNuxtのAPI、独自のコンポーザブルやユーティリティ関数を明示的にインポートせずに利用できる便利な仕組みです。これにより、コードの記述量が減り、開発スピードが向上します。特に大規模なプロジェクトや複数人での開発において、インポート管理の煩雑さを軽減できるため、保守性の向上にも寄与します。

しかし、自動インポートの仕組みを正しく理解しないと、意図しない挙動やパフォーマンスの問題を引き起こすこともあります。本記事では、Nuxtの自動インポートの概要から、実務での具体的な活用例、注意点までを丁寧に解説します。


まず結論:Nuxtの自動インポートのポイント

  • NuxtはVue APIや独自のコンポーザブルを自動的にインポートし、明示的なimport文を不要にする
  • addImportsaddImportsDirを使うことで、独自の関数やディレクトリ単位での自動インポートを追加可能
  • 自動インポートはコードの可読性と開発効率を向上させるが、過剰な利用は依存関係の把握を難しくする場合がある
  • SSRやHydration時の挙動に注意し、パフォーマンスやバンドルサイズへの影響を考慮する必要がある
  • 実務ではAPIラッパーやユーティリティ関数、状態管理のカスタムフックなどでの活用が多い

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

使うべきケース

  • 共通のユーティリティ関数やコンポーザブルを複数ファイルで頻繁に使う場合
    毎回importを書く手間を省き、コードをシンプルに保てます。

  • 外部ライブラリのAPIをラップして独自のComposableとして提供する場合
    例えばAPIクライアントのラッパー関数を自動インポートに登録し、どこでも簡単に呼び出せるようにできます。

  • 大規模プロジェクトでのコードの一貫性を保ちたい場合
    インポートの書き忘れや重複を防ぎ、チーム全体で統一した開発スタイルを促進します。

避けたほうがよいケース

  • 使用頻度が低い関数やコンポーネント
    自動インポートに登録すると、どこで使われているか追いづらくなるため、明示的なimportのほうが管理しやすいです。

  • 名前が衝突しやすい関数やAPI
    同じ名前の関数が複数存在する場合、優先度設定を誤ると意図しないものがインポートされるリスクがあります。

  • パフォーマンスに敏感な部分
    不要なインポートが増えるとバンドルサイズが肥大化し、初期読み込みに影響することがあります。


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

1. APIクライアントのComposableを自動インポートに登録

API通信を行うComposableを作成し、どこでも簡単に呼び出せるようにします。

// modules/apiClient.ts
import { defineNuxtModule, addImports } from '@nuxt/kit'

export default defineNuxtModule({
  setup(_, nuxt) {
    addImports([
      { name: 'useApiClient', from: '~/composables/useApiClient' }
    ])
  }
})
// composables/useApiClient.ts
import { ref } from 'vue'

export function useApiClient() {
  const data = ref(null)
  const fetchData = async () => {
    const res = await fetch('/api/data')
    data.value = await res.json()
  }
  return { data, fetchData }
}

これにより、useApiClientをどのコンポーネントやページでもimportなしで利用可能です。


2. ディレクトリ単位で複数のComposableを自動インポート

複数のComposableをまとめて管理し、追加や削除も容易にします。

import { defineNuxtModule, addImportsDir, createResolver } from '@nuxt/kit'

export default defineNuxtModule({
  setup(_, nuxt) {
    const resolver = createResolver(import.meta.url)
    addImportsDir(resolver.resolve('./composables'))
  }
})

./composablesディレクトリ内のすべてのComposableが自動的にインポート対象となり、管理が楽になります。


3. サードパーティパッケージのAPIを自動インポートに追加

外部ライブラリの特定の関数を自動インポートに登録し、利用を簡単にします。

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

export default defineNuxtModule({
  setup() {
    addImportsSources({
      from: 'h3',
      imports: ['defineEventHandler', 'getQuery']
    })
  }
})

これにより、h3のAPIを明示的なimportなしで利用可能です。


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

SSRとHydrationの影響

自動インポートされたComposableや関数は、サーバーサイドレンダリング(SSR)とクライアントサイドのHydrationで同じ挙動を期待されます。
しかし、状態を持つComposableを誤って共有してしまうと、サーバーとクライアント間で状態の不整合が起きることがあります。
状態管理はVuexやPiniaなどの専用ストアを使い、Composableは純粋なロジックに留めるのが望ましいです。

パフォーマンスとバンドルサイズ

自動インポートは便利ですが、登録するインポートが増えすぎると、不要なコードまでバンドルに含まれる可能性があります。
特に大規模なライブラリを丸ごと登録すると、初期ロードが遅くなることがあるため、必要なものだけを厳選して登録しましょう。

名前の衝突と優先度設定

同じ名前の関数やComposableが複数存在する場合、priorityオプションで優先度を設定できますが、設定ミスで意図しないものが使われるリスクがあります。
名前の一意性を保つか、asオプションで別名を付けるなどの工夫が必要です。


まとめ

Nuxtの自動インポート機能は、開発効率を大幅に向上させる強力なツールです。
独自のComposableや外部ライブラリのAPIを簡単に利用できるため、コードの可読性と保守性が高まります。
ただし、使いすぎや名前の衝突、SSRとの整合性などには注意が必要です。
実務では、APIラッパーや共通ユーティリティの自動インポートを中心に活用し、パフォーマンスや依存関係の管理を意識しながら適切に運用しましょう。

自動インポートはNuxt KitのaddImportsaddImportsDiraddImportsSourcesなどのAPIを通じて拡張可能です。公式ドキュメントやコミュニティのベストプラクティスも参考にしながら、最適な使い方を模索してください。