TL;DR
- zshのプロンプト表示に遅延が発生していた
- 原因:asdf-javaが提供する、
JAVA_HOME
切替スクリプトがprecmdフックにより毎回動いていたため - asdfが直接の原因ではないが、これをきっかけにmiseに移行した
環境
asdfとは
複数のツールのバージョンを管理してくれるCLI
プロジェクトごとに.tool-versions
を置いてあげるといちいち違うプロジェクトのためにバージョンを切り替えなくて済む
$ cd a_directory && node -v
# node version written in a_directory/.tool-versions
$ cd ../other_directory && node -v
# node version written in other_directory/.tool-versions
そして、asdfのプラグインの一つであるasdf-javaでJavaのバージョン管理をしていた
現象
原因
asdf-javaが提供するset-java-home.zshがprecmdで実行されるように登録されていた。つまり、プロンプトを表示する直前に毎回このスクリプトが走るようになっていた
issueも上がっていたので、辿ってみると...
try rtx, it updates JAVA_HOME without any need for set-java-home.zsh and doesn't have any meaningful performance impact.
じゃあそうしますか!^
※rtxはmiseの前身の名前で、NVIDIAのグラフィックボードRTXと混同するから改名しただけらしい(法的にではなく、単にググラビリティの問題とのこと https://mise.jdx.dev/rtx.html)
asdfからmiseに移行
asdf-javaが提供する1スクリプトを改善すれば済む話なのでasdf本体には関係ないのだが、issueコメントに誘われmiseに移行してみる
Quickstartからインストール
新たに管理するプラグインはconfig.toml
が生成されて管理されるらしい
既存の.tool-versions
にも対応しているのが嬉しい
$ mise list
Plugin Version Config Source Requested
java adoptopenjdk-8.0.312+7 ~/.tool-versions adoptopenjdk-8.0.312+7
java 17.0.2
jq 1.6 ~/.tool-versions 1.6
node 20.11.1
node 20.12.2 ~/.config/mise/config.toml 20
フックの登録無しでJAVA_HOME
も変わってる。嬉しい
$ cd a_directory && echo $JAVA_HOME
/Users/macaroni/.local/share/mise/installs/java/adoptopenjdk-8.0.312+7
$ cd ../other_directory && echo $JAVA_HOME
/Users/macaroni/.local/share/mise/installs/java/17.0.2
たぶんここら辺とかかな・・・