BLOG

ブログ

Next.jsの環境変数問題、dotenv-cliでOS(Mac/Windows)問わず解決!

ハコザキです!

NextjsでWebアプリケーションを開発している際、
普段はMac環境で開発していて、実際のデプロイ先はWindows ServerのIIS みたいなシーンで環境変数が読み込まれず困っていました…

当初npm scriptsを以下のようにしており、かなりイケてない状態でした..

```
  "scripts": {
    "dev": "cat .env.dev > .env.local && next dev & tsc --watch --noEmit",
    "build:dev": "cat .env.dev > .env.local && next build",
    "build:stg": "cat .env.stg > .env.local && next build",
    "build:prod": "cat .env.prod > .env.local && next build",
    "start": "next start"
  },
```

Nextjsにおける環境変数においては、
ローカルでビルドする際、ステージング用・本番用envファイルの切り替え や
MacやWidnowsの実行シェル環境などで頭を悩ませました。

※PowerShellでnpm scripts実行する際のデフォルトシェルはcmd(コマンドプロンプト)なので、catなどのUNIX系コマンドが使えなかったりします…(PowerShellで動かしているからいけるのでは..?と思って詰まりました…)

今回は、dotenv-cliを使うことでOS環境に依存せず環境変数を読み込むことができました!

dotenv-cliのインストール

まずは以下のようにライブラリをインストールします。

npm install  dotenv-cli --save-dev

続いて、package.jsonを以下のように編集します。

{
...
 "scripts": {
    "dev": "dotenv -e .env.dev -- next dev",
    "build:dev": "dotenv -e .env.dev -- next build",
    "build:stg": "dotenv -e .env.stg -- next build",
    "build:prod": "dotenv -e .env.prod -- next build",
    "start": "next start"
  },
...
}

このようにすることで、普段のMacローカル環境で、開発用のenv、ステージング用のenv、本番用のenvを切り替えてビルドすることができます!
実際にnpm run startでビルド時に応じたファイルを元にサーバー起動するのでローカルでの動作確認も可能になります。

終わり

dotenv-cli を使うことで、環境変数の管理がシンプルになり、MacとWindowsの違いを意識せずに開発できるようになりました!
特に異なるOS間での環境変数の扱いに悩んでいる方にはオススメです。
同じような課題を持っている方は、ぜひ試してみてください!

RELATED ARTICLE

  • この記事を書いた人
  • 最新の記事