環境変数とPATHの永続設定
コマンドプロンプトで set MY_VAR=Hello と設定した変数が、ウィンドウを閉じたら消えてしまった──という経験はありませんか?
set コマンドで設定した変数は現在のセッションのみ有効であり、ウィンドウを閉じると消えてしまいます。再起動後も値を保持したい場合は setx コマンドを使います。この 2 つの違いを正しく理解することが、環境変数を使いこなす第一歩です。
環境変数とは
環境変数は、オペレーティングシステムやアプリケーションが参照する設定値をキーと値のペアで保持する仕組みです。
現在の環境変数をすべて表示するには次のコマンドを実行します。
set
特定の変数を確認するには echo を使います。
echo %PATH%

中小企業経営者のためのRPA入門 RPA導入を成功させる方法

60分でわかる! AIエージェント 超 入門

コマンドラインの黒い画面が怖いんです。

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門
よく使うシステム環境変数
| 変数名 | 説明 | 例 |
|---|---|---|
%PATH% | 実行ファイルの検索パス | C:\Windows\System32;... |
%TEMP% / %TMP% | 一時ファイルの保存場所 | C:\Users\user\AppData\Local\Temp |
%USERNAME% | 現在のユーザー名 | user |
%COMPUTERNAME% | コンピューター名 | DESKTOP-XXXX |
%USERPROFILE% | ユーザーフォルダのパス | C:\Users\user |
%APPDATA% | アプリデータフォルダ | C:\Users\user\AppData\Roaming |
%WINDIR% | Windows フォルダ | C:\Windows |
%SYSTEMROOT% | Windows システムフォルダ | C:\Windows |
set コマンド(セッション限定)
set コマンドは現在のコマンドプロンプトセッション内でのみ有効な変数を作成・変更します。
set 変数名=値
set MY_APP_HOME=C:\Apps\MyApp
echo %MY_APP_HOME%
変数を削除するには値を空にします。
set MY_APP_HOME=
数値計算には set /a を使います。
set /a RESULT=10 + 5
echo %RESULT%
set で設定した変数は、コマンドプロンプトウィンドウを閉じると消えます。バッチファイル内で set を使った場合も、そのバッチファイルの実行が終わると変数は消えます(setlocal を使っている場合は endlocal 時点で消えます)。
setx コマンド(永続的な設定)
setx コマンドは Windows レジストリに値を書き込むため、ターミナルを閉じても、PC を再起動しても値が保持されます。
setx 変数名 "値"
set は 変数名=値(= が必要)ですが、setx は 変数名 "値"(= は不要、スペース区切り)です。この違いは間違えやすいので注意してください。
ユーザー環境変数として設定する(デフォルト)
setx MY_APP_HOME "C:\Apps\MyApp"
システム環境変数として設定する(/M オプション)
/M オプションを付けると、すべてのユーザーに影響するシステム環境変数として設定されます。
setx MY_APP_HOME "C:\Apps\MyApp" /M
setx に /M オプションを付けてシステム環境変数を設定するには、管理者として実行する必要があります。権限がない場合はエラーになります。
setx は現在のセッションに反映されない
重要な注意点として、setx で設定した変数は現在のコマンドプロンプトウィンドウには反映されません。新しくウィンドウを開いた後から有効になります。
setx NEW_VAR "Hello"
echo %NEW_VAR%
%NEW_VAR% がそのまま表示されるのは、変数が現在のセッションには設定されていないためです。新しいウィンドウを開くと正しく Hello と表示されます。
set と setx の比較
| 項目 | set | setx |
|---|---|---|
| 有効範囲 | 現在のセッションのみ | 永続(再起動後も有効) |
| 構文 | set VAR=値 | setx VAR "値" |
| 現在セッションへの反映 | 即時 | 反映されない(新しいウィンドウで有効) |
| システム全体への設定 | 不可 | /M オプションで可能 |
| 管理者権限 | 不要 | ユーザー変数は不要、システム変数は必要 |
| バッチファイル内での一時利用 | 適切 | 不向き(実行のたびに書き込みが発生) |
PATH への追加
PATH は実行ファイルを検索するディレクトリを列挙する特別な環境変数です。
一時的に PATH へ追加する(セッション限定)
set PATH=%PATH%;C:\MyTools
永続的に PATH へ追加する(setx)
setx PATH "%PATH%;C:\MyTools"
setx コマンドは設定できる値の長さが 1024 文字までに制限されています。現在の %PATH% が長い場合、setx PATH "%PATH%;新しいパス" を実行すると PATH が 1024 文字で切り捨てられ、既存のパスが失われる危険があります。PATH を変更する前に echo %PATH% で長さを確認してください。
PATH を安全に追加する方法(PowerShell 経由)
PATH が長い場合や安全に追加したい場合は、PowerShell を使う方法が確実です。
rem ユーザー PATH に追加(1024 文字制限を回避)
powershell -Command "[System.Environment]::SetEnvironmentVariable('PATH', $env:PATH + ';C:\MyTools', 'User')"
rem システム PATH に追加(管理者権限が必要)
powershell -Command "[System.Environment]::SetEnvironmentVariable('PATH', [System.Environment]::GetEnvironmentVariable('PATH','Machine') + ';C:\MyTools', 'Machine')"
PATH を頻繁に変更する場合は、GUI(システムのプロパティ)を使う方法が最も安全です。Win + R を押して sysdm.cpl と入力すると「システムのプロパティ」が開き、「環境変数」ボタンから PATH を安全に編集できます。
バッチファイルでの実践例
インストールスクリプトで set と setx を使い分ける例です。
@echo off
setlocal
rem インストール先(バッチファイル内での一時的な参照に set を使用)
set INSTALL_DIR=C:\MyApp
echo インストールを開始します...
rem ... インストール処理 ...
mkdir "%INSTALL_DIR%\bin" 2>nul
copy "myapp.exe" "%INSTALL_DIR%\bin\" >nul
rem 現在のセッションでもすぐに使えるよう PATH に追加
set PATH=%PATH%;%INSTALL_DIR%\bin
rem 次回ログイン以降も有効になるよう永続設定
setx MY_APP_HOME "%INSTALL_DIR%"
setx MY_APP_VERSION "1.0.0"
echo.
echo セットアップが完了しました。
echo 環境変数を次回のウィンドウから反映するには、新しいコマンドプロンプトを開いてください。
endlocal
インストールスクリプトでは、インストール直後にコマンドをすぐ実行したい場合があります。setx は現在のセッションに反映されないため、set で一時的に PATH へ追加しつつ、setx で次回以降のセッション用に永続設定するのが実用的なパターンです。
GUI で環境変数を確認・編集する
コマンドラインに慣れていない場合や、PATH の安全な編集には GUI が便利です。
Win + R を押して sysdm.cpl と入力すると「システムのプロパティ」が開きます。「詳細設定」タブの「環境変数」ボタンから、ユーザー変数とシステム変数をそれぞれ確認・編集できます。
まとめ
| 操作 | コマンド |
|---|---|
| 一時的な変数設定 | set 変数名=値 |
| 永続的な変数設定(ユーザー) | setx 変数名 "値" |
| 永続的な変数設定(システム) | setx 変数名 "値" /M(管理者権限が必要) |
| PATH を一時追加 | set PATH=%PATH%;追加するパス |
| 変数の確認 | echo %変数名% |
| 全変数の表示 | set |
| GUI での編集 | sysdm.cpl を起動 |