原文(日本語に翻訳)
Windows: CLAUDE_ENV_FILEとSessionStartフックの環境ファイルが適用されるようになりました(以前はno-opでした)。
原文(英語)
Windows: CLAUDE_ENV_FILE and SessionStart hook environment files now apply (previously a no-op).
概要
Claude Code v2.1.111では、WindowsプラットフォームでCLAUDE_ENV_FILE環境変数とSessionStartフックで指定する環境ファイルが正しく適用されるようになりました。以前はWindowsでこれらの設定が無効(no-op)になっており、環境変数を.envファイルで管理できませんでした。この修正により、Windows環境でも他のプラットフォームと同様に環境変数管理が可能になります。
基本的な使い方
CLAUDE_ENV_FILEの使い方(Windows)
powershell
# 環境変数ファイルを作成
# C:\Users\username\.claude\claude.env
# ファイル内容(.env形式)
# MY_API_KEY=abc123
# MY_PROJECT=my-project
# DEBUG=true
# CLAUDE_ENV_FILEを設定してClaude Codeを起動
$env:CLAUDE_ENV_FILE = "C:\Users\username\.claude\claude.env"
claude
# → .envファイルの環境変数がセッションに適用されるSessionStartフックでの環境ファイル設定(Windows)
json
// .claude/settings.json
{
"hooks": {
"SessionStart": [
{
"type": "command",
"command": "powershell.exe -File C:\\scripts\\setup-env.ps1",
"envFile": "C:\\Users\\username\\.claude\\session.env"
}
]
}
}実践例
APIキーを環境ファイルで管理する
powershell
# C:\Users\username\.claude\secrets.env ファイルを作成
$envContent = @"
ANTHROPIC_API_KEY=sk-ant-xxxxx
GITHUB_TOKEN=ghp_xxxxx
DATABASE_URL=postgresql://localhost:5432/mydb
"@
$envContent | Out-File -FilePath "C:\Users\username\.claude\secrets.env" -Encoding UTF8
# システム環境変数にCLAUDE_ENV_FILEを設定
[System.Environment]::SetEnvironmentVariable(
"CLAUDE_ENV_FILE",
"C:\Users\username\.claude\secrets.env",
"User"
)
# Claude Codeを起動すると自動的に適用される
claudeプロジェクトごとの環境設定
powershell
# プロジェクトディレクトリに.envファイルを作成
# C:\Projects\my-app\.env
$content = @"
NODE_ENV=development
API_BASE_URL=http://localhost:3000
DATABASE_NAME=myapp_dev
"@
$content | Out-File -FilePath ".env" -Encoding UTF8
# プロジェクトの設定でCLAUDE_ENV_FILEを指定
# .claude/settings.json
{
"env": {
"CLAUDE_ENV_FILE": ".env"
}
}SessionStartフックでの初期化スクリプト
json
// .claude/settings.json(Windows向け設定例)
{
"hooks": {
"SessionStart": [
{
"type": "command",
"command": "powershell.exe -ExecutionPolicy Bypass -File .claude\\init-session.ps1"
}
]
}
}powershell
# .claude\init-session.ps1
# セッション開始時に実行されるスクリプト
# 環境変数を.envファイルから読み込む(Windows修正後)
$envFile = ".env"
if (Test-Path $envFile) {
Get-Content $envFile | ForEach-Object {
if ($_ -match '^([^#][^=]*)=(.*)$') {
$name = $Matches[1].Trim()
$value = $Matches[2].Trim()
[System.Environment]::SetEnvironmentVariable($name, $value, "Process")
Write-Host "Loaded: $name"
}
}
}
Write-Host "セッション初期化完了"Windows + WSLでの使用
bash
# WSL環境内でClaude Codeを使用する場合(WSLはLinux扱いのため従来から動作)
# Windows native環境(PowerShellやCmd)での使用がこの修正の対象
# Windows PowerShellでの確認
$env:CLAUDE_ENV_FILE = ".\project.env"
claude --print "環境変数MY_VALの値は何ですか"
# → 変更後:project.envの内容が適用されて正しく返答される注意点
- この修正はWindows native環境(PowerShell、Command Prompt)でのClaude Codeの動作に影響します
- WSL(Windows Subsystem for Linux)内でのClaude Code使用では、以前からLinuxと同様に機能していました
.envファイルには機密情報(APIキー等)が含まれることが多いため、Gitリポジトリには.gitignoreで除外してください- 環境ファイルの文字コードはUTF-8(BOMなし)を推奨します
- Windowsのパス区切り文字(
\)を使用する際は、JSONファイル内では\\のようにエスケープが必要です