ツールの実体だけをmise管理外に取り出したい

Dockerイメージのビルドなどで、mise自体を組み込まずにツールの実行ファイルだけを特定のディレクトリに配置したい場合がある。mise install-intoは、mise.tomlやmiseのインストール先ディレクトリを経由せず、指定したパスに直接ツールをダウンロード・展開するコマンドである。

mise install-intoの基本

$ mise install-into jq@1.7.1 ./myjq
mise jq@1.7.1        [1/2] install
mise jq@1.7.1        [1/2] download jq-macos-arm64
mise jq@1.7.1        [2/2] checksum jq-macos-arm64
mise jq@1.7.1        [2/2] extract jq-macos-arm64
mise jq@1.7.1      ✓ installed

$ ls ./myjq
jq

$ ./myjq/jq --version
jq-1.7.1

TOOL@VERSIONと展開先のパスを指定するだけで、mise管理下と同じ方法でツールをダウンロード・展開する。展開後のディレクトリ構成はツールによって異なり、jqのように実行ファイルが直下に置かれるものもあれば、bin/サブディレクトリを持つものもある(【mise】mise bin-pathsで実行ファイルのあるディレクトリを確認する 参照)。

mise管理下のインストールとは完全に独立している

mise install-intoで展開したツールは、mise lsの一覧やmise.tomlに一切現れない。mise管理下のインストール状況とは完全に独立している。

$ mise use jq@1.7.1
mise mise.local.toml tools: jq@1.7.1

$ mise ls
Tool  Version  Source            Requested
jq    1.7.1    mise.local.toml   1.7.1

$ mise install-into jq@1.7.1 ./myjq2

$ mise ls
Tool  Version  Source            Requested
jq    1.7.1    mise.local.toml   1.7.1

同じjq@1.7.1をmise管理下に既にインストールした状態でinstall-intoを実行しても、mise lsの結果は変わらない。既存のmise管理下のインストール実体を再利用したり、シンボリックリンクを張ったりすることもなく、ダウンロードから展開までを毎回独立して行う。

再実行すると展開先ディレクトリを削除してから作り直す

展開先ディレクトリが既に空でない状態のまま同じコマンドを再実行すると、既存の内容を残すか確認するプロンプトが表示される。-yを付けると確認なしで既存のディレクトリを削除してから改めてダウンロード・展開し直す。

$ mise install-into jq@1.7.1 ./myjq -y
mise jq@1.7.1        [1/3] uninstall
mise jq@1.7.1        [1/3] remove ./myjq
mise jq@1.7.1        [2/3] install
mise jq@1.7.1        [2/3] download jq-macos-arm64
mise jq@1.7.1        [3/3] checksum jq-macos-arm64
mise jq@1.7.1        [3/3] extract jq-macos-arm64
mise jq@1.7.1      ✓ installed

-yを付けずに非対話(パイプ経由など標準入力がない状態)で実行すると、確認できないままエラーになり削除・展開は行われない。

$ mise install-into jq@1.7.1 ./myjq < /dev/null
mise ERROR refusing to overwrite non-empty directory ./myjq; pass --yes or choose an empty/new path

CIなど非対話環境で使う場合は-yを付けておく。また展開先の親ディレクトリが存在しない場合は自動的に作成される。

$ mise install-into jq@1.7.1 ./nested/deep/myjq
mise jq@1.7.1      ✓ installed

$ ls ./nested/deep/myjq
jq

mise linkとは逆方向のコマンド

【mise】mise linkでインストール済みツールをmise管理下に登録する は、mise管理外にインストール済みのツールをmise管理下に取り込むコマンドである。mise install-intoはその逆で、mise管理下でインストール可能なツールを、mise管理外のディレクトリに取り出すコマンドといえる。