miseでツールのバージョン管理をすることを何度でも推したい(2026年版)
データ事業本部の大谷(おおや)です。
以前、下記記事を書きましたが、あれからもmiseを使い続け、気がつけばロックファイルやdepsといったイチオシ機能も増えてきたので、改めてまとめてみました。
miseをまだ使ったことがない方はもちろん、使っているけど基本的な機能しか使えていないという方にも読んでいただければと思います。
miseとは
miseは、複数の開発ツールのバージョンを一元管理できるツールです。
Node.js、Python、Terraformなど、プロジェクトやディレクトリごとに異なるバージョンを自動で切り替えてくれます。
pyenv、nodenv、tfenvのような言語・ツールごとのバージョンマネージャーをまとめて1つで管理できるイメージです。
前提
インストール・初期セットアップ手順は冒頭の記事をご参照ください。
本記事では「インストール済みの方」を対象に、バックエンド・lockファイル・depsといった機能を中心に紹介していきます。
バックエンドとレジストリの話
miseの大きな強みの一つが、複数のバックエンドに対応していることです。
バックエンドとは、ツールをどのパッケージエコシステムからインストールするかを決める仕組みです。
主なバックエンドは以下の通りです。
| バックエンド | 説明 |
|---|---|
aqua |
miseが最も推奨するバックエンド。プラグイン不要でセキュア |
github / gitlab |
GitHubリリースからバイナリを直接インストール |
npm |
Node.jsのnpm/bunでグローバルツールをインストール |
pipx |
Pythonツールをuvx/pipx経由でインストール |
cargo |
Rustのcargoでビルドしてインストール |
go |
Goのツールをビルドしてインストール |
http |
任意のURLからバイナリをダウンロード |
ubi |
GitHub ReleasesからUniversal Binary Installerでインストール |
レジストリは、ツール名とバックエンドを紐付けるエイリアスのリストです。
たとえば mise use terraform と書くと、miseがレジストリを参照して aqua:hashicorp/terraform のように解決してくれます。
フルのバックエンド名を覚えなくても使えるので便利です。
レジストリにないツールは、バックエンドとツール名を明示して指定します。
mise use npm:@nulab/bee@latest
mise use pipx:snowflake-cli@latest
また、バックエンドの優先順位は設定で変更でき、不要なバックエンドを無効化することもできます。
[settings]
disable_backends = ["asdf", "vfox"]
設定ファイルの書き方
miseの設定は mise.toml(プロジェクトローカル)または ~/.config/mise/config.toml(グローバル)に書きます。
グローバル設定(自分がよく使うツール)
[settings]
install_before = "14d"
experimental = true
disable_backends = ["asdf", "vfox"]
npm.package_manager = "bun"
pipx.uvx = true
[tools]
# バイナリ(主にaqua経由)
aws = { version = "latest", symlink_bins = "true" }
terraform = "latest"
fnox = "latest"
claude = "latest"
github-cli = "latest"
# JS系
bun = "latest"
biome = "latest"
"npm:@nulab/bee" = "latest"
# Python系
uv = "latest"
ruff = "latest"
tombi = "latest"
"pipx:git-remote-codecommit" = "latest"
"pipx:pproxy" = "latest"
"pipx:snowflake-cli" = { version = "latest", uvx_args = "--python 3.13" }
# HTTP経由
"http:dbt-fusion" = { version = "2.0.0-preview.174", url = "https://public.cdn.getdbt.com/fs/cli/fs-v{{ version }}-aarch64-apple-darwin.tar.gz", version_list_url = "https://public.cdn.getdbt.com/fs/versions.json", version_json_path = ".latest.tag" }
いくつかポイントを補足します。
npm.package_manager = "bun"- npmバックエンドのツールインストールにbunが使われます
pipx.uvx = true- pipxバックエンドのインストールにuvxが使われます
symlink_bins = "true"- バイナリをシンボリックリンクで公開するオプションです
httpバックエンド- URLテンプレートを使って任意のURLからインストールできます
- レジストリに登録されていないツールや、独自ビルドのバイナリを管理したい場合に便利です
プロジェクトローカルの設定例
min_version = "2026.4.18"
[settings]
experimental = true
lockfile = true
install_before = "14d"
python.uv_venv_auto = "create|source"
[tools]
terraform = "latest"
uv = "latest"
[deps]
uv.auto = true
[env]
AWS_PROFILE = { required = true }
SNOWFLAKE_ACCOUNT = { required = true, redact = true }
よく使うコマンド
ツールをインストールして使う
# プロジェクトの mise.toml に記録しながらインストール
mise use node@22
# グローバル設定に記録しながらインストール
mise use -g terraform@latest
# mise.toml に書かれたツールを一括インストール
mise install
mise use は「インストール + 設定ファイルへの記録」を一度に行います。
mise install は設定ファイルに書かれたツールを実際にインストールするコマンドです。
インストール済みツールを確認する
❯ mise ls --local
Tool Version Source Requested
terraform 1.14.9 ~/prj1/.mise/config.toml latest
uv 0.11.7 ~/prj1/.mise/config.toml latest
...
ツールをアップグレードする
# 全ツールをアップグレード
mise upgrade
# 特定のツールだけアップグレード
mise upgrade terraform
一時的に別バージョンで実行する
mise exec node@20 -- node --version
lockファイルの話
mise のロックファイル機能を使うと、mise.toml では latest のようなゆるい指定をしつつ、実際にインストールされるバージョンをロックファイルで固定できます。
チームで同じツールバージョンを使いたいときに便利な機能です。
有効化するには設定ファイルに lockfile = true を追加します。
[settings]
lockfile = true
mise lock
→ Targeting 7 platform(s) for ~/prj1/.mise/mise.lock: linux-arm64, linux-arm64-musl, linux-x64, linux-x64-musl, macos-arm64, macos-x64, windows-x64
→ Processing 2 tool(s): terraform@1.14.9, uv@0.11.7
mise downloading artifact for lock-time provenance verification: uv-aarch64-apple-darwin.tar.gz
mise Cannot parse Rekor public key with id cf1199155bddd051268d1f16ac5c0c75c009f6fb5a63f4177f8e18d7051e3fa0: Pkcs8 spki error : Ecdsa-P256 from der bytes to public key failed: unknown/unsupported algorithm OID: 1.2.840.10045.2.1
lock uv@0.11.7 macos-arm64 ✔
✓ Updated 14 platform entries (0 skipped)
ここで生成されたロックファイルはGitで管理しておくことで、チームメンバー全員が同じバージョンのツールを使えるようになります。
生成されたロックファイル
# @generated - this file is auto-generated by `mise lock` https://mise.jdx.dev/dev-tools/mise-lock.html
[[tools.terraform]]
version = "1.14.8"
backend = "aqua:hashicorp/terraform"
[tools.terraform."platforms.linux-arm64"]
checksum = "sha256:c953171cde6b25ca0448c3b29a90d2f46c0310121e18742ec8f89631768e770c"
url = "https://releases.hashicorp.com/terraform/1.14.8/terraform_1.14.8_linux_arm64.zip"
[tools.terraform."platforms.linux-arm64-musl"]
checksum = "sha256:c953171cde6b25ca0448c3b29a90d2f46c0310121e18742ec8f89631768e770c"
url = "https://releases.hashicorp.com/terraform/1.14.8/terraform_1.14.8_linux_arm64.zip"
[tools.terraform."platforms.linux-x64"]
checksum = "sha256:56a5d12f47cbc1c6bedb8f5426ae7d5df984d1929572c24b56f4c82e9f9bf709"
url = "https://releases.hashicorp.com/terraform/1.14.8/terraform_1.14.8_linux_amd64.zip"
[tools.terraform."platforms.linux-x64-musl"]
checksum = "sha256:56a5d12f47cbc1c6bedb8f5426ae7d5df984d1929572c24b56f4c82e9f9bf709"
url = "https://releases.hashicorp.com/terraform/1.14.8/terraform_1.14.8_linux_amd64.zip"
[tools.terraform."platforms.macos-arm64"]
checksum = "sha256:5593670a2d42323847bfb216db17c73a44df201a62f7587928bae16adeabba23"
url = "https://releases.hashicorp.com/terraform/1.14.8/terraform_1.14.8_darwin_arm64.zip"
[tools.terraform."platforms.macos-x64"]
checksum = "sha256:26dd7593d22e9d99ec09380f0869718f649be7b7f954d888611335e6a84961f8"
url = "https://releases.hashicorp.com/terraform/1.14.8/terraform_1.14.8_darwin_amd64.zip"
[tools.terraform."platforms.windows-x64"]
checksum = "sha256:a237008008019589c600ecb0ae0842c9ea4ca5601f7c54ddbc64d274037b0abb"
url = "https://releases.hashicorp.com/terraform/1.14.8/terraform_1.14.8_windows_amd64.zip"
[[tools.uv]]
version = "0.11.7"
backend = "aqua:astral-sh/uv"
[tools.uv."platforms.linux-arm64"]
checksum = "sha256:46647dc16cbb7d6700f762fdd7a67d220abe18570914732bc310adc91308d272"
url = "https://github.com/astral-sh/uv/releases/download/0.11.7/uv-aarch64-unknown-linux-musl.tar.gz"
provenance = "github-attestations"
[tools.uv."platforms.linux-arm64-musl"]
checksum = "sha256:46647dc16cbb7d6700f762fdd7a67d220abe18570914732bc310adc91308d272"
url = "https://github.com/astral-sh/uv/releases/download/0.11.7/uv-aarch64-unknown-linux-musl.tar.gz"
provenance = "github-attestations"
[tools.uv."platforms.linux-x64"]
checksum = "sha256:64ddb5f1087649e3f75aa50d139aa4f36ddde728a5295a141e0fa9697bfb7b0f"
url = "https://github.com/astral-sh/uv/releases/download/0.11.7/uv-x86_64-unknown-linux-musl.tar.gz"
provenance = "github-attestations"
[tools.uv."platforms.linux-x64-musl"]
checksum = "sha256:64ddb5f1087649e3f75aa50d139aa4f36ddde728a5295a141e0fa9697bfb7b0f"
url = "https://github.com/astral-sh/uv/releases/download/0.11.7/uv-x86_64-unknown-linux-musl.tar.gz"
provenance = "github-attestations"
[tools.uv."platforms.macos-arm64"]
checksum = "sha256:66e37d91f839e12481d7b932a1eccbfe732560f42c1cfb89faddfa2454534ba8"
url = "https://github.com/astral-sh/uv/releases/download/0.11.7/uv-aarch64-apple-darwin.tar.gz"
provenance = "github-attestations"
[tools.uv."platforms.macos-x64"]
checksum = "sha256:0a4bc8fcde4974ea3560be21772aeecab600a6f43fa6e58169f9fa7b3b71d302"
url = "https://github.com/astral-sh/uv/releases/download/0.11.7/uv-x86_64-apple-darwin.tar.gz"
provenance = "github-attestations"
[tools.uv."platforms.windows-x64"]
checksum = "sha256:fe0c7815acf4fc45f8a5eff58ed3cf7ae2e15c3cf1dceadbd10c816ec1690cc1"
url = "https://github.com/astral-sh/uv/releases/download/0.11.7/uv-x86_64-pc-windows-msvc.zip"
provenance = "github-attestations"
install_beforeの話
install_before は、リリースされてから一定期間が経過していないバージョンをインストールしないようにするセキュリティ設定です。
(インストールコマンドに--beforeを付与する場合と同様です)
[settings]
install_before = "14d" # リリースから14日以内のバージョンは無視
サプライチェーン攻撃への対策として有効です。
この設定は aqua だけでなく、npm や pipx などの各バックエンドにも適用されます。
本来であれば、バックエンドごとにパラメータの渡し方が異なりますが、mise 側がよしなに変換して各バックエンドに渡してくれます。
install_before = "14d" の場合
# 14日以上前にリリースされたバージョンを選択
mise use -g -v --before 14d npm:@nulab/bee@latest
DEBUG ARGS: /opt/homebrew/bin/mise use -g-v-before 14d npm:@nulab/bee@latest
DEBUG config: ~/.config/mise/config.toml
INFO npm:@nulab/bee@0.0.0 [1/3] install
DEBUG $ npm install -g @nulab/bee@0.0.0 --prefix /Users/oya.kazuki/.local/share/mise/installs/npm-nulab-bee/0.0.0 --before 2026-03-26T09:42:57.098081Z
[1/3] added 1 package in 1s INFO npm:@nulab/bee@0.0.0
Reshimming mise 25.9.0...
INFO npm: @nulab/bee@0.0.0 ✓ installed
DEBUG config: ~/.config/mise/config.toml
DEBUG [npm:@nulab/bee@0.0.0] list_bin_paths: ["/Users/oya.kazuki/.local/share/mise/installs/npm-nulab-bee/0.0.0/bin"]
DEBUG config: ~/.config/mise/config.toml
DEBUG updating 0 lockfiles
mise ~/.config/mise/config.toml tools: npm:@nulab/bee@0.0.0
# → `--before 2026-03-26T09:42:57.098081Z`が渡され、`0.0.0`がインストールされた
install_before = "3d" の場合
# 3日以上前にリリースされたバージョンを選択
mise use -g -v --before 3d npm:@nulab/bee@latest
DEBUG ARGS: /opt/homebrew/bin/mise use -g-v-before 3d npm:@nulab/bee@latest
DEBUG config: ~/.config/mise/config.toml
INFO npm:@nulab/bee@1.0.0 [1/3] install
DEBUG $ npm install -g @nulab/bee@1.0.0 --prefix /Users/oya.kazuki/.local/share/mise/installs/npm-nulab-bee/1.0.0 --before 2026-04-06T09:43:16.377572Z
INFO npm:@nulab/bee@1.0.0
[1/3] added 37 packages in 2s
INFO npm:@nulab/bee@1.0.0
INFO npm:@nulab/bee@1.0.0
[1/3] 24 packages are looking for funding
Reshimming mise 25.9.0...
[1/3] run `npm fund for details
INFO npm:@nulab/bee@1.0.0
installed
DEBUG config: ~/.config/mise/config.toml
DEBUG [npm:@nulab/bee@1.0.0] list_bin_paths: ["/Users/oya.kazuki/.local/share/mise/installs/npm-nulab-bee/1.0.0/bin"]
DEBUG config: ~/.config/mise/config.toml
DEBUG updating 0 lockfiles
mise ~/.config/mise/config.toml tools: npm: @nulab/bee@1.0.0
# `--before 2026-04-06T09:43:16.377572Z`が渡され、`1.0.0`がインストールされた
depsの話(旧: prepare)
deps(旧: prepare)機能は、依存パッケージの同期コマンドを自動実行する機能です。
以前は prepare という名前でしたが、現在は deps に変わっています。
仕組みは「監視対象ファイルのハッシュ値を記録しておき、変更があったときだけインストールコマンドを実行する」というものです。
ファイルが変わっていなければコマンドは走らないので、不要な同期が毎回走るといったことはありません。
auto = true を設定すると、mise run(タスク実行)や mise x(exec)の前に自動で依存関係チェックが行われます。
各ツールの監視対象ファイルと実行コマンドは以下の通りです。
| ツール | 監視対象ファイル | 実行コマンド |
|---|---|---|
uv |
pyproject.toml, uv.lock |
uv sync |
npm |
package.json, package-lock.json |
npm install |
たとえば、uvを使うPythonプロジェクトで uv sync を自動化する場合はこのように書きます。
[deps]
uv.auto = true
Pythonプロジェクトでuvを使っている場合は、python.uv_venv_auto と組み合わせるとさらに便利です。
[settings]
python.uv_venv_auto = "create|source" # .venv がなければ作成して有効化
[deps]
uv.auto = true
この設定により、mise install でツールをインストールし、ディレクトリに入ると仮想環境が自動で作成・有効化され、タスク実行前に uv sync が走ります。
終わりに
今回は、ツールのバージョン管理に特化してmiseのイチオシ機能をまとめてみました。
ロックファイルやdeps、install_beforeといった機能を使うことで、個人の開発環境管理だけでなくチーム開発での再現性も高められるかと思います。
まだ使ったことがない方はぜひ試してみてください。miseはまだまだ進化しているツールなので、今後も新しい機能が増えていくのが楽しみです。








