ぶていのログでぶログ

思い出したが吉日

rtxを使ってstarship+asdfのプロンプトの表示が遅くなる問題を解決する

以前にstarship+asdfでプロンプトの表示が遅くなるのを改善するという記事を書いた。 この時はdirenvを使うことで解決したのだが、どうも最近再発していた。 さすがに、プロンプトの表示が遅いのはストレスなので、他のものに乗り換えるかasdfをやめるかって思っていたら、asdfをRustで再実装したというrtxというのが流れてきたので試してみた。

github.com

rtxを使ってみた感想

結論としてはstarship+asdfで起こっていたプロンプトの表示が遅くなる問題が解決した。 どのくらい早くなったのかを数値で示したいところなのだが、どうもstarship explainで取れない部分*1で遅くなっていたようで数値で測れないのであった…。

(2023/02/06追記:) Enterキーを押し続けたたときの表示差をスクリーンキャプチャしてみた。

youtu.be (追記ここまで)

使い勝手についてはasdfのRustクローンを名乗っているだけあって違和感なく使える。 しかし、fish-shellの場合*2起動時の初期化スクリプト(config.fish)の中で、rtxでインストールしたバイナリを呼び出そうとするとエラーになってしまう問題が出た。 どうやら、rtx activate fishした瞬間にインストールした各プラグインのパスを追加するわけではなく、プロンプトを表示するときにフックを追加しそのフックの中でパスを追加するコマンドを実行していた。 なので、config.fishの中でそのコマンドを実行することで問題が解決できる。 (ついでに補完コマンドも追加しておくとよい)

# config.fish
rtx activate fish | source
rtx hook-env -s fish | source  # プラグインのパスを追加する
rtx complete -s fish | source  # rtxの補完を追加

asdfからの移行

(2023/02/27追記:) id:shucream にmsgpackファイルも移動するとうまく移行できるということを教えてもらった。 詳細はこちら。 (追記ここまで)

rtx公式にはasdfからの移行手順は用意されていないようだった。 asdfのクローンであるから、asdfのデータをrtxのデータディレクトリにもっていけばいけるかな?っと思ったのだがダメだった…。 素直に再インストールするしかなさそうだった。 幸いなことにrtx lsをするとどのプラグインがインストールされていないかわかるので、これを頼りにインストールしていく。

asdfと違いrtx globalすると自動的にrtx plugin addとrtx install latestされるのでとても楽ちんだ。

asdfプラグインによってはエラーになることがある。その時は手動でrtx installすれば回避できると思う。

おまけ:tmuxのバイナリが生成されない

rtx install tmux latest してもバイナリが生成されない…。 どうやら、asdf-tmuxのインストールスクリプトにバグがありmakeが失敗しても正常にインストールが完了したことになってしまうようだ。

github.com

これを解決するにはGNU Bisonとautomakeをインストールするとtmuxのバイナリが生成できる。

*1:プロンプト表示には関係ない部分なのだろうか?starship timingsでも取れなかった。

*2:ほかのシェルでは試していないのでわからない