Zeals TECH BLOG

チャットボットでネットにおもてなし革命を起こす、チャットコマース『Zeals』を開発する株式会社Zealsの技術やエンジニア文化について発信します。

Zshの起動を爆速にするプラグインマネージャーZplugin【コーナーで差をつけろ】

f:id:zeals-engineer:20190916134827p:plain


皆さんこんにちは!現在SREチームでエンジニアインターンをしており、4月から新卒入社する玉城です。
今回はZshプラグインマネージャーのZplugin導入のススメです!

Zpluginの紹介

Zpluginは柔軟で高速なZshellプラグインマネージャーで、zshの起動を50~73%高速化するTurboモードを備えた唯一のプラグインマネージャーです。

github.com

  • zplug使っているけど起動時間1秒以上かかるし辛い…
  • Zplugin使ってみたいけどドキュメントは英語だし日本語の情報も少ないし…
  • Zshを使ってみたいからこの記事を読んでみよう!

という方には、とてもおすすめです!

私も実際にZshとZpluginを使っていて、以前使っていたプラグインマネージャーzplugよりも約0.5秒ほど起動速度が早くなりました。これなしの生活は今や考えられません!(あやしいサプリをすすめているわけではないですよ)

また、ZEALSのエンジニアが使っているシェルはみんな多種多様です 。
良ければ御覧ください!

tech.zeals.co.jp

tech.zeals.co.jp

Zpluginインストール方法

まず、Zpluginをインストールします。

sh -c "$(curl -fsSL https://raw.githubusercontent.com/zdharma/zplugin/master/doc/install.sh)"  

インストール後、.zshrcの末尾に以下の5行が追加されているか確認します。

### Added by Zplugin's installer
source '/Users/ssab/.zplugin/bin/zplugin.zsh'
autoload -Uz _zplugin
(( ${+_comps} )) && _comps[zplugin]=_zplugin
### End of Zplugin's installer chunk

そして、.zshrcをリロードして、zpluginのコンパイルと更新を行います。

source ~/.zshrc
zplugin self-update

これで、Zpluginを使う準備が整いました。

Zpluginを用いた.zshrcの設定例

Zplugin を導入した私の.zshrcの設定を公開します!

### Added by Zplugin's installer
source '/Users/mbp013/.zplugin/bin/zplugin.zsh'
autoload -Uz _zplugin
(( ${+_comps} )) && _comps[zplugin]=_zplugin
### End of Zplugin's installer chunk

# Two regular plugins loaded without tracking.
zplugin light zsh-users/zsh-autosuggestions
zplugin light zdharma/fast-syntax-highlighting

# Load Git plugin from OMZ
zplugin snippet OMZ::plugins/git/git.plugin.zsh
zplugin cdclear -q

# Plugin history-search-multi-word loaded with tracking.
ice wait'!0' zplugin load zdharma/history-search-multi-word

# Load the pure theme, with zsh-async library that's bundled with it.
zplugin ice pick"async.zsh" src"pure.zsh"
zplugin light sindresorhus/pure

zplugin ice wait"!0" atinit"zpcompinit; zpcdreplay -q"


上記を.zshrcに書き込み、時間を計測してみましょう。
いったい何秒になるのか...ドキドキ...

time ( zsh -i -c exit )
( zsh -i -c exit; )  0.28s user 0.11s system 113% cpu 0.350 total

なんと!!0.35秒になりました!!!爆速!!!

はやくなった要因解説

zplugin独自のターボ機能を用いてプラグインと補完機能のcompdefとcompinitを遅延ロードさせたことで、この速さになっています。Zpluginしゅごい(でも他の要因もありそう)。

zplugの起動時間も計測してみる

zpluginが早いことは分かりましたが、zplugの起動時間もきちんと測ってみないと説得力がありません。
そこで、同じプラグインを読み込んだ状態で起動を行ったら何秒になるのかを検証してみます。

export ZPLUG_HOME=/usr/local/opt/zplug
source $ZPLUG_HOME/init.zsh
autoload -Uz compinit; compinit
 
zplug "zsh-users/zsh-autosuggestions"
zplug "zsh-users/zsh-autosuggestions"
zplug "zdharma/fast-syntax-highlighting"
zplug "plugins/git", from:oh-my-zsh
zplug "zdharma/history-search-multi-word"
zplug "sindresorhus/pure"

if ! zplug check --verbose; then
    printf "Install? [y/N]: "
    if read -q; then
        echo; zplug install
    fi
fi

zplug load --verbose

起動時間を計測してみます。

time ( zsh -i -c exit )
( zsh -i -c exit; )  0.56s user 0.35s system 104% cpu 0.875 total

約0.87秒でした。
 zpluginのときと比較しておよそ0.5秒ほどの違いがありますね...

まとめ

ほかにもZpluginには便利な機能が多く存在します。
Zpluginを使いこなしてzshの起動時間を爆速にし、周りのエンジニアにコーナーで差をつけましょう!

f:id:zeals-engineer:20190916135422j:plain