mise
GitHub概要
スター17,651
ウォッチ35
フォーク569
作成日:2023年1月9日
言語:Rust
ライセンス:MIT License
トピックス
なし
スター履歴
データ取得日時: 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から自動的に読み込み