レジストリに登録されていないツールをリポジトリに同梱して配布したい
【mise】mise registryでツール名とバックエンド確認をする
で紹介したツールの探し方は、mise.tomlの[tools]にツール名を書く前提である。
【mise】mise pluginsでプラグインを管理する
で紹介した外部プラグインの追加も同様に、mise.tomlにツール名を書いて使う。
社内ツールのように配布URLだけが決まっていてレジストリには存在しないツールを、リポジトリのbin/配下に置いて誰でもすぐ実行できるようにしたい場合には、mise generate tool-stubが使える。
tool-stubとは何か
mise generate tool-stubが生成するのは、mise.tomlではなく実行可能な単一ファイル(スタブ)である。中身はTOMLだが、1行目のshebangによって直接実行できる。
$ mise generate tool-stub ./bin/jq --url "https://github.com/jqlang/jq/releases/download/jq-1.8.2/jq-macos-arm64"
mise download jq-macos-arm64 ✓ done
Generated tool stub: ./bin/jq
Generated Windows launcher: ./bin/jq.cmd
#!/usr/bin/env -S mise tool-stub
url = "https://github.com/jqlang/jq/releases/download/jq-1.8.2/jq-macos-arm64"
checksum = "blake3:651534e32cf0d20894158c10fe984c89160650ca8e81ca9a545b501db5acac9a"
size = 841504 # 821.8 KiB
指定したURLからバイナリをダウンロードし、checksumとファイルサイズを自動検出してスタブファイルに埋め込む。実行権限も付与され、Windows向けの.cmdランチャーも同時に生成される。
スタブを実行するとツールが自動でダウンロードされる
生成された./bin/jqをそのまま実行する。
$ ./bin/jq --version
mise http:jq@url-8078d01e [1/4] install
mise http:jq@url-8078d01e [1/4] download jq-macos-arm64
mise http:jq@url-8078d01e [3/4] extracting to cache
mise http:jq@url-8078d01e [3/4] extract jq-macos-arm64
mise http:jq@url-8078d01e [4/4] generate checksum jq-macos-arm64
mise http:jq@url-8078d01e ✓ installed
jq-1.8.2
初回実行時にmiseのキャッシュへダウンロード・展開され、jq本体が実行される。2回目以降はキャッシュ済みの実行ファイルがそのまま使われ、ダウンロードは発生しない。
$ ./bin/jq --version
jq-1.8.2
–platform-urlで複数プラットフォームに対応する
単一の--urlはコマンドを実行した環境向けの1エントリだけを書き込むが、--platform-urlを使うとプラットフォームごとに異なるURLを指定できる。
$ mise generate tool-stub ./bin/jq \
--platform-url linux-x64:https://github.com/jqlang/jq/releases/download/jq-1.8.2/jq-linux-amd64 \
--platform-url macos-arm64:https://github.com/jqlang/jq/releases/download/jq-1.8.2/jq-macos-arm64
#!/usr/bin/env -S mise tool-stub
[platforms.linux-x64]
url = "https://github.com/jqlang/jq/releases/download/jq-1.8.2/jq-linux-amd64"
checksum = "blake3:4311c64431be63fb82189e7e0950b060b39046e865ebb796ec3fa974309c4986"
size = 2267912 # 2.2 MiB
[platforms.macos-arm64]
url = "https://github.com/jqlang/jq/releases/download/jq-1.8.2/jq-macos-arm64"
checksum = "blake3:651534e32cf0d20894158c10fe984c89160650ca8e81ca9a545b501db5acac9a"
size = 841504 # 821.8 KiB
既に生成済みのスタブファイルに対して、別のプラットフォーム向けの--platform-urlを指定すると、既存の内容を上書きせずに追記される。すべてのプラットフォーム向けのバイナリを一度に用意できない場合でも、CIの各ジョブから少しずつ追記していける。
–skip-downloadでchecksumなしのスタブをすばやく作る
--skip-downloadを付けると、URLの妥当性やchecksumを検証せずスタブを生成できる。
$ mise generate tool-stub ./bin/jq --url "https://github.com/jqlang/jq/releases/download/jq-1.8.2/jq-macos-arm64" --skip-download
Generated tool stub: ./bin/jq
Generated Windows launcher: ./bin/jq.cmd
#!/usr/bin/env -S mise tool-stub
url = "https://github.com/jqlang/jq/releases/download/jq-1.8.2/jq-macos-arm64"
checksumとsizeのフィールドがないスタブになる。ダウンロード自体をスキップするため高速だが、実行時のファイル改ざん検知はできなくなる。
