【初心者向け】Windows PowerShellで環境変数を設定する方法|一時的・永続的に分けて解説

プログラミング・IT

環境変数(Environment Variables)は、システムやアプリケーションの挙動を制御するための重要な設定情報です。

PowerShellを使えば、これらの環境変数をコマンド一発で簡単に操作できます。

ここでは、一時的な環境変数の設定と、永続的に反映させる方法を紹介します。

スポンサーリンク

一時的に環境変数を設定する(現在のセッションのみ)

PowerShellで環境変数を一時的に設定したい場合は、以下のように書きます:

$env:MY_VAR = "HelloPowerShell"

例:

$env:PATH  # 現在のPATHを確認  
$env:MY_VAR = "Test123"
echo $env:MY_VAR  # → Test123

この変数は、PowerShellを閉じると消えます(一時的)。

一時的な環境変数の活用例

  • スクリプト内で一時的に必要な設定を行う
  • テスト目的で設定を変更する
  • コマンドの振る舞いを一時的に変更する
# 例: 一時的にプロキシを設定
$env:HTTP_PROXY = "http://proxy.example.com:8080"
Invoke-WebRequest -Uri "https://example.com"
$env:HTTP_PROXY = $null  # プロキシ設定を解除

永続的に環境変数を設定する(システムやユーザーに保存)

PowerShellで永続的に環境変数を設定するには、レジストリを操作します。

ユーザー環境変数に追加(ログインユーザーにのみ有効)

[Environment]::SetEnvironmentVariable("MY_VAR", "MyValue", "User")

システム環境変数に追加(全ユーザーに有効・管理者権限が必要)

[Environment]::SetEnvironmentVariable("MY_VAR", "MyValue", "Machine")

Machine に設定する場合は、PowerShellを「管理者として実行」する必要があります。

永続的な設定の注意点

  • この方法で設定した環境変数は、レジストリに保存されます
  • 新しい設定は、新しく起動したアプリケーションのみに影響します
  • 既に起動しているアプリには反映されません

既存の環境変数を確認する

特定の変数だけ確認:

$env:PATH
$env:USERNAME

すべての環境変数を一覧で確認:

Get-ChildItem Env:

フィルタリングして特定のパターンの変数を確認:

Get-ChildItem Env: | Where-Object { $_.Name -like "*JAVA*" }

環境変数の削除(永続的)

環境変数を削除したい場合は、以下のように null を指定します。

[Environment]::SetEnvironmentVariable("MY_VAR", $null, "User")

PATH に追加する例(既存の値に追記)

PATH変数は特に頻繁に編集する環境変数ですので、特別に解説します:

# ユーザーのPATH環境変数に新しいパスを追加
$oldPath = [Environment]::GetEnvironmentVariable("PATH", "User")
$newPath = "$oldPath;C:\MyTools"
[Environment]::SetEnvironmentVariable("PATH", $newPath, "User")

パスの重複や区切り文字「;」に注意してください。

PATH追加のより安全な方法(重複チェック付き)

function Add-PathVariable {
    param (
        [string]$Path,
        [ValidateSet("User", "Machine")]
        [string]$Target = "User"
    )
    
    $oldPath = [Environment]::GetEnvironmentVariable("PATH", $Target)
    $pathArray = $oldPath -split ";"
    
    # パスが既に含まれていないか確認
    if ($pathArray -notcontains $Path) {
        $newPath = $oldPath + ";" + $Path
        [Environment]::SetEnvironmentVariable("PATH", $newPath, $Target)
        Write-Host "PATHに追加しました: $Path"
    }
    else {
        Write-Host "指定されたパスは既にPATHに含まれています: $Path"
    }
}

# 使用例
Add-PathVariable -Path "C:\MyTools" -Target "User"

設定反映のタイミング

  • 一時的な$env: の設定 → 即時反映(ただしPowerShell内のみ)
  • 永続的設定(User / Machine) → 設定後、再起動またはログオフ&ログインで反映される

新しい設定を現在のセッションにも反映させる方法

永続的に設定した後、現在のセッションにも反映させたい場合:

# 例: JDK_HOMEを永続的に設定し、現在のセッションにも反映
[Environment]::SetEnvironmentVariable("JDK_HOME", "C:\Program Files\Java\jdk-17", "User")
$env:JDK_HOME = [Environment]::GetEnvironmentVariable("JDK_HOME", "User")

PowerShellプロファイルで起動時に環境変数を設定する

PowerShellの起動時に自動的に環境変数を設定したい場合は、プロファイルに追加する方法もあります:

プロファイルの場所を確認

$PROFILE

プロファイルが存在しない場合は作成

if (!(Test-Path -Path $PROFILE)) {
    New-Item -ItemType File -Path $PROFILE -Force
}

プロファイルを編集して環境変数設定を追加

notepad $PROFILE

プロファイルに以下のような行を追加

# 環境変数の設定
$env:MY_APP_HOME = "C:\Program Files\MyApp"
$env:MY_CONFIG = "C:\Users\Username\AppData\Local\MyApp\config.json"

これで、PowerShell起動時に自動的に環境変数が設定されます。

まとめ:用途に合わせて使い分けよう!

方法有効範囲持続性
$env:VAR = "値"現在のシェル一時的$env:MY_VAR = "Temp"
SetEnvironmentVariableユーザー永続的[Environment]::SetEnvironmentVariable("VAR", "Value", "User")
SetEnvironmentVariable全ユーザー永続的[Environment]::SetEnvironmentVariable("VAR", "Value", "Machine")
プロファイル設定PowerShell起動時セッション$env:VAR = "Value" をプロファイルに追加

選択のポイント

  • 一時的な作業やテストなら → $env:VAR = "値"
  • 自分だけが使う設定なら → User スコープの永続的設定
  • システム全体で使う設定なら → Machine スコープの永続的設定(管理者権限必要)
  • PowerShell特有の設定なら → プロファイル設定

環境変数は適切に管理することで、開発環境やシステム設定をより効率的に扱うことができます。
特にスクリプトやアプリケーション開発において、環境変数の使い方を工夫することでより柔軟なシステムを構築できるでしょう。

コメント

タイトルとURLをコピーしました