「VS Codeで開発をするときに、環境変数を使ってビルドやデバッグを設定したい」
「APIキーやデータベース接続情報を安全に管理したい」
「開発環境と本番環境で異なる設定を簡単に切り替えたい」
現代のソフトウェア開発では、環境変数の適切な管理が重要な課題となっています。
特にAPIキーやデータベースの認証情報など、機密情報をソースコードに直接書き込むのは大きなセキュリティリスクです。
VS Codeでは、環境変数を柔軟かつ安全に管理するための豊富な機能が提供されています。tasks.jsonでのビルド設定、launch.jsonでのデバッグ設定、そして.envファイルによる一括管理まで、様々な場面で環境変数を活用できます。
この記事では、VS Codeで環境変数を効果的に使う方法を、実際の設定例とともに初心者にも分かりやすく解説します。
環境変数の基本概念

環境変数とは
環境変数(Environment Variables)とは、オペレーティングシステムが提供する、プログラムに設定情報を渡すための仕組みです。プログラムの実行時に動的に値を変更できるため、異なる環境(開発、テスト、本番)で同じコードを使い回すことができます。
なぜ環境変数を使うのか
セキュリティの向上
// 悪い例:APIキーを直接コードに記述
const apiKey = "sk-1234567890abcdefg";
// 良い例:環境変数から取得
const apiKey = process.env.API_KEY;
環境間での設定の違いを吸収
# 開発環境と本番環境でデータベースURLが異なる場合
import os
# 環境変数から取得(開発時は localhost、本番時は実際のサーバー)
DATABASE_URL = os.environ.get('DATABASE_URL', 'localhost:5432')
設定の柔軟性
同じプログラムを異なる設定で実行できるため、デプロイ時の設定変更が容易になります。
VS Codeでの環境変数活用シーン
- デバッグ実行時:APIキーやデータベース接続情報の設定
- ビルドタスク実行時:ビルド設定やパスの指定
- 拡張機能設定:ツールのパスや動作設定
- ターミナル環境:開発環境の初期化
tasks.jsonでの環境変数設定
tasks.jsonとは
tasks.jsonは、VS Codeでビルドやスクリプト実行などのタスクを定義するファイルです。プロジェクトの.vscode
フォルダ内に配置し、開発工程で繰り返し実行する作業を自動化できます。
基本的な環境変数設定
シンプルな例
{
"version": "2.0.0",
"tasks": [
{
"label": "Echo Environment",
"type": "shell",
"command": "echo $MY_VAR",
"options": {
"env": {
"MY_VAR": "Hello World from VS Code"
}
}
}
]
}
Windows対応版
{
"version": "2.0.0",
"tasks": [
{
"label": "Echo Environment (Cross Platform)",
"type": "shell",
"command": "echo",
"args": ["${env:MY_VAR}"],
"options": {
"env": {
"MY_VAR": "Hello World from VS Code"
}
}
}
]
}
実用的な環境変数活用例
Node.jsビルドタスク
{
"version": "2.0.0",
"tasks": [
{
"label": "Build for Production",
"type": "shell",
"command": "npm",
"args": ["run", "build"],
"options": {
"env": {
"NODE_ENV": "production",
"API_BASE_URL": "https://api.production.example.com",
"BUILD_TARGET": "dist"
}
},
"group": {
"kind": "build",
"isDefault": true
}
},
{
"label": "Build for Development",
"type": "shell",
"command": "npm",
"args": ["run", "dev"],
"options": {
"env": {
"NODE_ENV": "development",
"API_BASE_URL": "http://localhost:3001",
"DEBUG": "true"
}
}
}
]
}
Pythonテストタスク
{
"version": "2.0.0",
"tasks": [
{
"label": "Run Tests",
"type": "shell",
"command": "python",
"args": ["-m", "pytest"],
"options": {
"env": {
"PYTHONPATH": "${workspaceFolder}/src",
"TEST_DATABASE_URL": "sqlite:///test.db",
"DEBUG": "true"
}
},
"group": "test"
}
]
}
既存環境変数の継承
システムの環境変数を継承しつつ、新しい変数を追加したい場合:
{
"version": "2.0.0",
"tasks": [
{
"label": "Build with PATH",
"type": "shell",
"command": "make",
"options": {
"env": {
"PATH": "${env:PATH}:/usr/local/custom/bin",
"CUSTOM_VAR": "my_value"
}
}
}
]
}
launch.jsonでの環境変数設定

