brand logo

ドキュメント

useAppConfig

プロジェクトで定義されたリアクティブなアプリ設定にアクセスします。

使用法

const appConfig = useAppConfig()

console.log(appConfig)
こちらも参照 guide > directory-structure > app-config

tips

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

useAppConfig の補足解説

Nuxt でアプリケーションの設定値を管理する際、useAppConfig は非常に便利な機能です。公式ドキュメントでは基本的な使い方が紹介されていますが、本記事ではより実務的な視点から useAppConfig のメリットや活用シーン、注意点を詳しく解説します。


1. イントロ:なぜ useAppConfig が嬉しいのか?

アプリケーションの設定値は、APIのエンドポイントや外部サービスのキー、UIの挙動を制御するフラグなど多岐にわたります。これらをコード内にハードコーディングすると、環境ごとの切り替えやメンテナンスが難しくなります。

useAppConfig を使うと、Nuxt プロジェクトの app.config.tsnuxt.config.ts 内で定義した設定をリアクティブに参照でき、環境に応じた設定管理や動的なUI制御が容易になります。さらに、設定の変更がリアクティブに反映されるため、開発効率や保守性が向上します。


2. まず結論:useAppConfig の要点まとめ

  • リアクティブなアプリ設定にアクセス可能
    Nuxt の設定ファイルで定義した値をリアクティブに取得できる。

  • 環境ごとの設定切り替えが簡単
    nuxt.config.tsappConfig に環境変数を組み込むことで、環境依存の設定を一元管理。

  • コンポーネントやComposableから手軽に利用可能
    Vue コンポーネントやカスタムフック内で簡単に呼び出せる。

  • 設定の変更がリアクティブに反映される
    動的にUIや挙動を切り替えたい場合に便利。


3. いつ使うべきか・使わない方がよいケース

使うべきケース

  • 環境ごとに異なる設定を管理したいとき
    APIのURLや認証キーなど、環境依存の値を切り替えたい場合。

  • アプリ全体で共通の設定を参照したいとき
    UIのテーマカラーや表示フラグなど、複数コンポーネントで共有する値。

  • 設定値の変更をリアクティブに反映させたいとき
    ユーザー操作や外部イベントで設定を動的に切り替える場合。

使わない方がよいケース

  • 頻繁に変更される大量のデータ管理には不向き
    useAppConfig は設定値向けであり、状態管理や大規模なデータ管理には Vuex や Pinia の利用が適切。

  • セキュリティ上、クライアントに公開したくない秘密情報の管理
    appConfig はクライアントにも送信されるため、APIキーなどの秘密情報はサーバー側で管理すべき。


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

ユースケース1:環境ごとのAPIエンドポイント切り替え

// nuxt.config.ts
export default defineNuxtConfig({
  appConfig: {
    apiBase: process.env.API_BASE_URL || 'https://api.example.com'
  }
})
// composables/useApi.ts
export const useApi = () => {
  const config = useAppConfig()
  const fetchData = async () => {
    const res = await fetch(`${config.apiBase}/data`)
    return res.json()
  }
  return { fetchData }
}

ユースケース2:UIテーマの動的切り替え

// nuxt.config.ts
export default defineNuxtConfig({
  appConfig: {
    theme: 'light' // 'dark' に切り替え可能
  }
})
<script setup lang="ts">
const config = useAppConfig()
</script>

<template>
  <div :class="config.theme">
    {/* テーマに応じたスタイルが適用される */}
  </div>
</template>

ユースケース3:機能フラグの管理

// nuxt.config.ts
export default defineNuxtConfig({
  appConfig: {
    featureXEnabled: true
  }
})
<script setup lang="ts">
const config = useAppConfig()
</script>

<template>
  <div>
    <p v-if="config.featureXEnabled">機能Xが有効です</p>
    <p v-else>機能Xは無効です</p>
  </div>
</template>

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

SSR と CSR の違いによる挙動

useAppConfig で取得する設定はサーバーサイドレンダリング(SSR)時に決定され、クライアントにシリアライズされます。したがって、実行時に環境変数を動的に変更してもクライアント側には反映されません。動的に切り替えたい場合は、クライアント側の状態管理と組み合わせる必要があります。

Hydration エラーに注意

設定値が SSR と CSR で異なる場合、Vue の Hydration エラーが発生することがあります。例えば、サーバーで featureXEnabledtrue だがクライアントで false の場合、DOM の不整合が起きます。設定値は SSR と CSR で一貫性を保つことが重要です。

パフォーマンスへの影響

useAppConfig はリアクティブですが、設定値の変更は頻繁に行うべきではありません。頻繁な変更は再レンダリングを多発させ、パフォーマンス低下の原因になります。設定は基本的に固定的に扱い、動的な状態管理は別途行うのが望ましいです。


6. まとめ

useAppConfig は Nuxt アプリの設定値をリアクティブに扱う強力なツールです。環境ごとの設定切り替えや共通設定の共有に最適で、開発効率と保守性を大きく向上させます。一方で、SSR/CSR の整合性やパフォーマンス面の注意も必要です。実務では用途を見極めて適切に活用しましょう。


useAppConfig はあくまで設定値の参照用です。動的なユーザー操作による状態管理は Vuex や Pinia と組み合わせて使うのがベストプラクティスです。