コマンド実行時に意図せずツールがインストールされる
miseはmise.tomlにツールを書いておくと、【mise】mise installで設定ファイルに書いたツールをインストールする
で紹介したmise installを実行しなくても、そのコマンドを初めて実行したタイミングで自動的にインストールしてくれる。便利な機能である一方、シェルの挙動を調べているときにこの自動インストールが割り込んでくると、原因の切り分けを難しくする場合がある。環境変数MISE_NOT_FOUND_AUTO_INSTALLを設定すると、この自動インストール機能を無効化できる。
既定の動作
mise.tomlにまだインストールしていないツールを書いておく。
[tools]
dasel = "latest"
この状態でdaselコマンドを実行すると、シェルの「command not found」ハンドラ経由でmiseが該当コマンドを提供するツールを判別し、自動的にインストールしてから実行する。
$ dasel --version
mise dasel@3.11.2 [1/2] install
mise dasel@3.11.2 [1/2] download dasel_darwin_amd64
mise dasel@3.11.2 [2/2] checksum dasel_darwin_amd64
mise dasel@3.11.2 [2/2] extract dasel_darwin_amd64
mise dasel@3.11.2 ✓ installed
dasel version 3.11.2
この機能はmise activateによるシェル統合が有効になっている場合に働く。
MISE_NOT_FOUND_AUTO_INSTALLで無効化する
MISE_NOT_FOUND_AUTO_INSTALLに0を設定すると、この自動インストールが無効になる。
$ export MISE_NOT_FOUND_AUTO_INSTALL=0
$ gum --version
zsh: command not found: gum
自動インストールされず、mise管理下にないコマンドを実行したときと同じ「command not found」がそのまま表示される。無効化した場合でも、【mise】mise installで設定ファイルに書いたツールをインストールする
のとおり、mise installを実行すれば通常通りインストールできる。
シェルの動作がおかしいときに疑う設定
未知のコマンドを叩くたびにネットワークアクセスが発生してシェルの応答が遅くなる、意図しないバージョンが自動インストールされてしまうなど、この機能が原因と思われる不可解な挙動が起きた場合は、MISE_NOT_FOUND_AUTO_INSTALL=0を設定して無効化した上で問題が再現するか切り分けるとよい。シェルの起動ファイルへ書く代わりに、mise settings set not_found_auto_install falseを実行して恒久的に無効化する方法もある。
レジストリにないツールは対象外
自動インストールは、mise本体が管理するレジストリの情報からコマンド名を手がかりにツールを判別する仕組みである。ubi:owner/repoやnpm:packageのような生のバックエンド指定でインストールするツールは、コマンド名とツールの対応表を持たないため、この自動インストールの対象にはならない。
