以前はfishシェルを使っていましたが、bashとの互換の無さが気になりzshに移行することにしました。
ただしzshはfishのように最初から使いやすく設定されていないのでフレームワークを選定する必要がありました。
以下zsh主要フレームワークを起動スピード&設定の楽さで比較した結果です。
比較対象のフレームワーク一覧
比較条件
・環境はUbuntu Desktop 18.04にて比較。
・fishから移行するので、fishに最低限近づけるためのプラグインとテーマを入れ設定の楽さと起動スピードを比較。
下記のプラグインを導入し比較
- Pure - 非常に洗練されたテーマ。最低限の機能を揃え非常に軽い
- zsh-autosuggestions - 履歴から勝手に補完してくれる
- zsh-syntax-highlighting - コマンドを色分けしてくれる
- zsh-completions - 補完を強化
- zsh-history-substring-search - 途中まで打ちカーソル上下で補完を切り替えれる
各種設定
oh-my-zsh
.zshrcを編集したり、git cloneで各種プラグインをダウンロードしてくる必要がある。
プラグインのインストール
$ git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
$ git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
$ git clone https://github.com/zsh-users/zsh-completions ~/.oh-my-zsh/custom/plugins/zsh-completions
$ git clone https://github.com/zsh-users/zsh-history-substring-search ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-history-substring-search
プラグインとテーマの設定
vim ~/.zshrc
# Pureテーマ
ZSH_THEME="refined"
# プラグインを有効化
plugins=(zsh-autosuggestions zsh-syntax-highlighting zsh-completions history-substring-search)
autoload -U compinit && compinit
Prezto
最初からモジュールが用意されているため、それを利用し設定を行う
基本的にPreztoの設定は~/.zpreztorcにて行う
他の自分用の設定は~/.zshrcで行う
vim ~/.zpreztorc
# Pureテーマ
zstyle ':prezto:module:prompt' theme 'pure'
# 各種モジュールをロード
zstyle ':prezto:load' pmodule \
'environment' \
'terminal' \
'editor' \
'history' \
'directory' \
'spectrum' \
'utility' \
'completion' \
'syntax-highlighting' \
'history-substring-search' \
'autosuggestions' \
'prompt'
promptの前に
'syntax-highlighting' \
'history-substring-search' \
'autosuggestions' \
を追加しこれでプラグインのインストールは完了
※ 最初から設定されているモジュールがありますが、デフォルトで設定されているのでこのまま比較
zplug
~/.zshrcの1ファイルでプラグイン管理と自分の設定を管理する
vim ~/.zshrc
source ~/.zplug/init.zsh
# Pure theme
zplug mafredri/zsh-async, from:github
zplug sindresorhus/pure, use:pure.zsh, from:github, as:theme
# Plugins
zplug "zsh-users/zsh-autosuggestions"
zplug "zsh-users/zsh-completions"
zplug "zsh-users/zsh-syntax-highlighting"
zplug "zsh-users/zsh-history-substring-search"
# Install plugins if there are plugins that have not been installed
if ! zplug check --verbose; then
printf "Install? [y/N]: "
if read -q; then
echo; zplug install
fi
fi
# Then, source plugins and add commands to $PATH
zplug load
必要最低限の設定にしました
速度比較結果
multitimeコマンドを利用してzshのインタラクティブシェルの起動をしてから終了までの速度を測定しました。
$ multitime -n 15 zsh -i -c exit
(15回繰り返し平均を測る)
なおzplugだけは何故かmultitimeコマンドが使えなかったため、timeコマンドを使用しました。
$ time ( zsh -i -c exit )
- 生zsh
Mean Std.Dev. Min Median Max
real 0.031 0.002 0.026 0.032 0.035
user 0.021 0.005 0.013 0.021 0.028
sys 0.011 0.005 0.004 0.011 0.019
- oh-my-zsh
Mean Std.Dev. Min Median Max
real 0.134 0.011 0.120 0.131 0.164
user 0.091 0.012 0.069 0.091 0.119
sys 0.046 0.010 0.032 0.044 0.067
- Prezto
Mean Std.Dev. Min Median Max
real 0.082 0.006 0.073 0.083 0.091
user 0.053 0.011 0.034 0.051 0.072
sys 0.030 0.008 0.018 0.028 0.045
- zplug
0.14s user 0.09s system 112% cpu 0.203 total
- ちなみにfishは
Mean Std.Dev. Min Median Max
real 0.010 0.002 0.007 0.010 0.013
user 0.006 0.003 0.000 0.007 0.010
sys 0.003 0.004 0.000 0.003 0.012
ということで速い順でPrezto(0.082秒)>oh-my-zsh(0.134秒)>zplug(0.203秒)という結果になりました。
結論
- oh-my-zshはプラグインごとにgit cloneをしたり設定が非常に面倒
- zplugは設定がとてもしやすいが非常に起動が遅い
ので自分はこれらは選ばないことにしました。
ということで設定がしやすい起動も速いPreztoが総合的に優れているという結論に達しました。
fishから乗り換えを考えている人はぜひPreztoフレームワークを使ってみてください!