
写真提供:Bill Jelen | Unsplash
WindowsでPowerShell、Git Bash、コマンドプロンプト用にfnmをインストールする方法
fnm(Fast Node Manager)を使えば、複数の Node.js バージョンを手軽に管理できます。インストール自体は簡単ですが、Windows の各シェルで使えるようにするには追加の設定が必要です。
fnm はwingetかchocolateyからインストールできます。
winget install Schniz.fnm
# または
choco install fnm
続いて、使いたい Node のバージョンを入れます。ここでは例として 22 にします。
fnm install 22
この状態で新しいシェルを開いてnode --versionを実行すると、「The term 'node' is not recognized as the name of a cmdlet, function, script file, or operable program.」というエラーが表示されます。

これは、fnm が Node のバージョンを切り替える際に PATH を動的に変更する必要があるためです。Windows の環境変数で静的な PATH を設定するだけでは不十分です。
解決策は、各シェルセッションの開始時にfnm env --use-on-cdを実行することです。
PowerShell
PowerShell を管理者として開きます。Start ボタンを右クリックして「Windows PowerShell (Admin)」を選択してください。
まだ設定していない場合は、スクリプトの実行を有効にします。
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
PowerShell プロファイルを作成または編集します。
notepad $PROFILE
プロファイルが既にあればそれが開きます。なければ、空のファイルが新しく作られます。
プロファイルの末尾に以下の行を追加します。
fnm env --use-on-cd --shell powershell | Out-String | Invoke-Expression
ファイルを保存して閉じます。プロファイルは新しい PowerShell セッションを開始するたびに自動的に再読み込みされるため、変更を反映するには PowerShell を一度閉じて開き直す必要があります。
node --versionを実行して動作を確認できます。私の場合、現在のバージョン「v22.13.1」が表示されます。
Git Bash
以下の設定は Git Bash で行う必要があるため、新しい Git Bash セッションを開始してください。
.bashrcを作成または編集します。先にtouchを実行するのは、ファイルがないと Notepad が勝手に.bashrc.txtという名前で作ってしまうからです。すでに~/.bashrcがあれば、touchは何もしません。
touch ~/.bashrc
notepad ~/.bashrc
.bashrcファイルの末尾に以下の行を追加します。
eval "$(fnm env --use-on-cd --shell bash)"
PowerShell と同様に、変更を反映するには Git Bash を一度閉じて開き直す必要があります。新しい Git Bash セッションを開始し、node --versionで確認してください。
コマンドプロンプト
コマンドプロンプトには他のシェルのようなプロファイルスクリプトがありません。代わりにレジストリを使って、同じような動きを再現します。
設定するのはコマンドプロンプトですが、作業自体は PowerShell で行います。新しい PowerShell セッションを開始してください。
まず、ユーザーディレクトリにprofile.cmdを作成します。以下のスクリプトでは、「XXX」を Windows のユーザー名に置き換えてください。
$profileContent = @"
@echo off
if not defined FNM_AUTORUN_GUARD (
set "FNM_AUTORUN_GUARD=AutorunGuard"
FOR /f "tokens=*" %%z IN ('fnm env --use-on-cd') DO CALL %%z
)
"@
Set-Content -Path "C:\Users\XXX\profile.cmd" -Value $profileContent
次に、以下のコマンドを実行してAutoRunレジストリキーを設定します。ここでも「XXX」を Windows のユーザー名に置き換えてください。
Set-ItemProperty -Path "HKLM:\Software\Microsoft\Command Processor" -Name "AutoRun" -Value "C:\Users\XXX\profile.cmd"
新しいコマンドプロンプトを開始し、node --versionで確認してください。
シェルから起動しないアプリ向けのグローバルなフォールバック
ここまでの設定は、シェルを起動するプロセスにのみ適用されます。Explorer から起動するアプリ(スタートメニュー、デスクトップのアイコン、タスクバー。たとえばcode .ではなく Explorer から開いた VS Code など)はこれらのプロファイルを実行しないため、fnm が設定する PATH を受け取れません。そうしたアプリがnodeを使おうとしても、見つけられません。
これは、fnm のデフォルトバージョンをグローバルな PATH に載せれば解決できます。fnm は%APPDATA%\fnm\aliases\defaultに固定パスのシンボリックリンクを持っており、常にデフォルトのバージョンを指します。デフォルトを変更してもリンクの先が切り替わるだけなので、PATH にずっと入れたままでも問題ありません。シェル内では--use-on-cdによるディレクトリ単位のバージョンが優先されるため、これはあくまでフォールバックです。
まず、デフォルトのバージョンを設定します(先ほどの 22 を使います)。
fnm default 22
エイリアスの下にnode.exeがあるか確認します。FNM_DIRを変えている場合は、fnm envで表示されるパスに読み替えてください。
Get-ChildItem "$env:APPDATA\fnm\aliases\default" -Filter node.exe
このディレクトリをユーザーの PATH に追加します。二回実行すると同じパスが重複して入るので、一度だけ実行してください。
[Environment]::SetEnvironmentVariable("Path", [Environment]::GetEnvironmentVariable("Path","User") + ";$env:APPDATA\fnm\aliases\default", "User")
最後に、サインインし直して Explorer に新しい PATH を反映させます。