mise (旧 rtx) で脱 node-build (asdf)
年明けはまず環境整備から、ということで今年は mise を導入することにした。
去年まで rtx とか rtx-cli という名前でやってた Rust 実装の asdf 代替の多用途バージョン管理ツール。この年明けに急に mise にリネームしたよ、というニュースが流れてきて、気になって見てみたら良さそうだった。
一般的な解説は "rtx" でググると日本語記事も出てくるのでそっちを見て欲しいけど、個人的な asdf に対するメリットはこのあたり。
- とにかく速い
- asdf は Node の最新バージョンの反映が node-build 依存で、更新が数日遅れることがあった
- 結果的に手動で定義ファイルを更新していたが、処理速度も遅く面倒だった
- 参考: asdf で node-build の定義ファイルを手動更新する
- asdf はコマンド体系が謎だった(自分には)
- 例えば v20 系の最新をインストールするのに
latest:20
とか入力する必要があった -
node
じゃなくてnodejs
って入れるのも微妙だった - mise では
mise install node@20
で OK - でも基本は asdf ベースなのであまり新しく覚える感は少ない
- 例えば v20 系の最新をインストールするのに
- asdf は shim の管理が面倒、npm 周りの rehash 漏れでつまづくことが何度かあった
- mise は PATH 方式なのでそこの心配は不要
- そのまま使いたい asdf の機能はちゃんと残している(センスが良い)
- 例えば
.node-version
などのいわゆる legacy file 対応がデフォルト有効(asdf はデフォルト無効)
- 例えば
特に node-build 周りの問題を解消できたのは非常にスッキリした(詳細後述)。
逆に個人的なデメリット、できなかったことはこのあたり。
- arm64 バイナリが提供されていない Node の v14 以前の x64 バイナリのインストールが困難
- 個人的に古いバージョンでの検証をすることが稀によくあるため
- asdf では arch コマンドを使うことで x64 バイナリをインストールできた
- mise では work around として mise 自体の x64 バイナリは提供されてはいる
- 将来期待しつつ asdf をこの用途で残しておくことにした
-
MISE
をMSIE
に空目してしまう- 職業病
前提として、自分は asdf をそこまでヘビーに使っておらず、Node, Python, Ruby など一般的な言語ランタイムのインストールとバージョン管理だけに使っていた。今回も mise に外部のプラグインは入れず、コアだけで使えている。また現時点では direnv 系の機能は試していない。
そういうシンプルな使い方をする限り、あまり詰まるポイントはなかった。
VS Code などの IDE 統合について、一般に IDE 等との連携では shim 方式より PATH 方式の方が相性が悪いとされていて、公式ドキュメント には色々書いてある。が、自分は追加設定なしで VS Code 内のアレコレが動いているので今のところ気にせず使っている。
Node.js のバージョン定義ファイルとキャッシュ関連の Tips
mise では、自分で Node などコアなランタイムのパース済みバージョン定義ファイルを配信していて(例: https://rtx-versions.jdx.dev/node, https://rtx-versions.jdx.dev/python )、これを高速に fetch/cache して使っている。リアルタイムに fetch してると気づかないぐらいめちゃくちゃ速い。
もしこの独自定義ファイルの更新が遅いようなら、Node 本家のバージョン定義を直接 fetch することもできる。この辺の処理でやっていて、
つまり環境変数 MISE_NODE_MIRROR_URL=https://nodejs.org/dist/
をつければ本家最新のバージョン定義が参照できる(最後の /
は必須)。
ただし、fetch したバージョン定義ファイルは 1 時間ローカルにキャッシュされるので、強制的に fetch させるには MISE_FETCH_REMOTE_VERSIONS_CACHE=0s
を付けるか、キャッシュ削除が必要。キャッシュディレクトリは mise cache
すれば確認できる。macOS だとキャッシュはデフォルトで以下のパスに message pack で保存されていた。
/Users/teppeis/Library/Caches/mise/node/remote_versions.msgpack.z
こいつを消せば OK。
2024 年はさらにツールの Rust 化が進みそうですなー。
というわけで、今年もよろしくお願いします。
Discussion