コマンド実行時に意図せずツールがインストールされる

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_INSTALL0を設定すると、この自動インストールが無効になる。

$ 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/reponpm:packageのような生のバックエンド指定でインストールするツールは、コマンド名とツールの対応表を持たないため、この自動インストールの対象にはならない。