ランタイム設定
Nuxtは、アプリケーション内で設定と秘密情報を公開するためのランタイム設定APIを提供します。
公開
アプリの他の部分に設定と環境変数を公開するには、nuxt.config
ファイルでruntimeConfig
オプションを使用してランタイム設定を定義する必要があります。
export default defineNuxtConfig({
runtimeConfig: {
// サーバーサイドでのみ利用可能な秘密鍵
apiSecret: '123',
// public内のキーはクライアントサイドにも公開されます
public: {
apiBase: '/api'
}
}
})
runtimeConfig.public
にapiBase
を追加すると、Nuxtはそれを各ページのペイロードに追加します。apiBase
はサーバーとブラウザの両方で普遍的にアクセスできます。
const runtimeConfig = useRuntimeConfig()
console.log(runtimeConfig.apiSecret)
console.log(runtimeConfig.public.apiBase)
パブリックランタイム設定は、Vueテンプレート内で$config.public
としてアクセスできます。
シリアライズ
ランタイム設定は、Nitroに渡される前にシリアライズされます。つまり、シリアライズおよびデシリアライズできないもの(関数、Set、Mapなど)は、nuxt.config
に設定しないでください。
シリアライズできないオブジェクトや関数をnuxt.config
からアプリケーションに渡す代わりに、このコードをNuxtまたはNitroのプラグインやミドルウェアに配置できます。
環境変数
設定を提供する最も一般的な方法は、環境変数を使用することです。
Nuxt CLIは、開発、ビルド、生成時に.env
ファイルを読み込むためのサポートを組み込んでいます。しかし、ビルドされたサーバーを実行するときは、.env
ファイルは読み込まれません。
ランタイム設定の値は、実行時に一致する環境変数によって自動的に置き換えられます。
2つの重要な要件があります:
-
目的の変数は
nuxt.config
に定義されている必要があります。これにより、任意の環境変数がアプリケーションコードに公開されないようにします。 -
特別に名前付けされた環境変数のみがランタイム設定プロパティを上書きできます。つまり、
NUXT_
で始まり、キーとケースの変更を_
で区切る大文字の環境変数です。
runtimeConfig
の値のデフォルトを異なる名前の環境変数(例えば、myVar
をprocess.env.OTHER_VARIABLE
に設定する)に設定すると、ビルド時にのみ機能し、実行時には壊れます。
runtimeConfig
オブジェクトの構造に一致する環境変数を使用することをお勧めします。
Alexander Lichterによるランタイム設定の使用における開発者の最も一般的なミスを紹介するビデオを視聴してください。
例
NUXT_API_SECRET=api_secret_token
NUXT_PUBLIC_API_BASE=https://nuxtjs.org
export default defineNuxtConfig({
runtimeConfig: {
apiSecret: '', // NUXT_API_SECRET環境変数で上書き可能
public: {
apiBase: '', // NUXT_PUBLIC_API_BASE環境変数で上書き可能
}
},
})
読み取り
Vueアプリ
NuxtアプリのVue部分内でランタイム設定にアクセスするには、useRuntimeConfig()
を呼び出す必要があります。
クライアントサイドとサーバーサイドで動作が異なります:
-
クライアントサイドでは、
runtimeConfig.public
とruntimeConfig.app
(Nuxtが内部で使用する)のキーのみが利用可能で、オブジェクトは書き込み可能でリアクティブです。 -
サーバーサイドでは、ランタイム設定全体が利用可能ですが、コンテキストの共有を避けるために読み取り専用です。
<script setup lang="ts">
const config = useRuntimeConfig()
console.log('ランタイム設定:', config)
if (import.meta.server) {
console.log('APIシークレット:', config.apiSecret)
}
</script>
<template>
<div>
<div>開発者コンソールを確認してください!</div>
</div>
</template>
セキュリティ注意: ランタイム設定キーをクライアントサイドに公開しないように注意してください。レンダリングしたり、useState
に渡したりしないでください。
プラグイン
カスタムプラグイン内でランタイム設定を使用したい場合は、defineNuxtPlugin
関数内でuseRuntimeConfig()
を使用できます。
export default defineNuxtPlugin((nuxtApp) => {
const config = useRuntimeConfig()
console.log('APIベースURL:', config.public.apiBase)
});
サーバールート
サーバールート内でもuseRuntimeConfig
を使用してランタイム設定にアクセスできます。
export default defineEventHandler(async (event) => {
const { apiSecret } = useRuntimeConfig(event)
const result = await $fetch('https://my.api.com/test', {
headers: {
Authorization: `Bearer ${apiSecret}`
}
})
return result
})
useRuntimeConfig
に引数としてevent
を渡すことはオプションですが、サーバールートで実行時に環境変数によってランタイム設定が上書きされるようにするために渡すことをお勧めします。
ランタイム設定の型定義
Nuxtは、提供されたランタイム設定から自動的にTypeScriptインターフェースを生成しようとしますが、unjs/untypedを使用して手動でランタイム設定を型定義することも可能です。
declare module 'nuxt/schema' {
interface RuntimeConfig {
apiSecret: string
}
interface PublicRuntimeConfig {
apiBase: string
}
}
// 型を拡張する際には、何かをインポート/エクスポートすることを常に確認することが重要です
export {}
nuxt/schema
は、エンドユーザーがプロジェクトでNuxtが使用するスキーマのバージョンにアクセスするための便宜として提供されています。モジュールの作成者は代わりに@nuxt/schema
を拡張するべきです。
※このページは Nuxt.js 公式ドキュメントの翻訳ページ(非公式)です。
公式ドキュメントの該当ページはこちら:
https://nuxt.com/docs/3.x/guide/going-further/runtime-config