Windows

【Win11】俺的mise環境ベストプラクティス(Python)

注意:
・これはWSL2を使わずネイティブのPowerShellにmiseで環境構築する方法で
・Python利用者を想定しています

この記事でやること
  • 素のWindows11にmiseをインストールする(≒WSL2)
  • ターミナル(PowerShell)でmiseを使うベストプラクティス
  • VS Codeのターミナルと実行でmiseを使うベストプラクティス
    (環境をなるべく汚さないベストプラクティス)

Windows環境での開発/検証が必要になり、環境構築に流行りのmiseを取り入れようと思ったのですが、素のWindows PCでmiseを使う方法があまり見つからなかったので、ここで整理しておきたいと思います。
(WSL2を使う記事ばかり&AIもWSL2使用を推奨してくるし、公式ドキュメントの設定はwin11で動かない…)

素のWindows11にmiseをインストールする

これは公式ドキュメントに記載されている通りで、PowerShellで以下のコマンドを実行するだけです。

winget install jdx.mise

※デフォルトだとC:\Users\<ユーザ名>\AppData\Local\Microsoft\WinGet\Packages\にインストールされます。
※そのため、*通常は*管理者として実行する必要はありません。

Win11のターミナル(PowerShell)でmiseを使う

PowerShellでmiseを使う方法は大きく以下の2パターンかと思います。

  • ①ちょっとスクリプトを試すために単発で実行する
  • ②プロジェクトフォルダで環境を分けて使用する

は簡単で、mise execコマンドを使用するだけです。

# コマンド例
# Python 3.14を使用する場合
mise exec python@3.14 -- python <実行したいスクリプトorコマンド>

# Nodeの最新を使用する場合
mise exec node@latest -- node <実行したいスクリプトorコマンド>

単発でスクリプトやコマンドを試したい場合は便利ですが、以下の問題があります。
・毎回mise execと打つのが手間
・ライブラリをインストールすると、miseのグローバル空間にインストールされてしまう

これを解消するためにでは、mise.tomlというファイルをプロジェクトフォルダ直下に作成します。
このファイルにバージョンや仮想環境(venv)を以下のように設定します。

# インストールするバージョンを指定するセクション
[tools]
python = "3.14"
uv = "latest"

# 環境変数を指定するセクション
[env]
# venvを使う設定。.venvがなければ勝手に作る。
_.python.venv = { path = ".venv", create = true }

# 独自の環境変数がある人は適宜追加する
TEST_ENV = "abc123"

※[tools]セクションにuvを記載しておくと、自動的にuvが使用されます。素のvenvで構築したい場合は、uv = "latest"の行をコメントアウトしてください。

あとは、ターミナル(PowerShell)をプロジェクトフォルダで開いて以下のコマンドを実行するだけです。

# mise.tomlの設定をアクティベート
(&mise activate pwsh) | Out-String | Invoke-Expression
# pythonコマンドが仮想環境のpythonを使用していることを確認
# (Sourceに.venvのPython.exeが指定されていればOK)
gcm python

これでこのセッション内では仮想環境のPythonが適用されますので、python xxのコマンドのままで、設定したバージョンのPythonを使用することができます。

また、ライブラリをインストールしても仮想環境にインストールされるため、環境を汚す心配もありません。

uvを使用している場合

uvの話になるので詳細は割愛しますが、uv initやuv syncは実行されないので、miseのアクティベートを実行した後に、以下のコマンドも適宜実行してください。

# 新規プロジェクトフォルダの場合
uv init

# 既存のuvプロジェクトをclone等した場合
uv sync

VS Codeのターミナルでmiseを使う

上で説明した②プロジェクトフォルダで環境を分けて使用すると同じで、まずはプロジェクトフォルダ直下にmise.tomlファイルを作成します。
(内容は上に記載したmise.tomlの例と同じなので省略)

VS Codeのターミナルでmiseを使用する場合は、以下3つを設定しておくと便利です。

  1. mise用のターミナル設定を用意する
    (ターミナルを開いたら自動的にmiseがアクティベートされるようにしておく)
  2. 既定のターミナル設定をmise用のターミナル設定に変更する
  3. 自動でPython環境をアクティブ化する設定をOFFにする
    ONがVS Codeデフォルトの動作だが、miseのactivateと二重で実行されて干渉してしまうため)

これらを設定しておくことで、VS Codeでターミナルを開くと自動でmiseの設定が反映された状態となるため後々の作業がとても楽です。

設定は以下をVS Codeのsettings.jsonに記載するだけです。

{
    "terminal.integrated.profiles.windows": {
        "PowerShell with mise": {
            "source": "PowerShell",
            "args": ["-NoExit", "-Command", "mise activate pwsh | Out-String | Invoke-Expression"]
        },
    },
    "terminal.integrated.defaultProfile.windows": "PowerShell with mise",
    "python.terminal.activateEnvironment": false
}

※settings.jsonは設定を開いてEdit as JSONをクリックすると直接編集できます。
※設定にはユーザーとワークスペースがありますが、私はワークスペースに設定しています。(mise使わないフォルダもよく開くので)
※VS Code の右下のPythonバージョンが仮想環境のものになっていない場合は、手動で選択してください(最初の1回のみでOK)

エラーが出る場合

ターミナル起動時に「スクリプトの実行が無効」というエラーが出る場合

もしターミナル起動時に「スクリプトの実行が無効」というエラーが出る場合は、VS Code の args"-ExecutionPolicy", "Bypass" を追加するか、PowerShell で Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned を実行してください。

参考

  • https://mise.jdx.dev/
  • https://mise.jdx.dev/mise-cookbook/python.html
    ※公式ドキュメントには、python.uv_venv_autoというsettingsも存在しますが、Windows 11/PowerShellでは機能しなかった(2026年3月時点)。この記事ではvenvの記載を使用(Ubuntuでは動いた)。将来的にWindowsでも動けば本文も修正します。

コメント

タイトルとURLをコピーしました