up:: py
up:: Rust
up:: js

読み方はmeez
pyenvのようなランタイムバージョン管理は他の言語にもあるのだが、それらをまとめて管理するもの。
また、ディレクトリごとの環境変数も管理できる。他にも必要ツールのインストールとか、タスクランナーとか全部これで出来る。

ちなみにrust製。

シンプル解説。
asdf, direnvをやめてmiseに移行する

導入。windowsならgithubから入れろとあるが、cargoで入れられるのでそっちの方が早いかも。ビルドからになるが。
最近scoopに対応しはじめた。
mise ではじめる開発環境構築

そこまで一気にやるならdockerでいいじゃんというのはあるが、docker外で管理したいものを管理するときに使える。

今のところ(2024/10/28)windowsのサポートは最小限。

ディレクトリごと環境変数を使わず言語の管理ツールまとめとして使うくらいなら、言語ごとの最適な管理ツールを使ったほうが早い気がする。なので普段使ってない。
Windowsからだとcargoかnpmが一番早いが、結局Rustかnodejsを入れることになり、それらはScoopで入れると考えると、scoop rust cargo mise uv python みたいな大分長いチェーンが予想される。面倒。

  • scoopがサポートされ始めたので、ここは克服され使い始めた

powershellやgitなど、いくつかの開発ツールも管理可能。
でもツールまとめならScoopとかwingetとかあるし……開発ツールだけmiseに分けたいかと言われると。

  • 厳格なバージョン管理が強み
    • そのせいで若干問題が出る

外部ツールはasdfのものが使えるから何でもできるのだが、miseはそもそもそういうプラグインに厳格らしい。
あとURL指定より必要になった時に自動で用意するLazy Install方式が推奨。
そうでなければaqua使えというのが今(2024/12/06)のスタンス。
mise-plugins · GitHub

aqua

なんかaqua使用、miseから直接いけるっぽい。
ならええか。

Aqua Backend | mise-en-place

結局厳格なバージョン管理が必要な時にしか必要じゃない。
今はjavaくらいにしか使ってない。pythonは仮想環境がほぼ必須な関係上uvでだいたい何とかなる。

plugins

開発に使えるものをpluginsとしてインストールできる。
cmakeとか。goなどのバージョン管理もpluginsとして扱う。

pluginsはインストール用とバージョン確認用のシェルスクリプトがセットになったもの。
ツールそのものではない。

どういうpluginsがあるかはmise plugins ls-remote
既に手元にあるpluginsの確認はmise ls
バージョン確認はmise ls-remote プラグイン名
インストールはmise install プラグイン名。バージョン指定はプラグイン名@バージョン。指定が無いと直下のmise.tomlが優先される。

その他、標準でリストに無いpluginsはmise registryで確認。
ここにも載っていないpluginsとしてasdfのpluginsも使える。

use

toolをインストールしconfig.tomlに書き込む。
-gを指定するとグローバルにインストール可能。~.config\mise\config.tomlmise config lsでパス確認。

toolの検索はmise registry
toolバージョン検索はmise ls-remote
インストールしたtoolはmise ls
gツールの実体は~\AppData\Local\mise\installs。各パスはmise bin-pathsで確認。

実体の位置を変更したい場合は環境変数MISE_DATA_DIRを変更。
反映には再起動するのが早そう。

Configuration | mise-en-place

rustは is not compatible with the version of Windowsというのが出たのでちょっと待つ。

uninstallするとconfig.tomlに残ってたりしがち。
pruneで消せる?

アンストはmise use --remove tool名でコンフィグファイルから消してからmise uninstall tool名。uninstallだけだとmiseの次回起動時に一気に再インストールされてしまう。
また、removeは複数tool指定が出来ない? 一個一個やらないと認識されなかった。

いろんなバックエンドからインストール用の設定ファイルを読んでいる。
一覧を見たいならmise backend ls

install

ツールをインストールし~/.local/share/mise/installs/<PLUGIN>/<VERSION>に入れる。
PATHを追加しないためそのままでは使えない。あとmise.tomlに書き込まない。そうしたいならuseを使う。
miseは同じ起動コマンドの別バージョンをインストールすることもあり、useだとインストールした別バージョンを起動コマンドに接続するまでやってしまう。
そういうときのコマンドだろうか。わからん。

exec

ツールをコンフィグファイルに書き込むことなく実行する。
別アプリから呼べないときなど、mise exec -- アプリ名でよく応急処置する。

環境変数に出ない

reshimでshimを作り、手動で登録。上手くいかないならもう一回reshim
たいていは上手くいくが別のアプリから呼び出そうとするとよくエラーになる。