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プラグインを追加せずに、標準機能でできるようになったのは魅力的です。定期的に公式ドキュメントに目を通すと新たな発見がありますね。