0Pricing
TypeScript Academy · レッスン

環境変数の型付け

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 環境変数の型付け
  2. スキーマで検証する設定
  3. 設定のレイヤリングとデフォルト値
  4. シークレットと型安全性
← TypeScript Academyに戻る