nodebrewでNode.jsをインストールする。

# 最近のJavaScript

以前、プログラミングスクールで``jQuery``を少し学んでいたが、当時はJavaScriptの基礎文法も覚えずに使用していたため、全く身につかなかった。

最近サーバーサイドでLaravelを使用しているが、やはりフロントサイドについても学び直しが必要だと感じた。ので、現在はJavaScriptの独習に努めている。

そして``LaravelでJavaScriptを使用する``ことを考えた時、ネットで調べたら様々な選択肢というか用語が出てきた。それはここに簡記しておく。（サイトによっては、ライブラリの部分がフレームワークと表記されている箇所もある。）

## jQuery
JavaScriptのライブラリ。JavaScriptを簡単に記述する仕組みを提供している。

## React
JavaScriptのライブラリ。Facebookが開発している。

## Vue.js
JavaScriptのライブラリ。 ビューに特化している。

## AngularJS
JavaScriptのフレームワーク。Googleが開発している。大規模開発向け。

## Node.js
``サーバーサイド``で動くJavaScript。``Express``などのフレームワークも存在する。今回はフロントサイドとしてJavaScriptを使用したいので、直接使用はしないと思う。

## npm
Node.jsの``パッケージ管理システム``。``Node.jsのインストール時に、一緒にインストールされる。``

## nodebrew
（npmを含む）Node.jsの``バージョン管理システム``。``Homebrew``でインストールできる。

## 結論
JavaScriptのライブラリを使いたい時、``npm、要はNode.jsのインストール``が前提条件になることが多いと判明した。（ちなみに、``CDN``という仕組みを利用する方法もある。これはnpmのインストールが不要である。）

そのため、今回は下準備として以下の作業を行うことにした。（まだ使用するライブラリは決めていないが・・・）

- Homebrewで``nodebrewをインストール``する。
- nodebrewを使用して``（npmを含む）Node.jsをインストール``する。

# nodebrewのインストール

今回はこちらのサイト様を参考にした。

