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つにまとめています:

  1. マルチ言語バージョン管理 — asdf/nvm/pyenv/rbenv/gvm などを置き換え
  2. 環境変数管理 — direnv を置き換え
  3. タスクランナー — 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(推奨)

BASH
# ワンコマンドでインストール
curl https://mise.run | sh

# Homebrew を使う場合(macOS)
brew install mise

# Cargo でインストール(Rust エコシステム)
cargo install mise

シェル統合のアクティベート

インストールが完了したら、シェルの設定ファイルにアクティベートコマンドを追加します:

BASH
# 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

シェルを再読み込みします:

BASH
source ~/.bashrc  # または source ~/.zshrc

インストールの確認

BASH
mise --version
# このような出力:mise 2026.x.x

mise doctor
# インストール状態をチェック、すべての診断情報を表示

クイックスタート:5分で最初のツールを管理しよう

Node.js のインストール

BASH
# 最新の LTS バージョンをインストール
mise use -g node@lts

# 指定バージョンをインストール
mise use -g node@20

# インストール済みバージョンを表示
mise ls node

-g はグローバルインストール(~/.config/mise/config.toml に書き込み)を意味します。-g を付けない場合は、カレントディレクトリの .mise.toml に書き込まれ、プロジェクトレベルのバージョンロックが可能になります。

Python のインストール

BASH
# Python 3.12 をインストール
mise use -g python@3.12

# 確認
python --version
# Python 3.12.x

複数ツールの同時インストール

BASH
# 1コマンドで複数ツールをインストール
mise use -g node@20 python@3.12 go@1.22 ruby@3.3 rust@latest

# 現在アクティブなすべてのツールを表示
mise ls

プロジェクトレベルのバージョンロック

プロジェクトディレクトリに移動して .mise.toml を作成します:

BASH
cd ~/projects/my-app

# このプロジェクト用に Node.js 20 と Python 3.11 を設定
mise use node@20 python@3.11

これにより .mise.toml ファイルが生成されます:

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 には環境変数管理機能が組み込まれており、ディレクトリに応じて環境変数を自動ロード・アンロードできます:

TOML
# .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 ファイルのサポートもあります:

TOML
[env]
_.file = ".env"           # .env ファイルから読み込み
_.path = ["./bin", "./scripts"]  # PATH に自動追加

direnv との違い: Mise では環境変数とツールのバージョンが同じファイル内で管理できるので、二重の設定は不要です。

2. タスクランナー(Makefile を置き換え)

Mise には強力なタスクランナーが組み込まれています:

TOML
# .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"

使い方:

BASH
# タスクを実行
mise run build
mise run test
mise run dev

# 利用可能なすべてのタスクを表示
mise tasks

# 引数付きで実行
mise run build -- --watch

3. エイリアスとショートカット

TOML
# .mise.toml
[alias.node]
lts = "20"
latest = "22"

[alias.python]
myproj = "3.11.6"  # プロジェクト固定バージョン

4. マルチバージョンの並行処理と自動切替

Mise の最大の強みは自動バージョン切替です。異なるディレクトリに cd すると、Mise が自動的にそのディレクトリの設定ファイルを読み込んでツールバージョンを切り替えます:

BASH
# プロジェクト 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 は複数のインストールバックエンドに対応しており、ツールの入手元を柔軟に選択できます:

TOML
# 公式プリコンパイル済みバイナリを使用(デフォルト、最速)
[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:プロジェクト構造の作成

BASH
mkdir ~/projects/fullstack-app && cd ~/projects/fullstack-app
mkdir frontend backend

ステップ 2:ルートディレクトリの設定

プロジェクトルートに mise.toml を作成します:

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:ワンクリック初期化

BASH
# すべてのツールをインストール
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 をそのまま使えます:

YAML
# .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 ユーザーなら、移行はすごく簡単です:

BASH
# 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 にコミット、新メンバーはワンクリックでセットアップ

関連リンク:

まだ nvm + pyenv + asdf の組み合わせを使っているなら、Mise をぜひ試してみてください。「開発環境の管理ってこんなに簡単でよかったんだ」と感動するはずです。