zsh の起動時間を切り分けて調べる
通常の起動と設定を省いた起動を比較し、zprof で関数の処理時間を確認する手順。
まず同じ条件で測る
起動の待ち時間を調べるときは、設定を変更する前の記録を残します。以下は計測方法の例です。このサイトで特定の端末を実測した結果や、短縮できる時間を示すものではありません。
zsh --version
for i in 1 2 3 4 5; do
/usr/bin/time zsh -i -c exit
done同じターミナル、同じ作業ディレクトリで数回繰り返し、経過時間のばらつきを見ます。time の表示形式は OS によって異なります。バックグラウンド処理やキャッシュも値に影響するため、一回の最小値だけで比較しません。
設定の影響を比べる
for i in 1 2 3 4 5; do
/usr/bin/time zsh -f -i -c exit
done-i は対話シェル、-c は実行するコマンドを指定します。-f は通常の起動設定の読み込みを抑えますが、システムの /etc/zshenv まで完全に省くわけではありません。差が大きければ、設定や読み込む機能を調べる手掛かりになります。
ログインシェルでだけ遅い場合は、比較する両方の条件に -l を付けて、ログイン時の起動ファイルも含めます。通常起動と異なる条件の数値を、同じものとして扱わないようにします。
zprof で関数の内訳を見る
編集前の設定を別名で保存し、開いている正常なシェルも残します。調査中だけ、対象の .zshrc の先頭に次を追加します。
zmodload zsh/zprof同じファイルの末尾には次を追加し、新しいシェルで出力を確認します。
zprofzprof が集計するのは主にシェル関数です。外部コマンドやファイル全体のすべての待ち時間を、そのまま一行ずつ説明するものではありません。プロファイラ自体の影響もあるため、関数の内訳と全体の起動時間は別々に見ます。
変更は一つずつ戻せる形で
補完初期化、プラグイン、言語環境の初期化などを一つずつ調べます。必要な処理を無条件で削除するのではなく、使う場面と読み込み順を確認します。
調査が終わったら zprof 用の二行を外して再計測し、補完やコマンド検索など普段の操作も確かめます。数値の記録には OS、zsh のバージョン、測定条件を添えると比較しやすくなります。