| この記事の要点 |
|
環境変数とは
環境変数は、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
| 書く場所 | 読まれるタイミング |
|---|---|
~/.bashrc | bash の対話シェルを開くたび(Ubuntu の端末など) |
~/.profile / ~/.bash_profile | ログインシェル(SSH ログインなど) |
~/.zshrc / ~/.zprofile | zsh(macOS 標準)の対話シェル / ログインシェル |
/etc/environment | Linux の全ユーザー共通(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 は区別します。
関連
- export 環境変数の設定と子プロセスへの継承 | Linux
- env コマンドで環境変数を表示・一時設定して実行 | Linux
- .env ファイル完全ガイド
- Linux which コマンドの使い方
- cron / crontab の書き方(環境変数の注意点)
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- djangoのテンプレートの作成とヘッダー・フッターの共通化 2026-10-03 21:41:49
- テンプレートフラグメント(ヘッダー等の共有化) 2026-10-03 21:41:49
- reCAPTCHA v3 使い方(サンプル付き) 2026-10-03 21:37:05
- Content-Type一覧|MIMEタイプとはとHTTPでの主な使用場面 2026-10-03 21:37:05
- SpringにおけるAOPの使い方 2026-10-03 21:37:05
- X (Twitter) API でツイートできないがエラーが出ない問題の原因と対処 2026-10-03 11:33:01
- X (Twitter) API アプリケーション登録完全ガイド|v2・Bearer Token・OAuth 2.0 PKCE 2026-10-03 11:33:01
- X (Twitter) API 完全ガイド|従量課金の料金・単価(2026年10月)と v2 移行 2026-10-03 11:32:40
- Google DeepMind とは?Gemini・AlphaFold の開発元 2026-10-03 11:26:56
- Cursor とは?AI 統合型コードエディタの使い方・料金 2026-10-03 11:26:56
- Claude (Anthropic) とは?AIチャットの使い方・モデルファミリ・API 2026-10-03 11:26:56
- AIベンダー一覧:OpenAI・Anthropic・Google DeepMind・Microsoft・Meta 2026-10-03 11:26:56
- クラウド・インフラ完全ガイド — AWS/Azure/GCP/Kubernetes 2026-10-03 11:26:56
- テキストエディタ完全比較 (VS Code / Cursor / Vim / Emacs / IDE) 2026-10-03 11:26:56
- プログラミング学習プラットフォーム|Scratch・micro:bit ほか 2026-10-03 11:26:56