環境変数をインラインで指定する:KEY=value コマンドの使い方
KEY=value command の形式でコマンドの前に環境変数を書くと、そのコマンドだけに環境変数を渡せます。アプリの起動オプションを切り替えるときによく使います。
PORT=8080 npm run dev NODE_ENV=production npm run build RAILS_ENV=production rails db:migrate
基本的な書き方
# 環境変数名=値 コマンド KEY=value command # スペースは入れない(KEY = value はエラー) PORT=8080 npm start
複数の環境変数を指定するときはスペースで区切って並べます。
HOST=0.0.0.0 PORT=8080 npm run dev NODE_ENV=production DEBUG=false npm run build
よく使う実用例
Node.js / npm
# ポートを変えて起動 PORT=3001 npm run dev # 本番ビルド NODE_ENV=production npm run build # デバッグログを有効化 DEBUG=* node app.js DEBUG=express:* node app.js # テストの色付き出力を強制 FORCE_COLOR=1 npm test
Rails
# 本番環境でマイグレーション RAILS_ENV=production rails db:migrate # 本番環境でサーバー起動 RAILS_ENV=production rails s # カスタム変数を渡す DATABASE_URL=postgres://localhost/myapp rails db:migrate
その他
# Rust:ログレベルを指定 RUST_LOG=debug cargo run # Go:クロスコンパイル GOOS=linux GOARCH=amd64 go build # Python FLASK_ENV=development python app.py DJANGO_SETTINGS_MODULE=config.settings.local python manage.py runserver
export との違い
export で設定した環境変数はシェル全体(以降のすべてのコマンド)に影響します。インライン指定はそのコマンドのみに限定されます。
# export:シェル全体に影響する export NODE_ENV=production npm run build # NODE_ENV=production npm run dev # NODE_ENV=production(次のコマンドにも引き継がれる) # インライン指定:そのコマンドだけ NODE_ENV=production npm run build # NODE_ENV=production npm run dev # NODE_ENV は未設定(影響なし)
一時的に切り替えたいだけならインライン指定の方が安全です。
env コマンドと組み合わせる
env コマンドを使うと、特定の環境変数を除いた状態でコマンドを実行できます。
# 環境変数を追加して実行(KEY=value と同じ) env NODE_ENV=production npm run build # 特定の環境変数を除外して実行 env -u HOME node app.js # 環境変数をすべてクリアして実行(クリーンな状態で確認したいとき) env -i PATH="$PATH" node app.js
複数コマンドに同じ変数を渡したい場合
インライン指定は1コマンドずつ書く必要があります。同じ変数を複数のコマンドで使う場合は別の方法が向いています。
# サブシェルで export する(そのシェルのみ有効) (export NODE_ENV=production; npm run build && npm run test) # スクリプトにまとめる #!/bin/bash export NODE_ENV=production npm run build npm run test
プロジェクト全体で環境変数を管理するには .env ファイルや direnv が便利です。「direnv入門:インストールと.envrcで環境変数を自動切り替え」も参照してください。
まとめ
| 方法 | スコープ | 向いているケース |
|---|---|---|
KEY=value command |
そのコマンドのみ | 一時的に切り替えたい |
export KEY=value |
以降のコマンド全体 | 複数コマンドで使いまわす |
.env + direnv |
ディレクトリ単位 | プロジェクト全体で管理する |
| シェルスクリプト | スクリプト内 | CI や自動化で使う |
KEY=value command はシェルの標準的な機能で macOS・Linux 共通で使えます。Windows(PowerShell)では $env:KEY="value"; command という構文になります。