MENU

Zsh — 補完とカスタマイズに振り切ったZシェル

Zsh アイキャッチ
Zsh

Zshは1990年にプリンストン大学の学生だったポール・ファルスタッド(Paul Falstad)が公開したコマンドラインシェルで、名称は当時のティーチング・アシスタントだったZhong Shao氏のイニシャルに由来します。BashやKornシェルの良いところを取り込みつつ、補完とカスタマイズを徹底的に押し進めた点が特徴で、2019年のmacOS Catalina以降はAppleが標準ログインシェルとして採用したことで一気に知名度が広がりました。本記事ではZshが何を強みにしているのか、Bashとどう違うのかを順に整理します。

目次

この記事の目次

  1. Zshが備える三つの強み
  2. 学生プロジェクトから世界標準へ
  3. 実務での使われ方
  4. Bash・fishとの位置関係
  5. まとめ

Zshが備える三つの強み

Zshが備える三つの強み

Zshの第一の強みは、compsysと呼ばれる補完システムです。コマンドごとに「どんな引数を取るか」を記述した補完関数を読み込み、git checkoutでブランチ名、ssh で .ssh/known_hosts のホスト名、kubectl get pods でPod名といったように、状況に応じた候補をTab一発で出してくれます。Bashにも programmable completion はありますが、Zshはメニュー選択や色付け、説明文付き候補表示まで標準でこなす点が突出しています。

第二の強みは強力なグロブ拡張で、「**/*.log」のような再帰マッチや、「*(.om[1,10])」のような修飾子付き選択など、外部のfindコマンドに頼らず複雑な条件指定が書けます。第三の強みは活発なプラグイン文化で、プロンプトテーマ集や補完強化、コマンド提案などの拡張が「Oh My Zsh」「Prezto」「zinit」などのフレームワーク経由で簡単に導入でき、ターミナル画面そのものを大きく変えられる遊びの余地が用意されています。

学生プロジェクトから世界標準へ

学生プロジェクトから世界標準へ

Zshはポール・ファルスタッドが1990年にAtariST向けに書いたシェルが起点で、その後Unix系に移植されてから機能を急速に拡張しました。ファルスタッド自身は1996年頃にメンテナンスから離れ、以降はリチャード・コッホ(Richard Coch)やピーター・ストフェン(Peter Stephenson)といったボランティアが集まったZsh Workersのメーリングリストで開発が続けられています。派手な広報こそありませんが、毎年のように細かな改良を積み重ねる地道なプロジェクトです。

決定的に有名になったのは、2019年6月のWWDCでAppleがmacOS Catalinaの既定ログインシェルをBashからZshに切り替えると発表したときでした。Bashがライセンスの都合で古い3.2系に据え置かれていた一方、Zshは比較的緩いMITライセンス相当で取り込みやすかったことが背景にあります。この決定により、これまでBashを使ってきたmacOSユーザーが大量にZshユーザーへ移行し、関連教材やプラグインが一気に増殖しました。

実務での使われ方

実務での使われ方

実務でのZshは、開発者個人のターミナル環境を整える文脈で最も使われます。macOS Catalina以降はインストール直後のターミナルがZshであり、Linuxでもchshで切り替えるユーザーが多数派になりつつあります。Oh My Zshを入れてagnosterやrobbyrussell系のテーマを当て、gitリポジトリ上ではブランチ名や変更状態をプロンプトに表示するスタイルは、テックカンファレンスの登壇者の画面で見覚えがある人も多いでしょう。

もう一つの王道は、Powerlevel10kとfzfを組み合わせた高速ターミナル環境です。Powerlevel10kはCPU使用率、Git状態、Kubernetesコンテキストなどを段組で表示し、fzfと連携した履歴検索やファイル検索がCtrl+R/Ctrl+Tですぐ呼べるようになります。kubectlやaws、docker、terraformといった引数の多いCLIに対してはZshの補完定義が特に効き、長いオプションをTabだけで埋めていける快適さが日々の作業を底上げします。

Bash・fishとの位置関係

Bash・fishとの位置関係

Bashと比べると、Zshは「対話操作に大胆な改良を加える代わりに、スクリプトの完全互換は捨てる」という方針が際立ちます。POSIXシェル文法の多くは共通ですが、配列のインデックスが1始まりであったり、グロブの挙動が拡張されていたりと、Bash向けスクリプトをそのままZshで動かすと微妙に挙動が変わる場面があります。サーバー側のシェルスクリプトは依然としてBash前提で書いておくほうが無難で、Zshはあくまで対話用シェルとして位置づけるのが安全です。

fishとの比較では、fishが「設定なしで現代的な体験」を狙うのに対し、Zshは「設定して育てる」スタイルが基本です。fishは独自構文を採用しているためBashスクリプトをそのまま流用できませんが、Zshは大部分のBashコマンドを受け入れます。結果として、初心者向けにはfish、玄人向けにはZshという棲み分けが緩やかに成立しており、ヘビーユーザーが時間をかけて自分のターミナルを仕立て上げるための題材として、Zshは今も最有力候補であり続けています。

まとめ

ZshはBashの便利でない部分を補完とプラグインで埋めた拡張派シェルで、macOSの既定採用以降は事実上の開発者向け標準になりました。対話操作の快適さを最大化したい個人ユーザーにとって投資対効果が高く、ターミナル中心の作業時間が長い人ほど恩恵を実感しやすい選択肢になっています。

※本記事はIT用語辞典の手書きドラフトです。公開前に最新情報・出典を確認のうえ加筆修正してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次