💻

bashの起動が遅い(mac homebrew使用時)

2021/01/20に公開

ターミナルを起動してから入力可能になるまで妙に時間がかかってイライラしてきたので調査。

$ time source .bash_profile

real	0m16.250s
user	0m7.648s
sys	0m8.492s

さすがにこれは遅い。。。16秒以上かかる。
調べていくとhomebrewのパスを調べる関数が遅いことがわかる。特にformulaを指定したやつ

$ time echo $(brew --prefix nvm) > /dev/null

real	0m3.941s
user	0m1.806s
sys	0m2.088s

なので、こういうやつを

if [ -f $(brew --prefix)/etc/bash_completion ]; then
	. $(brew --prefix)/etc/bash_completion
fi

export NVM_DIR="$HOME/.nvm"
[ -s $(brew --prefix nvm)/nvm.sh ] && . $(brew --prefix nvm)/nvm.sh  # This loads nvm
[ -s $(brew --prefix nvm)/etc/bash_completion.d/nvm ] && . $(brew --prefix nvm)/etc/bash_completion.d/nvm  # This loads nvm bash_completion

↓ こういう感じにする

BREW_PREFIX=$(brew --prefix)
if [ -f ${BREW_PREFIX}/etc/bash_completion ]; then
	. ${BREW_PREFIX}/etc/bash_completion
fi

BREW_PREFIX_NVM=$(brew --prefix nvm)
export NVM_DIR="$HOME/.nvm"
[ -s ${BREW_PREFIX_NVM}/nvm.sh ] && . ${BREW_PREFIX_NVM}/nvm.sh  # This loads nvm
[ -s ${BREW_PREFIX_NVM}/etc/bash_completion.d/nvm ] && . ${BREW_PREFIX_NVM}/etc/bash_completion.d/nvm  # This loads nvm bash_completion

だいぶ早くなる

$ time source .bash_profile

real	0m4.763s
user	0m2.216s
sys	0m2.535s

それでも4秒か。。。

$(brew --prefix nvm) が妙に重いので、変更しなくていいなら直書きするのも手

BREW_PREFIX_NVM=/usr/local/opt/nvm # <== 環境による
export NVM_DIR="$HOME/.nvm"
[ -s ${BREW_PREFIX_NVM}/nvm.sh ] && . ${BREW_PREFIX_NVM}/nvm.sh  # This loads nvm
[ -s ${BREW_PREFIX_NVM}/etc/bash_completion.d/nvm ] && . ${BREW_PREFIX_NVM}/etc/bash_completion.d/nvm
$ time source .bash_profile

real	0m0.956s
user	0m0.447s
sys	0m0.534s

まとめ

$(brew --prefix nvm) が特に遅い。
PATHのexportも無駄があるなあと思っているけど、今の実用時間では問題ない

Discussion