launch.jsonとは
launch.jsonは、VS Codeでデバッグ設定を定義するファイルです。プログラムの実行やデバッグ時に必要な環境変数を設定できます。
基本的なデバッグ設定
Python デバッグ設定
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"env": {
"API_KEY": "sk-development-key-123",
"DATABASE_URL": "postgresql://user:pass@localhost:5432/devdb",
"DEBUG": "true",
"LOG_LEVEL": "DEBUG"
}
}
]
}
Node.js デバッグ設定
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch Node.js App",
"type": "node",
"request": "launch",
"program": "${workspaceFolder}/app.js",
"env": {
"NODE_ENV": "development",
"PORT": "3000",
"API_SECRET": "dev-secret-key",
"MONGODB_URI": "mongodb://localhost:27017/myapp_dev"
},
"console": "integratedTerminal"
}
]
}
複数の環境設定
開発環境と本番環境の切り替え
{
"version": "0.2.0",
"configurations": [
{
"name": "Development Environment",
"type": "python",
"request": "launch",
"program": "${file}",
"env": {
"ENVIRONMENT": "development",
"API_BASE_URL": "http://localhost:8000",
"DEBUG": "true",
"DB_HOST": "localhost"
}
},
{
"name": "Staging Environment",
"type": "python",
"request": "launch",
"program": "${file}",
"env": {
"ENVIRONMENT": "staging",
"API_BASE_URL": "https://staging-api.example.com",
"DEBUG": "false",
"DB_HOST": "staging-db.example.com"
}
}
]
}
外部プロセス起動の設定
Docker コンテナでのデバッグ
{
"version": "0.2.0",
"configurations": [
{
"name": "Docker Debug",
"type": "python",
"request": "attach",
"port": 5678,
"host": "localhost",
"pathMappings": [
{
"localRoot": "${workspaceFolder}",
"remoteRoot": "/app"
}
],
"env": {
"DOCKER_ENV": "development",
"CONTAINER_NAME": "my-app-dev"
}
}
]
}
settings.jsonでの環境変数参照
環境変数参照の構文
VS Codeのsettings.jsonでは、${env:変数名}
の形式で環境変数を参照できます。
基本的な使用例
Python インタープリターの設定
{
"python.defaultInterpreterPath": "${env:MY_PYTHON_PATH}",
"python.linting.pylintPath": "${env:PYLINT_PATH}"
}
Go言語の設定
{
"go.goroot": "${env:GOROOT}",
"go.gopath": "${env:GOPATH}",
"go.toolsGopath": "${env:GOPATH}"
}
実用的な設定例
開発ツールのパス設定
{
"terminal.integrated.env.linux": {
"CUSTOM_PATH": "${env:PATH}:/home/user/custom/bin"
},
"terminal.integrated.env.osx": {
"CUSTOM_PATH": "${env:PATH}:/usr/local/custom/bin"
},
"terminal.integrated.env.windows": {
"CUSTOM_PATH": "${env:PATH};C:\\custom\\bin"
}
}
プロジェクト固有の設定
{
"eslint.nodePath": "${env:NODE_PATH}",
"typescript.preferences.includePackageJsonAutoImports": "auto",
"java.home": "${env:JAVA_HOME}",
"maven.executable.path": "${env:MAVEN_HOME}/bin/mvn"
}
条件付き設定
環境変数の値に応じて異なる設定を適用:
{
"python.defaultInterpreterPath": "${env:PYTHON_ENV}",
"python.linting.enabled": true,
"python.linting.pylintEnabled": true,
"workbench.colorTheme": "${env:VS_CODE_THEME}"
}
.envファイルの活用

