最近、新しいプロジェクトに取り組んでいる際、開発環境の違いによる少し面倒な問題に直面しました。プロジェクトチームのメンバーはほとんどが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環境で開発を行う際には、このようなツールの存在を知っておくと、多くの問題に対処できるようになります。