M1 MacにnvmでNode.jsをインストールする

最近M1チップ搭載のMacBook Airを購入しました。
M1以外のMacも同じ方法でインストールできますが、購入記念（？）で書き残しておきます。

# 紹介すること
- M1 Macでnvmを利用するときの注意点
- nvmのインストール
- nvmを利用したNode.jsのインストール

# 検証環境
- macOS Monterey 12.3.1
- MacBook Air(M1, 2020)

# nvmとは
[Node.js](https://nodejs.org/en/)のバージョン管理ツールです。
https://github.com/nvm-sh/nvm#about

## なぜnvmを使うの？
- Node.jsをバージョン管理したいから
- [EC2のチュートリアル](https://docs.aws.amazon.com/ja_jp/sdk-for-javascript/v2/developer-guide/setting-up-node-on-ec2-instance.html)に紹介されているので信頼性が高そうだから

Node.jsのバージョン管理ツールでは[nodebrew](https://github.com/hokaccha/nodebrew)も有名ですね。こちらもM1 Macに対応しているようです。
[【M1 Mac】nodebrew v1.1.0が公式にAppleSiliconに対応したのでNode v16.0.0をインストール](https://qiita.com/merarli/items/5f52db447c543db71a3f)

# M1 Macはここに注意
インストールするNode.jsのバージョンに注意が必要です。M1 Macでは16.0.0以降のバージョンが勧められています。
https://github.com/nvm-sh/nvm#important-notes

>Note For Macs with the M1 chip, node started providing arm64 arch darwin packages since v16.0.0. For earlier versions, there were only darwin_x64 packages available but no darwin_arm64. If you are facing issues installing node using nvm, you may want to update to v16 or later.

ライブラリや環境の都合上あえてバージョンを下げて利用することもあると思います。必要なバージョンの対応可否はその都度公式ドキュメントを確認してください。

今回はLTSバージョン（16.0.0以降）をインストールするので問題ありませんでした。
https://github.com/nodejs/Release#release-schedule

# nvmのインストール
## インストール実行
公式ドキュメントに従ってインストールします。
https://github.com/nvm-sh/nvm#install--update-script
```bash
% curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
```

ターミナルのリスタート用コマンドを実行します。
https://github.com/nvm-sh/nvm#troubleshooting-on-macos
>You might need to restart your terminal instance or run . ~/.nvm/nvm.sh. Restarting your terminal/opening a new tab/window, or running the source command will load the command and the new configuration.

```bash
% . ~/.nvm/nvm.sh
```
nvmのバージョンが確認できればインストール完了です！
```bash
% nvm -v
0.39.1
```

## Homebrewではインストールできないの？
Homebrew経由でインストールすることも可能ですが、公式ドキュメントによると現在はサポート対象外のようです。
https://github.com/nvm-sh/nvm#important-notes
>Homebrew installation is not supported. If you have issues with homebrew-installed nvm, please brew uninstall it, and install it using the instructions below, before filing an issue.

また、nvmに限らずHomebrewでパッケージをインストールした場合は一部の初期設定が実行されないようです。試しに``brew install nvm``を実行したところ、curlコマンドでは実行される処理が行われていませんでした。
- ``~/.zshrc``にパスの設定に必要なexport文が追記されない
- ``~/.nvm``が生成されない

なお、これらの作業については手動で対応可能です。Homebrewを使用した場合はインストール完了時に説明文が出力されます。
```bash
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 "/opt/homebrew/opt/nvm/nvm.sh" ] && \. "/opt/homebrew/opt/nvm/nvm.sh"  # This loads nvm
  [ -s "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm" ] && \. "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm"  # This loads nvm bash_completion
```

# Node.jsのインストール
LTSバージョンをインストールします。
https://github.com/nvm-sh/nvm#long-term-support
```bash
 % nvm install --lts
```
Node.jsのバージョンが確認できればインストール完了です！
```bash
% node -v
v16.14.2
```
合わせてnpmも使用できるようになりました。
```
% npm -v
8.5.0
```

# まとめ
最近はM1対応のツールが増えて嬉しいです。M1の環境構築についての情報も増えましたが、現在進行形でツールのアップデートも進んでいるので情報の正確性はその都度判断が必要ですね。

快適なM1 Macライフをお送りください。

# 採用PR
弊社で一緒に働く仲間を募集しています。
全てのオタクを幸せにしたい方、是非ご覧ください！

https://hrmos.co/pages/vivion/jobs/0000191