はじめに
この辺りの仕組みがまったく理解できずに苦しい思いをしたが、わかると楽しくなってきたので書きました。
PATH(パス)は、Unix系OS(LinuxやmacOS)やWindowsにおいて、コマンドを実行する際に参照される環境変数の一つです。
PATHに設定されているディレクトリの中にあるプログラムやスクリプトは、フルパスを指定しなくても直接実行できます。
1. PATHの仕組み
PATH変数には、実行可能なファイルが格納されているディレクトリのリストがコロン(:)(Windowsではセミコロン(;))で区切られて登録されています。
コマンドを実行すると、シェルはPATHに登録されたディレクトリを順番に検索し、最初に見つかった実行ファイルを実行します。
例(Linux/macOS)
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
Macbookの実際のターミナル画面
/usr/local/opt/bind/sbin:/Applications/Visual Studio Code.app/Contents/Resources/app/bin:/Users/hondaakiratarou/.nvm/versions/node/vxx.x.x/bin:/Library/Frameworks/Python.framework/Versions/x.xx/bin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/private/var/folders/wm/xx_xxxxxxx/xxxxxxxxxxxxxxxxxxxxxx/T/AppTranslocation/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/d/iTerm.app/Contents/Resources/utilities:/usr/local/go/bin
この場合、コマンドが実行される際には以下のディレクトリ順に検索されます。
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
2. PATHの確認方法
Linux/macOS
$ echo $PATH
Windows(PowerShell)
PS C:\> echo $env:PATH
3. PATHの変更方法
一時的な変更(カレントシェルのみ適用)
PATH変数にディレクトリを追加することで、新しいコマンドをフルパスなしで実行できるようになります。
Linux/macOS
$ export PATH=/home/user/mybin:$PATH
Windows(PowerShell)
PS C:\> $env:PATH = "C:\\mybin;" + $env:PATH
この変更は現在のターミナルセッションでのみ有効です。
永続的な変更(再起動後も適用)
システムの設定ファイルに記述することで、ログイン時に自動適用されます。
Linux/macOS
ホームディレクトリの~/.bashrc
や~/.zshrc
に以下を追加:
export PATH=/home/user/mybin:$PATH
変更を適用するには:
$ source ~/.bashrc # または ~/.zshrc
Windows
環境変数を恒久的に変更するには、システム環境変数を編集します。
- 「システムのプロパティ」を開く
- 「詳細設定」タブの「環境変数」を選択
- 「システム環境変数」または「ユーザー環境変数」の
Path
を編集
4. PATHのトラブルシューティング
1. コマンドが見つからない(command not found
エラー)
- コマンドがインストールされていない
- PATHにコマンドのディレクトリが登録されていない
2. コマンドのバージョンが意図しないものになる
- PATHに複数の同名コマンドが存在し、異なるバージョンが先に見つかる
-
which
コマンドで確認可能
$ which python
/usr/bin/python
3. PATHの順番を調整する
最優先にしたいディレクトリを前に追加すると、優先度を変更できます。
$ export PATH=/opt/custom/bin:$PATH
まとめ
- PATHはコマンドを検索するディレクトリのリスト
-
echo $PATH
で確認できる -
export PATH=/new/path:$PATH
で一時的に変更可能 -
.bashrc
などに追加すると永続化できる -
which コマンド名
で優先される実行ファイルを確認できる
PATHを理解し適切に設定することで、開発環境を快適にカスタマイズできますので、確認してみてくださ!