zshとbashの違いは?どっちを使うべきか・切り替え方(macOS/Linux)

zshとbashの違いと、どっちを使うべきか・切り替え方を案内するアイキャッチ

「zshとbashは何が違うのか」「Macではzsh、サーバーではbashと聞くけれど、結局どっちを使えばいいのか」。この記事では、補完・カスタマイズ・設定ファイル・スクリプトの互換性という観点で2つを比べ、選び方と切り替え方、移行時の注意までをまとめます。

結論を先に言うと、手元のPCで日常的にターミナルを使うならzsh、サーバーや組織で広く使われている環境に合わせるならbashが目安です。どちらが絶対に優れているという話ではなく、使う場所と目的で選ぶのが現実的です。

zshとbashを主な強み・標準の場面・補完・スクリプトで比べた比較表の図
目次

まず結論:どっちを使うべきか

  • macOSを使っている人:標準のzshのままで問題ありません。macOSではCatalina以降、新しく作ったユーザーアカウントの標準シェルがzshになっています(Apple公式)。
  • Linuxの手元PCで開発する人:補完やプラグインで作業を楽にしたいならzsh、まずは標準のままで十分ならbash、と好みで選べます。
  • サーバー運用やチーム開発が中心の人:周りの環境や既存スクリプトがbash前提なら、無理に変えずbashにそろえる方が安全です。
  • シェルスクリプトを書く人:対話用のシェルと、スクリプトを実行するシェルは分けて考えます。スクリプトの先頭で実行するシェルを明示すれば、普段使うシェルと違っても大丈夫です(後述)。

zshそのものの魅力や設定を深掘りしたい方は、zsh単体の記事もあわせてどうぞ。この記事は「違いと選び方」に絞ります。

関連:zshの魅力に迫る!エンジニア必見のシェル環境

zshとbashとは?ざっくり押さえる

bashとは

bashは「Bourne Again SHell」の略で、GNUプロジェクトが開発したシェルです。古くからの標準シェルであるshの流れを受け継ぎ、多くのLinux環境やサーバーで長く使われてきました。資料や事例が豊富で、「調べればだいたいbash前提の説明が出てくる」のが強みです(GNU Bash公式マニュアル)。

zshとは

zshは「Z Shell」と呼ばれるシェルです。公式マニュアルでは、対話利用向けの機能として、コマンドライン編集、スペル修正の仕組み、プログラム可能な補完、履歴の仕組みなどが挙げられています。補完やカスタマイズのしやすさを重視して選ばれることが多いシェルです(zsh公式マニュアル)。

zshは対話向けの快適さ、bashは広く使われる標準という位置づけの図

比較表:zshとbashの違い

観点zshbash
主な強み補完や対話操作の快適さ、カスタマイズのしやすさ広く使われていること、資料・事例の多さ
標準で使われる場面macOS(Catalina以降、新規アカウント)多くのLinux環境やサーバーで長く採用
補完文脈に応じた補完の仕組みが用意され、細かく設定できる補完の仕組みはあるが、環境によっては追加設定やパッケージが必要なことも
カスタマイズプラグインやテーマの仕組みが広く使われている設定ファイルの編集が中心。必要な分だけ足していく形
主な設定ファイル対話用はホームディレクトリの設定ファイル(zsh用)対話用・ログイン用でbash用の設定ファイルを使い分ける
スクリプトbash向けスクリプトがそのまま動かない場合があるbash前提で書かれたスクリプトや手順が多い
向いている人手元で毎日のようにターミナルを使う人サーバーやチームの標準に合わせたい人

表はあくまで傾向です。たとえばbashでも補完を強化できますし、zshでも設定を増やしすぎれば起動が重くなります。「標準の状態でどんな体験か」と「周りの環境がどちら前提か」で見るのがポイントです。

違いをもう少し詳しく

1. 補完のしやすさ

zshの補完は「プログラム可能」と公式マニュアルで説明されていて、コマンドの引数やオプションの位置といった文脈に応じて候補を出す仕組み(compsys)があります。有効化や細かい見た目の設定も含め、補完まわりを自分好みに整えやすいのが特徴です。

bashにも補完を拡張する仕組みはありますが、配布形態や初期設定によっては、別途パッケージや設定が必要になることがあります。「何も足さない状態で、どれだけ補完が効くか」ではzshに軍配が上がりやすい、というのが実感に近い言い方です。

2. カスタマイズとプラグイン

zshは、プロンプトの見た目を変えるテーマや、機能を足すプラグインの文化が広く根付いています。Gitの状態をプロンプトに出す、よく使うコマンドの補完を足す、といった工夫を積み重ねやすい環境です。

bashでもエイリアスやプロンプトの変更はできますが、基本的には設定ファイルを自分で編集して積み上げる形です。シンプルに使いたい人には、むしろその方が分かりやすい場合もあります。

zshでプラグイン管理を検討する場合は、次の記事も参考になります。

関連:zshのプラグインマネージャー【Sheldon】のインストール

3. 設定ファイルが違う

移行で最初につまずきやすいのが、設定ファイルの名前と役割の違いです。zsh公式FAQでは、起動時に読まれるファイルとして、常時読まれるもの、ログイン時に読まれるもの、対話時に読まれるものが整理されています。bashにもログイン用と対話用で読み分けの考え方があり、「bashで書いていた設定をそのままコピーすれば終わり」にはなりません。

移行するときは、いきなり全部を写すのではなく、エイリアスや環境変数など必要なものだけを少しずつ移し、エラーが出ないか確かめながら進めるのが安全です。具体的な設定ファイル名は、本文末尾の参考資料(zsh公式FAQ)で確認できます。

