🦊

asdf-plugin以外も使えるmise backendsの話

2024/07/21に公開

導入

asdf便利だよね、って言っていたらrtxっていうrust製のより素早い奴が出てきて、気がついたらmiseって名前になっていたmiseのバックエンドの話になります。mise便利!!って話やasdfからmiseへの移行やrtxからmiseへのマイグレーションのような話はよく見かけるけど、このバックエンドについてはそんなに見かけないので書いてみます。
https://mise.jdx.dev/dev-tools/backends/

mise backendsとは

そもそも、普段特別なことを意識しなくても使っているコマンド自体がasdfをバックエンドとするツールの導入を行っています。たとえば、以下はNeovimを導入するコマンドですが、内部的にはasdf-neovimというコミュニティ作成のasdfプラグインでNeovimが導入されます。プラグインはそのツールを導入するための手順が書かれたシェルスクリプトでできています。

$ mise use -g neovim

今回のネタはその他のバックエンドも実は使えるという話です。個別の話としては冒頭のmise backendsのリンクをご覧ください。なお、この機能は執筆時点(2024/07/21)では試験的な機能のため、有効にするコマンドを打って有効化する必要があります。以降はこれが有効化されているのを前提とします。

$ mise settings set experimental true

pipx backendの場合

pipxは環境を汚さないようにpythonのCLIツールを入れるツール、というざっくりとしたイメージを持っている私ですが、このバックエンドを指定することでmiseからpipxでCLIツールを導入して管理できます。前提としてpipx自体がまず必要なので、miseで入れます。

$ mise use -g pipx

次に、httpieを入れてみましょう。以下のコマンドで導入できます。

$ mise use -g pipx:httpie
creating virtual environment...
creating shared libraries...
upgrading shared libraries...
installing httpie from spec 'httpie==3.2.3'...
done! ✨ 🌟 ✨
mise pipx:httpie@3.2.3 ✓ installed
mise ~/.config/mise/config.toml tools: pipx:httpie@3.2.3

無事入りました。mise currentで現在有効な導入済みランタイムのバージョンを見てみましょう。asdf以外のバックエンドで導入したツールにはバックエンド名:ツール名 バージョンで記録されます。

$ mise current
pipx 1.6.0
pipx:httpie 3.2.3

miseの設定ファイルは~/.config/mise/config.tomlです。ここにも同じような形で記録されます。バージョンを指定しない導入をしたので"latest"と表記されています。異なるバックエンドを使用するために有効化した試験機能を使用する設定もこのファイルに記載されます。このファイルをdotfilesとして持ち運ぶといろいろと捗りそうですね。

$ cat ~/.config/mise/config.toml
[tool]
pipx = "latest"
"pipx:httpie" = "latest"

[settings]
experimental = true

その他のバックエンド

記事公開時点で使用できるバックエンドは以下です。

  • asdf
  • cargo
  • go
  • npm
  • pipx
  • spm
  • ubi

魅力

  • miseから様々なCLIツールを一元管理できる(導入からアップデートも楽々)
  • asdfプラグイン化されていないツールもバックエンド越しに導入・管理可能

おわりに

有名どころなツールは結構asdf-plugin化されている物が多く、普通に導入できたりしますが、そうじゃないツールは個別でそれぞれのバックエンドを通じて直接導入するような設定を書いていたのが、miseで一元管理できるようになるのはとてもハッピーなことだと思っています。バックエンドは更に増えそうな雰囲気をmiseのドキュメントページからは感じるので今後の発展にも期待します。

References

https://asdf-vm.com/ja-jp/
https://mise.jdx.dev/

Discussion