Mise 完全ガイド:asdf/nvm/pyenv を1つに置き換え、10倍速で開発環境を管理する
TL;DR — Mise は Rust で書かれたマルチ言語バージョンマネージャーで、asdf より20倍以上高速。Node.js、Python、Ruby、Go、Java など50種類以上の開発ツールのバージョン切り替えを1つのツールでこなし、環境変数管理やタスクランナー機能も備えています。
なぜ Mise が必要なのか?
あなたがフルスタック開発者なら、日常はこんな感じでしょう:
- プロジェクト A では Node.js 18、プロジェクト B では Node.js 20 が必要
- バックエンドには Python 3.11 を使っているけど、古いプロジェクトは Python 3.9 のまま
- ときどき Ruby や Go、Rust も書くことになる
これらのバージョンを管理するために、あなたは次のようなツールをインストールしているかもしれません:
| ツール | 何を管理する |
|---|---|
nvm |
Node.js バージョン |
pyenv |
Python バージョン |
rbenv |
Ruby バージョン |
gvm |
Go バージョン |
asdf |
汎用バージョンマネージャー |
問題はこうです:それぞれのツールに独自の設定方法、独自のシェルフック、独自の .tool-versions や .nvmrc ファイルがある。メンテナンスコストは跳ね上がり、しかもこれらのツールのほとんどは Bash で書かれているので、起動がひどく遅いんです。
Mise(読み方:/miːz/、"みーず")は、まさにこの状況を終わらせるために登場しました。
Mise とは?
Mise(フランス語で「置く」の意味)は Rust で書かれた開発ツールマネージャーで、以下の機能を1つにまとめています:
- マルチ言語バージョン管理 — asdf/nvm/pyenv/rbenv/gvm などを置き換え
- 環境変数管理 — direnv を置き換え
- タスクランナー — Makefile/just/task を置き換え
コアの優位性
| 機能 | Mise | asdf | nvm + pyenv |
|---|---|---|---|
| 言語 | Rust | Bash | Bash |
| インストール速度 | ⚡ 超高速(パラレルダウンロード) | 🐢 遅い(個別にクローン) | 🐢 遅い |
| シェル起動時の遅延 | ~0ms(shim 不要) | ~200-500ms | ~100-300ms |
.nvmrc 互換 |
✅ | ❌ | ✅ |
.python-version 互換 |
✅ | ❌ | ✅ |
.tool-versions(asdf)互換 |
✅ | ✅ | ❌ |
| 環境変数管理 | ✅ 組み込み | ❌ | ❌ |
| タスクランナー | ✅ 組み込み | ❌ | ❌ |
| 自動補完 | ✅ 自動生成 | ❌ 手動が必要 | ❌ |
GitHub データ: 30,000+ スター、1,200+ フォーク、MIT ライセンス、継続的に活発に更新中。
Mise のインストール
Mise のインストールはとても簡単で、すべての主要プラットフォームに対応しています。
Linux / macOS(推奨)
# ワンコマンドでインストール
curl https://mise.run | sh
# Homebrew を使う場合(macOS)
brew install mise
# Cargo でインストール(Rust エコシステム)
cargo install mise
シェル統合のアクティベート
インストールが完了したら、シェルの設定ファイルにアクティベートコマンドを追加します:
# Bash — ~/.bashrc に追加
echo 'eval "$(mise activate bash)"' >> ~/.bashrc
# Zsh — ~/.zshrc に追加
echo 'eval "$(mise activate zsh)"' >> ~/.zshrc
# Fish — ~/.config/fish/config.fish に追加
echo 'mise activate fish | source' >> ~/.config/fish/config.fish
シェルを再読み込みします:
source ~/.bashrc # または source ~/.zshrc
インストールの確認
mise --version
# このような出力:mise 2026.x.x
mise doctor
# インストール状態をチェック、すべての診断情報を表示
クイックスタート:5分で最初のツールを管理しよう
Node.js のインストール
# 最新の LTS バージョンをインストール
mise use -g node@lts
# 指定バージョンをインストール
mise use -g node@20
# インストール済みバージョンを表示
mise ls node
-g はグローバルインストール(~/.config/mise/config.toml に書き込み)を意味します。-g を付けない場合は、カレントディレクトリの .mise.toml に書き込まれ、プロジェクトレベルのバージョンロックが可能になります。
Python のインストール
# Python 3.12 をインストール
mise use -g python@3.12
# 確認
python --version
# Python 3.12.x
複数ツールの同時インストール
# 1コマンドで複数ツールをインストール
mise use -g node@20 python@3.12 go@1.22 ruby@3.3 rust@latest
# 現在アクティブなすべてのツールを表示
mise ls
プロジェクトレベルのバージョンロック
プロジェクトディレクトリに移動して .mise.toml を作成します:
cd ~/projects/my-app
# このプロジェクト用に Node.js 20 と Python 3.11 を設定
mise use node@20 python@3.11
これにより .mise.toml ファイルが生成されます:
[tools]
node = "20"
python = "3.11"
このファイルを Git にコミットしておけば、チームメンバーが clone した後 mise install を実行するだけで、必要なすべてのバージョンが自動インストールされます。
既存の設定ファイルとの互換性
Mise は以下のファイルを自動認識するので、追加の設定は一切不要です:
| ファイル | 対応ツール |
|---|---|
.nvmrc |
Node.js |
.node-version |
Node.js |
.python-version |
Python |
.ruby-version |
Ruby |
.go-version |
Go |
.tool-versions |
asdf 汎用フォーマット |
.mise.toml / mise.toml |
Mise 独自フォーマット |
つまり、asdf/nvm/pyenv をシームレスに置き換えられ、既存のプロジェクトの構成を何も変える必要がありません。
応用機能
1. 環境変数管理(direnv を置き換え)
Mise には環境変数管理機能が組み込まれており、ディレクトリに応じて環境変数を自動ロード・アンロードできます:
# .mise.toml
[env]
DATABASE_URL = "postgres://localhost:5432/myapp"
REDIS_URL = "redis://localhost:6379"
NODE_ENV = "development"
API_KEY = {value = "sk-test-xxx", redact = true} # ログ内で自動マスキング
.env ファイルのサポートもあります:
[env]
_.file = ".env" # .env ファイルから読み込み
_.path = ["./bin", "./scripts"] # PATH に自動追加
direnv との違い: Mise では環境変数とツールのバージョンが同じファイル内で管理できるので、二重の設定は不要です。
2. タスクランナー(Makefile を置き換え)
Mise には強力なタスクランナーが組み込まれています:
# .mise.toml
[tasks.build]
description = "プロジェクトをビルド"
run = "npm run build"
[tasks.test]
description = "テストを実行"
run = ["npm test", "npm run lint"]
[tasks.dev]
description = "開発サーバーを起動"
run = "npm run dev"
depends = ["build"] # 依存関係:build を先に実行
[tasks."db:migrate"]
description = "データベースマイグレーションを実行"
run = "python manage.py migrate"
使い方:
# タスクを実行
mise run build
mise run test
mise run dev
# 利用可能なすべてのタスクを表示
mise tasks
# 引数付きで実行
mise run build -- --watch
3. エイリアスとショートカット
# .mise.toml
[alias.node]
lts = "20"
latest = "22"
[alias.python]
myproj = "3.11.6" # プロジェクト固定バージョン
4. マルチバージョンの並行処理と自動切替
Mise の最大の強みは自動バージョン切替です。異なるディレクトリに cd すると、Mise が自動的にそのディレクトリの設定ファイルを読み込んでツールバージョンを切り替えます:
# プロジェクト A は Node 18 が必要
cd ~/projects/project-a
node --version # v18.x.x(自動切替)
# プロジェクト B は Node 20 が必要
cd ~/projects/project-b
node --version # v20.x.x(自動切替)
このすべてがゼロ遅延で実行されます。Mise は Rust で書かれているため、nvm のように cd するたびに Bash スクリプトを実行する必要がないからです。
5. バックエンド(Backend)システム
Mise は複数のインストールバックエンドに対応しており、ツールの入手元を柔軟に選択できます:
# 公式プリコンパイル済みバイナリを使用(デフォルト、最速)
[tools]
node = "20"
# asdf プラグインエコシステムを使用
[tools]
node = "asdf:mise-plugins/mise-node"
# ubi(汎用バイナリインストーラー)を使用
[tools]
jq = "ubi:jqlang/jq"
# go install を使用
[tools]
golangci-lint = "go:golang.org/x/tools/gopls@latest"
# npm グローバルインストールを使用
[tools]
typescript = "npm:typescript"
# pip でインストール
[tools]
black = "pip:black"
# cargo でインストール
[tools]
ripgrep = "cargo:ripgrep"
つまり、Mise は言語ランタイムだけでなくあらゆる開発ツールを管理できるということです。リンター、フォーマッター、CLI ツールなど、何でもOKです。
実践ケース:Mise でフルスタック開発環境を構築する
ゼロから始めて、Mise で典型的なフルスタックプロジェクト(Next.js フロントエンド + FastAPI バックエンド)の開発環境を構築してみましょう。
ステップ 1:プロジェクト構造の作成
mkdir ~/projects/fullstack-app && cd ~/projects/fullstack-app
mkdir frontend backend
ステップ 2:ルートディレクトリの設定
プロジェクトルートに mise.toml を作成します:
# mise.toml
[tools]
node = "20" # フロントエンドに必要
python = "3.12" # バックエンドに必要
[env]
_.file = ".env" # グローバル環境変数
[tasks.setup]
description = "プロジェクト全体を初期化"
run = [
"cd frontend && npm install",
"cd backend && pip install -r requirements.txt"
]
[tasks.dev]
description = "すべてのサービスを起動"
run = [
"cd frontend && npm run dev &",
"cd backend && uvicorn main:app --reload"
]
ステップ 3:ワンクリック初期化
# すべてのツールをインストール
cd ~/projects/fullstack-app
mise install
# 初期化タスクを実行
mise run setup
# 開発環境を起動
mise run dev
チーム全体で必要なのは git clone + mise install + mise run dev だけです。「ローカルでは動いたんだけど」という問題はもう起きません。
ステップ 4:CI/CD への統合
GitHub Actions で Mise をそのまま使えます:
# .github/workflows/ci.yml
name: CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install mise
uses: jdx/mise-action@v2
- name: Install tools
run: mise install
- name: Frontend tests
run: cd frontend && npm test
- name: Backend tests
run: cd backend && pytest
mise-action が自動的に mise.toml を読み込んで必要なすべてのツールをインストールしてくれるので、actions/setup-node や actions/setup-python を個別に設定する必要はありません。
asdf から Mise への移行
すでに asdf ユーザーなら、移行はすごく簡単です:
# Mise は .tool-versions ファイルと完全互換
# 実は何もする必要がありません。Mise が自動で読み込んでくれます
# ただし、.tool-versions を mise.toml に変換したい場合は:
mise migrate asdf
# 移行後に asdf を削除(任意)
# Bash
sed -i '/asdf.sh/d' ~/.bashrc
# Zsh
sed -i '/asdf.sh/d' ~/.zshrc
主なメリット:
- mise install は asdf install より20倍以上高速(パラレルダウンロード + プリコンパイル済みバイナリ)
- shim レイヤーがなく、シェル起動はゼロ遅延
- より良いエラーメッセージと自動補完
- タスクランナーと環境変数管理が組み込み
Mise vs 他のツール比較まとめ
| シナリオ | 従来の方法 | Mise の方法 |
|---|---|---|
| 3つの言語バージョンを管理 | ツールを3つインストール | 1つのツールだけ |
| チームの環境統一 | 各自手動でインストール | mise install で一括完了 |
| シェル起動速度 | ~300ms以上 | ~0ms |
| 環境変数 | direnv / 手動 export | 組み込み |
| プロジェクトタスク | Makefile / package.json scripts | 組み込み tasks |
| CI 設定 | 言語ごとにアクション | 1つの mise-action |
まとめ
Mise はここ数年で出会った中で最も実用的な開発者ツールの1つです。Rust の圧倒的なパフォーマンスでバージョン管理の悩みを解決し、nvm、pyenv、rbenv、direnv、Makefile といったバラバラに散らばったツールを1つに統合してくれました。
使うべき理由:
- ⚡ 速い — Rust 製、asdf より20倍高速
- 🔧 統一 — すべての開発ツールのバージョンを1つで管理
- 🔄 互換 —
.nvmrc、.tool-versionsなどの既存設定と完全互換 - 🚀 エコシステム — 50種類以上の言語・ツールをサポート
- 📦 タスクランナー組み込み — Makefile はもう不要
- 🌍 環境変数管理 — direnv はもう不要
- 🤝 チームコラボレーション —
mise.tomlを Git にコミット、新メンバーはワンクリックでセットアップ
関連リンク:
- GitHub:jdx/mise
- ドキュメント:mise.jdx.dev
- プラグインエコシステム:Mise 公式プラグイン一覧
まだ nvm + pyenv + asdf の組み合わせを使っているなら、Mise をぜひ試してみてください。「開発環境の管理ってこんなに簡単でよかったんだ」と感動するはずです。