miseとは
mise(ミーズ)は、複数のプログラミング言語やツールのバージョンを一元管理するCLIツールだ。旧名rtx(2024年にmiseに改名)で、Rust製の高速なランタイムバージョンマネージャとして急速に普及している。
従来、Node.jsはnvm、Pythonはpyenv、Rubyはrbenvと、言語ごとに異なるバージョン管理ツールが必要だった。miseはこれらを1つのツールに統合する。
なぜmiseが必要なのか
従来の課題
| 問題 | 具体例 |
|---|---|
| ツールの乱立 | nvm + pyenv + rbenv + goenv + … |
| シェルの初期化が遅い | 各ツールの初期化スクリプトが競合 |
| プロジェクト固定が面倒 | .nvmrc、.python-version、.ruby-version が別々 |
| チーム内のバージョン不一致 | 「自分の環境では動くのに」問題 |
miseの解決策
- 1ツールで全言語対応: Node.js、Python、Ruby、Go、Java、Rust、Bun…
- 高速: Rust製で、シェル起動時のオーバーヘッドが1ms未満
- 既存ファイル互換:
.nvmrc、.python-versionをそのまま読める - プロジェクト単位:
.mise.tomlでディレクトリごとにバージョンを固定
インストール
macOS
# Homebrew(推奨)
brew install mise
# またはcurl
curl https://mise.run | sh
Linux
curl https://mise.run | sh
シェル設定
# ~/.zshrc に追加
eval "$(mise activate zsh)"
# bashの場合
eval "$(mise activate bash)"
基本的な使い方
ランタイムのインストール
# Node.js 24をインストール
mise install node@24
# 最新のLTSをインストール
mise install node@lts
# Python 3.13をインストール
mise install python@3.13
# 複数同時にインストール
mise install node@24 python@3.13 ruby@3.4
バージョンの切り替え
# グローバル設定(デフォルトのバージョン)
mise use --global node@24
# プロジェクト固定(.mise.toml を生成)
mise use node@24
# 一時的に使用
mise exec node@22 -- node --version
現在のバージョンを確認
# アクティブなバージョン一覧
mise ls
# 特定のツール
mise ls node
# インストール可能なバージョン一覧
mise ls-remote node
.mise.toml でプロジェクト管理
基本構成
[tools]
node = "24"
pnpm = "10"
python = "3.13"
[env]
NODE_ENV = "development"
DATABASE_URL = "postgresql://localhost:5432/myapp"
詳細な設定
# 複数バージョンの並行インストール
[tools]
node = ["24", "22"] # 両方インストール、24がデフォルト
python = "3.13"
# 環境変数(.envファイルの読み込みも可能)
[env]
_.file = ".env.local"
NODE_ENV = "development"
# タスクランナー機能
[tasks.dev]
run = "pnpm dev"
description = "Start development server"
[tasks.build]
run = "pnpm run build"
description = "Build for production"
[tasks.test]
run = "pnpm test"
description = "Run tests"
asdfとの比較
miseはasdfの後継として設計されている。asdfのプラグインエコシステムとの互換性を保ちつつ、パフォーマンスと使いやすさを大幅に改善している。
| 項目 | mise | asdf |
|---|---|---|
| 言語 | Rust | Shell script |
| 速度 | ◎(1ms未満) | △(100ms+) |
| 設定ファイル | .mise.toml | .tool-versions |
| .tool-versions互換 | ○ | ○ |
| .nvmrc互換 | ○ | △(プラグイン依存) |
| 環境変数管理 | ○(built-in) | ✕ |
| タスクランナー | ○(built-in) | ✕ |
| プラグイン互換 | asdfプラグインをそのまま使える | - |
タスクランナーとして活用
miseは単なるバージョン管理ツールではない。タスクランナーとしても機能する。
.mise.toml でタスクを定義
[tasks.dev]
run = "pnpm dev"
description = "Start dev server"
[tasks.lint]
run = ["pnpm run lint", "pnpm run typecheck"]
description = "Run linter and type checker"
[tasks.deploy]
run = "pnpm run build && firebase deploy"
description = "Build and deploy"
depends = ["lint"] # lintが成功してからdeployを実行
実行
mise run dev
mise run lint
mise run deploy
package.json の scripts や Makefile の代替として使える。依存関係の定義(depends)や並列実行もサポートしている。
チーム開発での運用
1. .mise.toml をリポジトリにコミット
# プロジェクトルートで
mise use node@24 pnpm@10
git add .mise.toml
git commit -m "chore: add mise configuration"
2. チームメンバーの初期セットアップ
# リポジトリをクローン後
mise install # .mise.toml に定義されたツールを一括インストール
pnpm install # 依存関係のインストール
これだけで、チーム全員が同じバージョンのNode.js、pnpm、その他のツールを使える。
3. CI/CDでの使用
# GitHub Actions
- name: Install mise
uses: jdx/mise-action@v2
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Build
run: pnpm run build
便利な機能
シム(shim)モード
IDEとの互換性のために、shimモードが使える。
mise settings set experimental true
mise reshim
これにより、~/.local/share/mise/shims/ にshimが作成され、IDEがバージョン管理されたツールを認識できる。
信頼機能
セキュリティのために、新しい .mise.toml は明示的に信頼する必要がある。
# プロジェクトの.mise.tomlを信頼
mise trust
# 信頼を取り消す
mise trust --untrust
自動補完
# zsh
mise completion zsh > ~/.zfunc/_mise
# bash
mise completion bash > /etc/bash_completion.d/mise
L-yardプロジェクトでの使用例
本サイト(L-yard)でもmiseを使って開発環境を管理している。
# .mise.toml
[tools]
node = "24"
pnpm = "latest"
これにより、リポジトリをクローンした時点で mise install を実行するだけで、正しいバージョンのNode.jsとpnpmが自動的にインストールされる。
まとめ
miseは「開発環境のバージョン管理」という地味だが重要な問題を、エレガントに解決するツールだ。
導入の手順はシンプル:
brew install miseでインストール- シェルの初期化スクリプトに
eval "$(mise activate zsh)"を追加 - プロジェクトで
mise use node@24を実行 .mise.tomlをコミット
これだけで、nvm・pyenv・rbenvといった個別ツールを卒業し、統一された開発環境管理が手に入る。