痒い所に手が届く。mise (旧rtx) の何がいいのか?
はじめに
年明けに、バージョン管理ツールを asdf から mise に乗り換えました。
mise で管理できる Plugin の一覧は GitHub - mise-plugins/registry: Convenience shortname repository for mise plugins に全て載っています。
ここまで使ってみて、ここがいいなと思った点と、今後使ってみたい機能などを書いていこうと思います。
今後 asdf, direnv の代替ツールとして広がっていく可能性もありそうなツールです。
個人的には、ツールの性質からもフロントからインフラまで、様々な人におすすめできます。
Mise の何がいいのか?
ざっと思い浮かぶところは、こんな感じです。
- asdf と比べて
- 操作が簡単
- CLI が直感的
- direnv と比べて
-
direnv allow
する手間が省けて楽
-
- 既存の設定ファイル群にも互換性があり導入しやすい
詳しく書いていきます。
Asdf と比べて
例えば、asdf で新しいツールを導入するときは、下記のようなコマンドの実行が必要になります。
asdf plugin add node
asdf install node latest:20
asdf local node latest:20
ツールを導入するだけなのに、Plugin 追加して、install して、それを適用して、、、というように、いくつかの工程を踏む必要があります。
mise ではこうです。
mise use node@20
これだけで、Plugin の追加、バージョン Install、config ファイルの更新 (.tool-versions/.mise.toml) まで行ってくれます。
グローバルに適用したい場合は、
mise use -g node@20
オプションをつけるだけ。
非常に直感的で、扱いやすいですよね。
Direnv と比べて
direnv
だと、値を新しく追加したり更新した時に、
direnv allow
で許可をする必要がありますよね。
mise はわざわざ許可しなくても自動で環境変数を設定してくれます。
ここは好みにもよるかもしれませんが
mise で環境変数を設定するときは、下記のコマンドで追加可能です。
mise set NODE_ENV=development
mise の設定は .mise.toml
に集約されてるので、そこから一括でツールや環境変数の設定をしても問題ないです。
私は設定ファイルをリポジトリ管理してるので、基本的にコマンドよりもファイルを直接編集することのほうが多かったりします。
既存の設定ファイル群にも互換性がある
例えばツールのインストールであれば .tool-versions
を利用できたり、環境変数の設定も .mise.toml
から指定すれば .env
などのファイルが読み込めたりできるようになっています。
なので、気軽に導入してみて試験的に使ってみることができるのが mise のいいところだと思います。
今後使ってみたい機能
今気になっている機能は、下記の 3 つです。
- CI Integration
- Tasks
- Using env vars in other env vars
CI Integration
mise には Github Actions の Workflow である GitHub - jdx/mise-action が用意されています。
私は Github Actions を利用することが多いのですが、バージョン管理含めた煩雑な環境構築を、mise 1 つで解消できるのはすごくいいなと思いました。
...
- uses: jdx/mise-action@v2
with:
version: 2023.12.0 # [default: latest] mise version to install
install: true # [default: true] run `mise install`
cache: true # [default: true] cache mise using GitHub's cache
# automatically write this .tool-versions file
experimental: true # [default: false] enable experimental features
tool_versions: |
shellcheck 0.9.0
# or, if you prefer .mise.toml format:
mise_toml: |
[tools]
shellcheck = "0.9.0"
- run: shellcheck scripts/*.sh
...
Continuous integration | mise-en-place
Tasks
まだ Experimental Status ではありますが、mise には Task を定義することのできる機能があります。
package.json
で定義できるような、コマンドのラッパー的な機能です。
また、ファイルの変更を検知して、自動で Task を実行するような機能もあるようです。
この辺りの機能も、今後どこかのタイミングで利用してみたいです。
Using Env Vars in other Env Vars
環境変数の定義に、別の環境変数を利用できる機能も提供予定となっているそうです。
痒いところに手が届きそうな機能でこちらも今後リリースされたら使ってみたい機能です。
おわりに
ここに書いた内容だけでも、十分 mise の恩恵を受けられると思います。
他ツール群との互換性があり導入も簡単なので、とりあえず入れてみることをおすすめします!
こちらもおすすめ
Discussion