はじめに
バージョン管理ツール rtx
がリリースされてからざっと 1 年半が経過しました。その間、このツールは度重なるアップデートを重ね、利便性を向上させていきました。また、名称も検索のしづらい rtx
から mise
(mise-en-place) へと変更しました。
こうして変遷を重ねていく中で、私が以前執筆した入門記事の内容もだいぶ古くなってきたと思うので、改めて公式ドキュメントを参考に使い方をまとめてみようと思います(ユーザーが増える中で私の記事も一定数読まれているようです。ありがとうございます)。
mise とは
"The front-end to your dev env"(開発環境のフロントエンド)
もともとこのツールは asdf
の rust
クローンとして開発されたものでしたが、今では
-
asdf
のように(あるいはnvm
やpyenv
のように、どの言語でも)、node
、python
、cmake
、terraform
など数百もの開発ツールを管理する。 -
direnv
のように、様々なプロジェクトディレクトリの環境変数を管理する。 -
make
のように、プロジェクトのビルドやテストに使うタスクを管理する。
と、よりマルチに開発環境を整えることができるようになっています(本稿では以前のようにバージョン管理機能を中心に扱います)。
ちなみに、正式名称は "mise-en-place" で "MEEZ ahn plahs" と発音するそうです。
注意事項
以下の説明は私の環境における現時点での最新版(2024.9.1 linux-x64)での説明になります。ご了承ください。
$ mise --version
2024.9.1 linux-x64 (2024-09-10)
導入方法
公式ドキュメントにある導入方法をまとめていきたいと思います。
mise CLI のインストール
スタンドアローン
パッケージマネージャを使わない場合はこちらの方法を用います。
$ curl https://mise.run | sh
$ ~/.local/bin/mise --version
mise 2024.x.x
"~/.local/bin" が PATH にある必要はありません。mise
は自動的に自身のディレクトリを PATH に追加します。
シェルスクリプトを使いたくない場合は以下のコマンドを実行します。
curl https://mise.jdx.dev/mise-latest-macos-arm64 > ~/.local/bin/mise
chmod +x ~/.local/bin/mise
置き場所はどこでもいいので、適宜 ~/bin
, /usr/local/bin
, ~/.local/bin
などと読み替えてください。また、ダウンロード先の URL も os やアーキテクチャに応じて適宜読み替えてください。対応している os・アーキテクチャは以下のとおりです。
macos-x64
macos-arm64
linux-x64
linux-x64-musl
linux-arm64
linux-arm64-musl
linux-armv6
linux-armv6-musl
linux-armv7
linux-armv7-musl
それ以外が必要な場合は cargo install mise
でコンパイルしてください(後述)。
apk
Alpine Linux でのインストール
apk add mise
mise はコミュニティレポジトリに登録されています。
apt
Ubuntu/Debian でのインストール
# amd64
apt update -y && apt install -y gpg sudo wget curl
sudo install -dm 755 /etc/apt/keyrings
wget -qO - https://mise.jdx.dev/gpg-key.pub | gpg --dearmor | sudo tee /etc/apt/keyrings/mise-archive-keyring.gpg 1> /dev/null
echo "deb [signed-by=/etc/apt/keyrings/mise-archive-keyring.gpg arch=amd64] https://mise.jdx.dev/deb stable main" | sudo tee /etc/apt/sources.list.d/mise.list
sudo apt update
sudo apt install -y mise
# arm64
apt update -y && apt install -y gpg sudo wget curl
sudo install -dm 755 /etc/apt/keyrings
wget -qO - https://mise.jdx.dev/gpg-key.pub | gpg --dearmor | sudo tee /etc/apt/keyrings/mise-archive-keyring.gpg 1> /dev/null
echo "deb [signed-by=/etc/apt/keyrings/mise-archive-keyring.gpg arch=arm64] https://mise.jdx.dev/deb stable main" | sudo tee /etc/apt/sources.list.d/mise.list
sudo apt update
sudo apt install -y mise
aur
Arch Linux でのインストール
git clone https://aur.archlinux.org/mise.git
cd mise
makepkg -si
AUR ヘルパーを使ったインストールも可能です。
Cargo
Cargo によるソースコードからのビルド
cargo install mise
cargo-binstal による高速化
cargo install cargo-binstall
cargo binstall mise
main における最新のコミットからのビルド
cargo install mise --git https://github.com/jdx/mise --branch main
dnf
Fedora、CentOS、Amazon Linux、RHEL、その他 dnf ベースのディストリビューションでのインストール
dnf install -y dnf-plugins-core
dnf config-manager --add-repo https://mise.jdx.dev/rpm/mise.repo
dnf install -y mise
Docker
docker run jdxcode/mise x node@20 -- node -v
Homebrew
brew install mise
npm
mise は npm においてコンパイル済みバイナリとして利用可能です。これは単に npm によって配布されているだけであり Node.js パッケージではありません。これは、package.json
や npx
を使って mise をセットアップしたい JS プロジェクトにおいて有用です。
npm install -g @jdxcode/mise
フルインストールすることなく単一のコマンドを試したい場合は npx
を用いてください。
npx @jdxcode/mise exec python@3.11 -- python some_script.py
GitHub Releases
GitHub からの最新バージョンのダウンロード
curl https://github.com/jdx/mise/releases/download/v2024.1.0/mise-v2024.1.0-linux-x64 > /usr/local/bin/mise
chmod +x /usr/local/bin/mise
MacPorts
sudo port install mise
nix
Nix パッケージマネージャーの 23.05 リリース以降
nix-env -iA mise
直接 mise-flake.packages.${system}.mise
を用いることによりパッケージをインポートすることもできます。これはすべてのデフォルト Nix システムをサポートします。
yum
yum install -y yum-utils
yum-config-manager --add-repo https://mise.jdx.dev/rpm/mise.repo
yum install -y mise
Windows
最新のリリースを GitHub からダウンロードし、バイナリを PATH に追加し、PATH が shims ディレクトリを含むよう編集します(デフォルトでは %USERPROFILE%\.local\share\mise\shims
)。
Windows のサポートは現在のところ非常に限定的であることに留意してください。
mise を使用可能にする
以下のいずれかの方法を用います
方法その 1:mise activate を用いる
mise activate
を rc ファイルに書き込み、アクティベートします。シェルに応じて以下のコマンドを実行します。実行後はシェルを再起動してください。
echo 'eval "$(~/.local/bin/mise activate bash)"' >> ~/.bashrc
echo 'eval "$(~/.local/bin/mise activate zsh)"' >> ~/.zshrc
echo '~/.local/bin/mise activate fish | source' >> ~/.config/fish/config.fish
方法その 2:shims を PATH に追加する
以下の方法を用いることで mise をアクティベートせずに利用することができます。書き込む先として .bashrc/.zshrc を .bash_profile/.zprofile の代わりに用いることも可能です。
echo 'export PATH="$HOME/.local/share/mise/shims:$PATH"' >> ~/.bash_profile
echo 'export PATH="$HOME/.local/share/mise/shims:$PATH"' >> ~/.zprofile
fish_add_path ~/.local/share/mise/shims
基本的な使い方
バージョンの確認
まず、無事にインストールできたかの検証もかねて試しにバージョンを確認してみます。
$ mise --version
2024.9.1 linux-x64 (2024-09-10)
このような表示が出れば成功です。
実際に開発ツールをインストールしてみる
実際に開発ツールをインストールします。ここでは前回同様 Python を例にします。
プラグイン一覧の表示
インストール可能なプラグインを確認します。
$ mise plugins ls-remote
1password-cli
aapt2
act
...
zola
zoxide
zprint
なお、mise plugins install name_of_plugin
によってプラグインを単独でインストールできますが、他のコマンド実行時に必要であれば自動でインストールされますのであまり気にしなくても大丈夫です。また、コミュニティ開発プラグインをインストールする際は確認画面が出ますのでその際は Yes を選択してください。
インストール可能なバージョンの表示
インストール可能なバージョンを確認します。
$ mise ls-remote python
activepython-2.7.14
activepython-3.5.4
activepython-3.6.0
...
3.13t-dev
3.14-dev
3.14t-dev
特定の Python のインストール
特定のバージョンの Python をインストールします。
mise install python@3.12.6 # 特定のバージョンをインストールする場合
mise install python@3.12 # プレフィックスに一致するバージョンをインストールする場合
mise install python@latest # 最新のバージョンをインストールする場合
使用するバージョンの設定
特定のバージョンをグローバルに適用する場合、以下のコマンドを実行します。
mise use -g python@3.12
また、現在のディレクトリにのみ適用する場合、以下のコマンドを実行します。
mise use python@3.12
なお、これらのコマンドはまだインストールしていないバージョンに対して実行した場合も実行されるため、インストールしたバージョンをすぐにグローバルあるいはローカルに適用したい場合、mise install
の実行は不要です。
インストールしたバージョンの一覧は以下のコマンドで確認できます。
$ mise ls
Tool Version Config Source Requested
python 3.11.9 /path/to/working/directory/.mise.toml 3.11
python 3.12.6 ~/.config/mise/config.toml latest
Config Source で示されているファイルにコマンドで指定した内容が書き込まれています。ファイル形式は mise use
で指定した場合 toml
形式です。こちらのファイルを直接編集したり、削除したりすることで設定を変更することも可能です。その場合、mise install
の実行によって不足したバージョンをインストールすることもできます。
asdf のように mise local
mise global
によってバージョンの指定をすることも可能ですが、その場合生成される設定ファイルが .tool-versions
になり、プレーンテキスト形式となるためあまりおすすめしません(公式で非推奨となっています)。
バージョン・プラグインの削除
バージョンの削除をしたい場合、以下のコマンドを実行します。
rtx uninstall python@3.12
プラグインの削除をしたい場合、以下のコマンドを実行します。
rtx plugins uninstall name_of_plugin
bun、deno、erlang、go、java、node、python、ruby、zig に関してはプラグインが組み込まれているため、明示的にに上書きしない限りはプラグインのインストールがされることはありません。同様に、アンインストールもできません。
コマンド一覧
最後に mise --help
と入力して mise のコマンドを概観してみようと思います。
$ mise --help
mise is a tool for managing runtime versions. https://github.com/jdx/mise
It's a replacement for tools like nvm, nodenv, rbenv, rvm, chruby, pyenv, etc.
that works for any language. It's also great for managing linters/tools like
jq and shellcheck.
It is inspired by asdf and uses asdf's plugin ecosystem under the hood:
https://asdf-vm.com/
Usage: mise [OPTIONS] <COMMAND>
Commands:
activate Initializes mise in the current shell session
alias Manage aliases [aliases: a]
backends Manage backends [aliases: b]
bin-paths List all the active runtime bin paths
cache Manage the mise cache
completion Generate shell completions
config [experimental] Manage config files [aliases: cfg]
current Shows current active and installed runtime versions
deactivate Disable mise for current shell session
direnv Output direnv function to use mise inside direnv
doctor Check mise installation for possible problems [aliases: dr]
env Exports env vars to activate mise a single time [aliases: e]
exec Execute a command with tool(s) set [aliases: x]
generate [experimental] Generate files for various tools/services [aliases: gen]
implode Removes mise CLI and all related data
install Install a tool version [aliases: i]
latest Gets the latest available version for a plugin
link Symlinks a tool version into mise [aliases: ln]
ls List installed and active tool versions [aliases: list]
ls-remote List runtime versions available for install
outdated Shows outdated tool versions
plugins Manage plugins [aliases: p]
prune Delete unused versions of tools
registry [experimental] List available tools
reshim rebuilds the shim farm
run [experimental] Run a tasks [aliases: r]
self-update Updates mise itself
set Manage environment variables
settings Manage settings
shell Sets a tool version for the current session [aliases: sh]
sync Add tool versions from external tools to mise
tasks [experimental] Manage tasks [aliases: t]
trust Marks a config file as trusted
uninstall Removes runtime versions [aliases: remove, rm]
unset Remove environment variable(s) from the config file
upgrade Upgrades outdated tool versions [aliases: up]
usage Generate a usage CLI spec
use Install tool version and add it to config [aliases: u]
version Show mise version
watch [experimental] Run a tasks watching for changes [aliases: w]
where Display the installation path for a runtime
which Shows the path that a bin name points to
help Print this message or the help of the given subcommand(s)
Options:
-C, --cd <DIR>
Change directory before running command
-P, --profile <PROFILE>
Set the profile (environment)
-q, --quiet
Suppress non-error messages
-v, --verbose...
Show extra output (use -vv for even more)
-y, --yes
Answer yes to all confirmation prompts
-h, --help
Print help (see a summary with '-h')
-V, --version
Print version
Examples:
$ mise install node@20.0.0 Install a specific node version
$ mise install node@20 Install a version matching a prefix
$ mise install node Install the node version defined in config
$ mise install Install all plugins/tools defined in config
$ mise install cargo:ripgrep Install something via cargo
$ mise install npm:prettier Install something via npm
$ mise use node@20 Use node-20.x in current project
$ mise use -g node@20 Use node-20.x as default
$ mise use node@latest Use latest node in current directory
$ mise use -g node@system Use system node everywhere unless overridden
$ mise up --interactive Show a menu to upgrade tools
$ mise x -- npm install `npm install` w/ config loaded into PATH
$ mise x node@20 -- node app.js `node app.js` w/ config + node-20.x on PATH
$ mise set NODE_ENV=production Set NODE_ENV=production in config
$ mise run build Run `build` tasks
$ mise watch build Run `build` tasks repeatedly when files change
$ mise settings Show settings in use
$ mise settings set color 0 Disable color by modifying global config file
いくつかめぼしいコマンドだけピックアップしておきます。
mise alias # エイリアスを管理する
mise doctor # mise の問題点を確認する
mise self-update # mise をアップデートする
mise upgrade # 古くなったツールのバージョンを上げる
ちょっとした小技
usage を入れておく
mise を利用する際にシェル補完機能に関するエラーが出ることがあります。これを回避するために mise の作者様が作った usage と呼ばれるツールを入れておきます。
mise use -g usage
試験的機能を有効化する
上記のコマンド一覧の内、[experimental] 表示のされているものは試験的機能のため初期状態では無効化されています。以下のコマンドで有効化できます。
mise settings set experimental true
asdf 以外のバックエンドも使える(試験的機能)
コマンド一覧の Examples を見ると cargo や npm などのバックエンドも使えるようです。実際に走らせてみると以下のようになります。
$ mise install npm:prettier
$ mise ls
Tool Version Config Source Requested
...
npm:prettier 3.3.3
...
公式サイトの該当ページを見ると、現在対応しているバックエンドには Cargo
、Go
、npm
、pipx
、SPM
、Ubi
、Vfox
があるようです。将来的には brew
や nix
などにも対応したいとのことです。
試しに pipx
を用いて xonsh
を入れてみます。
mise use -g pipx # ここではコミュニティプラグインを用いてインストールしましたが、もちろん他の方法で pipx を導入しても構いません。
mise use -g pipx:xonsh
出力は省略しますが、これで実際に動作しました。
追記:pipx
の代わりに uvx
をバックエンドとして利用することもできるようです。最近 uv
を使い始めたので個人的にはこっちを使っていきたいところ。以下のコマンドで導入できます。この場合 pipx
はアンインストールしてしまっても構いません。
mise use -g uv # uv 導入済みの場合は不要
mise settings set pipx_uvx true
おわりに
もともと私が rtx の解説記事を書き始めたのはまだ新しいツールだったため解説記事もロクになく、自分で公式ドキュメントに当たりながら試行錯誤する必要があったため、だったらその備忘録を記事に起こして公開してしまえという気持ちからでした。あれから rtx 改め mise のユーザーも増え、解説記事も調べればいくらでも出てくる状況になりました。そんな中で私が今更追加で記事を書く必要があるのかなとも思いましたが、いつまでも rtx asdf
で検索したときにそれなりに上に上がってくるような記事が古いままでは個人的に収まりが悪かったので重い腰を上げてこの記事を書くことにしました。とはいえバージョン管理機能以外のところに関してはほとんど手つかずなので、そのあたりも今後は触ってみようかなと思います。この記事が今後新規に mise を使い始める方の助けになれば幸いです。
参考文献
- skyblue-jpn. 2023. “初心者の初心者による初心者のためのバージョン管理ツール Rtx 入門.” Qiita. Qiita. February 16, 2023. https://qiita.com/skyblue-jpn/items/44f762252ff80f9e4fc1.
- Dickey, Jeff. 2024. “Home | Mise-En-Place.” Jdx.dev. 2024. https://mise.jdx.dev/.
- jdx. 2024. “Jdx/Mise: Dev Tools, Env Vars, Task Runner.” GitHub. September 10, 2024. https://github.com/jdx/mise.
- Dickey, Jeff. 2024. “Usage.” Jdx.dev. 2024. https://usage.jdx.dev/.