厳しい残暑が続くが、すでに立秋を過ぎ暦の上では秋。秋といえば恒例のmacOSメジャーアップデート、2019年でいえばmacOS 10.15となる「Catalina(カタリナ)」だ。パブリックベータも順調に更新され、AppleのWEBサイトにも「macOS Catalina に備える」というページ(リンク)が登場、いよいよその日は近い……というわけで、今回は来るべきCatalinaに備えた環境構築に着手してみたい。

zshの活用は「プラグイン」がキモ

環境構築といっても、Time Machineでサクッとバックアップをとれば完了してしまう昨今のmacOSのこと、GUI環境では作業負担がない。バックアップが済んだら不要なファイルを削除して空きを確保し、App StoreにCatalinaアップデートが現れたらそれを実行すればいい。併せてクリーンインストールなど"大掃除"を決行する場合でも、こちらの公式文書に具体的な手順が書かれているので、迷うことはない。

しかし、Catalinaではログインシェルがbashから「zsh」に変わるという一大変化がある。第241回でも触れたとおり、日々の作業で触れるTerminalのシェルはユーザが自由に選べるが、この機に強力なzshへ移行するという選択は大いにアリだろう。

そしてzshに乗り換えるのであれば、「プラグイン」の管理体制も用意したいところ。zshのプラグインとは、zshの機能を拡張するシェルスクリプト群のことで、プロンプトの表示スタイルを整えるもの、特定の語句を色分けして表示するもの……標準装備のフィーチャーでもじゅうぶん高機能なzshだが、(外部の)プラグインを使えばより利便性は高まる。

その定番としては、Gitリポジトリへの移動を容易にする「cd-gitroot」、プロンプトの見栄えを改善する「pure」、構文ハイライトを行う「zsh-syntax-highlighting」などが挙げられる。プラグインを使いたいがためにzshに乗り換えるユーザもいるほどだ。

  • zshに標準装備のプラグインは「man zshcontrib」で確認できる

プラグインマネージャー「zplug」を導入する

zshの外部プラグインは、「プラグインマネージャー」で管理することがセオリーだ。プラグインを個別にインストールするのは骨が折れるし、"素"の状態では起動が遅くなる。面倒なことはプラグインマネージャーに任せてしまい、zshの利点だけを享受しようという腹だ。

いくつかあるzsh用プラグインマネージャーのなかでおすすめは「zplug」。2019年9月現在GitHubのスター数は3,300超と、zgen(1,100スター)やantibody(1,057スター)といった比較的著名なプラグインマネージャーと比較しても群を抜いている。

導入方法はかんたん、以下のコマンドラインを実行すればOK。Terminalで開くシェルをzshに変更しておけば、macOS Mojaveの現在でも問題なく利用できるので、Catalinaへアップデートする前に導入して慣れておくといいだろう。

$ curl -sL --proto-redir -all,https https://raw.githubusercontent.com/zplug/installer/master/installer.zsh| zsh
  • 上述のコマンドラインをコピー&ペーストして、zplugをインストールしよう

  • Terminalで開くシェルを「/bin/zsh」に変更しておく

インストールが完了したあとは、zshの設定ファイル(~/.zshrc)を用意しよう。以下に示すリストは、zsh組み込みの機能はほとんど使わずにほぼプラグインだけでzshの機能を拡張している。「zplug "○○○○"」がプラグインをロードする部分で、まずはコピー&ペーストしてみよう。

プラグインの見つけ方だが、名前がわかりさえすればいい。最初に実行したインストーラ(「curl」から始まるコマンドライン)によって、ホーム以下に「.zplug」という不可視属性のフォルダが作成されており、そこに存在しない場合はGitHubのZshコミュニティサイトなどから自動的にダウンロードされる仕組みだからだ。

通常どおりTerminalを起動すればzplugによるzshカスタマイズは、あとはネット上の情報を参考にするもよし、試行錯誤するもよし。プラグインを使いこなせるようになれば、zshの世界が格段にラクになること請け合いだ。

  • プラグインがローカルに存在しない場合は、自動的にダウンロードされる

リスト1:~/.zshrcのサンプル

# 初期化
source ~/.zplug/init.zsh

# 自身をプラグインとして管理する
zplug 'zplug/zplug', hook-build:'zplug --self-manage'

## おすすめプラグイン

# プロンプト
zplug "sindresorhus/pure"

# 非同期処理
zplug "mafredri/zsh-async"

# 構文ハイライト
zplug "zsh-users/zsh-syntax-highlighting"

# コマンド履歴
zplug "zsh-users/zsh-history-substring-search"

# 入力補完
zplug "zsh-users/zsh-autosuggestions"
zplug "zsh-users/zsh-completions"
zplug "chrissicool/zsh-256color"

# インストールされてないプラグインをインストール
if ! zplug check --verbose; then
  printf "Install? [y/N]: "
  if read -q; then
    echo; zplug install
  fi
fi

# プラグインを読み込みコマンドを$PATHへ追加
zplug load