0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Windows で mise の Node 自動バージョン切り替えを有効にする手順(PowerShell 7 導入から動作確認まで)

0
Posted at

この記事について

Windows で mise を使って「フォルダを移動するだけで Node.js のバージョンが自動で切り替わる」状態を作るまでの手順を、実際に詰まったポイントも含めてまとめます。

mise use node@18 でバージョンを設定したのに node -v が変わらない、という症状に遭遇した人向けです。結論から言うと、Windows PowerShell 5.1 では mise の自動切り替え(cd 時のフック)が効かず、PowerShell 7 系が必要です。この記事ではその PowerShell 7 の導入から、実際に切り替わるところまでを通しで解説します。

前提の確認

まず自分の PowerShell のバージョンを確認します。

$PSVersionTable.PSVersion

Major5 なら Windows PowerShell 5.1 で、mise の cd 時自動切り替えは効きません。この記事の手順で PowerShell 7 を導入してください。Major7 なら、STEP 2 から進めて構いません。


なぜ PowerShell 7 が必要なのか(背景)

mise use node@18 を実行すると mise.tomlnode = "18" と記録されますが、それを読んで実際に PATH を書き換えるのは「有効化(mise activate)」で仕込むフック関数の仕事です。

この「cd に反応してバージョンを切り替える機能(chpwd フック)」は、mise の実装上 System.Management.Automation.LocationChangedEventArgs などの C# API を使っており、PowerShell 7.2 以上が必要です。Windows に標準搭載の 5.1 では動きません。

そのため、5.1 のままだと「設定は書けているのに node -v が変わらない」という状態になります。

なお PowerShell 7 は 5.1 を上書きしません。実行ファイル名(powershellpwsh)もプロファイルの場所も別で、両者は共存します。5.1 が消えることはないので安心して導入できます。


STEP 1: PowerShell 7 のインストール

⚠️ この操作の副作用
以下のインストールは、Microsoft の配布元から PowerShell 7 のインストーラをネットワーク経由でダウンロードし、システムにインストールします。ローカル設定の変更だけでは完結しません。5.1 はそのまま残り、7 が別途追加されます。

winget を使う方法(おすすめ)

現在の PowerShell 5.1 または cmd で、次を実行します。

winget install --id Microsoft.PowerShell --source winget

winget が使えるかどうかは winget --version で確認できます。使えない場合は Microsoft Store で「PowerShell」を検索してインストールするか、GitHub の公式リリースページ(github.com/PowerShell/PowerShell)から .msi インストーラを取得してください。

インストール後、PowerShell 7 を起動する

7 の実行ファイル名は pwsh です(5.1 は powershell)。起動方法は次のいずれか。

  • スタートメニューで「PowerShell 7」を検索して起動
  • Win + R →「ファイル名を指定して実行」で pwsh と入力
  • 既存のシェルや Windows Terminal から pwsh と入力

起動したら、必ずバージョンを確認します。

$PSVersionTable.PSVersion
Major  Minor  Patch
-----  -----  -----
7      6      3

Major7 になっていれば成功です。以降の手順は、この PowerShell 7(pwsh)のウィンドウで実行してください。 5.1 で実行すると設定が効きません。


STEP 2: 7 のプロファイルに有効化を書く

PowerShell 7 のプロファイル($PROFILE)は 5.1 とは別ファイルです。ここに mise の有効化コマンドを書くことで、pwsh を起動するたびに自動で有効化されるようになります。

プロファイルの場所を確認

$PROFILE
C:\Users\<ユーザー名>\Documents\PowerShell\Microsoft.PowerShell_profile.ps1

7 は PowerShell フォルダ、5.1 は WindowsPowerShell フォルダと、名前が異なります。

プロファイルが存在するか確認

Test-Path $PROFILE

False が返った場合は、まだプロファイルファイルが存在しないので、次で作成します(-Force で親ディレクトリごと作成)。

New-Item -Path $PROFILE -ItemType File -Force

💡 補足:New-ItemNew-CimInstance などと打ち間違えないよう注意。正しいコマンドは New-Item です。

有効化の一行を追記

'(&mise activate pwsh) | Out-String | Invoke-Expression' | Add-Content $PROFILE

⚠️ 副作用:この操作はプロファイルファイルへの書き込みを伴います(ネットワークアクセスはありません)。既存のプロファイルがある場合は末尾に追記されます。心配なら事前に Get-Content $PROFILE で中身を確認してください。

このとき追記される一行の意味は次の通りです。

部分 役割
&mise activate pwsh mise が PowerShell 用の有効化スクリプト(文字列)を出力する
Out-String 複数行の出力を 1 つの文字列に結合する
Invoke-Expression その文字列を PowerShell コードとして実行する(eval 相当)

STEP 3: プロファイルを読み込む

追記しただけでは今のセッションにはまだ反映されていません。pwsh を開き直すか、その場で読み込みます。

. $PROFILE

先頭の「ドット + スペース」を忘れずに。これが「プロファイルを今すぐ実行する」書き方です。


STEP 4: 動作確認

mise use node@18 を設定済みのフォルダに移動して、バージョンを確認します。

cd G:\playground\recoil-app
node -v
v18.20.8

v18.20.8 のように、mise.toml で指定したバージョンが返れば成功です 🎉

cd した瞬間に mise が mise.toml を読み取り、PATH を書き換えて指定バージョンの Node を使わせてくれています。別のフォルダに移動して戻ってくると、フォルダに応じて自動でバージョンが切り替わることも確認できます。


うまくいかないときの切り分け

node -v がまだ以前のバージョン(例:v24.x.x)のままの場合、次の順で確認します。

1. 本当に PowerShell 7 で開いているか

$PSVersionTable.PSVersion   # Major が 7 か

2. node がどの実体を指しているか

Get-Command node | Select-Object -ExpandProperty Source

...\mise\installs\node\... のような mise 配下のパスになっていれば有効化が効いています。C:\Program Files\nodejs\node.exe のようなシステムのパスなら、有効化が効いていません(7 で開き直す、STEP 3 の再読み込みを行う、などを確認)。

3. mise の診断を使う

mise doctor

mise 自身が設定の問題を診断してくれます。

4. 設定自体が正しいかを確認(有効化に依存しない方法)

mise exec -- node -v

これで指定バージョンが返れば「mise.toml の設定は正しい、あとは有効化の経路の問題」と切り分けられます。


まとめ

  • Windows 標準の PowerShell 5.1 では mise の cd 時自動切り替えが効かない。PowerShell 7 系(7.2 以上)が必要。
  • PowerShell 7 は 5.1 と共存する(上書きしない)。導入は winget install --id Microsoft.PowerShell が手軽(ネットワーク・インストールの副作用あり)。
  • 7 の $PROFILE(5.1 とは別ファイル)に (&mise activate pwsh) | Out-String | Invoke-Expression を追記する。
  • . $PROFILE で読み込み、対象フォルダで node -v が指定バージョンになれば成功。

これで、プロジェクトごとに mise use でバージョンを紐づけておけば、フォルダを移動するだけで自動的に正しい Node バージョンが使われる、快適な環境が完成します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?