環境変数と PATH
💡 学習ガイド:ターミナルで
gitやpythonと入力するたび、システムはそのプログラムがどこにあるかを探さなければなりません。コードから大規模モデル API を呼び出すたび、プログラムはどのキーを使うかを知る必要があります。この 2 つの背後にあるのは同じ仕組み——環境変数です。
0. すべてのプログラムは設定を持っている
実行中のすべてのプログラムは「キー=値」の設定セットを保持しており、これを環境変数と呼びます。プログラムはいつでもこれらの設定を読み取り、現在の実行環境を把握できます。
下のリストの変数をクリックして、ターミナルでその値を「確認」してください:
1. PATH:シェルは入力されたコマンドをどう見つけるか
PATH は特別な環境変数で、コロンで区切られたディレクトリパスのリストを格納しています。git と入力すると、シェルはこのディレクトリリストの順番に従って git という名前の実行可能ファイルを一つずつ探します——最初に見つけた時点で直ちに停止します。
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbinコマンドを選択して、シェルがディレクトリを順に検索する過程を観察してください:
3 つの重要なルール:
- PATH の中で前にあるディレクトリほど優先度が高い
- 最初に見つかった時点で停止し、それ以上検索しない
- どのディレクトリにもない →
command not found
2. ツールをインストールした後、なぜターミナルを再起動する必要があるのか?
nvm、Homebrew、conda などのツールをインストールすると、インストールスクリプトが自動的に ~/.zshrc に 1 行追加し、自身のディレクトリを PATH に加えます:
# インストーラが自動的に書き込んだ内容(例)
export PATH="/usr/local/opt/python@3.12/bin:$PATH"この行は新しいシェルが起動した時にのみ実行されます。すでに開いているターミナルウィンドウは影響を受けないため:
# 再起動せずにすぐ反映させる
source ~/.zshrcAI 開発ツールでよくある状況:
# Ollama / pipx をインストールしたが command not found になる
which ollama # 実際のインストール先を確認
# pip でインストールした CLI ツールのパス(PATH に追加)
# macOS:~/Library/Python/3.x/bin
# Linux:~/.local/bin
export PATH="$PATH:$HOME/.local/bin"
# 推奨:pipx で CLI ツールをインストール、PATH を自動管理
pipx install aider-chat3. 変数のスコープ:誰がこの変数を見られるのか?
環境変数はすべてのプログラムにブロードキャストされるわけではありません——各プロセスは自身のコピーを保持し、親プロセスから継承します。自分のコピーを変更しても親プロセスには影響しません。
下の図は 3 つのレベルを示しています。「ユーザーレベル」で新しい変数をエクスポートし、それが「プロセスレベル」に表示されるか確認してください:
/etc/environment~/.zshrc4. export:子プロセスが変数を読み取れるかどうかを決める
変数を設定する際、export を付けるかどうかで全く異なる結果になります:
変数をセッションをまたいで永続化するには、export を設定ファイルに書き込みます:
# macOS (zsh)
echo 'export MY_VAR="value"' >> ~/.zshrc
source ~/.zshrc # すぐに反映、ターミナルを再開する必要なし
# Linux (bash)
echo 'export MY_VAR="value"' >> ~/.bashrc
source ~/.bashrc5. API キー:絶対にソースコードに書いてはいけない
OpenAI、Anthropic、DeepSeek などの API を呼び出す際、キーはあなたの「身分証明書 + クレジットカード」のようなものです。漏洩すると、他人があなたの利用枠を使って消費でき、費用はあなたの負担になります。
最もよくある間違いは、キーをソースコードに直接書き込むことです:
6. ローカル開発:.env ファイルでキーを管理
ローカル開発では、プロジェクトのルートディレクトリにある .env ファイルにキーを保存し、コードは dotenv ライブラリを通じて読み取ります。.env は必ず .gitignore に追加し、Git にコミットしてはいけません。
左側で設定、右側で読み取り——言語を切り替えて 2 つの書き方を確認してください:
7. 本番環境:実行プラットフォームにキーを注入させる
.env は開発段階の便利なツールです。サーバーやクラウドプラットフォームでは、実行環境がキーの注入を担当すべきであり、コード自体はキーがどこに保存されているかを全く意識しないようにします:
8. 実践的なトラブルシューティング
command not found
# ステップ 1:PATH にあるか確認
which python3 # 出力があれば見つかっている
# ステップ 2:プログラムの実際の場所を見つける(macOS)
brew list python | grep bin
# ステップ 3:ディレクトリを PATH に追加
export PATH="/見つかったパス:$PATH"
source ~/.zshrc # 設定ファイルに書き込んだ後は source を忘れずに2 つのバージョンをインストールしたが、使いたい方が使われない
which python
# /usr/bin/python ← 古いシステムバージョン、PATH の前方にある
# 新しいバージョンのディレクトリを PATH の先頭に配置
export PATH="/usr/local/bin:$PATH"
which python
# /usr/local/bin/python ← 新バージョン、これで優先される変数を設定したのに、プログラムが読み取れない
| 原因 | 解決策 |
|---|---|
export を忘れた | export を追加して再試行 |
~/.zshrc を変更したが反映されていない | source ~/.zshrc を実行 |
.env を使っているが dotenv がインストールされていない | pip install python-dotenv / npm install dotenv |
| サーバーで SSH セッション中のみ有効 | systemd EnvironmentFile を使用 |
用語早見表
| 用語 | 意味 |
|---|---|
| PATH | シェルが実行可能ファイルを検索するディレクトリのリスト。コロン区切り、順序が優先度を決定 |
| export | 変数を継承可能としてマークし、子プロセス起動時に自動的にコピーを取得 |
| source | 現在のシェルで設定ファイルを再実行し、変更を即座に反映 |
| which | コマンドに対応する実行可能ファイルのパスを表示(PATH 検索の結果) |
| .env | プロジェクトローカルの設定ファイル。開発用キーを保存。必ず .gitignore に追加 |
| .env.example | 変数名は完全だが値は空のテンプレート。Git に安全にコミット可能 |
| chmod 600 | ファイル権限:所有者のみ読み書き可能。キーファイルの保護に適している |
| Secret Scanner | GitHub などのプラットフォームがキーの漏洩を自動スキャンし、発見時にベンダーに取り消しを通知 |