
mise を使用した開発ツールの管理についておさらいしてみた
データ事業本部の大谷(おおや)です。
以前書いた asdf でのランタイム管理から、だいぶ前から mise に移行していたものの、セットアップ方法についてブログにしていませんでした。
今回はセットアップを中心に mise について紹介していきたいと思います。
mise とは
別名 mise-en-place (発音: ミーズ アン プラス)は、フランス語で「準備する」または「所定の場所に置く」という意味があるようです。
調理を始める前に、すべての調理器具と材料を所定の場所に準備しておくべきという考えに基づいており、 mise も mise.toml
ファイルで事前に設定をしておくことで、一貫した操作・設定を行うことができます。
mise は 主に 3 つの機能を持っています。
- 開発ツールの管理: asdf と同様にプログラミング言語のランタイムの管理や、 node や python で作成されたツールの管理を行う
- 環境変数の管理: direnv と同様に、プロジェクトディレクトリ配下の環境変数の管理を行う
- タスクの管理: make と同様に、プロジェクトのビルドやテストなどのタスクの管理を行う
今回は、開発ツールの管理の側面に特化してまとめていきたいと思います。
mise の強み
開発ツールの管理は、 asdf を始めとして、 anyenv など他にも多くのツールで行えます。
その上で、 mise の開発ツールの管理における強みとして、下記のようなものが挙げられます。
コマンドが直感的
基本的には mise use
のみでツールのインストールと使用するバージョンの指定が可能です。
npm や pipx(uvx) など asdf プラグイン以外のバックエンドもサポート
そのツールを作成している言語のパッケージマネージャーから直接ツールをインストールできます。
aqua や ubi といった、プラグインが作成されていないツールに関しても安全にインストールできるバックエンドをサポートしています。
バックエンドやツールの一覧は、 Registry - Dev Tools | mise-en-place でも確認が可能です。
asdf のプラグインほとんどがそのまま利用できる
asdf プラグインのほとんどがそのまま mise でも利用可能です。
パフォーマンス
mise は速度面での最適化が行われていますが、最近 asdf も Go 製の実装が登場しており、両者のパフォーマンス差は以前ほど大きくない可能性があります。
具体的なベンチマークについては、各ツールの公式ドキュメントや最新の比較記事を参照することをお勧めします。
一方で、mise はランタイムの呼び出しを、 shim 経由ではなく PATH 経由で行うことで、オーバーヘッドが発生しない呼び出しが行えます。
Shim と PATH については Shims - Dev Tools | mise-en-place をご確認ください。
セットアップ
前提
- OS: Mac
- Shell: GNU bash v5.2.37(1)-release
- Package Manager: Homebrew v4.4.31
mise のインストール
Homebrew 経由でインストールします。
brew install mise
インストールの確認
正しくインストールできたか下記コマンドで確認します。
問題があれば、必要な対処も表示されるので、まずは実行してみましょう。
mise doctor
自動補完
私の環境では、自動補完スクリプトが自動的にインストールされていたのか、特段追加の設定は要りませんでした。
自動補完が効いていない方は、使用しているシェルによって実行コマンドが変わるので Autocompletion - Installing mise | mise-en-place をご確認ください。
PATH アクティベーションの有効化
下記コマンドを実行して、シェルの初期化ファイルに PATH アクティベーションを行うコマンドを登録します。
echo 'eval "$(mise activate bash)"' >> ~/.bashrc
ツールや言語のグローバルインストール
使用したいツールや言語を探して、下記コマンドでグローバルインストールします
mise use -g {backend}:{tool_name}@{version}
backend
コアツールを除く他のツールをインストールする際に、バックエンドを指定できる項目。
2025年4月18日時点では、下記バックエンドがサポートされています。
- asdf
- aqua
- cargo
- dotnet (experimental)
- gem (experimental)
- go (experimental)
- npm
- pipx
- spm (experimental)
- ubi
- vfox (experimental)
複数のバックエンドをサポートしているツールでこの項目を省略した場合、どうやら下記コマンドで確認できる要素順で優先度が決まるようです。
下記 AWS CLI の例では、aqua がデフォルトのバックエンドになるようです。
mise registry {tool_name}
ex.) AWS CLI
$ mise registry aws
aqua:aws/aws-cli asdf:MetricMike/asdf-awscli
また、独自の優先度を定義したい場合は、下記コマンドで指定したバックエンドを無効化できます。
mise settings disable_backends={backend}
version
バージョン情報も省略可能な情報で、省略した場合は最新 (latest
) のバージョンとして mise には登録されます。
この場合、mise up
などでアップデートを行うと自動的に最新バージョンに更新されるので、バージョンを固定したいツールであれば、固定したいバージョン項目まで指定して use
コマンドを実行することをお勧めします。
私の mise の設定
2025年4月18日時点での私の mise の設定を参考までに記載しておきます。
[settings]
experimental = true
disable_backends = ["asdf", "vfox"]
[settings.pipx]
uvx = true
[tools]
aws = "latest"
terraform = "latest"
github-cli = "latest"
# [Node.js]
node = "latest"
"npm:serverless" = "v3"
"npm:aws-cdk" = "latest"
"npm:cdktf-cli" = "latest"
# [Python]
uv = "latest"
"pipx:cfn-lint" = "latest"
"pipx:git-remote-codecommit" = "latest"
"pipx:snowflake-cli" = "latest"
asdf を使用していた頃は、 Python のプラグインを使用してランタイムを管理していましたが、現在は mise で uv
(バックエンドは aqua)をインストールして、Python ランタイムは各プロジェクト配下でそれぞれ uv
側で指定しています。
また、pipx バックエンドを uvx
で置き換えるように設定をしているので、snowflake-cli
などは uvx
経由でインストールしています。
終わりに
今回は、 mise の開発ツールの管理の側面についてざっくりまとめてみました。
まだ使いこなせていないですが、 mise は 環境変数やタスクの管理といった他の機能もあるので、今後も使いながら勉強していきたいと思います。