miseを未インストールのcontributorにも同じ手順でツールを使わせたい

mise.tomlを使うプロジェクトでは、contributorが先にmise自体をインストールしておく必要がある。mise generate install-scriptは、実行するとmiseが未インストールなら自動的にダウンロード・インストールしてから、そのままmiseコマンドとして動作するラッパースクリプトを生成するコマンドである。

mise generate install-scriptの基本

--writeでファイルに書き出す。ファイル名はmiseにする必要がある(後述)。

$ mise generate install-script --write ./bin/mise
Wrote to ./bin/mise

生成された./bin/miseは、mise本体をラップしたシェルスクリプトである。初回実行時にmiseが未インストールであれば自動的にダウンロード・インストールしたうえで、渡した引数をそのままmise本体に転送する。

$ ./bin/mise --version
mise: installing mise...
mise: installed successfully to ~/.local/share/mise/bootstrap/mise-2026.9.1
2026.9.1 macos-arm64 (2026-09-02)

$ ./bin/mise --version
2026.9.1 macos-arm64 (2026-09-02)

2回目以降はインストール済みのバイナリをそのまま実行するだけなので、ダウンロードは行われない。以降は./bin/mise install./bin/mise use jq@latestのように、通常のmiseコマンドと同じ感覚で使える。

ファイル名をmise以外にすると壊れる

生成されたスクリプトは、自分自身の呼び出され方(argv[0])を保ったままmise本体をexecする仕組みになっている。miseargv[0]がシムの名前と一致するかどうかでシム実行かどうかを判定するため、install.shのような別名で保存すると、通常のコマンドとしてではなくシムとして解釈されてエラーになる。

$ mise generate install-script --write ./install.sh

$ ./install.sh --version
mise: installing mise...
mise ERROR install.sh is not a valid shim. This likely means you uninstalled a tool and the shim does not point to anything. Run `mise use <TOOL>` to reinstall the tool.

公式のExamplesが一貫して--write ./bin/miseという名前を使っているのはこのためであり、生成したスクリプトは必ずmiseという名前で保存する必要がある。

-l/–localizeでプロジェクト内に完全にサンドボックス化する

デフォルトの生成スクリプトは、mise本体の実行ファイルこそ専用のbootstrap/サブディレクトリに保存するものの、ツールのインストール先自体はユーザーのホームディレクトリ配下にある通常のmiseのデータディレクトリ(~/.local/share/mise)をそのまま使う。contributorが別プロジェクトで既に異なるバージョンのmiseを使っている場合、両者の設定や状態を混同する可能性がある。

-l(--localize)を付けると、mise関連のディレクトリをすべてプロジェクト内の.miseディレクトリに閉じ込める。

$ mise generate install-script --write ./bin/mise --localize

$ ./bin/mise --version
mise: installing mise...
mise: installed successfully to ./.mise/mise-2026.9.1

$ ls .mise
cache  migrations  mise-2026.9.1

MISE_DATA_DIR/MISE_CONFIG_DIR/MISE_CACHE_DIR/MISE_STATE_DIRをすべて.mise配下に向けたうえで、プロジェクトディレクトリをMISE_TRUSTED_CONFIG_PATHSに、ユーザーのグローバル設定(~/.config/mise)をMISE_IGNORED_CONFIG_PATHSに自動的に設定する。これによりmise.tomltrustは不要になり、ユーザーが個別に設定したグローバルなツールバージョンも一切参照しない。実際に./bin/mise installmise.tomlのツールをインストールしても、実体は.mise/installs配下に作られ、ユーザーの~/.local/share/miseには一切影響しない。

-V/–versionで固定するmiseのバージョン

-V(--version)を付けると、生成時点のmiseのバージョンではなく指定したバージョンをスクリプトのデフォルト値として埋め込める。

$ mise generate install-script --version 2026.5.0 --write ./bin/mise

省略した場合は生成コマンドを実行した時点のmiseのバージョンがデフォルト値になる。どちらの場合も、実行時に環境変数MISE_VERSIONを指定すればスクリプト側のデフォルト値を上書きできる。

–windowsでWindows用ランチャーもあわせて生成する

生成されるスクリプトは#!/usr/bin/env bashで始まるため、Windowsではそのまま実行できない。--writeと組み合わせて--windowsを付けると、同じ内容を実行できる.cmdファイルもあわせて生成される。

$ mise generate install-script --write ./bin/mise --windows
Wrote to ./bin/mise
Wrote to ./bin/mise.cmd

生成したbin/misebin/mise.cmdはどちらもリポジトリにコミットしておく。Windows環境のcontributorはbin/mise.cmdを実行するだけで、Linux/macOS側と同じように自動インストールされたmiseを使える。

旧コマンド名mise generate bootstrapとの関係

mise generate install-scriptは元々mise generate bootstrapという名前だったが、mise bootstrap(マシン全体のプロビジョニング機能)と紛らわしいため改名された。旧名は非推奨ながら引き続き使え、実行すると警告が表示される。

$ mise generate bootstrap
mise WARN  deprecated [cli.generate.bootstrap]: `mise generate bootstrap` is deprecated. Use `mise generate install-script` instead. This will be removed in mise 2027.9.0.

mise 2027.9.0で削除される予定なので、新規に使う場合はmise generate install-scriptを使う。