🔧

miseのGitHub Backendが便利

に公開

はじめに

https://mise.jdx.dev

miseはasdfの代替として説明されることが多いですが、asdf以外にも様々なpackage managerをmise経由で利用することができます。

https://mise.jdx.dev/dev-tools/backends/

例えばnpmやpipxなどでインストールされるCLIもmiseの中で一元管理できます。

# mise.toml

[tools]
go = 'latest'
"npm:secretlint" = "latest"
"pipx:ansible" = "latest"

その中でも GitHub Backend が便利なのでおすすめしたいです。

GitHub Backend とは

https://mise.jdx.dev/dev-tools/backends/github.html

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の命名は似通ってはいますが、厳密なルールはなさそうです。

https://wiki.osdev.org/Target_Triplet
https://goreleaser.com/customization/archive/
https://doc.rust-lang.org/nightly/rustc/platform-support.html

miseのGitHub backendはどのように対象のassetを特定しているのでしょうか。

https://github.com/jdx/mise/blob/main/src/backend/asset_detector.rs

具体的なロジックは上記リンクにあり、ドキュメントにも概要が書いてあります。

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