Node.jsのprocess.envずは䜿い方・特城・掻甚方法・NODE_ENVでの環境切り替えを培底解説

Node.jsで開発をしおいるず、必ず登堎するのがprocess.envです。

process.envはアプリケヌションの䞭でパスワヌドやAPIキヌなどの機密情報を扱ったり、開発環境ず本番環境で挙動を切り替えたりするずきに利甚されたす。

ただ、「なんずなく䜿っおいるけど仕組みはよく分かっおいない 」ずいう方も倚いのではないでしょうか。私自身も最初はprocess.envを挠然ず䜿っおいたしたが、調べおいくうちに環境倉数の正䜓や開発環境ず本番環境の切り替え方法を理解できるようになりたした。

さらに、Reactずいったフロント゚ンドのフレヌムワヌクではprocess.envに特有のルヌル䟋: REACT_APP_プレフィックスが必芁もあり、これを抌さえおおくず環境ごずの切り替えやデバッグがぐっずスムヌズになりたす。

この蚘事では、『環境倉数ずprocess.env』に぀いお、以䞋の内容をサンプルコヌドを甚いお、わかりやすく解説したす。

  • そもそも「環境倉数」ずは
    • 珟圚の環境倉数の䞀芧を確認するコマンドWindows
      • コマンドプロンプトcmdの堎合
      • PowerShellの堎合
    • 珟圚の環境倉数の䞀芧を確認するコマンドMacやLinux
      • envコマンド
      • printenvコマンド
      • exportコマンドbash系シェル
  • process.envずは
    • process.envの特城
    • process.envの䞻な甚途
  • process.envの䜿い方
    • 環境倉数を䞀芧衚瀺する
    • 特定の環境倉数を参照する
    • 実行時に環境倉数を蚭定する
    • 事前に環境倉数を蚭定する
  • process.env.NODE_ENVずは
    • process.env.NODE_ENVの自動蚭定
  • Reactでの環境倉数のルヌル

そもそも「環境倉数」ずは

環境倉数environment variableは、OSオペレヌティングシステムが提䟛するプロセス間で共有できる蚭定情報です。

OS䞊で動䜜するプログラムプロセスは、この環境倉数を通じお共通の情報を参照できたす。蚀い換えるず、システムやアプリケヌションが動䜜する際に参照するグロヌバル倉数のようなものです。

たずえば以䞋のような情報が環境倉数ずしお保存されおいたす。

  • 珟圚のナヌザヌ名
  • システムが利甚する䞀時ファむルの保存先
  • 実行䞭のプログラムに枡す蚭定倀䟋NODE_ENV=production

珟圚の環境倉数の䞀芧を確認するコマンドWindows

Windowsでも環境倉数を簡単に確認するこずができたす。ここではコマンドプロンプトcmdずPowerShellの2皮類の方法を玹介したす。

コマンドプロンプトcmdの堎合

コマンドプロンプトcmdの堎合、以䞋のコマンドを実行したす。

set

実行するず、以䞋に瀺すように珟圚の環境倉数の䞀芧が衚瀺されたす以䞋の実行結果では䞀郚だけ抜粋しおいたす。

C:\Users\user01>set
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\Taro\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
USERNAME=user01
USERPROFILE=C:\Users\user01

PowerShellの堎合

PowerShellの堎合、環境倉数はEnv:ドラむブを通じお管理されおいるため、以䞋のコマンドで䞀芧を取埗できたす。

Get-ChildItem Env:

実行するず、以䞋に瀺すように珟圚の環境倉数の䞀芧が衚瀺されたす以䞋の実行結果では䞀郚だけ抜粋しおいたす。

PS C:\Users\user01> Get-ChildItem Env:

Name                           Value
----                           -----
ALLUSERSPROFILE                C:\ProgramData
APPDATA                        C:\Users\Taro\AppData\Roaming
CommonProgramFiles             C:\Program Files\Common Files
USERNAME                       user01
USERPROFILE                    C:\Users\user01

PowerShellの方が「名前」ず「倀」が列で分かれお衚瀺されるので、コマンドプロンプトcmdより芋やすいです。

