
開発ツールの管理はmiseが良さそう
2024年01月15日
今まで開発ツールのバージョンはNode.jsのみfnmで管理していました。業務でPHPのバージョン管理をする必要が出てきたため色々試していたところ、miseが良さそうです。
おもむろに~/.local/bin
以下にバイナリをダウンロードします。miseは流行りのRust製のユーティリティなのでワンバイナリです。またHomebrewパッケージやDebianリポジトリも用意されています。
curl https://mise.jdx.dev/mise-latest-linux-x64 > ~/.local/bin/mise
シェルは最近はfishを使っているので、config.fishをこんな感じに。もちろんbashやzshなど他のシェルにもきちんと対応しています。
$HOME/.local/bin/mise activate fish | source
mise completion fish > $HOME/.config/fish/completions/mise.fish
fish_add_path --path --append $HOME/.local/share/mise/shims
とりあえずバージョン管理するものの定番として、nodeを入れてみましょう。
~
❯ mise use node@lts --global
mise ~/.config/mise/config.toml tools: node@20.11.0
~
❯ which node
/home/lon/.local/share/mise/installs/node/lts/bin/node
同種のツールであるasdf用のプラグインがそのまま使えるので、いろいろ管理できます。
~
❯ mise use neovim@latest --global
mise ~/.config/mise/config.toml tools: neovim@0.9.5
~
❯ which nvim
/home/lon/.local/share/mise/installs/neovim/latest/bin/nvim
~
❯ mise use php@8.3 --global
mise ~/.config/mise/config.toml tools: php@8.3.1
~
❯ which php
/home/lon/.local/share/mise/installs/php/8.3/bin/php
~
❯ php -v
PHP 8.3.1 (cli) (built: Jan 15 2024 22:36:57) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.1, Copyright (c) Zend Technologies
macOSだとPHPのビルドがちょっとでも古いと通らなくてつらい、という話は聞きますが、ひとまず業務で必要なのは7.4系までで、これはSonomaでもなんか色々やっていたらビルドが通ったので良しとします。
さらに現在はexperimental扱いですが、cargoやnpmでインストールするツール類まで管理できます。グローバルにインストールしたい物があるなら便利です。yarn 1系なんかはこれで入れておきたいですね。
~
❯ mise use npm:yarn@1 --global
mise ~/.config/mise/config.toml tools: npm:yarn@1.22.21
~
❯ which yarn
/home/lon/.local/share/mise/installs/npm-yarn/1/bin/yarn
~
❯ mise use cargo:eza --global
mise ~/.config/mise/config.toml tools: cargo:eza@0.17.1
~
❯ which eza
/home/lon/.local/share/mise/installs/cargo-eza/latest/bin/eza
asdfとの違いは?
同種のツールで以前からあるものとしてasdfがあり、こちらも広く使われています。実際バージョン管理用のファイルやプラグインに互換性があり、asdfからの置き換えを意識して作られたことが伺えます。
現時点での違いとしては、shimを使用しないためパフォーマンスが優れているらしいという点と、cargoやnpmでインストールするコマンドの管理ができるという点ぐらいですが、プラグインレジストリの管理などでasdfと方向性が異なるため、今後は少しずつ差が広がっていくのではないかと思っています。