miseでツールのバージョン管理をすることを何度でも推したい(2026年版)

miseでツールのバージョン管理をすることを何度でも推したい(2026年版)

複数の開発ツールを一元管理できるmiseの2026年版まとめ。aqua・npm・pipxなど多彩なバックエンドの使い方、lockファイルでのバージョン固定とチーム共有フロー、deps機能による依存パッケージ自動同期、install_beforeによるサプライチェーン攻撃対策まで、実際の設定例を交えて紹介します。
2026.04.23

データ事業本部の大谷(おおや)です。

以前、下記記事を書きましたが、あれからもmiseを使い続け、気がつけばロックファイルやdepsといったイチオシ機能も増えてきたので、改めてまとめてみました。

https://dev.classmethod.jp/articles/setup-and-manage-dev-tools-with-mise/

miseをまだ使ったことがない方はもちろん、使っているけど基本的な機能しか使えていないという方にも読んでいただければと思います。

miseとは

miseは、複数の開発ツールのバージョンを一元管理できるツールです。

Node.js、Python、Terraformなど、プロジェクトやディレクトリごとに異なるバージョンを自動で切り替えてくれます。

https://mise.jdx.dev/

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

また、バックエンドの優先順位は設定で変更でき、不要なバックエンドを無効化することもできます。

~/.config/mise/config.toml
[settings]
disable_backends = ["asdf", "vfox"]

設定ファイルの書き方

miseの設定は mise.toml(プロジェクトローカル)または ~/.config/mise/config.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からインストールできます
    • レジストリに登録されていないツールや、独自ビルドのバイナリを管理したい場合に便利です

プロジェクトローカルの設定例

.mise/config.toml
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 を追加します。

.mise/config.toml
[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で管理しておくことで、チームメンバー全員が同じバージョンのツールを使えるようになります。

生成されたロックファイル
.mise/mise.lock
# @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を付与する場合と同様です)

.mise/config.toml
[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 を自動化する場合はこのように書きます。

.mise/config.toml
[deps]
uv.auto = true

Pythonプロジェクトでuvを使っている場合は、python.uv_venv_auto と組み合わせるとさらに便利です。

.mise/config.toml
[settings]
python.uv_venv_auto = "create|source"  # .venv がなければ作成して有効化

[deps]
uv.auto = true

この設定により、mise install でツールをインストールし、ディレクトリに入ると仮想環境が自動で作成・有効化され、タスク実行前に uv sync が走ります。

終わりに

今回は、ツールのバージョン管理に特化してmiseのイチオシ機能をまとめてみました。

ロックファイルやdeps、install_beforeといった機能を使うことで、個人の開発環境管理だけでなくチーム開発での再現性も高められるかと思います。

まだ使ったことがない方はぜひ試してみてください。miseはまだまだ進化しているツールなので、今後も新しい機能が増えていくのが楽しみです。

この記事をシェアする

関連記事