スキーマで検証する設定
スキーマを使って起動時に設定を検証します。
「スキーマで検証する設定」はCoddyKit上の無料TypeScript Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはTypeScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 TypeScript Academyコースには全4レッスンが含まれています。
起動時の設定検証
手動のパース用ヘルパーでも機能しますが、スキーマを使えば全体の形とルールを1か所で宣言し、起動時にすべてを検証できます。アプリがトラフィックを受け付ける前にフェイルファストを実行できます。
フェイルファストとは
フェイルファストとは、設定が正しくない場合に明確なメッセージを出してプロセスを直ちに終了することです。リクエスト処理中、分かりにくいコードパスで後からクラッシュする事態を避けられます。
Zodによるスキーマ
zodのようなライブラリを使うと、設定を宣言的に記述できます。各フィールドに型と制約を指定し、検証によって完全に型付けされたオブジェクトを生成できます。
import { z } from "zod";
const EnvSchema = z.object({
PORT: z.coerce.number().int().positive(),
NODE_ENV: z.enum(["development", "production"]),
DATABASE_URL: z.string().url(),
});組み込みの強制変換
スキーマでは、文字列を適切な型に強制変換できます。z.coerce.number()は"8081"を8081に変換するため、生の環境変数の文字列を安全に実際の数値にできます。
// "8081" -> 8081 via z.coerce.number()パースしてフェイルファスト
parseを呼び出すと、すべての値が検証されます。何か1つでも不正なら、zodが詳細なエラーをスローするため、それをログに記録して終了できます。起動は直ちに停止します。
function loadConfig() {
const result = EnvSchema.safeParse(process.env);
if (!result.success) {
console.error(result.error.format());
process.exit(1);
}
return result.data;
}型の推論
大きなメリットの1つは、検証済みの型をz.inferでスキーマから導出できることです。スキーマが、実行時の検証とコンパイル時の型の両方に対する信頼できる唯一の情報源になります。
type Env = z.infer<typeof EnvSchema>;
// { PORT: number; NODE_ENV: "development" | "production"; DATABASE_URL: string }分かりやすいエラー
スキーマバリデーターは、どのフィールドがなぜ失敗したのかを正確に報告します。たとえば「PORT: 正の数が必要です」のようになります。明確なメッセージにより、設定ミスを簡単に診断できます。
// e.g. { PORT: { _errors: ["Expected number, received nan"] } }オプションフィールドとデフォルトフィールド
スキーマでは、オプションかどうかやデフォルト値を直接表現できます。手書きのフォールバック処理が不要になり、すべてのルールを1つの宣言にまとめられます。
const Schema = z.object({
LOG_LEVEL: z.enum(["info", "debug"]).default("info"),
TIMEOUT_MS: z.coerce.number().optional(),
});一度検証してどこでも使う
起動時に1回だけ検証し、その結果の型付きオブジェクトをエクスポートします。後続のコードは、設定が存在し、正しい形式であることを信頼できます。
export const config = loadConfig();Envの先へ:ファイルと引数
同じスキーマで、process.envだけでなくJSONファイルや複数のソースを結合した設定も検証できます。値の取得元に関係なく、検証の手順は独立しています。
スキーマが場当たり的なチェックに勝る理由
スキーマは検証と型付けを統合し、一貫した詳細なエラーを生成します。強制変換とデフォルト値にも対応し、分散した手動のifチェックを1つの宣言に置き換えてフェイルファストを実現します。
クイックチェック
このレッスンのクイックチェックです。
まとめ
設定スキーマ(例:zod)は、型、制約、強制変換、デフォルト値を1か所で宣言します。起動時に検証して、分かりやすいエラーとともにフェイルファストを実行でき、信頼できる唯一の情報源であるスキーマからz.inferを使って型付き設定を推論できます。
よくある質問
「スキーマで検証する設定」レッスンは無料ですか?
はい。「スキーマで検証する設定」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、TypeScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 TypeScript Academyコースには全4レッスンが含まれています。
「スキーマで検証する設定」で何を学びますか?
スキーマを使って起動時に設定を検証します。 ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
TypeScript Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのTypeScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「スキーマで検証する設定」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このTypeScript Academyレッスンでコードを書いて実行できますか?
はい。すべてのTypeScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 環境変数の型付け
- スキーマで検証する設定
- 設定のレイヤリングとデフォルト値
- シークレットと型安全性