Nuxt.jsで作ったアプリケーションをコンテナ化して、kubernetesのPodとして稼働させるようなケースでは、外部APIサーバ情報などを環境変数を利用して渡すことがよくあります。一年以上前からNuxt.jsを利用している方は、@nuxtjs/dotenvを使っている方や、コンテナビルド時に作成するイメージを環境ごとに分けるなどしていた方もいたかもしれません。今回は、Nuxt.js v2.13で組み込まれたruntimeConfigについて紹介します。
実際にやってみる
公式ドキュメントは、こちらをみてください。
下記のような環境変数を組み込むとします。
API_URL=http://localhost:8080
envプロパティ
よくネットなど検索すると出てくるnuxt.config.jsのenvプロパティの例が見つかると思います。
export default { env: { apiUrl: process.env.API_URL || "http://localhost:8080", } }
このケースは、ビルド時(=コンテナイメージ作成時)にAPI_URLが文字列として埋め込まれます。kubernetesのPodとして実行時に環境変数を渡したとしても、ビルド時に値として埋め込まれてしまうので、この方法では実現できません。
RuntimeConfigプロパティ
RuntimeConfig プロパティという動的設定や環境変数をnuxtコンテキストにわたす仕組みで実現します。
export default { publicRuntimeConfig: { apiUrl: process.env.API_URL || "http://localhost:8080", } }
ソースコードでは、 $configから取得します。componentsなどから取る例は、下記の通りです。
import { defineComponent, ref, } from '@nuxtjs/composition-api' export default defineComponent({ setup(_props: any, context: any) { const { $config } = context.root console.log($config.apiUrl) ... }, })
dotenvプラグインを追加せずに、標準機能でできるようになったのは魅力的です。定期的に公式ドキュメントに目を通すと新たな発見がありますね。