スキル一覧に戻る
scottatron

mise-dev-tools-manager

by scottatron

0🍴 0📅 2025年11月26日
GitHubで見るManusで実行

SKILL.md


name: Mise Dev Tools Manager description: Manage dev tools, runtime versions, environment variables, and tasks with mise. Universal tool version manager supporting 1000+ tools with task runner and env management.

Overview

Mise is a polyglot tool version manager and task runner that replaces tools like asdf, nvm, pyenv, rbenv, and more. It manages development tool versions, environment variables, and project tasks—all from a single fast CLI with support for 1000+ tools.

Key Features

  • Universal tool management: One tool to manage Node.js, Python, Ruby, Go, Java, and 1000+ others
  • Lightning fast: Written in Rust, up to 2-3x faster than asdf
  • Environment management: Project-specific environment variables
  • Task runner: Built-in task runner (like make/npm scripts but better)
  • Compatible: Works with asdf plugins and .tool-versions files
  • Cross-platform: Works on Linux, macOS, and Windows

Installation

Quick Install

# Linux/macOS
curl https://mise.run | sh

# macOS (Homebrew)
brew install mise

# Cargo
cargo install mise

# Verify installation
mise --version

Shell Setup

After installation, add mise to your shell:

# Bash
echo 'eval "$(mise activate bash)"' >> ~/.bashrc

# Zsh
echo 'eval "$(mise activate zsh)"' >> ~/.zshrc

# Fish
echo 'mise activate fish | source' >> ~/.config/fish/config.fish

# Restart shell or source the config
source ~/.bashrc  # or ~/.zshrc, etc.

Quick Start

Install a tool

# Install Node.js
mise install node@20

# Install Python
mise install python@3.12

# Install latest version
mise install node@latest

Set project versions

# Set local (project) version
mise use node@20
mise use python@3.12

# Set global (system) version
mise use -g node@20

Run a task

# List available tasks
mise tasks

# Run a task
mise run test
mise run build

Tool Management

Installing Tools

# Install specific version
mise install node@20.11.0
mise install python@3.12.1

# Install latest version
mise install node@latest
mise install python@latest

# Install from .mise.toml or .tool-versions
mise install

# List available versions
mise ls-remote node
mise ls-remote python

Using Tools

# Set for current project (creates/updates .mise.toml)
mise use node@20
mise use python@3.12
mise use terraform@1.6

# Set globally for all projects
mise use -g node@20

# Set and pin to exact version
mise use node@20.11.0

# Set multiple tools at once
mise use node@20 python@3.12

Listing Tools

# List installed tools for current project
mise list
mise ls

# List all installed tools globally
mise list --global

# List available tools
mise plugins ls-remote

# Check what tools are available
mise registry

Updating Tools

# Update to latest version
mise upgrade node
mise upgrade python

# Update all tools
mise upgrade

# Update mise itself
mise self-update

Removing Tools

# Uninstall a version
mise uninstall node@18

# Remove from current project
mise rm node

Configuration Files

Create a .mise.toml in your project root:

[tools]
node = "20"
python = "3.12"
terraform = "1.6"
go = "1.22"

[env]
DATABASE_URL = "postgres://localhost/mydb"
API_KEY = "dev-key-123"
NODE_ENV = "development"

[tasks.test]
run = "pytest tests/"
description = "Run Python tests"

[tasks.lint]
run = ["eslint .", "black --check ."]
description = "Run linters"

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

.tool-versions (Legacy)

Compatible with asdf format:

node 20.11.0
python 3.12.1
terraform 1.6.0

Version Syntax

[tools]
node = "20"           # Latest 20.x
node = "20.11"        # Latest 20.11.x
node = "20.11.0"      # Exact version
node = "latest"       # Latest stable
python = "3.12"       # Latest 3.12.x

Environment Variables

Setting Variables

# In .mise.toml
[env]
DATABASE_URL = "postgres://localhost/mydb"
API_KEY = { file = ".env.local" }  # Load from file
PATH = ["./node_modules/.bin", "$PATH"]  # Prepend to PATH

Using Templates

[env]
PROJECT_ROOT = "{{ cwd }}"
CONFIG_PATH = "{{ config_root }}/config"
HOME_DIR = "{{ env.HOME }}"

Per-Environment Config

# Load different configs based on MISE_ENV
mise use --env production node@20
mise use --env development node@18

