一度の定義で、あらゆる場所での信頼を
CtroEnvは、環境変数を安全に保つために4つのコアバリデータファクトリを使用しています。
仕組みは以下の通りです:
string():テキスト用 URL、メールアドレス、ポート番号などに使用します。.min()や.max()のようなルールをチェーンして、文字数制限を設定できます。
number():数値用 "3000"のような文字列を実際の数値に変換します。整数や正の値のみを強制することも可能です。
boolean():trueまたはfalse用 フィーチャーフラグを扱います。"true"、"1"、"false"を実際のブール値に変換します。
pick():特定のセット用 値をリスト内に制限するために使用します。例えば、NODE_ENVを"development"、"staging"、"production"のいずれかに限定できます。タイポをした場合、エラーが正しい綴りを提案してくれます。
すべてのバリデータで利用可能な便利なツール:
• .default(value) - 変数が存在しない場合のフォールバックを設定します。
• .optional() - 変数が undefined であることを許可します。
• .secret() - ログ内の機密データをマスクします。
• .describe(text) - エラーメッセージに説明を追加します。
• .validate(fn) - 個別のルールに対してカスタムロジックを記述できます。
CtroEnvは、さまざまな環境で動作します:
- Node.js: nodeSource() または loadEnv() を使用して .env ファイルを読み込みます。
- Vite: vitePlugin を使用して、変数が無効な場合にビルドを失敗させることができます。
- Next.js: 内蔵サポートを使用して、サーバー用とクライアント用の変数を分離します。これにより、機密情報が誤ってブラウザに露出してしまうのを防ぎます。
バリデーションに失敗したとき、CtroEnvはただ停止するだけではありません。すべてのエラーを収集し、一度にまとめて表示します。何が不足しているのか、どの型が間違っているのか、どのカスタムルールに失敗したのかが明確なリストとして提示されます。
これにより、設定の不変性が維持され、ランタイムの予測可能性が向上します。
出典: https://dev.to/ctrotech/define-once-trust-everywhere-ctroenv-deep-dive-3bjl