monolithic kernel

chezmoi のスクリプト実行機能で zcompile を試した

zsh の起動を高速化するという話になるとよく zcompile が出てくる。

source コマンドを上書きして zcompile を呼び出している事例なんかもあって、それもすごいと思ったのだけど、chezmoi を使って別のアプローチが取れそうだと思ったのでやってみた。

chezmoi には、chezmoi apply 時に任意のスクリプトを実行できる機能がある。ファイル名を run_ としておけば対象となり、かつ run_after_ のようにすれば chezmoi の処理の最後に実行してくれる。.zshrc などのファイルを chezmoi で配置し終えた後で zcompile するスクリプトを実行すれば、.zshrc などの実行時に何もせずともコンパイル済みのファイルを読み込めるし、chezmoi apply の中に組み込めばコンパイル漏れもないという寸法である。

具体的なスクリプトは以下のようになった。

.chezmoiscripts/run_after_zcompile.zsh
#/usr/bin/env zsh
for file in ~/.zshenv ~/.config/zsh/.zprofile ~/.config/zsh/.zshrc ~/.config/zsh/**/*.zsh ~/.local/share/sheldon/**/*.zsh
do
  echo "zcompile $file"
  zcompile "$file"
done

パスの部分は各自の環境に合わせて変更する必要がある。自分の場合はプラグイン管理に sheldon を使っているので、そちらで管理しているプラグインも zcompile するようにしてみた。

試してみたところ、自分の環境では zsh の起動時間はほぼ変わらなかった。もともと 10~20 ms で起動する程度までチューニングされているし、zsh-defer での非同期読み込みも多用しているので、効果が出にくかったのかもしれない。効果がないのにわざわざ複雑にする必要もないので、結局導入は見送ったのだが、chezmoi の使い方としては面白いかなと思っている。


Related articles