NodeJS 速習チュートリアル

Node.js における環境バリアブル

1. 環境バリアブル(Environment Variables)とは?

環境バリアブルは、コンピュータ上で実行されているプロセスの動作に影響を与えることができる、動的な名前付きの値です。
これらはプロセスが実行される環境の一部であり、コードを変更することなくアプリケーションをコンフィギュレーションするために使用されます。

1.1 主なメリット:

  • コンフィギュレーションをコードから分離して保存できる
  • 機密情報をバージョンコントロール(Gitなど)から排除できる
  • 環境(開発、テスト、プロダクション)ごとにアプリケーションを異なる設定にできる
  • コードの変更なしにアプリケーションの動作を変更できる

1.2 一般的なユースケース

環境コンフィギュレーション

  • データベース接続文字列
  • APIキーやシークレット
  • 外部サービスのURL
  • フィーチャーフラグ

ランタイムの動作

  • ロギングの冗長性(Verbosity)
  • ポート番号
  • タイムアウトや制限
  • 環境固有の設定

2. Node.js での環境バリアブルへのアクセス

Node.js は環境バリアブルにアクセスするために、process.env というオブジェクトを提供しています。
このオブジェクトには、現在のプロセスで使用可能なすべての環境バリアブルが含まれています。

2.1 基本的な使用方法

// 単一の環境バリアブルにアクセスする
const nodeEnv = process.env.NODE_ENV || 'development';
console.log(`${nodeEnv} モードで実行中`);

// デストラクチャリングを使用して複数のバリアブルにアクセスする
const { PORT = 3000, HOST = 'localhost' } = process.env;
console.log(`サーバーが http://${HOST}:${PORT} で起動しました`);

// プロダクション環境で実行されているかチェックする
if (process.env.NODE_ENV === 'production') {
  console.log('プロダクション環境のオプティマイゼーションが有効です');
  // プロダクション用機能を有効化
}

2.2 一般的な組み込み環境バリアブル

バリアブル説明
NODE_ENV現在の環境(development, test, production)production
PORTサーバーがリッスンするポート番号3000
PATH実行ファイルの検索用システムパス/usr/local/bin:/usr/bin
HOMEユーザーのホームディレクトリ/Users/username

       注意: 環境バリアブルにアクセスする際は、アプリケーション内での undefined を防ぐために、必ずデフォルト値を提供してください。

3. 環境バリアブルの設定方法

Node.js アプリケーションに対して環境バリアブルを設定する方法は、開発フローやデプロイ環境に応じていくつかあります。

3.1 コマンドライン(一時的)

アプリケーションの起動時に、コマンドラインで直接バリアブルを設定します:

Windows (コマンドプロンプト)

set PORT=3000
set NODE_ENV=development
set DB_HOST=localhost
node app.js

Windows (PowerShell)

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

macOS/Linux (Bash/Zsh)

PORT=3000 NODE_ENV=development DB_HOST=localhost node app.js

macOS/Linux (複数行)

export PORT=3000
export NODE_ENV=development
node app.js

3.2 dotenv を使用した .env ファイルの利用

開発環境では、.env ファイルを使用して環境バリアブルをローカルに保存するのが一般的です:

1. dotenv パッケージのインストール

npm install dotenv

2. .env ファイルの作成

# .env ファイル
PORT=3000
NODE_ENV=development
DB_HOST=localhost
DB_USER=admin
DB_PASS=your_secure_password
API_KEY=your_api_key_here

3. アプリケーションでのロード

// .env ファイルから環境バリアブルをロード
require('dotenv').config();

const port = process.env.PORT || 3000;
const dbConfig = {
  host: process.env.DB_HOST,
  user: process.env.DB_USER,
  password: process.env.DB_PASS
};

console.log(`サーバーがポート ${port} で動作中`);

       重要: .env ファイルを絶対にバージョンコントロールにコミットしないでください。.gitignore ファイルに .env を追加してください。

3.3 プロダクション環境での設定

プロダクションでは、ホスティングプロバイダーのコンフィギュレーション画面から環境バリアブルを設定します:

Heroku

heroku config:set NODE_ENV=production DATABASE_URL=your_database_url

Docker

docker run -e NODE_ENV=production -e PORT=3000 your-image

Linux/Systemd サービス

# /etc/systemd/system/your-app.service
[Service]
Environment="NODE_ENV=production"
Environment="PORT=3000"

4. 開発における dotenv の活用

dotenv パッケージを使用すると、.env ファイルから簡単に値をロードできます:

# .env ファイルの内容
API_KEY=abcdef12345

アプリ内でロードする方法:

require('dotenv').config();
console.log(process.env.API_KEY);

インストールコマンド:

npm install dotenv

5. まとめ

環境バリアブルを活用することで、機密データやコンフィギュレーションコードから完全に分離できます。
Node.js では process.envdotenv のようなツールを活用して、これらを効率的に管理しましょう。