# Set environment
export MISE_ENV=production

Task Runner

Defining Tasks

# Simple task
[tasks.test]
run = "pytest tests/"

# Task with options
[tasks.build]
run = "npm run build"
description = "Build for production"
depends = ["lint", "test"]

# Multiple commands
[tasks.deploy]
run = [
  "npm run build",
  "aws s3 sync dist/ s3://my-bucket",
  "aws cloudfront create-invalidation --distribution-id XXX --paths '/*'"
]

# Task with arguments
[tasks.db-migrate]
run = "python manage.py migrate {{ arg(name='env', default='dev') }}"

# Task with environment variables
[tasks.test-e2e]
run = "playwright test"
env = { CI = "true", HEADLESS = "true" }

Running Tasks

# Run a task
mise run test
mise run build

# Run with arguments
mise run db-migrate -- production

# List all tasks
mise tasks
mise tasks --json

# Run multiple tasks
mise run lint test build

# Run task from specific config
mise run -C /path/to/project test

Task Dependencies

[tasks.deploy]
run = "kubectl apply -f k8s/"
depends = ["test", "build"]

[tasks.test]
run = "pytest tests/"

[tasks.build]
run = "docker build -t myapp ."

When you run mise run deploy, it will run test and build first.

Watching for Changes

[tasks.dev]
run = "npm run dev"
sources = ["src/**/*.ts", "package.json"]
outputs = ["dist/**/*"]

Mise will track changes and only run when sources change.

Common Workflows

1. Starting a New Project

# Initialize project with tools
cd my-project
mise use node@20 python@3.12

# This creates .mise.toml:
# [tools]
# node = "20"
# python = "3.12"

# Install the tools
mise install

# Verify
mise list
node --version
python --version

2. Cloning an Existing Project

# Clone project
git clone https://github.com/example/project
cd project

# Install all tools from .mise.toml
mise install

# Run project setup
mise run setup

3. Adding Environment Variables

# Edit .mise.toml
[env]
DATABASE_URL = "postgres://localhost/mydb"
REDIS_URL = "redis://localhost:6379"
API_KEY = "dev-key-123"

# Variables are automatically loaded when you cd into the directory
cd my-project
echo $DATABASE_URL  # postgres://localhost/mydb

4. Setting Up Tasks

# .mise.toml
[tasks.setup]
run = [
  "npm install",
  "python -m pip install -r requirements.txt",
  "cp .env.example .env"
]
description = "Setup project dependencies"

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

[tasks.test]
run = ["npm test", "pytest tests/"]
description = "Run all tests"

[tasks.format]
run = ["prettier --write .", "black ."]
description = "Format code"
# Use the tasks
mise run setup
mise run dev
mise run test

5. Managing Multiple Node.js Versions

# Install multiple versions
mise install node@18 node@20 node@21

# Set different versions per project
cd project-a && mise use node@18
cd project-b && mise use node@20

# Use temporary version for a command
mise exec node@21 -- node script.js

6. Language-Specific Package Managers

# Install language package managers
mise install node@20        # Includes npm
mise install python@3.12    # Includes pip
mise install ruby@3.3       # Includes gem

# They're automatically available
npm install
pip install requests
gem install rails

Advanced Features

Trust Configuration

Mise prompts before loading new configs for security:

# Trust a config
mise trust

# Trust and install
mise install

# Auto-trust all configs (use with caution)
mise settings set trusted_config_paths "~/.config/mise"

Global Configuration

Edit ~/.config/mise/config.toml:

[settings]
experimental = true
verbose = true

[tools]
node = "20"
python = "3.12"

[env]
EDITOR = "vim"

Using Profiles

# Set up profiles
mise use --profile work node@20
mise use --profile personal node@18

# Switch profiles
export MISE_PROFILE=work

Cache Management

# Clear plugin cache
mise cache clear

# Show cache location
mise cache show

# Clean old versions
mise prune

Hook Scripts

# Run scripts on certain events
[hooks]
enter = "echo 'Entering project'"
leave = "echo 'Leaving project'"

Integration with CI/CD

GitHub Actions

name: CI
on: [push]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - uses: jdx/mise-action@v2
        with:
          version: latest

      - run: mise install

      - run: mise run test
      - run: mise run build

Docker

FROM ubuntu:22.04

