bashの起動速度を5倍速にしたので褒めて
はじめに
あけましておめでとうございます。気がついたら年が明けていました。本年こそ頑張って技術ブログを更新していきたいものですね。
さてこの記事はクリスマスを迎えるためのカレンダーこと、MakeITアドベントカレンダーの25日目の記事になります。 qiita.com
え?もう1月だって?
キリスト教の中でもカトリックの影響の強いイタリア、ポーランド、フランス、スペインなどでは、クリスマスは12月25日に始まり、1月6日の公現祭(エピファニア)に終わる。クリスマスの飾り付けは23日頃に行う。24日はクリスマス・イヴとして夜を祝う。
1月6日まではクリスマスですし、片付けのこととかを考えれば今日も実質クリスマスですよね。なので今日は25日目のブログの日です。(は?)
もともとは別の人担当でしたがまだカレンダーが空いている&&面白いネタができたので変わって私が投稿します。 というわけでやっていきたいと思います。
bashの起動速度をはやくしました
該当PR:
before
{ fumihumi } (master *) (dotfiles): time source ~/.bashrc real 0m2.709s user 0m1.295s sys 0m1.097s
after
{ fumihumi } (master *) (dotfiles): time source ~/.bashrc real 0m0.481s user 0m0.208s sys 0m0.246s
🎉 なんとびっくり、計測誤差が多少ありますが、平均して4~5倍速に!!! 🎉
はてなって:tada:できないんですね。
そもそもどうしておそかったの
いや気がついたらストレスがたまるくらいには遅くなっていたんですよね。
普段はターミナル立ち上げてから基本的にはtmuxinatorで自動化しているレイアウトを復活させていて、その時にdockerとかを立ち上げたりしてるので生のbashを新規立ち上げたりする機会があまりなく普段使いにはあまり支障がありませんでした。
ただ、年末年始に仕事以外のプロジェクトを触ろうとするとtmuxinatorのconfigがないため手動でいろいろ立ち上げるわけですが、1度なら気にならないがなんどもbashを立ち上げるとストレスを感じるほど遅かったわけです..........
そんな悩みを友人に投げてみると
次の記事を共有してもらいました。
zshrcの中でbrew --prefixしないほうがよい理由 - Qiita
実際にHomebrew側のISSUE等も調べてみるといまだに完全はされておらずbrew --prefix
は悪手のように見えてきます。
なにしたの
そこで、一度 brew --prefix
を実行したらそれを変数にいれて実行結果をキャッシュさせるという手段を取りました。
remove 'brew --prefix' command call. by fumihumi · Pull Request #21 · fumihumi/dotfiles · GitHub
brew --prefix
ってPCの環境問わずにbrewのpathを出してくれるため環境構築する際のサンプルコードとしてよく出てくるきがしますが、実際にそれを複数回利用したり、自分のように source
コマンドを使うために if
で調べた後に source
するみたいな rc の書き方をしていると sourceするファイル数 * 2回も brew --prefix
を実行してしまいます。
なので初回に実行してそれを読み込めば多少は早くなるやろ。って考えでした。
これが思ったより効果的面でして、タイトルにあるように実測値で5倍弱の速さになりました。すごい!
最後に
今回はbashの起動速度というトピックでしたが、brewを使っている環境であればおそらくどの環境(zsh, fish)でも再現すると思います。
是非一度自分のdotfiles配下で git grep 'brew --prefix'
をためしてみて、複数個見かけたらそれをやめてみてはどうでしょうか。きっと早くなると思います。
P.S. Macの標準シェルがzshになったのでそろそろ乗り換えようと思いつつもbashrcを移行するのがちょっとめんどくさくてまだできていません。
参考にしたもの。 - Profiling zsh startup time