この記事は Enigmo Advent Calendar 2021の6日目の記事です。
こんにちは。BUYMAでWebエンジニアをやっております、岡本です。エニグモに入ってから約1年が経過しました。
学生の時にプログラミングを始めてしばらくbashを使っていたのですが、イケイケの先輩にzshを教えてもらい、zshの機能を拡張するためのプラグインマネージャーにはOhMyZshを勧められ、数年利用していました。この時期に使っていたmacOSの標準シェルはbashで、zshはわざわざインストールするものでした。
1年前にエニグモに入社した頃、支給されたMacBookProに搭載されているmacOSの標準シェルは既にzshになっていました。(標準シェルがzshになったのはmacOS 10.15 Catalina以降です)
せっかくの機会なので気持ちを新たにプラグインマネージャーも替えてみようと思い立ち、いくつかzshのプラグインマネージャーを調べたところZinitが良さそうに思えたので導入することにしました。今回は導入した感想を軽く綴ってみようと思います。
(2021年12月6日閲覧、以下記載URLも同様)
いいところ
いくつか公式ドキュメントでもアピールされていますが、個人的に良いと思うところを挙げます。
zshの起動が速くなる
公式ドキュメントで喧伝されているのがzshの起動スピードについてです。早いことをアピールしています。
Zinit is currently the only plugin manager out there that provides Turbo mode which yields 50-80% faster Zsh startup
訳(Zinitは現在、ターボモードを提供する唯一のプラグインマネージャーであり、Zshの起動が50〜80%速くなります。)
ここでターボモードとは何ぞやとなるのですが、wait
を使った遅延読み込みのことを指すようです。これについては後ほど紹介しますが、ターボモードを使わなくても従来のプラグインマネージャーと比較するとzshの読み込み速度は高速になっていると思います。
OhMyZshおよびPreztoプラグインとライブラリの読み込みをサポートしている
OhMyZshやPreztoなどを利用していた方もその資産を継承できます。なお私はOhMyZshのプラグインは現在は読み込まずに使っています。気になる方は以下をご覧ください。
参考URL
https://zdharma-continuum.github.io/zinit/wiki/INTRODUCTION/#oh_my_zsh_prezto
使ってみよう
Zinitのインストール方法はこちらからご覧いただけます。
https://github.com/zdharma-continuum/zinit#automatic-installation-recommended
sh -c "$(curl -fsSL https://git.io/zinit-install)" source ~/.zshrc zinit self-update
こちらを実行することで~/.local/share/zinit/zinit.git
にzinitがインストールされ、zshrcにzinitの設定が追加されます。
ここから自分好みにカスタマイズしていくわけですが、現時点の私のzshrcを見てみるとこんな感じになってました。1~7行目はromkatv/powerlevel10kを使うために設定しているものです。一言でいうとターミナルのUIをカラフルにしてくれるものです。ペアプログラミングの機会があると「ターミナルのUIがカラフルですね」とよく言われます。ディレクトリ名やブランチ名が見やすいのでOhMyZshを使っている時からずっと使っています。
1 # Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc. 2 # Initialization code that may require console input (password prompts, [y/n] 3 # confirmations, etc.) must go above this block; everything else may go below. 4 if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then 5 source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" 6 fi 7 8 ### Added by Zinit's installer 9 if [[ ! -f $HOME/.zinit/bin/zinit.zsh ]]; then 10 print -P "%F{33}▓▒░ %F{220}Installing %F{33}DHARMA%F{220} Initiative Plugin Manager (%F{33}zdharma/zinit%F{220})…%f" 11 command mkdir -p "$HOME/.zinit" && command chmod g-rwX "$HOME/.zinit" 12 command git clone https://github.com/zdharma/zinit "$HOME/.zinit/bin" && \ 13 print -P "%F{33}▓▒░ %F{34}Installation successful.%f%b" || \ 14 print -P "%F{160}▓▒░ The clone has failed.%f%b" 15 fi 16 17 source "$HOME/.zinit/bin/zinit.zsh" 18 autoload -Uz _zinit 19 (( ${+_comps} )) && _comps[zinit]=_zinit 20 21 # Load a few important annexes, without Turbo 22 # (this is currently required for annexes) 23 zinit light-mode for \ 24 zinit-zsh/z-a-rust \ 25 zinit-zsh/z-a-as-monitor \ 26 zinit-zsh/z-a-patch-dl \ 27 zinit-zsh/z-a-bin-gem-node 28 29 ### End of Zinit's installer chunk 30 以下略
さて、プラグインを設定してみます。zshを使う上で外せないのは補完とシンタックスハイライトではないかと思います。
# 補完 zinit light zsh-users/zsh-autosuggestions # シンタックスハイライト zinit load zdharma/fast-syntax-highlighting
ここで、プラグインの読み込み方法はload
とlight
があります。
load
を使うことでプラグインのトラッキングを可能にします。zinit report {plugin-spec}
でプラグインの情報を出力し、zinit unload {plugin-spec}
でプラグインを無効にします。
一方light
を使うとプラグインのトラッキング機能が無効になり、loadに比べて読み込み速度が速くなるようです。
またsnipet
を使うと、URLを直接指定する形でプラグインを読み込むことができます。
zinit snippet https://gist.githubusercontent.com/hightemp/5071909/raw/
cf. https://zdharma-continuum.github.io/zinit/wiki/INTRODUCTION/#basic_plugin_loading
このような感じでお好みのプラグインを追加していきましょう。筆者のzshrcをみるとzdharma/history-search-multi-word
というコマンド履歴を検索するプラグインが入っています。
zinit load zdharma/history-search-multi-word
設定例はzinitのドキュメントに記載されているので私はこれを参考にして設定したのですが、ここでice
というものが出てきます。
zinit ice pick"async.zsh" src"pure.zsh" zinit light sindresorhus/pure zinit ice depth=1; zinit light romkatv/powerlevel10k
zinit ice
は直後の行で実行されるload
やlight
の挙動を変更します。ice
の後のpick
やsrc
などはice-modifiersと呼ばれるもので、
iceという名前の由来は、氷は飲み物に入れて少し経つと溶けることから、変更が一時的なものであることを意味すると公式ドキュメントでは説明されています。ice-modifiersの後ろにクォーテーションやイコールで指定されているのは引数です。ice-modifiersが引数によってzinitの挙動を制御します。例えば上記のpick
であれば、引数として与えられた"async.zsh"に実行権限を与えてPATHに追加するようにzinitに対して指示しています。
その他のice-modifiersの用法についてはこちらを参照してください。
https://github.com/zdharma-continuum/zinit#ice-modifiers
おわりに
基本的な使い方はできていると思いますが、まだまだ知らないオプションが多いのでもっと使いこなせるように日々精進したいと思います。
次回の記事の担当はデータアナリストの井原さんです。お楽しみに!!
株式会社エニグモ 正社員の求人一覧