MacにNode.jsをインストールしていきます。インストールの方法はいろいろありますが、今回はバージョン管理ツールのfnmを使って、プロジェクト(ディレクトリ)ごとにNode.jsのバージョンを切り替えて使えるようにします。
前半でインストール手順、後半で詳しい説明をしています。手っ取り早く使いたいあなたは前半だけ、ちゃんと理解したいあなたは後半までご覧ください。
- Mac mini (M1, 2020)
- macOS Monterey
- Homebrew 3.4.5
Homebrewを使いますので、まだ導入していない場合はこちらもどうぞ。
インストール
fnmのインストール
まず、Node.jsのバージョン管理ツールfnmをインストールします。
% brew install fnm
(中略)
==> Pouring fnm--1.31.0.arm64_monterey.bottle.tar.gz
==> Caveats
zsh completions have been installed to:
/opt/homebrew/share/zsh/site-functions
==> Summary
🍺 /opt/homebrew/Cellar/fnm/1.31.0: 11 files, 7MB
==> Running `brew cleanup fnm`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
PATHを通すための設定をします。
% echo 'eval "$(fnm env --use-on-cd)"' >> ~/.zshrc
% source ~/.zshrc
ヘルプを表示してみましょう。
% fnm help
fnm 1.31.0
A fast and simple Node.js manager
USAGE:
fnm [OPTIONS] <SUBCOMMAND>
OPTIONS:
--arch <ARCH>
Override the architecture of the installed Node binary. Defaults to arch of fnm binary
[env: FNM_ARCH]
--fnm-dir <BASE_DIR>
The root directory of fnm installations [env: FNM_DIR]
-h, --help
Print help information
--log-level <LOG_LEVEL>
The log level of fnm commands [env: FNM_LOGLEVEL] [default: info] [possible values:
quiet, info, all, error]
--node-dist-mirror <NODE_DIST_MIRROR>
https://nodejs.org/dist/ mirror [env: FNM_NODE_DIST_MIRROR] [default:
https://nodejs.org/dist]
-V, --version
Print version information
--version-file-strategy <VERSION_FILE_STRATEGY>
A strategy for how to resolve the Node version. Used whenever `fnm use` or `fnm install`
is called without a version, or when `--use-on-cd` is configured on evaluation [env:
FNM_VERSION_FILE_STRATEGY] [default: local] [possible values: local, recursive]
SUBCOMMANDS:
alias Alias a version to a common name
completions Print shell completions to stdout
current Print the current Node.js version
default Set a version as the default version
env Print and set up required environment variables for fnm
exec Run a command within fnm context
help Print this message or the help of the given subcommand(s)
install Install a new Node.js version
list List all locally installed Node.js versions [aliases: ls]
list-remote List all remote Node.js versions [aliases: ls-remote]
unalias Remove an alias definition
uninstall Uninstall a Node.js version
use Change Node.js version
fnmの使い方
fnm list-remote | インストール可能なバージョンのリストを表示する |
fnm install [VERSION] | 指定したバージョンのNode.jsをインストールする |
fnm uninstall [VERSION] | 指定したバージョンのNode.jsをアンインストールする |
fnm default [VERSION] | デフォルトのバージョンを設定する |
fnm use [VERSION] | Node.jsのバージョンを切り替える。 |
fnm list | インストール済みのNode.jsのリストを表示する |
Node.jsのインストール
インストール可能なバージョンのリストを表示してみましょう。
% fnm list-remote
(中略)
v16.13.0 (Gallium)
v16.13.1 (Gallium)
v16.13.2 (Gallium)
v16.14.0 (Gallium)
v16.14.1 (Gallium)
v16.14.2 (Gallium)
v17.0.0
v17.0.1
v17.1.0
v17.2.0
v17.3.0
v17.3.1
v17.4.0
v17.5.0
v17.6.0
v17.7.0
v17.7.1
v17.7.2
v17.8.0
v17.9.0
次のコマンドで任意のバージョンの Node.jsをインストールできます。気の済むまでいくつでもインストールしてみましょう。
% fnm install v17.9.0 #バージョンを指定してインストール
% fnm install v16 #v16の最新版をインストール
デフォルトのバージョンを設定する
現在インストールされているNode.jsのリストを表示してみます。
% fnm list
* v16.14.2
* v17.9.0 default
* system
v16.14.2
と v17.9.0
の2つがインストールされていて、v17.9.0
がデフォルトに設定されています。
デフォルトを切り替えてみます。
% fnm default v17.9.0
% fnm list
* v16.14.2
* v17.9.0 default
* system
デフォルトで使うバージョンが切り替わりました。
プロジェクトで使用するバージョンを設定する
fnmではプロジェクトごとに使用するNode.jsのバージョンを設定しておくことができます。プロジェクトが何だかわからない人は、プロジェクト=ディレクトリだと思ってください(大ざっぱ)。
プロジェクトのディレクトリに .node-version
という名前のファイルを作成して、そこにバージョンを記述します。
% cd project-a #プロジェクトのディレクトリに移動
% fnm use v16.14.2 #バージョンを切り替える
% node -v > .node-version #現在のバージョンを .node-version に記述
% node -v #バージョンを確認
v16.14.2
別のプロジェクトにも設定してみましょう。
% echo "v15.14.0" > project-b/.node-version #プロジェクトのディレクトリに .node-version を設置
% cd project-b #プロジェクトのディレクトリに移動
Can't find an installed Node version matching v15.14.0.
Do you want to install it? answer [y/n]: y
Installing Node v15.14.0 (x64)
Using Node v15.14.0
% node -v
v15.14.0
設定したバージョンのNode.jsがインストールされていない場合は、インストールしてくれます。嗚呼便利。
インストールと切り替えの方法は以上です。
Node.jsとは
Node.jsとはサーバサイドで動くJavaScriptである。
というのは嘘で、Node.jsはJavaScriptの実行環境です。
もともとJavaScriptというのはウェブサイトに動きを付けるためのもので、ウェブブラウザ上で動作するものでした。それを他のプログラミング言語と同じようにOS上で動作するようにしたのがNode.jsです。
クライアントサイド(ウェブブラウザ)で動作していたものなので、それとの対比でNode.jsはサーバサイドで動くのだという言い方をされますが、サーバサイドに限らず開発環境でも使われます。
Macで使うNode.jsは、まさに開発環境のJavaScript実行環境ですよね。
バージョン管理ツールは何を使うか
Node.jsは頻繁にアップデートが行われています。なので、常に最新のバージョンだけを使うというわけにはいきません。複数のバージョンをインストールしておいて、プロジェクトによって切り替えて使い分けることが必要になります。そこでバージョン管理ツールの出番となるわけです。
- Node.jsのバージョンを切り替える(当たり前)。
- ディレクトリ単位でバージョンを設定できる。
- ディレクトリを移動した時に自動でバージョンが切り替わる。
- 未インストールのバージョンを使用しようとしたら自動的にインストールする。
主なバージョン管理ツールについて機能をまとめてみました。
ツール | Dir設定 | 自動切替 | 自動インストール | GitHub | 最終リリース |
---|---|---|---|---|---|
nodebrew | 1k | 2022-03-19 | |||
nvm | 56.8k | 2021-12-18 | |||
asdf | 14k | 2021-12-04 | |||
nodenv | 1.8k | 2020-07-20 | |||
fnm | 7.2k | 2022-02-16 | |||
Volta | 5.6k | 2022-03-21 |
GitHubの星の数と最終リリース日は2022年4月現在の情報です。
これを見ると、人気があるのはnvmですね。機能面ではfnmとVoltaに軍配が上がりそうです。ネットの声を聞くとVoltaのほうが推されてる感じがするのですが、私はfnmを選びました。
というのも、Voltaは現在のところインストール可能なバージョンのリストを表示する機能とインストールしたNode.jsをアンインストールする機能が実装されていないんですね。今後のアップデートに期待です。
パッケージ管理ツールは何を使うか
パッケージ管理ツールは何を使うか問題です。みんなが悩んでいます。
npmはNode.jsに同梱されていてすぐに使えます。yarnはnpmよりも高速でセキュリティも高いです。いや、最近はnpmもyarnの良いところをパク取り入れて頑張ってるよ。pnpmなんてのもあるよ。
高速に動作するツールを使えば時間を節約できますが、そもそもパッケージ管理ツールを使う時間ってプロジェクトを開発する時間全体のうちどれくらいでしょう。
悩む時間 > 節約できる時間
ということになるのもバカバカしいので、私は考えるのをやめてnpmを使います。
でわでわ
コメント