システム環境変数とユーザー環境変数の違い

Windows は環境変数の欄が二つに分かれています.環境変数を設定するときにどちらに追加すればよいのか,素人 (私) は迷います.

システム環境変数とユーザー環境変数

  • システム環境変数:同じ PC 内で共有されている環境変数
  • ユーザー環境変数:ログインしているユーザーの環境に適用される環境変数

(ソフトウェアによるが)ユーザーのみに適用するのであれば,ユーザー環境変数に設定しておけば良さそうです.

また,どちらにも記述がある場合は原則としてユーザー環境変数が適用されます.(Path 以外)

Path の重複

Path はシステム環境変数,ユーザー環境変数の順に呼ばれます.そのため,記述が重複している部分はシステム環境変数に設定されている Path の内容が適用されます.

コマンドプロンプトで %PATH% を表示すると,下の例のようにシステム環境変数 C:\Windows\System32; の後にユーザー環境変数 C:\Users\<username>\Anaconda3 が続く形で呼ばれることが確認できます.

terminal
# example
> echo %PATH%
C:\Windows\System32;C:\Users\<username>\Anaconda3

SETX での上書き

環境変数は GUI だけでなく SETX コマンドを利用して変更(上書き)することができますが,このときに設定されるのはログインしているユーザーのユーザー環境変数です.(オプションを指定していない場合)

例えば setx PATH "%PATH%;%USERPROFILE%\hoge\bin" と実行すると,ユーザー環境変数に対してシステム環境変数の部分が重複して登録されます.

terminal
# example
> echo %PATH%
C:\Windows\System32;C:\Windows\System32;C:\Users\<username>\Anaconda3;C:\Users\<username>\hoge\bin

また,ユーザー環境変数は 1024 文字を超えて設定しようとすると超過した後ろの部分が切り捨てられるので,面倒なことになりかねません.

私はそれに気づくこともなく実行しましたが,事前にターミナルにパスを表示していたために事なきを得ました....