.envファイルとは
.envファイルは、環境変数をキー=値の形式で記述するテキストファイルです。多くのプログラミング言語やフレームワークで標準的に使用されており、VS Codeも自動的に読み込む機能を提供しています。
.envファイルの基本的な書き方
基本的な記述例
# データベース設定
DATABASE_URL=postgresql://user:password@localhost:5432/myapp
DATABASE_MAX_CONNECTIONS=20
# API設定
API_KEY=sk-1234567890abcdefghijklmnopqrstuvwxyz
API_BASE_URL=https://api.example.com/v1
API_TIMEOUT=30
# 開発設定
DEBUG=true
LOG_LEVEL=INFO
NODE_ENV=development
# アプリケーション設定
APP_NAME=MyApplication
APP_VERSION=1.0.0
PORT=3000
コメントとグループ化
# ===================
# Database Configuration
# ===================
DB_HOST=localhost
DB_PORT=5432
DB_NAME=myapp_development
DB_USER=developer
DB_PASSWORD=dev_password_123
# ===================
# External Services
# ===================
REDIS_URL=redis://localhost:6379
ELASTICSEARCH_URL=http://localhost:9200
# ===================
# Security
# ===================
JWT_SECRET=your-super-secret-jwt-key
ENCRYPTION_KEY=32-character-encryption-key-here
Python での .env ファイル活用
python-dotenv を使用
# requirements.txt に追加
# python-dotenv
import os
from dotenv import load_dotenv
# .env ファイルを読み込み
load_dotenv()
# 環境変数を取得
API_KEY = os.getenv('API_KEY')
DATABASE_URL = os.getenv('DATABASE_URL')
DEBUG = os.getenv('DEBUG', 'False').lower() == 'true'
print(f"API Key: {API_KEY}")
print(f"Debug mode: {DEBUG}")
VS Code の Python 拡張機能設定
{
"python.envFile": "${workspaceFolder}/.env",
"python.terminal.activateEnvironment": true
}
Node.js での .env ファイル活用
dotenv パッケージを使用
// package.json の dependencies に追加
// "dotenv": "^16.0.0"
require('dotenv').config();
const config = {
apiKey: process.env.API_KEY,
databaseUrl: process.env.DATABASE_URL,
port: process.env.PORT || 3000,
debug: process.env.DEBUG === 'true'
};
console.log('Config loaded:', config);
VS Code での自動読み込み
// launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch Node with .env",
"type": "node",
"request": "launch",
"program": "${workspaceFolder}/app.js",
"envFile": "${workspaceFolder}/.env",
"console": "integratedTerminal"
}
]
}
環境別の .env ファイル管理
ファイル構成例
project/
├── .env.example # テンプレート
├── .env # ローカル開発用(gitignoreに追加)
├── .env.development # 開発環境用
├── .env.staging # ステージング環境用
└── .env.production # 本番環境用(通常はサーバーで管理)
.env.example ファイル
# Copy this file to .env and fill in the actual values
# Database
DATABASE_URL=postgresql://username:password@localhost:5432/dbname
# API Keys (get from https://example.com/api-keys)
API_KEY=your_api_key_here
SECRET_KEY=your_secret_key_here
# Optional settings
DEBUG=true
LOG_LEVEL=INFO
PORT=3000
セキュリティとベストプラクティス
.env ファイルのセキュリティ対策
.gitignore の設定
# Environment variables
.env
.env.local
.env.*.local
# Keep example files
!.env.example
!.env.template
機密情報の管理
# 悪い例:本番環境の情報を .env に直接記述
PROD_API_KEY=sk-live-1234567890
PROD_DB_PASSWORD=super_secret_password
# 良い例:開発用のダミー値または説明を記述
DEV_API_KEY=sk-test-1234567890
DEV_DB_PASSWORD=development_password
環境変数の検証
Python での検証例
import os
from typing import Optional
def get_required_env(key: str) -> str:
"""必須の環境変数を取得(存在しない場合は例外)"""
value = os.getenv(key)
if value is None:
raise ValueError(f"Required environment variable '{key}' is not set")
return value
def get_optional_env(key: str, default: str) -> str:
"""オプションの環境変数を取得(デフォルト値あり)"""
return os.getenv(key, default)
# 使用例
try:
API_KEY = get_required_env('API_KEY')
DATABASE_URL = get_required_env('DATABASE_URL')
LOG_LEVEL = get_optional_env('LOG_LEVEL', 'INFO')
except ValueError as e:
print(f"Configuration error: {e}")
exit(1)
Node.js での検証例
function getRequiredEnv(key) {
const value = process.env[key];
if (!value) {
throw new Error(`Required environment variable '${key}' is not set`);
}
return value;
}
function getOptionalEnv(key, defaultValue) {
return process.env[key] || defaultValue;
}
// 設定の検証
try {
const config = {
apiKey: getRequiredEnv('API_KEY'),
databaseUrl: getRequiredEnv('DATABASE_URL'),
port: parseInt(getOptionalEnv('PORT', '3000')),
debug: getOptionalEnv('DEBUG', 'false') === 'true'
};
console.log('Configuration loaded successfully');
} catch (error) {
console.error('Configuration error:', error.message);
process.exit(1);
}
VS Code 拡張機能による支援
推奨拡張機能
- DotENV: .envファイルのシンタックスハイライト
- EnvFile: 環境変数ファイルの管理
- Thunder Client: API テスト時の環境変数活用
拡張機能設定例
// .vscode/extensions.json
{
"recommendations": [
"mikestead.dotenv",
"rangav.vscode-thunder-client"
]
}
トラブルシューティング

