nvm を使って Node.js の LTS バージョンをMacにインストールする

プログラミング学習者です。これまでRubyとRuby on Railsを学習していて、これからJavaScriptの学習を始めるために行いました。
次の機会に、またいちからやり直しになりそうだったので、作業記録を残します。

## 環境
- macOS Monterey12.6、 プロセッサはintel。
- Homebrewはインストール済み。

## インストールの流れ
1. Homebrewを使って、Node.jsのバージョン管理ツールをインストール。ここではnvmを使用。
1. nvmを使って、Node.jsをインストール
1. 確認
1. .nvmrc ファイルに関すること（必須ではない。）

## 語句
- HomebrewはMacのパッケージマネージャ
- nvmは、Node.jsのバージョン管理ツール。バージョン管理ツールは他にもある。
- Node.jsは 
> Node.jsは、サーバーサイドでJavaScriptを使うためのプラットフォーム
([【入門】Node.jsとは？利用シーンやメリットなどをわかりやすく解説 - カゴヤのサーバー研究室](https://www.kagoya.jp/howto/it-glossary/develop/nodejs/)より）

## 実際の作業手順
### 1) Homebrewでnvmをインストール
```shell-session
$ brew install nvm
```
上のコマンドでインストールされると、ターミナルに以下が出力されます。
```
```shell-session
Please note that upstream has asked us to make explicit managing
nvm via Homebrew is unsupported by them and you should check any
problems against the standard nvm install method prior to reporting.

You should create NVM's working directory if it doesn't exist:

  mkdir ~/.nvm

Add the following to ~/.zshrc or your desired shell
configuration file:

  export NVM_DIR="$HOME/.nvm"
  [ -s "/usr/local/opt/nvm/nvm.sh" ] && \. "/usr/local/opt/nvm/nvm.sh"  # This loads nvm
  [ -s "/usr/local/opt/nvm/etc/bash_completion.d/nvm" ] && \. "/usr/local/opt/nvm/etc/bash_completion.d/nvm"  # This loads nvm bash_completion

You can set $NVM_DIR to any location, but leaving it unchanged from
/usr/local/opt/nvm will destroy any nvm-installed Node installations
upon upgrade/reinstall.

Type `nvm help` for further information.
==> Summary
🍺  /usr/local/Cellar/nvm/0.39.1_1: 9 files, 184.2KB
==> Running `brew cleanup nvm`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
```
表示された内容に沿って必要な設定を行います。

nvm用のディレクリトリ作成。
```shell-session
$ mkdir ~/.nvm
```
`vim ~/.zshrc`で、zshrcファイルへ以下を追記。
```shell-session
 # nvmの設定
export NVM_DIR="$HOME/.nvm"
  [ -s "/usr/local/opt/nvm/nvm.sh" ] && \. "/usr/local/opt/nvm/nvm.sh"  # This loads nvm
  [ -s "/usr/local/opt/nvm/etc/bash_completion.d/nvm" ] && \. "/usr/local/opt/nvm/etc/bash_completion.d/nvm"  # This loads nvm bash_completion
```
確認するには、ターミナルを再起動して`nvm --version`、
バージョンが表示されればO.K。

### 2) nvmを使って、Node.jsをインストール
Node.jsのLTSバージョンをインストール。

```shell-session
❯ nvm install --lts
Installing latest LTS version.
Downloading and installing node v16.17.0...
Downloading https://nodejs.org/dist/v16.17.0/node-v16.17.0-darwin-x64.tar.xz...
######################################################################### 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v16.17.0 (npm v8.15.0)
Creating default alias: default -> lts/* (-> v16.17.0)
```

### 3) 確認
こうなっていれば、大丈夫そう。（バージョンの数字以外で）
```shell-session
❯ node -v
v16.17.0

~
❯ nvm ls
->     v16.17.0
         system
default -> lts/* (-> v16.17.0)
iojs -> N/A (default)
unstable -> N/A (default)
node -> stable (-> v16.17.0) (default)
stable -> 16.17 (-> v16.17.0) (default)
lts/* -> lts/gallium (-> v16.17.0)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.17.1 (-> N/A)
lts/carbon -> v8.17.0 (-> N/A)
lts/dubnium -> v10.24.1 (-> N/A)
lts/erbium -> v12.22.12 (-> N/A)
lts/fermium -> v14.20.0 (-> N/A)
lts/gallium -> v16.17.0
```
### 4) .nvmrc ファイルに関すること(必須ではない。）
.nvmrc ファイルがある場合は、自動で読み込まれるように設定。

#### .nvmrc ファイルとは？
https://github.com/nvm-sh/nvm#nvmrc

プロジェクトのルート ディレクトリ (または任意の親ディレクトリ) に、ノードのバージョン番号を含むファイルを作成することで、コマンド ラインでバージョンが指定されていない場合は`nvm use`, `nvm install`, `nvm exec`, `nvm run`や`nvm which`を行う際、.nvmrc ファイルで指定されたバージョンが使用される。

#### .nvmrc ファイルを自動的に読み込むための設定、zsh の場合
https://github.com/nvm-sh/nvm#zsh

.zshrcファイルを編集。
```sell-session
vim ~/.zshrc
```
以下を追記しておく。
```sell-session
# .nvmrc ファイルを自動的に読み込むための設定
autoload -U add-zsh-hook
load-nvmrc() {
  local node_version="$(nvm version)"
  local nvmrc_path="$(nvm_find_nvmrc)"

  if [ -n "$nvmrc_path" ]; then
    local nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")")

    if [ "$nvmrc_node_version" = "N/A" ]; then
      nvm install
    elif [ "$nvmrc_node_version" != "$node_version" ]; then
      nvm use
    fi
  elif [ "$node_version" != "$(nvm version default)" ]; then
    echo "Reverting to nvm default version"
    nvm use default
  fi
}
add-zsh-hook chpwd load-nvmrc
load-nvmrc
```

## 参考リンク
ありがとうございます！！🙏
- [nvm-sh/nvm: Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions](https://github.com/nvm-sh/nvm)
- [Node.js](https://nodejs.org/ja/)
- [🔰 Node.jsのバージョン管理ツールとは - Qiita](https://qiita.com/heppokofrontend/items/1746c73a34d59b124013)
- [MacにNode.jsをインストール - Qiita](https://qiita.com/kyosuke5_20/items/c5f68fc9d89b84c0df09)
- [Node.jsのバージョン管理ツール、nvmをhomebrewでmacにインストールする方法 - diwao日記](https://diwao.com/2017/01/nvm-install-homebrew.html)