mise

バージョン管理多言語対応Rust環境変数タスクランナー高速化asdf互換

GitHub概要

jdx/mise

dev tools, env vars, task runner

ホームページ:https://mise.jdx.dev
スター17,651
ウォッチ35
フォーク569
作成日:2023年1月9日
言語:Rust
ライセンス:MIT License

トピックス

なし

スター履歴

jdx/mise Star History
データ取得日時: 2025/7/20 03:55

言語バージョン管理ツール

mise (formerly rtx)

概要

miseは、Rustで実装された次世代の多言語バージョン管理ツールです。asdf互換でありながら約10倍高速で、環境変数管理とタスクランナー機能も統合しています。プログラミング言語、フレームワーク、CLI ツールなど600以上のツールに対応し、プロジェクトごとに異なるバージョンを自動的に管理します。モダンなUXと高いパフォーマンスを両立させた、開発者の生産性を大幅に向上させるツールです。

詳細

主な特徴

  • 圧倒的な高速性: asdfの約10倍高速(shim不使用による直接PATH更新)
  • 600以上のツール対応: プログラミング言語、フレームワーク、CLIツールを統一管理
  • 環境変数管理: direnvのような環境変数管理機能を内蔵
  • タスクランナー: makeのようなタスク実行機能を統合
  • asdfプラグイン互換: 既存のasdfプラグインをそのまま使用可能
  • 設定ファイルベース: .mise.tomlまたは.tool-versionsで管理
  • モダンなCLI: 直感的なコマンド体系とfuzzy matching対応
  • クロスプラットフォーム: Windows、macOS、Linuxで動作

アーキテクチャと高速化の仕組み

miseの高速性の秘密は、asdfのshimシステムを使用しないことにあります。asdfはツールの呼び出しごとに約120msのオーバーヘッドが発生しますが、miseはPATH環境変数を直接更新するため、ツール実行時のオーバーヘッドがゼロです。ディレクトリ変更時のmise hook-env実行も約10ms(変更がない場合は4ms)と非常に高速です。

セキュリティ強化

  • asdfプラグインの削減: シェルスクリプトベースのプラグインを段階的に削減
  • セキュアなバックエンド: aqua、ubiなどのより安全なバックエンドを優先使用
  • 署名検証: GPG検証(Node.js)、cosign/slsa-verifyチェック対応
  • mise-pluginsオーガニゼーション: プラグインの中央管理による信頼性向上

統合開発環境機能

  • 環境変数管理: プロジェクトディレクトリごとの環境変数自動切り替え
  • タスク管理: ビルド、テスト、デプロイなどのタスク定義と実行
  • CI/CD対応: GitHub ActionsなどのCI環境でも同一設定で動作
  • ロックファイル: 正確なバージョン固定によるチーム開発の一貫性確保

メリット・デメリット

メリット

  • 超高速: shim不使用によりツール呼び出しのオーバーヘッドなし
  • オールインワン: バージョン管理、環境変数、タスク実行を統合
  • 優れたUX: 直感的なコマンドとfuzzy matchingによる使いやすさ
  • Windows対応: 非asdfバックエンドツールはWindowsでも動作
  • 簡単な移行: .tool-versionsファイルをそのまま使用可能
  • セキュア: プラグインの安全性向上と署名検証機能
  • 単一バイナリ: Rust製の単一実行ファイルで導入が簡単

デメリット

  • 比較的新しい: asdfと比べてコミュニティが小さい
  • Windows制限: asdfプラグインを使うツールはWindows非対応
  • 学習コスト: 環境変数管理やタスク機能の習得が必要
  • プラグイン移行中: 一部ツールはまだasdfプラグイン依存
  • 設定の複雑さ: 高度な機能を使う場合は設定が複雑になる

参考ページ

書き方の例

インストール

# macOS/Linux(推奨方法)
curl https://mise.run | sh

# macOS(Homebrew)
brew install mise

# Windows(Scoop)
scoop install mise

# Windows(WinGet)
winget install jdx.mise

# Cargo(Rust環境がある場合)
cargo install mise

# インストール後の設定確認
mise --version

シェル統合設定

# Bash(~/.bashrcに追加)
eval "$(mise activate bash)"

# Zsh(~/.zshrcに追加)
eval "$(mise activate zsh)"

# Fish(~/.config/fish/config.fishに追加)
mise activate fish | source

# PowerShell($PROFILEに追加)
mise activate pwsh | Out-String | Invoke-Expression

# 設定の確認
mise doctor

基本的な使い方

# ツールのインストールと設定(単一コマンド)
mise use node@20
mise use [email protected]
mise use go@latest

# 特定バージョンのインストール
mise install [email protected]
mise install [email protected]

# グローバルツールのインストール
mise use -g ripgrep@14
mise use -g npm:prettier@3
mise use -g cargo:tokei

# 現在の設定確認
mise list
mise current

プロジェクトでのバージョン管理

# プロジェクトディレクトリで実行
cd /path/to/my-project

# .mise.tomlで管理(推奨)
mise use node@20
mise use [email protected]
mise use rust@stable

# 生成される.mise.toml
# [tools]
# node = "20"
# python = "3.12"
# rust = "stable"

# .tool-versions互換(asdfからの移行用)
echo "node 20.10.0" >> .tool-versions
echo "python 3.12.0" >> .tool-versions

# 全ツールのインストール
mise install

環境変数管理

# .mise.tomlで環境変数を定義
cat << EOF > .mise.toml
[env]
NODE_ENV = "development"
DATABASE_URL = "postgres://localhost/myapp"

[tools]
node = "20"
postgres = "16"
EOF

# ディレクトリに入ると自動的に環境変数が設定される
cd /path/to/project
echo $NODE_ENV  # development

# 環境別設定
cat << EOF > .mise.production.toml
[env]
NODE_ENV = "production"
DATABASE_URL = "postgres://prod-server/myapp"
EOF

# MISE_ENV環境変数で切り替え
MISE_ENV=production mise exec -- node app.js

タスクランナー機能

# .mise.tomlにタスクを定義
cat << EOF >> .mise.toml
[tasks.build]
run = "npm run build"
description = "Build the project"

[tasks.test]
run = "npm test"
description = "Run tests"

[tasks.dev]
run = "npm run dev"
description = "Start development server"

[tasks.deploy]
run = ["npm run build", "npm run deploy"]
depends = ["test"]
description = "Deploy to production"
EOF

# タスクの実行
mise run build
mise run test
mise run deploy

# 利用可能なタスクの確認
mise tasks

CI/CD環境での使用

# GitHub Actions例
name: CI
on: [push]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Install mise
        run: |
          curl https://mise.run | sh
          echo "$HOME/.local/bin" >> $GITHUB_PATH
      
      - name: Install tools
        run: mise install
      
      - name: Run tests
        run: mise run test

高度な設定

# キャッシュディレクトリの変更
export MISE_DATA_DIR="$HOME/.cache/mise"

# パラノイドモード(安全性重視)
mise settings paranoid=true

# asdfプラグイン無効化(セキュリティ向上)
mise settings disable_backends=asdf

# 詳細ログの表示
MISE_LOG_LEVEL=debug mise install node

# トラストレベルの設定
mise trust
mise trust --untrust

移行ガイド

# asdfからの移行
# 1. asdfをアンインストール
# 2. miseをインストール
# 3. 既存の.tool-versionsはそのまま使用可能

# グローバル設定の移行
cp ~/.tool-versions ~/.config/mise/config.toml
# 手動で形式を変換

# プロジェクトの移行
cd /path/to/project
mise install  # .tool-versionsから自動的に読み込み