miseの使い方
概要
- asdfのようなバージョン管理ツール
- プロジェクトルートの
.mise.tomlに記述したソフトウェアを使用する- node, python, rust, ruby, deno, bunなどに対応
- タスクランナーとしても使用可能
- uv + python venvの組み合わせで高速にPython環境を構築可能
インストール
$ curl https://mise.run | sh
セットアップ
zsh
$ echo 'eval "$(~/.local/bin/mise activate zsh)"' >> ~/.zshrc
引数
use: 特定のバージョンのソフトウェアを使用するrun: タスクを実行するls: 使用しているソフトウェアの一覧を表示するls-remote <tool>: 使用可能なソフトウェアの一覧を表示するinstall:.mise.tomlに記述されたソフトウェアをインストールするupgrade: インストール済みのソフトウェアをアップグレードするupgrade --bump:.mise.tomlのバージョン指定を最新に更新し、ソフトウェアをアップグレードするtasks: 定義済みタスクの一覧をdescription付きで表示する(helpのように使える)
.mise.toml の例
[tools]
uv = "latest"
python = "3.12" # Pythonバージョンの指定
terraform = "1.6"
awscli = "latest"
gcloud = "latest"
[settings]
python.uv_venv_auto = "create|source" # uv.lockがあるプロジェクトで.venvを自動作成・有効化
[env]
_.python.venv = { path = ".venv", create = true } # uvを使わないプロジェクトでvenvを自動作成・有効化
# config_root(mise.tomlが置かれているディレクトリ)を使ったパス解決
CLOUDSDK_CONFIG = "{{config_root}}/.gcloud_config"
GOOGLE_APPLICATION_CREDENTIALS = "{{config_root}}/.gcloud_config/application_default_credentials.json"
GOOGLE_CLOUD_PROJECT = "my-project"
# .envファイルの読み込み
_.file = ".env"
# 複数コマンドを連続実行するタスク("""で複数行記述)
[tasks.build]
description = "Build and push all container images"
run = """
gcloud builds submit services/api \
--tag region-docker.pkg.dev/my-project/repo/api:latest && \
gcloud builds submit services/worker \
--tag region-docker.pkg.dev/my-project/repo/worker:latest
"""
# ============================================================
# VM操作
# ============================================================
[tasks.suspend]
description = "Suspend workstation VM"
run = "gcloud compute instances suspend my-vm --zone=asia-northeast1-a --project=my-project"
[tasks.resume]
description = "Resume workstation VM"
run = "gcloud compute instances resume my-vm --zone=asia-northeast1-a --project=my-project"
[tasks.status]
description = "Check workstation VM status"
run = "gcloud compute instances describe my-vm --zone=asia-northeast1-a --project=my-project --format='value(status)'"
mise exec --
mise exec -- <command> は単発コマンドに対して .mise.toml の設定を一時的に有効にして実行する
有効になるもの
- ツールのPATH(gitleaks, terraform, python等のシム)
[env]の環境変数_.file = ".env"で読み込まれる.envファイルmise tasksのenv継承
サブシェルで実行されるため、コマンド終了後は元の環境に戻る
| シチュエーション | 推奨 |
|---|---|
対話シェル(zshrcで mise activate) | そのまま command でOK |
| pre-commit hookなどmise環境を引き継がない場面 | mise exec -- command |
| CI/CD(mise自体は入っている) | mise exec -- command |
| シェルスクリプト内で確実性を上げたい | mise exec -- command |
mise run <task> の中身 | miseが自動でenvを設定するので不要 |
似た選択肢
mise activate— シェルに設定を永続的に注入(対話シェル向け)mise shell— 一時的にシェルセッションに注入mise exec --— 単発コマンドだけに注入mise run <task>—.mise.tomlで定義したタスク実行(env自動)
$ mise exec -- gcloud config list
$ mise exec -- terraform plan
$ mise exec -- bash -c 'echo $GOOGLE_CLOUD_PROJECT'
direnvとの共存
.envrcにはuse miseとだけ記述する- 環境変数やツールの管理はすべて
.mise.tomlの[env]セクションに集約する - direnvはmiseの設定を読み込むブリッジとして機能する
.envrc
use mise