困ってること
@nestjs/config
を利用していると下記のように少し困ることがある。
- 毎回
configService.get<string>('xxx')
という風にする場合、厳格な型安全性が無く変数名の補完も効かない
- 想定した環境変数とその値が記述されているかの検証&保証ができてない
- 環境毎に
.env
ファイルを作成している場合、一部のファイルでのみ環境変数を設定し忘れるリスクもある
そこでConfigModule
をラップしてより便利にしつつ、.env(環境変数)のバリデーションもしてみる。
実装
0. 環境変数の設定
今回は上記のような環境変数を設定している前提で進める。
1. EnvModuleの実装
グローバルに使いたいので@Global
デコレータも付与しておく。
2. EnvServiceの実装
ここでConfigService
をDIし、設定した環境変数のgetterを追加する。
あとは利用元でEnvService
をDIすればよし。これでより型安全に環境変数を取り出せるようになった。
3. EnvValidatorの実装
環境変数をバリデーションするためのクラスを作成し、必要に応じてライブラリ(今回はzod
)をインストールする。
ルールを記述の上validate
関数を作成し、その中で判定を行う。
あとはConfigModule
のオプションに先ほどのvalidate
関数を指定すれば完了。
4. 動作確認
試しに適当な環境変数を削除してみる。
すると無事にバリデーションエラーが表示された。
1