
環境変数を 「事故」 らせない。 Zod で作る鉄壁の設定管理
深夜のアラート、原因はたった一行の設定漏れ
「本番環境でエラーが出ています」
深夜に鳴り響くアラート。
血の気が引く思いでログを確認すると、原因はあまりにも単純なものでした。
「環境変数(API キー)が設定されていなかった」
ローカル環境の `.env` には書いていたのに、本番サーバー(Vercel や AWS)の設定画面に入力するのを忘れていたのです。
コード上では `process.env.API_KEY` を参照していましたが、それが `undefined` になっていることに、実際にアクセスされるまで気づけませんでした。
こんな「事故」、一度は経験したことがありませんか?
僕は何度もあります。
その度に「次は気をつける」と誓うのですが、人間である以上、忘れるときは忘れます。
だからこそ、仕組みで解決することにしました。
「process.env を直接使うのはやめて、Zod でガチガチに固める」
今回は、環境変数の設定漏れをアプリ起動時に検知し、型安全な開発体験を手に入れるための「最小実装」を紹介します。
process.env は 「地雷原」 である
Node.js や Next.js の開発において、`process.env` をそのまま使うことには、大きく 3 つのリスク(地雷)があります。
1️⃣ undefined の恐怖
設定し忘れても、コンパイルエラーにはなりません。
実行時に初めて `undefined` になり、エラーを吐きます。
しかも、アクセスされるまで気づかないことが多いため、デプロイ後に発覚する「事故」になりやすいのです。
2️⃣ 型がない(補完が効かない)
TypeScript 上では、`process.env` の中身は基本的に `string | undefined` です。
エディタの補完も効きませんし、タイポしても気づけません。
3️⃣ バリデーションがない
例えば「データベースの URL」を設定すべき場所に、間違って「API キー」を入れてしまったとしても、`process.env` はただの文字列として受け入れます。
形式チェックができないのです。
Zod で 「Fail Fast(早く落とす)」 を実現する
これらの問題を解決する鍵は、「Zod」 というスキーマバリデーションライブラリです。
Zod を使って環境変数の「あるべき姿(スキーマ)」を定義し、アプリケーションが起動する瞬間にチェックを行います。
もし設定が間違っていれば、その場でエラーを吐いてプロセスを終了させます。
これを 「Fail Fast(早く失敗する)」 と言います。
ユーザーがアクセスしてエラーになる前に、デプロイ時や起動時にエラーにすることで、事故を未然に防ぐのです。
ここからは、実際に僕が個人開発や業務で使っている「env.ts の最小実装コード」を公開します。
Next.js でも Node.js 単体でも使える、汎用的なパターンです。