◀ 3.

環境変数の設定方法 (Windows / Linux / Mac)

▶
この記事の要点
  • Windows は「システムのプロパティ → 環境変数」画面で設定するのが確実。最短は Win+R で sysdm.cpl →「詳細設定」→「環境変数」
  • ユーザー環境変数は自分だけ、システム環境変数は PC の全ユーザーに効く(変更には管理者権限が必要)
  • コマンドの「一時設定」と「永続設定」は別物。PowerShell の $env:NAME = "value" はそのウィンドウ内だけ
  • setx PATH "%PATH%;..." は PATH を壊しやすいので使わない。PATH の追加は画面から行う
  • Linux は ~/.bashrc、macOS(zsh が標準)は ~/.zshrc に export を書く
  • 設定後は「新しく開いたターミナル」でしか反映されない。確認は echo / where / which

環境変数とは

環境変数は、OS がプロセス(実行中のプログラム)に渡す「名前と値」の組です。代表的なのが PATH で、コマンド名だけを入力したときに OS がどのフォルダから実行ファイルを探すかを決めています。ほかにも JAVA_HOME(JDK の場所)、TEMP(一時フォルダ)、HTTP_PROXY(プロキシ)など、ツールの動作を外から切り替えるために使われます。

「インストールしたのに 'python' は、内部コマンドまたは外部コマンド…として認識されていません と言われる」「java -version で古いバージョンが出る」といったトラブルの多くは、PATH の設定漏れか順番の問題です。

Windows で環境変数を設定する手順(画面操作)

キーボードの「Windows」キー + 「E」キー で「エクスプローラー」を立ち上げます。

エクスプローラーを立ち上げたら、「PC」の項目にカーソルを当てて右クリックをします。

右クリックしたら「プロパティ」の項目を選びます。

環境変数の設定方法

「システム」画面が開くので、「システムの詳細設定」を押します。Windows 11 では「設定 → システム → バージョン情報」が開き、「関連リンク」にある「システムの詳細設定」を押します。

「システムのプロパティ」が開くので、「環境変数」を押します。

環境変数の設定方法

環境変数の設定画面が開きます。上半分がユーザー環境変数、下半分がシステム環境変数です。「新規」「編集」「削除」ボタンで設定します。

コマンドプロンプトからコマンドを実行させるようにするためには、実行対象のファイルがあるフォルダのパスを「Path」変数に追加する必要があります。Path を選んで「編集」を押すと 1 行 1 フォルダの一覧になるので、「新規」で行を追加します。

環境変数の設定方法

もっと早く画面を開く方法

  • Win+R → sysdm.cpl → Enter →「詳細設定」タブ →「環境変数」
  • スタートメニューの検索欄に「環境変数」と入力 →「システム環境変数の編集」
  • ユーザー環境変数だけを編集したいなら Win+R で rundll32 sysdm.cpl,EditEnvironmentVariables(管理者権限不要)

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

項目ユーザー環境変数システム環境変数
効く範囲ログイン中の自分のアカウントだけPC 上の全ユーザー・サービス
変更に必要な権限不要管理者権限
向いている用途自分用ツール、ユーザーフォルダにインストールしたもの全員が使う JDK、サーバー用途、Windows サービスから参照する値
PATH の扱い実行時は「システムの Path」の後ろに「ユーザーの Path」が連結される。同名コマンドはシステム側が先に見つかる

迷ったらユーザー環境変数に設定するのが安全です。他のユーザーやシステム全体に影響しません。

コマンドで設定する方法(Windows)

一時的な設定と永続的な設定を区別することが大切です。

rem コマンドプロンプト: このウィンドウだけで有効
set MY_VAR=hello
echo %MY_VAR%

rem コマンドプロンプト: ユーザー環境変数として永続化(今のウィンドウには反映されない)
setx MY_VAR hello
# PowerShell: このウィンドウだけで有効
$env:MY_VAR = "hello"

# PowerShell: ユーザー環境変数として永続化
[Environment]::SetEnvironmentVariable("MY_VAR", "hello", "User")

# システム環境変数(管理者として起動した PowerShell で)
[Environment]::SetEnvironmentVariable("MY_VAR", "hello", "Machine")

Linux / macOS で設定する方法

Linux や macOS では、シェルの設定ファイルに export を書いて永続化します。macOS は Catalina 以降、標準シェルが zsh です。

# 今のシェルだけで有効
export MY_VAR=hello

# 永続化(bash の例)。PATH は既存の値を残して先頭に追加する
echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

# macOS(zsh)の場合
echo 'export JAVA_HOME=$(/usr/libexec/java_home)' >> ~/.zshrc
source ~/.zshrc
書く場所読まれるタイミング
~/.bashrcbash の対話シェルを開くたび(Ubuntu の端末など)
~/.profile / ~/.bash_profileログインシェル(SSH ログインなど)
~/.zshrc / ~/.zprofilezsh(macOS 標準)の対話シェル / ログインシェル
/etc/environmentLinux の全ユーザー共通(KEY=value 形式のみ。変数展開は書けない)

よくある落とし穴

  • 開いたままのウィンドウには反映されない: 環境変数はプロセス起動時にコピーされるため、コマンドプロンプト・PowerShell・VS Code・IDE は一度閉じて開き直す。IDE の内蔵ターミナルは IDE 本体の再起動が必要
  • setx で PATH を上書きしない: setx PATH "%PATH%;C:\tools" はシステムの Path まで含めた値をユーザーの Path に書き込むうえ、1024 文字を超える部分が切り捨てられる。PATH の追加は画面から行う
  • PATH の順番: 同じ名前のコマンドが複数あると、先に見つかった方が実行される。古い Java や Python が動く場合は順番を入れ替える
  • フォルダを指定する: PATH に入れるのは実行ファイルそのものではなく、それが入っているフォルダのパス
  • macOS の GUI アプリ: Dock から起動したアプリは ~/.zshrc を読まないため、ターミナルでは動くのに GUI からだと見つからないことがある
  • 秘密情報: API キーなどをシステム環境変数に置くと他ユーザーやプロセスから見える。アプリ単位なら .env ファイルなどで管理する

設定できたかの確認方法

rem コマンドプロンプト
echo %MY_VAR%
where python

# PowerShell
$env:MY_VAR
Get-Command python

# Linux / macOS
echo $MY_VAR
printenv | grep MY_VAR
which python3

where や which は「PATH をたどって実際にどのファイルが実行されるか」を表示します。期待したパスが出ないときは PATH の順番か、ウィンドウを開き直していないことを疑います。

よくある質問

Q. 再起動は必要?
A. 通常は不要です。新しく開いたコマンドプロンプトやアプリには反映されます。Windows サービスとして動いているプログラムは、サービスの再起動(場合によっては OS 再起動)が必要です。

Q. 変数名の大文字・小文字は区別される?
A. Windows は区別しません(Path と PATH は同じ)。Linux / macOS は区別します。

関連

Post Share
子ページ

子ページはありません

同階層のページ
  1. コマンド一覧
  2. コマンドプロンプトの開き方
  3. 環境変数の設定方法
  4. サービス一覧の確認方法
  5. WSL (Windows Subsystem for Linux)