[Node.jsをMacにインストール！（Homebrew→Nodebrew→Node.js順にインストール）](http://mmorley.hatenablog.com/entry/2016/11/22/233034)

早速、Homebrewでnodebrewをインストールする。

```
$ brew install nodebrew
Updating Homebrew...
# 省略
==> Caveats
You need to manually run setup_dirs to create directories required by nodebrew:
  /usr/local/opt/nodebrew/bin/nodebrew setup_dirs

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

To use Homebrew's directories rather than ~/.nodebrew add to your profile:
  export NODEBREW_ROOT=/usr/local/var/nodebrew

Bash completion has been installed to:
  /usr/local/etc/bash_completion.d

zsh completions have been installed to:
  /usr/local/share/zsh/site-functions
==> Summary
🍺  /usr/local/Cellar/nodebrew/1.0.0: 8 files, 38.4KB, built in 4 seconds
```

メッセージ内の``Add path:``にある環境変数を追記し、反映させる。そしてnodebrewの場所を確認する。

しかし、環境変数の設定については、後に``nodeコマンド``実行時に詰むことになる・・・（最後に解決方法を説明する。）

```
$ echo "export PATH=$HOME/.nodebrew/current/bin:$PATH" >> ~/.bash_profile
```

```
$ source ~/.bash_profile
```

```
$ which nodebrew
/usr/local/bin/nodebrew
```

``setupコマンド``を行わないとNode.jsのインストールができないので、必ず実行する。

```
$ nodebrew setup
Fetching nodebrew...
Installed nodebrew in $HOME/.nodebrew

========================================
Export a path to nodebrew:

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

その他のコマンド確認はこちらから。

```
$ nodebrew -help
```

# Node.jsのインストール

## 既存のNode.jsをアンインストールする

インストールの前に、既にNode.jsがインストールされていないか確認する。

```
$ which node
/usr/local/bin/node
$ node -v
v9.11.1
$ npm -v
5.6.0
```

全く記憶に無いのだが、以前Homebrewでインストールしていたようだ。

```
$ brew list node
/usr/local/Cellar/node/9.11.1/bin/node
/usr/local/Cellar/node/9.11.1/etc/bash_completion.d/npm
/usr/local/Cellar/node/9.11.1/include/node/ (136 files)
/usr/local/Cellar/node/9.11.1/lib/dtrace/node.d
/usr/local/Cellar/node/9.11.1/libexec/bin/ (2 files)
/usr/local/Cellar/node/9.11.1/libexec/lib/ (4973 files)
/usr/local/Cellar/node/9.11.1/share/doc/ (3 files)
/usr/local/Cellar/node/9.11.1/share/man/man1/node.1
/usr/local/Cellar/node/9.11.1/share/systemtap/tapset/node.stp
```

HomebrewでインストールしたNode.jsは、アンインストールする。

```
$ brew uninstall node
```

そしたらこのようなエラーメッセージが。どうやら``herokuと依存関係``にあるようだ。

```
Error: Refusing to uninstall /usr/local/Cellar/node/9.11.1
because it is required by heroku, which is currently installed.
You can override this and force removal with:
  brew uninstall --ignore-dependencies node
```

``--ignore-dependenciesオプション``を付けて再度コマンドを実行する。

```
$ brew uninstall --ignore-dependencies node
```

さらにメッセージが。``バージョン9.4.0``が残っているようだ。

```
Uninstalling /usr/local/Cellar/node/9.11.1... (5,125 files, 49.7MB)
node 9.4.0 1 is still installed.
Remove all versions with `brew uninstall --force node`.
```

今度は``--forceオプション``を付けてコマンドを実行する。

```
$ brew uninstall --force node
Uninstalling node... (5,125 files, 49.7MB)
```

これでアンインストールは完了した。

## nodebrewでインストールする

現在nodebrewでインストールできるNode.jsのバージョンは、以下のコマンドで確認できる。

```
$ nodebrew ls-all
```

インストール時に``stable``を指定すれば、自動的に安定版がインストールされる。もし最新版を手に入れたい時は、``latest``を指定する。

今回は安定版をインストールしたいので、以下のコマンドを実行する。

```
$ nodebrew install-binary stable
Fetching: https://nodejs.org/dist/v10.1.0/node-v10.1.0-darwin-x64.tar.gz
######################################################################## 100.0%
Installed successfully
```

2018年5月13日現在、``バージョン10.1.0``がインストールされた。

さらに使用するバージョンを指定する。仮にインストールされているバージョンが１つだけでも、この``useコマンド``は実行しなければならない。

```
$ nodebrew use stable
use v10.1.0
```

場所を確認する。

```
$ which node
/Users/ユーザー名/.nodebrew/current/bin/node
$ which npm
/Users/ユーザー名/.nodebrew/current/bin/npm
```

バージョンを確認する。``nodeコマンド``が通らない。何故だろうか？

```
$ node -v
-bash: /usr/local/bin/node: No such file or directory
$ npm -v
5.6.0
```

## 環境変数を再確認する

``nodeコマンド``を実行した時のエラーメッセージ``-bash: /usr/local/bin/node: No such file or directory``を見る限り、``nodeを探す場所``を間違えて指定しているようだ。

現在の``.bash_profile``を確認する。先ほど行ったnodebrewの環境変数の追加では、単純にexport文が追記されただけだった。

```sh
# 既存のexport文 
export PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:$HOME/bin:$HOME/.composer/vendor/bin

eval "$(rbenv init -)"
if [ -f ~/.bashrc ]; then
    ~/.bashrc
fi

# 追記されたexport文
export PATH=/Users/ユーザー名/.nodebrew/current/bin:/Users/ユーザー名/.rbenv/shims:既存の$PATH
```

これを以下のように修正した。（編集にはエディターを使用した。）以前にも記事にしたが、export文の追記方法はちょっとややこしいと思う。

[.bash_profile追記時のホームディレクトリの表示について](https://qiita.com/33yuki/items/40a3cff85a94f145a9c0)

```sh
export PATH=$HOME/.nodebrew/current/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:$HOME/bin:$HOME/.composer/vendor/bin
eval "$(rbenv init -)"
if [ -f ~/.bashrc ]; then
    ~/.bashrc
fi
```

こちらも忘れずに実行する。

```
source ~/.bash_profile
```

再チャレンジ。今度はうまくいった。export文の呼び出し順（もとい位置？）が原因だったようだ。

しかし、何故``npmコマンド``だけは通ったのだろうか・・・？

```
$ node -v
v10.1.0
```

今回はここまで。