読者です 読者をやめる 読者になる 読者になる

Develop and Design Note

フロントエンドなデザイナーの覚書

パスを通すってなに?

ある日、Node.jsをインストール済みのPCで、nodeコマンドを使おうとした時、「そんなコマンドありません」って怒られました。

$ node -v
-bash node: command not found

原因を調べた結果、「パスを通す」という作業をしなきゃいかんようです。
しかし、Node.jsインストールした別のPCでは、そんな作業しなくても普通に使えてるんですけど。。。

ということで、いろいろ調べました。

パスとは

PCのシステム周りに疎い自分にとっては、この記事が一番丁寧でわかりやすかった。

要は、パスとは「よく使うコマンドファイルが保存されているお決まりの場所」のことで、「nodeのコマンドファイルが保存されている場所」が、そのお決まりの場所」ではなかったのが原因でした。

コマンドファイルが保存されているパスはwhichコマンドで探すことができます。nodeを探してみましょう。

$ which node
/Users/username/.nodebrew/current/bin/node

「/Users/username/.nodebrew/current/bin/」が「nodeのコマンドファイルが保存されている場所」です。

ls、cd、pwdも探してみます。

$ which ls
/bin/ls
$ which cd
/usr/bin/cd
$ which pwd
/bin/pwd

「/bin」や「/usr/bin」が「よく使うコマンドファイルが保存されているお決まりの場所」というわけです。

ここで2つの疑問が沸いてきました。

  • なぜ、お決まりの場所にあるコマンドは使えるのか?
  • なぜ、nodeは違う場所に保存されたのか?

「お決まりの場所」にあるコマンドはデフォルトで使える

そもそも、お決まりの場所とはどこでしょう。
上に出てきた「/bin」や「/usr/bin」もその一つですが、他にもあります。
答えは、exportコマンドで表示される「declare -x PATH=""」の中身で、確かめる事ができます。

$ export -p
//省略
declare -x PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"

「:」が区切りなので、「/usr/local/bin」「/usr/bin」「/bin」「/usr/sbin」「/sbin」がお決まりの場所というのがわかりました。

この設定は、基本「/etc/profile」に書かれていて(たぶん)、PCログイン時に読み込まれます。
これにより、「/usr/local/bin」「/usr/bin」「/bin」「/usr/sbin」「/sbin」にパスが通り、lsやcd、pwdなどの基本的なコマンドが使えるようになる、というわけです。

深掘りするとけっこう難しくなるので、詳しくはこちらの記事をご覧くださいmm

コマンドファイルは、インストーラーを使わないとホームディレクトリに保存される

2つ目の疑問「 なぜ、nodeは違う場所に保存されたのか?」ですが、これは、nodebrewというnodeのバージョン管理ツールを使ってインストールしたことが原因でした。

whichでnodeコマンドの場所を調べた時、

$ which node
/Users/username/.nodebrew/current/bin/node

nodeが「.nodebrew」ディレクトリ以下にありました。
そして、「/Users/username(usernameはユーザー名、いわゆるホームディレクトリ)」以下にインストールされているのがわかりますね。

nodebrewについては、こちらを参照あれ。

てか、公式サイトにちゃんとパスを通してね、って書いてありますね。

ちなみに、インストーラーを使う方法だと、nodeは「/usr/local/bin」に保存されます。なので、パスを通す作業は必要ありません。
f:id:designnote:20160131201613p:plain

しかし、Node.jsは安定版以外にも複数のバージョンがあるので、バージョン管理できるnodebrewでインストールすることが望ましいです。

パスを通す

ということで、/「Users/username/.nodebrew/current/bin/node」にパスを通してみましょう。基本的には公式サイトに載ってる方法に従いますが、英語苦手な場合は、こちらの記事がわかりやすいです。

しかし、僕の場合、~/.bashrcも~/.zshrcもなかったので、/etc/profileを編集することにしました。

$ cd /etc/
$ sudo vim profile

これでvimが開くので、編集モード(i)にして、下記の1行を一番下に追記後、編集モードを終了して(esc)、vimも保存終了します(:wq!)。
etc/profileは、本来readonlyファイルなので、sudoでvimを起動し、最後は、:wq!と「!」を付けないと終了できません。

export PATH=$HOME/.nodebrew/current/bin:$PATH

これは、既存のパス設定を上書きする記法なのですが、最後の「$PATH」には、すでに設定されているパス(/usr/binとか)が入ります。
なので、結局は「$HOME/.nodebrew/current/bin」を追記したことになります。「$HOME」はホームディレクトリです。

その後、設定を読み直すコマンドを打ちます。

$ source /etc/profile

これで、nodeコマンドにパスが通りました。ためしに、node -vなど打ってみてください。
また、Node.jsのバージョン管理にはnvmもありますが、nodebrewは、バージョンが違う複数のNode.jsをインストールでき、かつ、切り替えることができるので、nodebrewの方がオススメです。