mise入門 — Node.js/Python/Goを一元管理する開発ツールマネージャー徹底比較

mise は Node.js・Python・Go など複数言語のツールバージョンを一つの設定ファイルで管理できる、Rust 製の開発ツールマネージャーです。本記事ではインストールからタスクランナー・環境変数管理、asdf や nvm との比較検証、チーム導入時の実務 Tips まで解説します。

mise とは — Node.js/Python/Go を一元管理する次世代ツールマネージャー

mise(読み方は「miːz」、旧称 rtx)は、プロジェクトごとに異なる言語ランタイムのバージョンを mise.toml という単一の設定ファイルで管理する CLI ツールです。GitHub 上で 32,000 スター超を獲得しており、次の 3 つの役割を 1 つのバイナリで担います。

  • ツールバージョン管理: Node.js・Python・Go・Terraform・AWS CLI など数百種類のツールをプロジェクト単位で切り替え
  • 環境変数管理: ディレクトリ単位で .env[env] セクションの値を自動読み込み
  • タスクランナー: ビルド・テスト・デプロイなどのプロジェクトタスクを依存関係付きで定義・実行

asdf のようにプラグインを別リポジトリから追加する必要がなく、主要言語はコア機能として組み込まれているため、導入直後から実用的に使える点が特徴です。

インストールとシェルへの組み込み

インストールはワンライナーで完結します。

curl https://mise.run | sh
~/.local/bin/mise --version

インストール後、シェルに mise activate をフックすることで cd するたびにツールバージョンや環境変数が自動的に切り替わるようになります。

# bash
echo 'eval "$(~/.local/bin/mise activate bash)"' >> ~/.bashrc

# zsh
echo 'eval "$(~/.local/bin/mise activate zsh)"' >> ~/.zshrc

# fish
echo '~/.local/bin/mise activate fish | source' >> ~/.config/fish/config.fish

シェルを再起動するか source ~/.zshrc などで反映すれば準備完了です。

mise.toml によるツールバージョン管理

プロジェクト単位でのバージョン固定

mise use はツールのインストールと mise.toml への追記を同時に行います。プロジェクトのルートで実行すればチーム全員が同じバージョンを共有できます。

# カレントディレクトリに mise.toml を作成し、バージョンを固定
mise use node@24 python@3.13

生成される mise.toml はこのような内容になります。

[tools]
node = "24"
python = "3.13"

mise install を実行すれば、mise.toml に定義されたツール一式をまとめてインストールできます。新しく参加したメンバーのオンボーディングは git clone の後に mise install を叩くだけで完了します。

グローバルツールの設定

プロジェクトに紐付かないツールは --global フラグでホームディレクトリ設定に追加します。

mise use --global go@1 terraform@1

一時的に別バージョンを使いたい場合は、設定ファイルを書き換えずに実行できます。

mise exec node@22 -- node -v

タスクランナーと環境変数管理

タスクの定義と実行

mise.toml[tasks] セクションにコマンドを登録しておくと、mise run <タスク名>(省略形は mise <タスク名>)で実行できます。

[tasks.build]
description = "本番用ビルド"
run = "npm run build"

[tasks.test]
description = "ユニットテスト実行"
run = "npm test"
mise run build
# もしくは
mise build

依存タスクとCI連携

depends でタスク間の実行順序を定義できるため、Terraform のようなインフラ操作でも「検証 → プラン → 適用」の順序を強制できます。

[tools]
terraform = "1"
aws-cli = "2"

[env]
TF_WORKSPACE = "development"
AWS_REGION = "ap-northeast-1"

[tasks.validate]
run = "terraform validate"

[tasks.plan]
depends = ["validate"]
run = "terraform plan"

[tasks.deploy]
depends = ["plan"]
run = "terraform apply -auto-approve"

GitHub Actions では mise install でツール一式を揃えてから mise run deploy を呼ぶだけで、ローカルと CI のバージョンずれを気にせず済みます。

環境変数の一元管理

[env] セクションに書いた値は、そのディレクトリに cd した瞬間に自動でシェルへ反映され、ディレクトリを離れると解除されます。

[env]
DATABASE_URL = "postgres://localhost:5432/devdb"
NODE_ENV = "development"

asdf・nvm・direnv との比較検証と実務活用パターン

asdf との比較(速度・プラグイン不要)

asdf は言語ごとに asdf plugin add でプラグインリポジトリを追加する必要があり、シェルの補完やインストール速度もプラグイン実装に依存します。mise は主要言語をコア機能として内蔵しているため、mise use node@24 の一発でインストールまで完了します。実測でも mise はシムを使わずパスを直接解決する分、コマンド起動のオーバーヘッドが asdf より小さい傾向があります。

nvm/pyenv からの移行

nvm や pyenv は言語ごとに別々のツールと設定ファイル(.nvmrc.python-version)が必要でしたが、mise なら mise.toml 1 枚に統合できます。既存の .nvmrc.python-version はそのまま読み取り対応しているため、既存プロジェクトへの導入時に設定ファイルを一括で書き換える必要はありません。

direnv 相当の機能

direnv の .envrc に相当する機能は [env] セクションと .env ファイルの自動読み込みでカバーされます。direnv 単体を別途インストールする必要がなくなる分、新規メンバーが揃えるツールの数を減らせます。

チーム導入時の実務Tips

  • mise.toml はリポジトリにコミットし、mise.local.toml.gitignore に追加して個人用の上書き設定を分離する
  • CI では mise install の前に actions/cache でツールキャッシュを効かせるとビルド時間を短縮できる
  • mise は CI 環境を自動検出し、mise.toml の信頼確認プロンプトをスキップする。Docker のマルチステージビルドなど CI と判定されない非対話環境では、事前に mise trust を実行してから mise install を呼ぶとビルドが止まらない
# 非対話環境で信頼確認を済ませてからインストール
mise trust
mise install

まとめ

項目ポイント
概要Rust製、Node.js/Python/Go など数百ツールを mise.toml 1枚で管理
ツール管理mise use でインストールと設定ファイル追記を同時実行。コア言語はプラグイン不要
タスクランナー[tasks]depends で依存順序を定義。mise run / 省略形コマンドで実行
環境変数[env] セクションと .env を自動読み込み。ディレクトリ移動で自動切り替え
asdf との違いプラグイン追加不要・シム不使用で起動が軽量
nvm/pyenv からの移行既存の .nvmrc / .python-version を読み取り互換。段階的移行が可能
チーム導入mise.toml はコミット、個人設定は mise.local.toml に分離してCIキャッシュを活用