ランタイム管理ツールasdfと互換性のある、rtxを使い始めた。
asdfのプラグインエコシステムに乗っかっていて、できることはasdfと基本的には同じのようだが、はやい1などのメリットがある(後述)。
切り替え
切り替えは以下のような手順で進めた。dotfilesの差分はこんな感じ yammerjp/dotfiles 6a6951c。
- シェルの設定ファイル(.zshrcなど)に書かれているasdfの読み込みをやめる
私の場合はsheldonのプラグインにしていたので、~/.config/sheldon/plugins.tomlの記述をひとまずコメントアウトした。
- rtxをいれる
Apple SiliconのmacOSを使っていたら以下のような感じ。
$ curl https://rtx.pub/rtx-latest-macos-arm64 > ~/.local/bin/rtx
$ chmod u+x ~/.local/bin/rtx
# ~/.local/bin/はPATHが通っている前提
- rtxの読み込みをシェルの設定ファイルに書く
複数端末で同じシェルの設定を書いているので、rtxをインストールしている端末だけに反映させたい。
以下のような内容を.zshrc
に追記
if (which rtx > /dev/null); then
eval "$(rtx activate zsh)"
fi
- rtxの設定ファイルを配置
~/.config/rtx/config.toml
に、以下のような内容のファイルを置く
[tools]
awscli = ['latest']
go = ['latest']
# heroku-cli = ['latest']
nodejs = ['latest', 'lts']
ruby = ['latest', '2.7.8']
php = ['latest', '7.4.33']
terraform = ['latest', '1.0.5', '1.3.1', '1.3.3', '1.3.4', '1.3.6', '1.3.7']
[settings]
jobs = 4
experimental = true
- 各種ランタイムをインストール
rtx i
とすれば、設定ファイルを見て足りないものを全部インストールしてくれるらしい
$ source ~/.zshrc
$ rtx i
いいところ
- 設定ファイルがXDG Base Directoryに従っている。すっきりしていい。
rtx i
とだけ実行すればいいので良いので楽。わかりやすい。- 設定ファイルに複数バージョンを記述できる。
- インストールが早い。並列で実行してくれる。
- シェルの起動時に、設定ファイルにあるのに未インストールのものがあったら警告してくれたりする。
なやみ
rtxに限らないが、他のツールを使うための基盤となるツールが増えていくと、それのセットアップが面倒になるという問題をはらんでいる。rtxはRust製なので、OSとCPUに合わせたバイナリを手に入れなければならない。
shelldonに, rtxに, ... 気をつけていても、だんだん増えていく。asdfはシェルスクリプトでできていて、どの端末でも切り替えなく入れられるのでその点はいいのだけど、rtxはさきに書いたメリットがあるので使っていきたいところ。
妥協案として、dotfilesリポジトリにバイナリをcommitしてしまって、yadmのalternate filesで環境ごとに実行ファイルを切り替えつつ使う、みたいにすると楽なのかもしれないとも思った。私の用途ではarm64のDariwin、x86_64のLinux、arm64のLinuxがあれば十分なはず。
この場合、バージョンが上がるごとに違うバイナリをcommitすることになるので、dotfilesリポジトリの容量が増えてセットアップ時のダウンロード容量が増えるけど、そこはshallow cloneするなりしていくといい、のだろうか?...。長期的には微妙だろう。
セットアップ用のシェルスクリプトを育ててもいいが、環境や状況によって必要なものの最低ラインが変わるので、区分けやセットアップ手順が煩雑になっていく。なるべくシンプルに、でも便利にするラインのせめぎ合いである。
手動でbrew install
なりcurl >
なりを、コマンド一つ打てばいいというのはその通りなんですが、開発環境の構築はそれの積み重ねなんですね〜
最後はrtxにあんまり関係ない話を書いてしまったが、なにはともあれrtxはいまのところ(まだ1日目)快適に使えている、もっとはやく入れればよかった。
Footnotes
-
この記事に書かれている「はやい」「早い」はすべて体感です ↩