Help us understand the problem. What is going on with this article?

zshrcの中でbrew --prefixしないほうがよい理由

More than 1 year has passed since last update.

zshrcとかbashrcの中で brew --prefix foo しない方がよいです。理由はめちゃくちゃ遅いからです。


  • brew --prefix なんとか は2017年版MacBookProでも0.8秒くらいかかる
  • 速度が重要な場面では絶対パスをべた書きする方がよい
  • homebrew開発元も認識してはいるが、2018.8現時点では未解決

brew --prefix なんとか はすごく遅い

自分の環境でzshの起動がやたら遅いので原因を調べたところ、 brew --prefix coreutils が原因であることがわかりました。

試しに単体で実行してみると、確かに 0.88秒かかっています。

~  time brew --prefix coreutils
brew --prefix coreutils  0.48s user 0.21s system 77% cpu 0.880 total


export PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH"
export MANPATH="$(brew --prefix coreutils)/libexec/gnuman:$MANPATH"

brew --prefixの値なんてそうそう変わるものではないし自分はデフォルト設定のまま変更していないので、 パス直書きに変更してみたところ、zshの起動が1.7秒短縮されました。

-    export PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH"
-    export MANPATH="$(brew --prefix coreutils)/libexec/gnuman:$MANPATH"
+    export PATH=/usr/local/opt/coreutils/libexec/gnubin:$PATH"
+    export MANPATH=/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"

ちなみに brew --prefix パッケージ名 が遅いのは coreutils に限らずどんなパッケージ名を指定しても遅いようです。

$ time brew --prefix go
brew --prefix go  0.48s user 0.20s system 75% cpu 0.909 total
$ time brew --prefix sl
brew --prefix sl  0.48s user 0.21s system 73% cpu 0.928 total

パッケージ指定なしの brew --prefix もやや遅い

$ time brew --prefix
brew --prefix  0.02s user 0.02s system 59% cpu 0.074 total

この用途なら whichコマンドを使う方が速い。

$ time dirname $(dirname $(which brew))
dirname $(dirname $(which brew))  0.00s user 0.00s system 47% cpu 0.008 total



ちなみに brew --prefix なんとか が遅い件は homebrew本体にもissueがあがっているので開発元も認識していはいるようです。


  • バグではない
  • 簡単には直せない。PRはウェルカム
  • $(which brew) を使うほうが速い


Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away