【NestJS】ConfigModuleは.envを上書きできない
こんにちは、フリーランスエンジニアの太田雅昭です。
ConfigModule
NestJSのConfigModuleは、環境変数の読み込みに使用されます。以下のように使用します。
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
envFilePath: [`.env.${process.env.NODE_ENV}`],
}),
],
})
export class AppModule { }
ここでは.env.xxxを読み込んでいます。xxxはproduction,development,testなどの値を想定しています。
.envはConfigModule関係なく読み込まれてる
本来やりたかったのは、.envよりも優先して各.env.xxxを読み込みたかったのですが、うまくいきませんでした。どうやら、.envは優先して読み込まれ、その値を上書きできないようです。
試しに以下のようにテストしてみました。
async function bootstrap() {
console.log(process.env.DATABASE_URL)
const app = await NestFactory.create(AppModule);
}
AppModule初期化前に、.envに設定した環境変数が入っているかどうかをテストしています。見事に出力されました。このことから、nest実行時に自動で.envが読み込まれていることがわかります。
つまり、ConfigModuleで.envを上書きできないことになります。
どうするか
仕組みさえわかってしまえば、あとはどうとでもできるかと思います。デフォルト値をConfigModuleで設定するか、共通設定を諦めて各.env.xxxで全ての値を洗い出すか、.env.commonを作成して最後に読み込むか。
さてどうしようか、ひとまず.env.commonを作成しておこうかと思います。他にいい方法があれば教えていただけると嬉しいです。
小話
久しぶりにマイケルジャクソンを聴きました。いいですね、マイコー。昔に聴き倒したので、もう何度も聞くことはないですが、久しぶりに聞くとやっぱり良いです。あの発声、どういう腹筋してるんでしょうね彼は。ものすごい量の筋トレをしていたそうですが、子供の頃からあのような発声なので、天性のものでしょうか。