ハンドルネームの敬称は省略できます

🦀パソコンを叩く日々🐈

ツール管理を Homebrew から mise に段階的に移行する

つい最近 PC を初期化してクリーンな環境を得たので、ようやく重い腰を上げて mise を使い始めることにした。 これまでは rbenv や plenv、pyenv といった各種言語ごとのツールを使ってバージョンを切り分けていたり、すぐに使うツールは雑に brew で入れるなどをしていた。 別に困りはしなかったが、PC を初期化するタイミングで導入する。

導入と乗り換えの方針

一気にガッと変えるのは大変なので、ちょっとずつ試していける感じでやっていけると良いだろう。

まずは mise が使える環境を準備して移行手段が確立できれば、あとはやるだけになると思うし、そうなっているのが良さそう。 ひとまず今回はこれを目標にする。

mise 環境を準備する

このドキュメントに従って進める

mise.jdx.dev

mise のインストール

自分の好きな方法で mise をインストールする。 今回の目標は完全に脱 Homebrew ではないので、一旦 brew でインストールした。

mise を常に activate する

mise でインストールしたツールは通常 mise exec で実行する。これだとあまりにも使い勝手が悪い。

これを解決するために mise では mise activate というコマンドが提供されている。

これを使うと PATH を自動で設定してくれるため、トップレベルでインストールしたツールを実行することができる。

シェルで都度実行するのは面倒なので .zshrc に書き込んでおく。 fish ユーザーはなんと何もしなくても有効化されるらしい。

公式では以下のコマンドを実行するように案内されていたので、ここでも同じものを掲載するがそれぞれ好きな方法で好きな場所に書き込んでほしい。

$ echo 'eval "$(mise activate zsh)"' >> ~/.zshrc

Homebrew で明示的にインストールしたものを洗い出す

移行のためには自分でインストールしたものを思い出す必要があるが、Homebrew であればその必要はなくbrew leaves を叩くだけで良い。

実行すると以下のような結果が得られるので、どこかにメモしておく。

$ brew leaves
ariga/tap/atlas
coreutils
daipeihust/tap/im-select
ffmpeg
gh
git
gnupg
go-task
imagemagick
k1low/tap/mo
mise
n
neovim
starship
zoxide
zsh-autosuggestions
zsh-completions
zsh-syntax-highlighting

すでにちょっとずつ移行している最中に実行した結果なのでリストされているパッケージが少ないが、最初はもっと多くなると思う。

実際に使うものを見定めて mise でインストールする

mise でツールをインストールするには mise use -g [tool_name] を実行する。

今回はプロジェクト単位ではなく、ユーザー全体で利用したいツールなのでグローバルな設定としてインストールする。

さっき入手したリストを使って、現在でも必要なツールのみをインストールする。

大体同じ名前で実行すると同じパッケージが入手できるはずだと信じて実行すると、普通にコケる。

❯ mise use -g go-task
mise ERROR Failed to install go-task@latest: go-task not found in mise tool registry

Did you mean?
  go-sdk
  go
  go-jira
  aqua:kayac/go-katsubushi
  aqua:ipld/go-car

いちいち検索してやるのは面倒と思っていたら、mise ではインタラクティブなインストール機能を提供している。 ツール名を指定せずに mise use を実行すると画面いっぱいにツール名と説明がリストされる。ええやんええやん。

$ mise use -g

mise use -g を実行した結果

これを使いつつちょっとずつツールをインストールしていく。 ヒットしないものも存在するが、ヒットしない = mise で使えないではないので注意されたい。

じゃあどうするかは次に説明する。

mise backend

mise には Backend という概念があり、データソースを指す。

用意されている Backend には npm や gem、cargo といった言語ごとのパッケージ管理ツール、パッケージレジストリがあり、これらをそのまま利用できる。

mise.jdx.dev

バックエンドを指定するときはnpm:@google/gemini-cli のように backend 名を prefix としてつけるだけで良い。

例えば、僕の好きな git-wt というツールがあるのだが、これはインタラクティブ検索ツールには表示されない。

github.com

README ではインストールに以下のような go install を実行することが書かれている。

$ go install github.com/k1LoW/git-wt@latest

これを mise でやる場合、以下のように書き換える。

$ mise use -g go:github.com/k1LoW/git-wt@latest

とても便利。

GitHub backend

GitHub Release でリリースしているツールも先と同じようにインストールすることができる。

最近よく使っている k1LoW/mo というツールがあり、READMEでは brew のインストール方法しか案内されていない。

github.com

よくみると GitHub Release があるのでこれを利用する。この場合は以下のように実行できる。

❯ mise use -g github:k1LoW/mo
github:k1LoW/mo@1.1.0      verify SLSA provenance                       ✔
mise ~/.config/mise/config.toml tools: github:k1LoW/mo@1.1.0

便利。

おわりに

mise を使い始めることができて、移行方法が確立できたのであとは地道にやるだけになった。

当初は Nix を使うことも検討したがラップトップの容量がそこまで大きくないのと学習コストの高さから今回は見送った。 どこかのタイミングで入門してみたいが、やるなら買い換えた時になるだろう。