miseのGitHub Backendが便利
はじめに
miseはasdfの代替として説明されることが多いですが、asdf以外にも様々なpackage managerをmise経由で利用することができます。
例えばnpmやpipxなどでインストールされるCLIもmiseの中で一元管理できます。
# mise.toml
[tools]
go = 'latest'
"npm:secretlint" = "latest"
"pipx:ansible" = "latest"
その中でも GitHub Backend が便利なのでおすすめしたいです。
GitHub Backend とは
GitHub Backendとは、GitHubのrelease assetにあるバイナリをダウンロードして使用できるようにするbackendです。
例えばGo, Rust製CLIのようにシングルバイナリで配布できるようなツールを管理するのに便利です。
~/work/t
% cat mise.toml
[tools]
go = 'latest'
"npm:secretlint" = "latest"
"pipx:ansible" = "latest"
"github:cli/cli" = "2.83.0"
~/work/t
% mise install
~/work/t
% which gh
/Users/koh/.local/share/mise/installs/github-cli-cli/2.83.0/bin/gh
~/work/t
振る舞い
GitHub releaseのassetの命名は似通ってはいますが、厳密なルールはなさそうです。
miseのGitHub backendはどのように対象のassetを特定しているのでしょうか。
具体的なロジックは上記リンクにあり、ドキュメントにも概要が書いてあります。
Asset Autodetection
When no asset_pattern is specified, mise automatically selects the best asset for your platform. The system scores assets based on:
- OS compatibility (linux, macos, windows)
- Architecture compatibility (x64, arm64, x86, arm)
- Libc variant (gnu or musl for Linux, msvc for Windows)
- Archive format preference (tar.gz, zip, etc.)
- Build type (avoids debug/test builds)
ざっくり説明すると、OS, Arch等の情報を元に一致度を計算し、点数の高いassetを対象としてダウンロードします。
v2025.11.11 時点の計算方法については以下です。
| 項目 | スコア |
|---|---|
| OS が一致 | +100 |
| OS が不一致 | -50 |
| アーキテクチャが一致 | +50 |
| アーキテクチャが不一致 | -25 |
| libc が一致 | +25 |
| libc が不一致 | -10 |
| アーカイブ形式 (.tar.gz, .zip など) | +10 |
| それ以外 | 0 |
| debug または test を含む | -20 |
これによりassetの命名規則が定まっていなくても、ある程度の確率で対応するバイナリを取得できます。
なお asset_pattern などのパラメータを設定することで、手動で命名規則を修正できます。
まとめ
自作ツールの配布にも便利ですし、ローカルでビルドしなくて済むため、ものによってはセットアップの高速化にも繋がりそうです。
Discussion