シェルの選び方 - Fish・Zsh・Bash 比較
シェル(Shell)とは、ターミナルに入力したテキストコマンドをOSに伝える「通訳プログラム」です。ターミナル画面(CLI)とOS(カーネル)の間に位置し、コマンドを解釈して実行結果を返します。
シェルにはいくつかの種類があり、それぞれ特徴や得意分野が異なります。このページでは Fish・Zsh・Bash の違いを整理し、状況に応じた選び方と実際の使い方を解説します。
対象読者: シェルを設定したいが、種類が多くて迷っている方
学習時間の目安: 読了 15分
前提知識: ターミナルの基本操作を理解していること
CLI とシェルの違い
Section titled “CLI とシェルの違い”混同しやすい2つの概念を整理します。
- CLI(コマンドラインインターフェース):テキストでコンピュータを操作するターミナル画面そのもの
- シェル:CLI に入力された命令をOSに渡す通訳プログラム
同じターミナルアプリ上でも、シェルを切り替えることができます。たとえば macOS の「ターミナル」アプリは、Bash でも Zsh でも Fish でも動作します。
Fish・Zsh・Bash の特徴比較
Section titled “Fish・Zsh・Bash の特徴比較”| シェル | メリット | デメリット |
|---|---|---|
| Bash | 互換性・安定性が高い。ほぼすべてのサーバー・CI環境で標準搭載 | 自動補完・構文ハイライトは自分で設定が必要 |
| Zsh | POSIX 互換。oh-my-zsh で高度なカスタマイズが可能 | プラグインを増やしすぎると起動が遅くなるリスクがある |
| Fish | オートサジェスト・構文ハイライトを標準搭載。初期設定なしで快適に使える | POSIX 非準拠のため、既存の Bash スクリプトと互換性がない場合がある |
補足:
- Bash は Linux・WSL・CI 環境で幅広く標準採用されています
- Zsh は macOS Catalina 以降のデフォルトシェルです
- Fish は独自の文法を持ちますが、対話的な使い心地はトップクラスです
2026年のデフォルトシェル事情
Section titled “2026年のデフォルトシェル事情”- Zsh が macOS Catalina 以降の新規ユーザーに対するデフォルトシェルです
- 古い Bash(v3)も引き続き使用できますが、対話的な作業では Zsh が推奨されます
- ターミナルを開いたとき、プロンプトに
%が表示されていれば Zsh が動いています
Windows 11
Section titled “Windows 11”- Windows Terminal が標準のターミナルホストとして搭載されています
- 初期プロンプトは PowerShell です
- WSL(Windows Subsystem for Linux)上では、各 Linux ディストリビューションの Bash がデフォルトになります
レベル別のおすすめシェル
Section titled “レベル別のおすすめシェル”まずは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 との連携
Section titled “実際の使い方:VS Code との連携”VS Code の統合ターミナルで使用するシェルを指定できます。複数のシェルをインストールしている場合でも、VS Code から呼び出すシェルを固定できます。
- VS Code の設定を開く(
Cmd + ,またはCtrl + ,) - 検索ボックスに
terminal integrated defaultと入力する - または
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 |
よくあるつまずきポイント
Section titled “よくあるつまずきポイント”プラグインの入れすぎで起動が遅い
Zsh でプラグインを追加しすぎると、ターミナルの起動が遅くなります。使用頻度の低いプラグインは無効化または削除してください。
# シェルの起動時間を計測する
time zsh -i -c exitシェルを変更すると設定が消える?
消えません。シェルを変更しても、ファイルシステム上の設定ファイルはそのまま残ります。ただし、新しいシェルでは別の設定ファイルを読み込むため、必要な設定を新しいシェルの設定ファイルに追記する必要があります。
- macOS のデフォルトは Zsh、Windows のデフォルトは PowerShell
- 初心者はまずデフォルトシェルに慣れることを優先する
- 中級者は Zsh + oh-my-zsh でカスタマイズする
- 上級者は用途(対話 / スクリプト)に応じて使い分ける
- スクリプトや CI 環境では Bash 互換性を優先する
よくある質問
Section titled “よくある質問”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 が動いています。