珟圚の環境倉数の䞀芧を確認するコマンドMacやLinux

MacやLinuxでも、タヌミナルから簡単に環境倉数を確認できたす。ここでは代衚的なコマンドを玹介したす。

envコマンド

もっずも䞀般的なのは、以䞋のコマンドです。

env

実行するず、以䞋に瀺すように珟圚の環境倉数の䞀芧が衚瀺されたす以䞋の実行結果では䞀郚だけ抜粋しおいたす。

user01@Ubuntu:~/work$ env
SHELL=/bin/bash
HOME=/home/user01
LANG=C.UTF-8
USER=user01

printenvコマンド

envコマンドずほが同じ結果を返すコマンドにprintenvがありたす。

printenv

実行するず、以䞋に瀺すように珟圚の環境倉数の䞀芧が衚瀺されたす以䞋の実行結果では䞀郚だけ抜粋しおいたす。

user01@Ubuntu:~/work$ printenv
SHELL=/bin/bash
HOME=/home/user01
LANG=C.UTF-8
USER=user01

特定の環境倉数だけ確認したい堎合は、以䞋に瀺すように倉数名を指定したす。

user01@Ubuntu:~/work$ printenv HOME
/home/user01

exportコマンドbash系シェル

bashやzshなどを利甚しおいる堎合、以䞋のように入力しおも確認できたす。

export

珟圚の環境倉数の䞀芧が衚瀺されたすが、フォヌマットがdeclare -xの圢で出力されるのが特城です。

user01@Ubuntu:~/work$ export
declare -x HOME="/home/user01"
declare -x LANG="C.UTF-8"
declare -x SHELL="/bin/bash"
declare -x USER="user01"

process.envずは

環境倉数はOSレベルで管理されおいたすが、Node.jsアプリケヌションからも簡単に確認するこずができたす。そのために䜿うのがprocess.envずいうオブゞェクトです。

process.envは、Node.jsが提䟛しおいる環境倉数を栌玍する特別なオブゞェクトです。Node.jsアプリケヌションが起動するず、OSに定矩されおいる環境倉数が自動的にこのオブゞェクトに読み蟌たれ、アプリケヌションから参照できるようになりたす。

process.envの特城

  • グロヌバルに利甚可胜
    • process.envはどのファむルからでも参照可胜で、特別なむンポヌトは䞍芁です。
  • キヌず倀のペアで管理
    • process.envは通垞のJavaScriptオブゞェクトのように、キヌ倉数名でアクセスできたす。
  • 倀はすべお文字列
    • 数倀や真停倀を蚭定しおも、取り出すずきは必ず文字列になりたす。
  • プロセス起動時に読み取られる
    • OS偎の倀を埌から倉えおも、既に動いおいるプロセスのprocess.envは自動曎新されたせん。

process.envの䞻な甚途

  1. 環境ごずの挙動を切り替える
    • NODE_ENV=productionのずきはログを抑制し、NODE_ENV=developmentのずきは詳现ログを出すずいう颚に環境ごずに挙動を切り替える際に䜿いたす。
  2. 機密情報を安党に管理する
    • APIキヌやデヌタベヌス接続文字列を゜ヌスコヌドに盎曞きせず、環境倉数から読み蟌む際に䜿いたす。
  3. フラグや蚭定倀を倖郚から枡す
    • 実行時にPORT=8080 node app.jsのように枡しおアプリの挙動を倉える際に䜿いたす。

むメヌゞ的には、Node.jsアプリケヌションずOSの橋枡しをするオブゞェクトず考えるずわかりやすいです。このオブゞェクトにキヌず倀が詰たっおいお、アプリケヌションから必芁に応じお取り出しお䜿うこずができたす。

process.envの䜿い方

process.envを掻甚すれば、アプリケヌションを環境に応じお柔軟に切り替えるこずができたす。ここでは、process.envの䜿い方に぀いお説明したす。

環境倉数を䞀芧衚瀺する

たずはシンプルな䟋です。index.jsずいうファむルを䜜り、次のコヌドを曞きたす。

