
写真提供: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
PowerShell プロファイルが既に存在する場合は開きます。存在しない場合は、新しい空のプロファイルファイルが作成されます。
プロファイルの末尾に以下の行を追加します。
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に固定パスのシンボリックリンクを持っており、常にデフォルトのバージョンを指します。デフォルトを変更してもリンクが張り替えられるだけなので、恒久的に追加しても安全です。シェル内では--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 を反映させます。