Linux シェルの選び方:Bash・Zsh・Fish の特徴とメリットを徹底解説
ターミナルを開いたとき、その多くは Bash を UNIX シェル環境として使用しています。しかし、シェル環境は Bash だけではありません。
C シェル、Korn シェル、Z シェル、さらには Fish シェルなど、さまざまなシェル環境が存在します。それぞれに長所と短所があり、自分のシステムにどれを採用するかは、事前にしっかり比較検討する価値があります。
この記事では、人気の高いシェルをいくつか取り上げ、それぞれの主な特徴を解説します。自分に合ったシェル選びの参考にしてください。
Bash シェルとは
Bash(Bourne Again Shell)は、UNIX シェルであると同時にコマンド言語でもあります。Brian Fox によって GNU プロジェクト向けに開発され、Bourne シェル(sh)のフリーソフトウェアによる代替として誕生しました。
Bash は 1989 年に初めてリリースされ、現在では大多数の Linux ディストリビューションでデフォルトのシェル環境となっています。ただし、Kali Linux のように Zsh をデフォルトとするディストリビューションもあります。
ちなみに、Linux の生みの親である Linus Torvalds 氏が Linux 向けに初期段階で移植したプログラムの一つが Bash です。
ここで混同しやすい点として、Bash はプログラミング言語でもあるということが挙げられます。つまり「シェル」であると同時に、Bash 自体で動作を記述(スクリプティング)できます。例えば次のようなコードです。
#!/bin/bash
echo "Hello World"
Bash の主なポイント
- 多くのシステムでデフォルトシェルであるため、利用者数が最も多い
- インラインのワイルドカード式をサポートしていない。ワイルドカード式とは、正規表現に近い感覚でシェル上のパターンを検索する機能で、代表的なものに
*、?、[]の 3 種類がある - ディレクトリ名を自動的に変更(補完して移動)する機能がない
- スクリプト内では
#がコメントとして扱われる shoptによる詳細設定が可能- プロンプトでバックスラッシュエスケープを使用できる
- ユーザーの設定は
.bashrcに記述する
Z シェル(Zsh)とは
Z シェル(Zsh)も UNIX シェルの一つで、Bash と非常によく似ています。スクリプトの作成はもちろん、コマンドインタプリタとしても使用できます。
Zsh は Bourne シェルを拡張したもので、数多くの改良が施されています。1990 年に Paul Falstad によってリリースされ、Bash、Korn シェル、C シェルが持つ機能の一部を兼ね備えています。
macOS はデフォルトで Zsh を採用していることでも知られています。
Zsh の主なポイント
- ターミナルでの自動補完を標準搭載。
Tab ↹キーを押すとコマンドが補完されるだけでなく、候補となるファイルやディレクトリの一覧がドロップダウン形式で表示される - インラインのワイルドカード式をサポート
- Bash よりはるかに柔軟にカスタマイズ可能
- プラグインやテーマをサポートしており、Zsh 向けプラグインも豊富に公開されている

さらに、Zsh をより便利に扱うためのフレームワークも存在します。最も有名なのが「Oh My Zsh」で、Zsh の設定を管理するためのコミュニティ主導のオープンソースフレームワークです。(筆者も Oh My Zsh を愛用しています 😄)
なお、Zsh と Oh My Zsh は似ているようで別物なので注意しましょう。繰り返しになりますが、Oh My Zsh はあくまで Zsh の設定を管理するためのツールであり、シェル本体ではありません。
Fish シェルとは
Fish は、対話性と使いやすさに重点を置いた UNIX シェル環境です。Zsh とはアプローチが異なり、ユーザー自身に細かな設定を委ねるのではなく、初期状態のままで対話的な操作性を提供することを目指しています。
Fish は 2005 年に Axel Liljencrantz によって作られました。POSIX シェル標準に準拠していないことから、「エキゾチックシェル(異端なシェル)」と見なされることもあります。
Fish の主なポイント
- コマンド履歴や現在いるディレクトリをもとに、入力中に候補を自動表示する「タイプしながら検索」機能を搭載。Bash の履歴検索と似ていますが、Fish の履歴検索は常時有効になっており、ターミナル操作中にリアルタイムなフィードバックを得られる
- 複雑な構文ではなく「機能をコマンドとして提供する」という設計思想を採っており、各機能がオプション付きのコマンドやヘルプテキストとして直感的に利用できる
- 多くの設定がデフォルトで済んでいるため、Zsh などの他の
sh系シェルよりも初心者に優しいと言われている - スクリプト言語の仕様が Zsh や Bash とは異なる。Zsh はエイリアスを多用する傾向がある一方、Fish はスクリプト言語内でエイリアスに頼らない設計になっている
ただし、cd、cp、vim、ssh といった基本コマンドだけでスクリプトを書く分には、Fish と Bash のスクリプト言語の違いをほとんど意識することはありません。
最大の違いの一つが、コマンドの出力を取得(キャプチャ)する場面です。Bash では次のように書きます。
todays_date=$(date)
echo "Todays date is $todays_date"

Todays Date is Tue Dec 13 15:29:28 CST 2022
一方、Fish では出力の取得方法が異なり、同等の処理は次のように記述します。
set date (date)
echo "Todays Date $date"
todays date is Tue Dec 13 21:35:03 UTC 2022
まとめ:どのシェルを選ぶべきか
Bash、Zsh、Fish にはそれぞれ長所があり、共通点も少なくありません。それぞれの特徴を理解したうえで、自分の作業環境に合わせて効果的に活用できます。
- カスタマイズ性を重視するなら Zsh(必要に応じて Oh My Zsh を導入)
- 面倒な設定なしに、対話的で快適なターミナル体験を得たいなら Fish
- 定番の安心感と互換性を重視するなら、Bash をそのまま使い続けるのも良し
結局のところ、どのシェルを選ぶかは開発者一人ひとりの好みの問題です。まずは実際に触ってみて、自分にとって最も使いやすいシェルを見つけてください。
この記事があなたのシェル選びの助けになれば幸いです。最後までお読みいただきありがとうございました! 🐚🐚🐚
-
Linuxの起動時・再起動時にコマンドやスクリプトを自動実行する方法:ステップバイステップガイド
Linuxシステムを起動してログインするとき、その裏側で何が起こっているのかを観察するのはとても興味深いものです。物理マシンの電源ボタンを押す、あるいは仮想マシンを起動するだけで、一連のイベントが連鎖的に実行され、完全に機能するシステムが立ち上がります。場合によっては1分もかからずに。ログアウトやシャットダウンの時も同様です。 さらに面白いのは、OSの起動時やログイン・ログアウト時に、特定のコマンドや処理を自動的に実行させられるという点です。 この記事では、特定のディストリビューションに依存しない形で、これらを実現するための伝統的な方法を解説します。 注意: ログイン・ログアウト時のイベントに
-
Bashの「実行」と「source」の違いを徹底解説!シェバン・フォーク・環境変数の仕組み
この記事では、Bashでスクリプトを実行する場合とsourceコマンドで読み込む場合の違いについて、内部で何が起こっているのかを詳しく解説します。まずは、スクリプトの呼び出し方によってプログラムがどのように処理されるのかを理解していきましょう。 補足: スクリプトに拡張子を付けるかどうかは動作に影響しません。拡張子がなくても問題なく実行できます。 シェバン(#!)とは 基本的に、すべてのスクリプトはシェバン(#!)と呼ばれる行から始まります。Bashでは#(ハッシュ)記号はコメントとして解釈されますが、シェバンには特別な意味があります。シェバンは、指定されたインタプリタにプログラムの実行を委ね