環境変数の型付け
process.envに正確で検証済みの型を与えます。
「環境変数の型付け」はCoddyKit上の無料TypeScript Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはTypeScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 TypeScript Academyコースには全4レッスンが含まれています。
process.envの問題
Nodeでは、process.envはRecord<string, string | undefined>として型付けされています。どの変数も存在しない可能性があり、すべて文字列なので、そのままアクセスするのは安全ではなく、型もありません。
型付きEnvインターフェースの宣言
まず、アプリが実際に必要とする設定を、正確な型と必須・オプションの区別を備えたインターフェースとして定義します。
interface Env {
PORT: number;
NODE_ENV: "development" | "production";
DATABASE_URL: string;
DEBUG?: boolean; // optional
}生の値の読み取り
すべての値は文字列またはundefinedとして渡されます。キーが単に存在しない可能性があるため、防御的に読み取る必要があります。
const rawPort = process.env.PORT; // string | undefined
const rawEnv = process.env.NODE_ENV; // string | undefined必須変数とオプション変数
アプリの実行に必須の変数もあれば、妥当なデフォルト値を使える変数もあります。必須値用のヘルパーを使うと、値がない場合に明確なエラーを発生させられます。
function required(name: string): string {
const v = process.env[name];
if (v === undefined) throw new Error("Missing env: " + name);
return v;
}数値のパース
数値の変数には変換と検証が必要です。parseIntはNaNを返すことがあるためです。パース処理をラップして、不正な入力をすぐに拒否します。
function num(name: string): number {
const n = Number(required(name));
if (Number.isNaN(n)) throw new Error(name + " is not a number");
return n;
}真偽値のパース
真偽値は"true"のような文字列として渡されます。空でない文字列の真偽値に依存せず、明示的に正規化してください。
function bool(name: string, def = false): boolean {
const v = process.env[name];
if (v === undefined) return def;
return v === "true" || v === "1";
}型付き設定の構築
パースした値を、Envインターフェースに一致する1つのオブジェクトにまとめます。以降、アプリの他の部分では型付き設定を使用し、process.envに直接アクセスすることはありません。
const env: Env = {
PORT: num("PORT"),
NODE_ENV: required("NODE_ENV") as Env["NODE_ENV"],
DATABASE_URL: required("DATABASE_URL"),
DEBUG: bool("DEBUG"),
};文字列ユニオンの制約
取り得る値が決まっている変数については、その集合に対して検証します。これにより、想定外の値が誤ったリテラル型のまま入り込むのを防げます。
function oneOf<T extends string>(name: string, allowed: readonly T[]): T {
const v = required(name) as T;
if (!allowed.includes(v)) throw new Error(name + " invalid");
return v;
}アクセスの一元化
1つのモジュールから単一のenvオブジェクトをエクスポートします。すべての利用側がこれをインポートすることで、完全な型情報と、パースロジックを変更する場所の一元化を実現できます。
export const config = env;
// elsewhere: import { config } from "./config";ProcessEnvの拡張(オプション)
NodeJS.ProcessEnvのモジュール拡張を宣言して、生のアクセスに型を付けることもできます。ただし、パース済みの設定オブジェクトのほうが、検証と変換も行えるため安全です。
// declare global { namespace NodeJS { interface ProcessEnv { PORT: string } } }型付き設定オブジェクトが優れている理由
パースと検証を済ませた設定なら、正しい型(数値、真偽値、ユニオン)、必須変数が存在することの保証、アプリ全体で使える1つのインポートを得られます。安全でないprocess.envの読み取りを各所に分散させる必要がありません。
クイックチェック
このレッスンのクイックチェックです。
まとめ
型付きEnvインターフェースを宣言し、変換と検証を行うヘルパーでprocess.envをパースします。数値、真偽値、文字列ユニオンを処理し、必須変数がない場合はエラーにします。型付きのconfigオブジェクトを1つエクスポートし、アプリが生のprocess.envに触れないようにします。
よくある質問
「環境変数の型付け」レッスンは無料ですか?
はい。「環境変数の型付け」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、TypeScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 TypeScript Academyコースには全4レッスンが含まれています。
「環境変数の型付け」で何を学びますか?
process.envに正確で検証済みの型を与えます。 ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
TypeScript Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのTypeScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「環境変数の型付け」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このTypeScript Academyレッスンでコードを書いて実行できますか?
はい。すべてのTypeScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。