メインコンテンツへスキップ
見出し画像

環境変数を 「事故」 らせない。 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 単体でも使える、汎用的なパターンです。

     
     
    15年のフリーランス / ソフトウェアエンジニア経験を基に、仕事が劇的にラクになる思考法を発信し、あなたの生産性と心の余裕を生み出します。吃音で選んだ物語の力で、人生の深い葛藤を乗り越えるヒントと癒しを提供。フォローで専門知識と心の拠り所となる物語が手に入ります。

    あなたへのおすすめ