nodeとかrubyとか特定のコマンドを使うときまでバージョンマネージャのローディングが遅延できたらなー思って調べてみたら、alias/unaliasを用いて遅延ロードっぽいことをやるテクニックを知った。
例えばnvmは以下のようにnodeやnpmなどのようなコマンドが呼び出されたときに初めてロードさせられる。
export NVM_DIR="$HOME/.nvm" if [ -e "$NVM_DIR/nvm.sh" ]; then alias nvm='unalias nvm node npm && . "$NVM_DIR"/nvm.sh && nvm' alias node='unalias nvm node npm && . "$NVM_DIR"/nvm.sh && node' alias npm='unalias nvm node npm && . "$NVM_DIR"/nvm.sh && npm' fi
やっていることはシンプルで、nvmが必要なコマンドにaliasを貼っておき、コマンドが必要になったときにはじめてnvmが初期化されるようになっている。
一度呼び出されたらunaliasするので、次回以降はnvmの初期化は行われない。
同じくrbenvもやれる
export PATH="$HOME/.rbenv/bin:$PATH" if [ -e "$HOME/.rbenv" ]; then alias ruby='unalias ruby bundle gem && eval "$(rbenv init -)" && ruby' alias bundle='unalias ruby bundle gem && eval "$(rbenv init -)" && bundle' alias gem='unalias ruby bundle gem && eval "$(rbenv init -)" && gem' fi
なお、元ネタは以下のツイートの記事。
Love this technique to achieve lazy loading of nvm and rbenv! They are too slow to run at terminal startup😂 https://t.co/OOBRtFF0ep
— IzumiSy™ (@sy_izumi) 2020年5月23日