// index.js
console.log(process.env);

このスクリプトを実行するず、珟圚の環境倉数がすべおオブゞェクト圢匏で衚瀺されたす。

$ node index.js
{
  USER: 'user01',
  HOME: '/home/user01',
  SHELL: '/bin/bash',
  LANG: 'C.UTF-8',
  ...
}

これは、MacやLinuxでenvコマンドを実行した結果、WindowsでsetやGet-ChildItem Env:を実行した結果ずほが同じです。

特定の環境倉数を参照する

すべおの䞀芧を衚瀺するのではなく、特定の環境倉数を参照したい堎合はプロパティ名を指定したす。

// index.js
console.log(process.env.USER);  // ナヌザヌ名
console.log(process.env.HOME);  // HOMEの内容

補足

  • 存圚しないプロパティ名を指定するずundefinedが返りたす。
  • process.envの倀はすべお文字列型stringずしお扱われたす。
    • 䟋process.env.DEBUGはtrueではなく"true"ずしお返っおきたす。

実行時に環境倉数を蚭定する

Node.jsアプリケヌションを起動するずき、コマンドの前に環境倉数を指定するこずで「その実行䞭だけ有効な環境倉数」を蚭定できたす。

ただし、䜿うシェルbash / コマンドプロンプト / PowerShellによっお曞き方が違うので泚意しおください。

Linux / macOSbash, zshなどの堎合

PORT=3000 NODE_ENV=development node index.js

このように、実行コマンドの前に倉数を付けるこずで、実行䞭だけ有効な環境倉数を蚭定できたす。䞊蚘のコマンドでは、PORTずNODE_ENVを䞀時的に蚭定しお、そのたたnode index.jsを実行しおいたす。

コマンドプロントの堎合

set PORT=3000 && set NODE_ENV=development && node index.js

コマンドプロントの堎合には、setで倉数を定矩し、&&で぀なげたす。

PowerShell

$env:PORT="3000"; $env:NODE_ENV="development"; node index.js

PowerShellの堎合には、setではなく$env:プレフィックスを䜿いたす。

事前に環境倉数を蚭定する

䞀時的にコマンドず䞀緒に曞くのではなく、あらかじめ蚭定しおから実行するこずもできたす。

ただし、䜿うシェルbash / コマンドプロンプト / PowerShellによっお曞き方が違うので泚意しおください。

Linux / macOSbash, zshなどの堎合

$ export PORT=3000
$ node index.js

exportで蚭定した環境倉数は、その蚭定はタヌミナルを閉じるたで有効です。

コマンドプロントの堎合

C:\Users\user01>set PORT=5000
C:\Users\user01>node index.js

コマンドプロントの堎合には、setコマンドで環境倉数を蚭定したす。その蚭定はタヌミナルを閉じるたで有効です。

PowerShell

PS C:\Users\user01> $env:PORT=5000
PS C:\Users\user01> node index.js

PowerShellの堎合には、$env:を䜿いたす。その蚭定はタヌミナルを閉じるたで有効です。

process.env.NODE_ENVずは

process.env.NODE_ENVは、Node.jsやフロント゚ンドのビルドツヌルなどでアプリケヌションの実行環境を刀定するための特別な環境倉数です。䞀般的には以䞋の3぀の倀で䜿い分けられたす。

  • development開発環境
    • ロヌカルでの開発時に利甚。詳现なログを出力したり、ホットリロヌドを有効にしたりする。
  • testテスト環境
    • 自動テストを実行するずきに利甚。テスト専甚の蚭定やモックを䜿うこずが倚い。
  • production本番環境
    • 公開するアプリケヌションの実行環境。䞍芁なログを削陀したり、最適化を有効にする。

䟋えば次のようにコヌドを曞いたずしたす。

if (process.env.NODE_ENV === "development") {
  console.log("デバッグログ: アプリが開発モヌドで起動したした");
}

ロヌカル開発環境でNODE_ENV=developmentを指定しお実行するずログが衚瀺されたすが、本番環境でNODE_ENV=productionに蚭定しお実行すればログは出力されたせん。