よくある問題と解決方法
環境変数が読み込まれない
症状: .envファイルに記述した変数がプログラムで取得できない
原因と対策:
- ファイルパスの問題
// launch.json で正しいパスを指定 { "envFile": "${workspaceFolder}/.env" }
- 文字エンコーディングの問題
- .envファイルをUTF-8で保存し直す
- BOM(Byte Order Mark)を削除する
- 記述形式の問題
# 悪い例 API_KEY = "my-key" # スペースあり、クォートあり # 良い例 API_KEY=my-key # スペースなし、クォートなし
Windows での PATH 設定問題
症状: Windows環境でPATH環境変数の設定がうまくいかない
解決方法:
{
"terminal.integrated.env.windows": {
"PATH": "${env:PATH};C:\\MyTools\\bin"
}
}
環境変数の上書き問題
症状: システムの環境変数が期待通りに上書きされない
確認ポイント:
- 設定の優先順位を確認
- launch.json > .env > システム環境変数
- VS Code の再起動
- 設定の競合を確認
デバッグ方法
環境変数の確認
# Python での環境変数確認
import os
print("All environment variables:")
for key, value in os.environ.items():
print(f"{key}: {value}")
// Node.js での環境変数確認
console.log("All environment variables:");
console.log(process.env);
VS Code での確認方法
- ターミナルでの確認
# Unix系 echo $API_KEY printenv | grep API # Windows echo %API_KEY% set | findstr API
- デバッグコンソールでの確認
- デバッグ実行中にコンソールで環境変数を確認
高度な活用例
Docker との連携
docker-compose.yml との連携
version: '3.8'
services:
app:
build: .
env_file:
- .env
environment:
- NODE_ENV=development
volumes:
- .:/app
ports:
- "${PORT:-3000}:3000"
VS Code の Docker 拡張での活用
// .vscode/tasks.json
{
"version": "2.0.0",
"tasks": [
{
"label": "Docker Run with Env",
"type": "shell",
"command": "docker",
"args": [
"run",
"--env-file", ".env",
"--name", "my-app",
"my-app:latest"
]
}
]
}
CI/CD パイプラインとの連携
GitHub Actions での活用
name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup environment
run: |
echo "API_KEY=${{ secrets.API_KEY }}" >> .env
echo "DATABASE_URL=${{ secrets.DATABASE_URL }}" >> .env
まとめ
VS Codeでの環境変数活用は、現代的な開発において欠かせない技術です。以下のポイントを押さえて効果的に活用しましょう:
設定方法の使い分け
用途 | 設定方法 | 適用範囲 |
---|---|---|
タスク実行時 | tasks.json の options.env | タスク実行時のみ |
デバッグ実行時 | launch.json の env | デバッグ実行時のみ |
VS Code設定 | settings.json で ${env:VAR} | エディタ全体 |
アプリケーション全体 | .env ファイル | プロジェクト全体 |
セキュリティのベストプラクティス
- 機密情報は
.env
ファイルに記述し、.gitignore
で除外 .env.example
でテンプレートを提供- 環境変数の検証機能を実装
- 本番環境では適切なシークレット管理サービスを使用
コメント