← NestJS コース
17. 環境変数と ConfigModule
DB の接続先や API キーのような環境ごとに変わる値は、コードに直書きせず環境変数で渡します。NestJS では @nestjs/config パッケージの ConfigModule.forRoot() を AppModule に登録すると .env ファイルが読み込まれ、ConfigService を注入して config.get("KEY") で値を取り出せます。
実務では isGlobal: true を付けてアプリ全体で使えるようにするのが定番です。これを付けないとモジュールごとに ConfigModule を import する必要があり、付け忘れによる注入エラーの原因になります。
つまずきポイントは、環境変数がすべて文字列であることです。PORT=3000 と書いても get で取れるのは "3000" という文字列なので、数値が必要なら明示的に変換します。また .env は秘密情報を含むため、Git にコミットしない運用が大前提です。
サンプルコード(フレームワーク環境が必要なため表示のみ)
// .env ファイル:
// DATABASE_URL=postgres://localhost:5432/app
import { Module, Injectable } from "@nestjs/common";
import { ConfigModule, ConfigService } from "@nestjs/config";
@Module({
// isGlobal: true でアプリ全体から ConfigService を使える
imports: [ConfigModule.forRoot({ isGlobal: true })],
})
export class AppModule {}
@Injectable()
export class DatabaseService {
constructor(private readonly config: ConfigService) {}
connect() {
const dbUrl = this.config.get<string>("DATABASE_URL");
console.log("接続先: " + dbUrl);
}
}