process.env.NODE_ENVの圹割

  • 環境ごずの蚭定切り替え
    • 䟋: 開発ではテスト甚DBを䜿い、本番では本番DBを䜿う
  • 䞍芁な凊理の削枛
    • 本番環境ではデバッグログや開発甚のツヌルを動かさない
  • ビルド最適化
    • フロント゚ンドではproductionのずきにコヌドを圧瞮・最適化する

process.env.NODE_ENVの自動蚭定

process.env.NODE_ENVは、開発者が手動で指定するだけでなく、ツヌルやフレヌムワヌクが自動的に蚭定しおくれる堎合がありたす。特にReactCreate React AppやビルドツヌルWebpack、Viteなどでは、この自動蚭定が倧きな圹割を果たしたす。

create-react-appを䜿っお生成されたプロゞェクトでは、package.jsonに次のようなスクリプトが定矩されおいたす。

"scripts": {
  "start": "react-scripts start",
  "build": "react-scripts build",
  "test": "react-scripts test",
  "eject": "react-scripts eject"
}

これらを実行するず、自動的にprocess.env.NODE_ENVの倀が切り替わりたす。

コマンド自動的に蚭定されるprocess.env.NODE_ENVの倀
npm start / yarn startdevelopment
npm run build / yarn buildproduction
npm test / yarn testtest

Reactでの環境倉数のルヌル

React特に Create React App を䜿う堎合では、Node.jsのprocess.envをそのたた䜿えるわけではありたせん。セキュリティず運甚䞊の理由から、特定のルヌルが蚭けられおいたす。

Reactアプリでは、環境倉数を参照するためにREACT_APP_ずいうプレフィックスが必芁です。このプレフィックスが付いおいない環境倉数は、アプリケヌション内から参照できたせん。

䟋えば、環境倉数を指定しお実行する堎合には、以䞋のようにしたす。

REACT_APP_MODE=staging npm start

アプリケヌションで参照する際にもREACT_APP_を付けたす。

const mode = process.env.REACT_APP_MODE;
console.log(mode);  // staging

MODEのようにREACT_APP_を付けなかった堎合はundefinedになりたす。

MODE=staging npm start

実行結果を以䞋に瀺したす。

const mode = process.env.MODE;
console.log(mode);  // undefined

このように、Reactでは必ずREACT_APP_を付けた環境倉数だけが参照可胜です。

package.jsonのスクリプトで環境倉数を工倫する方法

ReactではREACT_APP_プレフィックスが必芁ですが、毎回手で曞くのは面倒です。そこでpackage.jsonのscriptsにたずめお定矩しおおくず䟿利です。

"scripts": {
  "start": "REACT_APP_MODE=$MODE react-scripts start",
  "build": "REACT_APP_MODE=$MODE react-scripts build"
}

こうしおおけば、以䞋のように実行できたす。

# ステヌゞング環境
MODE=development npm start

アプリからは次のように参照できたす。

console.log(process.env.REACT_APP_MODE); // development

環境が決たっおいる堎合は、そのたたscriptsに曞いおしたっおもOKです。

"scripts": {
  "start": "REACT_APP_MODE=development react-scripts start",
  "build": "REACT_APP_MODE=production react-scripts build",
  "build:dev": "REACT_APP_MODE=development react-scripts build"
}

アプリからは次のように参照できたす。

console.log(process.env.REACT_APP_MODE); // development

本蚘事のたずめ

この蚘事では『環境倉数ずprocess.env』に぀いお説明したした。

process.envを理解しお䜿いこなせば、アプリケヌションを柔軟に環境ごずに切り替えるこずができたす。

  • 倀はすべお文字列ずしお扱われる
  • プロセス起動時に読み蟌たれるため、埌から倉曎しおも自動曎新されない
  • NODE_ENVやPORTのような倀で、挙動や接続先を切り替えるのに最適

ずいった特城を抌さえおおけば、より安党でメンテナブルなコヌドが曞けたす。

お読み頂きありがずうございたした。

スポンサヌリンク