# Install mise
RUN curl https://mise.run | sh
ENV PATH="/root/.local/bin:$PATH"

# Copy config
COPY .mise.toml .
RUN mise install

# Run tasks
CMD ["mise", "run", "start"]

GitLab CI

image: ubuntu:22.04

before_script:
  - curl https://mise.run | sh
  - export PATH="$HOME/.local/bin:$PATH"
  - mise install

test:
  script:
    - mise run test

Best Practices

1. Commit Configuration

Always commit .mise.toml or .tool-versions:

git add .mise.toml
git commit -m "Add mise configuration"

This ensures all team members use the same tool versions.

2. Pin Versions in Production

# Development: Use ranges for flexibility
[tools]
node = "20"

# Production: Pin exact versions
[tools]
node = "20.11.0"
python = "3.12.1"

3. Use Tasks for Common Commands

Instead of documenting commands in README, define tasks:

[tasks.setup]
run = "npm install && python -m pip install -r requirements.txt"
description = "Install all dependencies"

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

Team members just run mise tasks to see available commands.

4. Keep Environment Variables Secure

# Don't commit secrets directly
[env]
API_KEY = { file = ".env.local" }  # Load from gitignored file

# Or use templates
DATABASE_URL = "{{ env.DATABASE_URL }}"

5. Use Descriptions

[tasks.test]
run = "pytest tests/"
description = "Run test suite with pytest"  # Helps others understand

[tasks.deploy]
run = "./deploy.sh"
description = "Deploy to production (requires AWS credentials)"

6. Leverage Task Dependencies

[tasks.ci]
depends = ["lint", "test", "build"]
description = "Run full CI pipeline"

# Now `mise run ci` runs everything in order

Troubleshooting

Tool Not Found

# Ensure mise is activated in shell
eval "$(mise activate bash)"

# Reshim after installation
mise reshim

# Check if tool is installed
mise list

Version Mismatch

# Check current versions
mise current

# Verify config
cat .mise.toml

# Reinstall
mise install --force

Slow Performance

# Disable telemetry
mise settings set disable_telemetry true

# Reduce checks
mise settings set jobs 4

Plugin Issues

# Update plugins
mise plugins update

# Reinstall plugin
mise plugins uninstall node
mise plugins install node

Comparison with Other Tools

FeatureMiseasdfnvmpyenv
SpeedFastSlowMediumMedium
LanguageRustShellShellShell
Task RunnerYesNoNoNo
Env VarsYesNoNoNo
Tools Supported1000+1000+1 (Node)1 (Python)
Windows SupportYesNoNoLimited

Tips for AI Agents

1. Always Check for Config First

# Before suggesting tool installation, check for config
if [ -f .mise.toml ] || [ -f .tool-versions ]; then
  mise install
else
  # Suggest creating config
  mise use node@20
fi

2. Use JSON Output

# Get parseable output
mise list --json
mise tasks --json
mise ls-remote node --json

3. Detect Tool Versions

# Check what's needed
mise current

# Install missing tools
mise install

4. Suggest Tasks Over Commands

Instead of:

npm run build && npm run test && npm run deploy

Suggest:

# Add to .mise.toml
[tasks.release]
run = ["npm run build", "npm run test", "npm run deploy"]

# Run
mise run release

5. Recommend mise for New Projects

When a user starts a new project:

# Set up tools
mise use node@20 python@3.12

# Add common tasks
[tasks.setup]
run = "npm install"
description = "Install dependencies"

Resources

Summary

Mise is a modern, fast, all-in-one development tool manager that:

  • Replaces multiple tools: nvm, pyenv, rbenv, asdf, etc. with one fast binary
  • Manages 1000+ tools: Node.js, Python, Ruby, Go, Terraform, kubectl, and more
  • Handles environment variables: Project-specific env vars that auto-load
  • Runs tasks: Like make/npm scripts but with dependencies and better features
  • Works everywhere: Linux, macOS, Windows with consistent behavior
  • Fast and reliable: Written in Rust, 2-3x faster than alternatives

Perfect for teams that want consistent development environments across projects and developers, especially when working with multiple languages and tools.

スコア

総合スコア

40/100

リポジトリの品質指標に基づく評価

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

0/10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

0/15
最近の活動

3ヶ月以内に更新がある

0/10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

0/5

レビュー

💬

レビュー機能は近日公開予定です