Michael Charles Aubrey

https://MichaelCharl.es/Aubrey

WindowsでPowerShell、Git Bash、コマンドプロンプト用にfnmをインストールする方法

写真提供:Bill Jelen | Unsplash

WindowsでPowerShell、Git Bash、コマンドプロンプト用にfnmをインストールする方法

Michael Charles Aubrey // Thu Jan 23 2025

fnm(Fast Node Manager)を使用すると、複数の Node.js バージョンを簡単に管理できます。インストール自体は簡単ですが、Windows の各シェルで設定するには追加の手順が必要です。

fnm はwingetchocolateyからインストールできます:

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.」というエラーが表示されます。

「node」という用語は、コマンドレット、関数、スクリプトファイル、または実行可能プログラムの名前として認識されません。

これは、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で確認してください。