【保存版】TypeScript で process.env.NODE_ENV を扱う3つの方法とサンプルコード
TypeScript で process.env.NODE_ENV
を型定義する方法
これを解決するには、process.env.NODE_ENV
の型定義をプロジェクトに追加する必要があります。
方法
@types/node パッケージをインストール
npm install --save @types/node
型定義ファイルを拡張
プロジェクト内に .d.ts
ファイルを作成し、以下のコードを追加します。
declare global {
namespace NodeJS {
interface ProcessEnv {
NODE_ENV: "development" | "production" | "test";
}
}
}
このコードは、process.env.NODE_ENV
が "development"
, "production"
, "test"
のいずれかの文字列であることを TypeScript に伝えます。
環境変数を設定
.env
ファイルを作成し、以下の内容を追加します。
NODE_ENV=development
このファイルは、アプリケーションが起動時に読み込まれます。
コードで process.env.NODE_ENV を使用する
if (process.env.NODE_ENV === "development") {
console.log("開発環境で実行中");
} else if (process.env.NODE_ENV === "production") {
console.log("本番環境で実行中");
} else {
console.log("テスト環境で実行中");
}
このコードは、process.env.NODE_ENV
の値に応じて異なる処理を実行します。
- TypeScript バージョン 3 以降では、
@types/node
パッケージをインストールすることで、自動的にprocess.env
の型定義が提供される場合があります。 - 上記の例では、
NODE_ENV
変数を定義していますが、他の環境変数も同様に定義できます。
- 環境変数は、アプリケーションの設定や動作を制御するために使用できます。
- 環境変数は、コマンドライン引数または
.env
ファイルを使用して設定できます。 process.env
は、Node.js のグローバル変数です。
利点
- コードの可読性と保守性を向上させることができます。
- IDE やエディタによるコード補完やエラーチェックを利用できます。
- 型定義を使用することで、コードの型安全性を向上させることができます。
// 型定義ファイル (env.d.ts)
declare global {
namespace NodeJS {
interface ProcessEnv {
NODE_ENV: "development" | "production" | "test";
}
}
}
// メインファイル (app.ts)
import { config as configDotenv } from 'dotenv';
import { resolve } from 'path';
configDotenv({
path: resolve(__dirname, '.env'),
});
if (process.env.NODE_ENV === 'development') {
console.log('開発環境で実行中');
// 開発環境向けの処理
} else if (process.env.NODE_ENV === 'production') {
console.log('本番環境で実行中');
// 本番環境向けの処理
} else {
console.log('テスト環境で実行中');
// テスト環境向けの処理
}
説明
.env.d.ts
ファイルを作成し、process.env.NODE_ENV
の型定義を追加します。dotenv
パッケージを使用して、.env
ファイルから環境変数をロードします。process.env.NODE_ENV
の値に応じて、条件分岐を使用して異なる処理を実行します。
- 上記のコードはあくまで一例であり、実際の用途に合わせて変更する必要があります。
.env
ファイルは、プロジェクトのルートディレクトリに配置する必要があります。- このコードは、Node.js と TypeScript がインストールされていることを前提としています。
- 異なる API エンドポイントを環境変数によって切り替える
- データベース接続情報を環境変数から取得する
- ログレベルを環境変数によって制御する
tsconfig.json
ファイルに types
プロパティを追加することで、@types/node
パッケージの型定義を自動的にロードすることができます。
{
"compilerOptions": {
"types": ["@types/node"]
}
}
Ambient 宣言を使用する
declare
キーワードを使用して、Ambient 宣言を作成することもできます。
declare global {
namespace NodeJS {
interface ProcessEnv {
NODE_ENV: "development" | "production" | "test";
}
}
}
型エイリアスを使用する
型エイリアスを使用して、process.env
の型を定義することもできます。
type Env = NodeJS.ProcessEnv & {
NODE_ENV: "development" | "production" | "test";
};
const env: Env = process.env;
サードパーティ製のライブラリを使用する
env-var
や ts-node
などのサードパーティ製のライブラリを使用して、process.env
の型定義を簡略化することもできます。
それぞれの方法の比較
方法 | 利点 | 欠点 |
---|---|---|
tsconfig.json ファイルを使用する | 設定が簡単 | 型定義がプロジェクト全体に適用される |
Ambient 宣言を使用する | コード内に型定義を記述できる | 手動で記述する必要がある |
型エイリアスを使用する | 型定義をより細かく制御できる | 構文が少し複雑 |
サードパーティ製のライブラリを使用する | コードを簡略化できる | ライブラリの導入が必要 |
どの方法が最適かは、プロジェクトの規模や要件によって異なります。
- 大規模なプロジェクトや、より複雑な型定義が必要な場合は、型エイリアスやサードパーティ製のライブラリを使用する方がよいでしょう。
- 小規模なプロジェクトであれば、Ambient 宣言を使用するだけで十分かもしれません。
typescript