4. スクリプトの互換性:ここは要注意

「普段zshを使っているから、スクリプトもzshで書けばいい」とは限りません。対話用のシェルとスクリプト実行用のシェルは別物として扱うのが基本です。スクリプトファイルの先頭で、どのシェルで実行するかを明示しておけば、利用者の普段のシェルに左右されにくくなります。

bash向けに書かれたスクリプトをzshでそのまま実行すると、動かない・動きが違うことがあります。代表的な違いを2つ挙げます。

  • 変数の中身の扱い:空白を含む変数を展開したとき、bashなど多くのシェルでは単語ごとに分かれますが、zshでは既定では分かれません。zsh公式FAQでも、この違いと対処が説明されています。
  • 配列の番号:zshでは配列の要素番号は既定で1から始まります(公式マニュアル)。bash前提の感覚で番号を扱うと、思わぬずれにつながります。

このほか、パターンに一致するファイルがない場合の扱いなど、細かな違いもあります。既存のbashスクリプトは、無理にzsh用に書き換えず、bashで実行する前提のまま残すのが無難です。

今使っているシェルを確かめる方法

まず、ログインシェルとして何が登録されているかを確認します。

echo $SHELL

今開いているターミナルで動いているシェルの名前とバージョンも確認できます。

echo $0
zsh --version
bash --version

表示された内容で、普段使っているのがzshかbashかを切り分けられます。バージョン確認は、移行前のメモとしても残しておくと便利です。

切り替え方(macOS/Linux)

切り替えの流れを確認、変更、ターミナル再起動、確認の順に示した図

macOSの場合

Apple公式の案内では、Catalina以降の新規アカウントではzshが標準です。古いバージョンから引き継いだアカウントなどでbashのままになっている場合は、ログインシェルを変更できます。変更前に、切り替え先のシェルが一覧に含まれているかを確認します。

cat /etc/shells

一覧にあることを確かめてから、ログインシェルを変更します。

chsh -s /bin/zsh

bashに戻したい場合は、切り替え先をbashのパスに変えて同じ手順を行います。変更後はターミナルを開き直し、最初の「確かめる方法」で反映されているか確認してください。macOSの標準パスは環境で異なる場合があるので、必ず一覧で実在するパスを指定してください。

Linuxの場合

考え方はmacOSと同じで、一覧で切り替え先を確認してから変更します。zshが入っていない場合は、先にインストールが必要です。インストール手順の詳細は次の記事にまとめています。

関連:Zshのインストール手順

インストール後に一覧を確認し、ログインシェルを変更します。

cat /etc/shells
chsh -s "$(which zsh)"

こちらも変更後はログインし直すかターミナルを開き直して、反映を確認します。サーバー機など、他の利用者や運用ルールがある環境では、勝手に変更せず管理者の方針に従ってください。

移行時の注意点

  • 設定は少しずつ移す:bashの設定を丸ごと写すと、zshでは意味が違う書き方でエラーになることがあります。必要なものから1つずつ足します。
  • 既存スクリプトは触らない:bash前提のスクリプトは、実行するシェルを明示した上で、そのままbashで動かすのが安全です。
  • プラグインを入れすぎない:便利な反面、起動が遅くなったり、原因の切り分けが難しくなったりします。最初は最小限から始めます。
  • 戻し方も確認しておく:合わなかったときにbashへ戻す手順(上の切り替えの逆)も、メモしておくと安心です。
  • チームの標準を優先する:仕事の環境でシェルが統一されている場合は、個人の好みより標準に合わせる方がトラブルが少なくなります。

よくある質問

Macなら、わざわざbashに戻す必要はありますか?

日常利用では、標準のzshのままで問題ないことがほとんどです。bash前提の手順やスクリプトを扱うときだけ、そのスクリプトをbashで実行すればよく、普段のシェルまで戻す必要は通常ありません。

Linuxのサーバーでもzshに変えた方がいいですか?

サーバーでは、周りの運用や既存スクリプトがbash前提であることが多いため、無理に変える必要はありません。手元の開発PCとサーバーで使い分ける、という選び方もよくあります。

zshにしたらbashのスクリプトは全部書き直しですか?

いいえ。スクリプトの先頭でbashを指定して実行すれば、普段zshを使っていてもbashスクリプトはそのまま動かせます。書き直しが必要なのは、「zshで直接実行したい」場合に限られます。

まとめ

  • zshは補完やカスタマイズなど対話の快適さ、bashは広く使われている安心感と資料の多さが強みです
  • macOSはCatalina以降zshが標準(新規アカウント)。Linuxやサーバーではbash前提の環境も多いままです
  • 選び方の目安は「手元の日常利用ならzsh」「サーバーやチームの標準に合わせるならbash」です
  • スクリプトは対話用シェルと分け、先頭で実行シェルを明示。bashスクリプトをzshでそのまま実行すると、変数の扱いや配列の番号などで違いが出ます
  • 切り替えは、一覧でパスを確認してからログインシェルを変更し、ターミナルを開き直して確認します

「自分はどちら寄りか」が分かったら、まずは今の環境で確かめるところから始めてみてください。zshをもう少し知りたい方はzsh単体の記事へ、実際に切り替える方はインストールと切り替えの手順を確認しながら、少しずつ移すのがおすすめです。

参考資料

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

この記事を書いた人

社内エンジニアとして、SREとセキュリティの仕事をしています。サーバーの構築や運用、クラウド環境の設計にも関わってきました。趣味はゲームと漫画・アニメ。

コメント

コメントする

目次