📝

Windows での Node.js バージョン管理を fnm で

2022/03/17に公開

fnm を Windows で導入した

この記事は Windows で VSCode で Git bash を使っている著者が fnm による Node.js バージョン管理を整備したというものです。
Git Bash で使うために、公式にない操作が必要だったので情報公開であり個人メモです。

Windows には nvm がない

nvm-windows は操作ちがうじゃん…
WSL2 起動して、VSCode でリモートしろ、という正論が聞こえる。
だが、ちょっと趣味でコード書くときとか、環境を作ったり保守するだけで満足して開発に踏み出せなくなる怠惰な人間がここにいるんですよ…

バージョン管理ツールどれ選ぶ?

この論議はたくさん転がっているので、割愛します。
結論として、fnm を選択しました。
選んだ理由としては次のようなものです。

  1. Windows / Mac / Linux で利用可能
  2. マルチプラットフォーム間で操作が変わらない
  3. 若いツールかつ Rust 製で高速(将来性があるともいえる?)
  4. 既存のバージョン切り替え(.node-version, .nvmrc)をサポートしている

Fast Node Manager (fnm)
https://github.com/Schniz/fnm

Windows に fnm を入れる

バイナリを DL してパスが通るとこに置けば使えますが、便利は正義ですのでパッケージ管理ツールを使います。
公式の Installation にあるなかで、Scoop を使いました。
理由としてはインストール後は管理者権限を要求しないなどがありますが、自身がメリット・デメリット理解された状態で利用されることが一番です。

Scoop の導入

基本 Windows10~ であれば大丈夫なはずですが、以下の手順は PowerShell と .Net のバージョン制約があります。いちおうご注意を。
PowerShell を起動して以下を順に実行。

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
iwr -useb get.scoop.sh | iex

fnm のインストール

PowerShell を起動して以下を実行。

scoop install fnm

PowerShell で fnm を使えるようにする

PowerShell Profile を置く場所を探す。

$PROFILE

上記で示された場所に、Microsoft.PowerShell_profile.ps1 というファイルを作成してください。
中身は次のように書いてください。

Microsoft.PowerShell_profile.ps1
fnm env --use-on-cd --shell powershell | Out-String | Invoke-Expression

fnm と node が無事に叩ければOKです。

Git Bash で fnm を使えるようにする

ここが鬼門でした。fnm の環境変数を bash 起動時にセットするようにしていきます。
まず Git Bash を起動し、home ディレクトリに移動します。

cd ~

2つのファイルを作成します。
.bash_profile というファイルを作成します。これがないと .bashrc が読み込まれない場合があります。
中身は次のように書いてください。

.bash_profile
# generated by Git for Windows
test -f ~/.profile && . ~/.profile
test -f ~/.bashrc && . ~/.bashrc

.bashrc というファイルを作成します。
中身は次のように書いてください。

.bashrc
eval "$(fnm env --use-on-cd --shell=bash)"
# 別ドライブで作業するときパスが通らなくなる問題の解消
export PATH=$PATH:$HOME/.fnm/aliases/default

fnm と node が無事に叩ければOKです。

Discussion