LOADING

BLOG

HOME > BLOG > 技術 > 環境構築 > Node.js > WindowsでのNODE_ENV設定エラー解決法: cross-envでクロスプラットフォーム対応

WindowsでのNODE_ENV設定エラー解決法: cross-envでクロスプラットフォーム対応

Node.js技術環境構築

最近、新しいプロジェクトに取り組んでいる際、開発環境の違いによる少し面倒な問題に直面しました。プロジェクトチームのメンバーはほとんどがMacを使用しているのに対し、私はWindowsを使用しています。特定のビルドコマンドを実行した際、Windows環境特有のエラーが発生しました。

コマンドは以下のような形式でした。

$ npm run build:prod プロジェクト名

> プロジェクト@バージョン build:prod
> NODE_ENV=prod dotenv -e ./.env.prod -e ./.env.secret.prod -- ts-node scripts/deployment/main.ts build プロジェクト名

'NODE_ENV' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

このエラーは、Windowsが環境変数を設定するためのシンタックス(NODE_ENV=prod の部分)を認識しないために起こります。Unix系のOSではこのシンタックスが問題なく機能しますが、Windowsでは別のアプローチが必要です。

cross-envの導入

この問題を解決するために、cross-envというツールを導入しました。cross-envは、Unix系OSとWindowsの間で環境変数を設定する際の違いを吸収し、クロスプラットフォームでコマンドを実行できるようにするNode.jsのライブラリです。

cross-envのインストール

まず、cross-envをプロジェクトの開発依存関係としてインストールします。以下のコマンドを実行してください。

npm install --save-dev cross-env

ビルドコマンドの修正

cross-envをインストールした後、ビルドコマンドを修正して環境変数をクロスプラットフォームで設定できるようにします。具体的には、NODE_ENV=prodの部分をcross-env NODE_ENV=prodに変更します。

修正後のコマンドは以下のようになります。

"scripts": {
  "build:prod": "cross-env NODE_ENV=prod dotenv -e ./.env.prod -e ./.env.secret.prod -- ts-node scripts/deployment/main.ts build プロジェクト名"
}

この変更により、Windows環境でも環境変数が正しく設定され、ビルドスクリプトが期待通りに動作するようになりました。

cross-envの動作原理

cross-envは、設定された環境変数を内部で適切な形式に変換し、Node.jsのprocess.envに設定します。これにより、スクリプト内でprocess.env.NODE_ENVのように環境変数にアクセスできるようになります。

Windowsでは環境変数の設定にsetコマンドを使用しますが、cross-envはこの違いを抽象化し、開発者がOSに依存しない形で環境変数を扱えるようにします。

まとめ

クロスプラットフォームな開発環境では、環境変数の扱いに注意が必要です。cross-envを使用することで、これらの違いを簡単に解決し、チーム内でOSが異なるメンバーがいてもスムーズに開発を進めることができます。Windows環境で開発を行う際には、このようなツールの存在を知っておくと、多くの問題に対処できるようになります。