コンテンツにスキップ
X

シェルの選び方 - Fish・Zsh・Bash 比較

シェル(Shell)とは、ターミナルに入力したテキストコマンドをOSに伝える「通訳プログラム」です。ターミナル画面(CLI)とOS(カーネル)の間に位置し、コマンドを解釈して実行結果を返します。

シェルにはいくつかの種類があり、それぞれ特徴や得意分野が異なります。このページでは Fish・Zsh・Bash の違いを整理し、状況に応じた選び方と実際の使い方を解説します。

対象読者: シェルを設定したいが、種類が多くて迷っている方

学習時間の目安: 読了 15分

前提知識: ターミナルの基本操作を理解していること

混同しやすい2つの概念を整理します。

  • CLI(コマンドラインインターフェース):テキストでコンピュータを操作するターミナル画面そのもの
  • シェル:CLI に入力された命令をOSに渡す通訳プログラム

同じターミナルアプリ上でも、シェルを切り替えることができます。たとえば macOS の「ターミナル」アプリは、Bash でも Zsh でも Fish でも動作します。

シェルメリットデメリット
Bash互換性・安定性が高い。ほぼすべてのサーバー・CI環境で標準搭載自動補完・構文ハイライトは自分で設定が必要
ZshPOSIX 互換。oh-my-zsh で高度なカスタマイズが可能プラグインを増やしすぎると起動が遅くなるリスクがある
Fishオートサジェスト・構文ハイライトを標準搭載。初期設定なしで快適に使えるPOSIX 非準拠のため、既存の Bash スクリプトと互換性がない場合がある

補足:

  • Bash は Linux・WSL・CI 環境で幅広く標準採用されています
  • Zsh は macOS Catalina 以降のデフォルトシェルです
  • Fish は独自の文法を持ちますが、対話的な使い心地はトップクラスです
  • Zsh が macOS Catalina 以降の新規ユーザーに対するデフォルトシェルです
  • 古い Bash(v3)も引き続き使用できますが、対話的な作業では Zsh が推奨されます
  • ターミナルを開いたとき、プロンプトに % が表示されていれば Zsh が動いています
  • Windows Terminal が標準のターミナルホストとして搭載されています
  • 初期プロンプトは PowerShell です
  • WSL(Windows Subsystem for Linux)上では、各 Linux ディストリビューションの Bash がデフォルトになります

まずはOSのデフォルトシェルに慣れることを優先します。

  • macOS → Zsh(デフォルトのまま使う)
  • Windows → PowerShell または WSL 上の Bash

デフォルトシェルに慣れてきたら、Fish を試してみる価値があります。コマンド補完やサジェスト機能が学習を助けてくれます。

Zsh をカスタマイズして使い勝手を向上させます。

# oh-my-zsh のインストール
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
  • zsh-autosuggestions(履歴からの自動提案)を追加する
  • zsh-syntax-highlighting(構文ハイライト)を追加する

用途に応じてシェルを使い分けます。

  • 対話的な作業 → Fish(補完・サジェストが強力)
  • スクリプト開発・CI → Bash / Zsh(互換性を優先)

開発スタイル別のおすすめシェル

Section titled “開発スタイル別のおすすめシェル”
開発スタイル推奨シェル理由
個人開発Fish または Zsh好みで選んでよい。Fish は快適さ重視、Zsh は互換性重視
チーム開発Bash または Zshメンバー間で統一しやすく、共通設定をリポジトリで管理できる
組織・CI環境Bash(sh)サーバー・Docker・CI の標準に合わせるため

VS Code の統合ターミナルで使用するシェルを指定できます。複数のシェルをインストールしている場合でも、VS Code から呼び出すシェルを固定できます。

  1. VS Code の設定を開く(Cmd + , または Ctrl + ,
  2. 検索ボックスに terminal integrated default と入力する
  3. または settings.json に直接記述する:
{
  "terminal.integrated.defaultProfile.osx": "zsh"
}

Windows の場合:

{
  "terminal.integrated.defaultProfile.windows": "PowerShell"
}

実際の使い方:スクリプトのシバン(Shebang)

Section titled “実際の使い方:スクリプトのシバン(Shebang)”

シェルスクリプトを作成するとき、ファイルの先頭行にシバン(shebang)を書きます。これにより、このファイルをどのシェルで実行するかを明示します。

#!/usr/bin/env bash   # Bash スクリプトの場合
#!/usr/bin/env zsh    # Zsh スクリプトの場合
#!/usr/bin/env fish   # Fish スクリプトの場合(Fish 固有の文法を使う場合)

ネット上で見つけたシェルスクリプトの多くは Bash 向けです。Fish シェルを使っていても、Bash スクリプトを実行するときは bash script.sh と明示して呼び出します。

設定ファイルを Git で管理する(dotfiles)

Section titled “設定ファイルを Git で管理する(dotfiles)”

シェルの設定ファイルは、Git リポジトリ(dotfiles リポジトリ)で管理することを推奨します。新しいPCへの移行や、チームメンバーへの環境共有が簡単になります。

シェル設定ファイル
Zsh~/.zshrc
Bash~/.bashrc または ~/.bash_profile
Fish~/.config/fish/config.fish

プラグインの入れすぎで起動が遅い

Zsh でプラグインを追加しすぎると、ターミナルの起動が遅くなります。使用頻度の低いプラグインは無効化または削除してください。

# シェルの起動時間を計測する
time zsh -i -c exit

シェルを変更すると設定が消える?

消えません。シェルを変更しても、ファイルシステム上の設定ファイルはそのまま残ります。ただし、新しいシェルでは別の設定ファイルを読み込むため、必要な設定を新しいシェルの設定ファイルに追記する必要があります。

  • macOS のデフォルトは Zsh、Windows のデフォルトは PowerShell
  • 初心者はまずデフォルトシェルに慣れることを優先する
  • 中級者は Zsh + oh-my-zsh でカスタマイズする
  • 上級者は用途(対話 / スクリプト)に応じて使い分ける
  • スクリプトや CI 環境では Bash 互換性を優先する

Q: Fish を使っていると、ネットで見つけたシェルスクリプトが動かないことがありますか?

A: あります。Fish は POSIX 非準拠のため、Bash 向けのスクリプト(.sh ファイルや #!/bin/bash で始まるスクリプト)は Fish では直接動きません。その場合は bash script.sh のように明示的に Bash で実行してください。

Q: oh-my-zsh はインストールしたほうが良いですか?

A: 便利なプラグインやテーマを簡単に管理できますが、必須ではありません。まず素の Zsh に慣れてから、必要に応じて導入を検討してください。プラグインは少数に絞るほど起動速度が安定します。

Q: シェルを変更すると、以前の設定が消えますか?

A: 消えません。シェルを変更しても、ファイルシステム上の設定ファイルはそのまま残ります。新しいシェルの設定ファイルに設定を追記する必要があります。

Q: macOS で現在使っているシェルを確認するにはどうすればよいですか?

A: ターミナルで echo $SHELL を実行してください。/bin/zsh と表示されれば Zsh、/bin/bash であれば Bash が動いています。