アルパカログ

anyenvが遅いので実行時間を計測して感謝しつつ卒業した

2020年12月21日
🔖shell

shellの起動時間が気になったので、下記のサイトを参考に実行時間を計測してみた。

実行結果のうち.zshrcだけを抜き出したらanyenv initだけが遅かった。

~ % cat tmp/zsh_profile | grep '\.zshrc' | grep -v 'xtrace' | tail -n3
7 /Users/hiroki.toyokawa/.zshrc:10> [ -f /Users/hiroki.toyokawa/.anyenv/bin/anyenv ']'
11 /Users/hiroki.toyokawa/.zshrc:28> direnv hook zsh
294 /Users/hiroki.toyokawa/.zshrc:11> anyenv init - zsh

さすがにこれは看過できないということでanyenv代替案を考えた。

anyenvで使っているenvファミリー

私がanyenvで使っていたenvファミリーは下記だ。

このうちNode.jsは仕事では使っていないので、残り3つの引越し先を考える。

pyenv, goenv → systemインストール

pyenvの引越し先を探していたところ、下記の記事を読んでとても納得した。

そもそもPythonでは処理系のバージョンをあげろ圧力はあまりないです。周りのツールが揃うまではバージョンを上げないで待つ、というのも行われてきたことです。ライブラリも、少し前のバージョンまでサポートするのはよく使うのは当たり前。

確かに、仕事でもプライベートでもいろんなツールでいろんなバージョンのPythonを使っているものの、バージョンの違いによって何らかの不都合を感じたことはない。

よってpyenvの代わりは、普通にsystemインストールとした。

また、Go言語についてもバージョン違いによる不都合を感じたことがないので、Goもsystemインストールにした。

rbenv → asdf

RubyもRailsを使わなければバージョン上げる圧力はそんなにないと聞きます。

前述の記事にもこう書かれている通り、私がRubyを使っているのはほぼRailsのため(それもいろんなプロジェクトの)なので、Rubyはバージョン管理してあげる必要がある。

rbenvの引越し先を探していたところ、下記の記事を見つけた。

asdfというバージョン管理ツールの存在は知っていて、Erlang/Elixirのバージョン管理に使っていたが、Rubyもあるというのは初耳だった。

再計測

~ % cat tmp/zsh_profile | grep '\.zshrc' | grep -v 'xtrace' | tail -n2
1 /Users/hiroki.toyokawa/.zshrc:64> compinit -u
14 /Users/hiroki.toyokawa/.zshrc:20> direnv hook zsh

良い。

思えばanyenvには数年レベルでお世話になった。envファミリーによってrehashが必要だったり必要なかったりを面倒見てくれるのはありがたかったし、何よりanyenvを入れておけばOKという安心感が素晴らしかった。

300ミリ秒を遅く感じるかどうかは人によると思うが、個人的には最近dotfilesのカスタマイズに興味が出てきたのが大きいと思っている。

そういうわけでanyenvを卒業した。anyenv今までありがとう。

タグ