はじめに
macOS Catalina(10.15)以降、デフォルトのログインシェルは zsh です。
本記事では、ユーザーのデフォルトシェルを bash に変更する方法を、標準搭載の /bin/bash と、Homebrew でインストールする新しい bash(5系)それぞれについて解説します。あわせて、設定ファイルの読み込み順やトラブル対処もまとめます。
1. 前提知識:zsh と bash、どちらを選ぶ?
-
/bin/zsh:Appleが標準採用しているzsh。機能が新しく、今後のmacOSの説明やサンプルもzsh前提が増えています。 -
/bin/bash:macOSに標準搭載されていますが、バージョンは 3.2 系(ライセンスの都合で古い)。 -
brew bash:Homebrew で入れる bash 5系。最新機能や新しい構文を使いたい場合はこちらを推奨。
まとめ:
「とりあえず bash に戻したい」 →/bin/bashに切替
「新しい bash を使いたい」 → Homebrew でbashを入れて切替
2. いまのデフォルトシェルを確認
echo "$SHELL"
# 例)/bin/zsh なら zsh がデフォルト
# /bin/bash なら bash がデフォルト
「ログイン時に実際に何が起動されるか」は、この値で判断します。
3. 切替に使う基礎コマンド
- 利用可能なログインシェルの一覧:
cat /etc/shells
- デフォルトシェルの変更(ユーザー単位):
chsh -s <シェルのフルパス>
# 例)標準bashへ
chsh -s /bin/bash
# zshへ戻す
chsh -s /bin/zsh
補足:
chshは対話なしで変更します。変更後、新しいログイン(再起動・再ログイン・新規ターミナル起動)で反映されます。
4. 標準の /bin/bash に切り替える
最短手順はこれだけです。
chsh -s /bin/bash
# 新しい Terminal ウィンドウ/タブを開くか、ログアウト→ログイン
うまくいかない場合は、/etc/shells に /bin/bash が含まれているか確認してください(通常は標準記載されています)。
5. Homebrew の bash(5系)に切り替える
5.1 bash のインストール
- Apple Silicon(M1/M2/M3…):
brew install bash
# パスは通常 /opt/homebrew/bin/bash
- Intel Mac:
brew install bash
# パスは通常 /usr/local/bin/bash
5.2 /etc/shells に追記(管理者権限が必要)
# Apple Silicon
echo "/opt/homebrew/bin/bash" | sudo tee -a /etc/shells
# Intel
echo "/usr/local/bin/bash" | sudo tee -a /etc/shells
5.3 デフォルトシェルを変更
# Apple Silicon
chsh -s /opt/homebrew/bin/bash
# Intel
chsh -s /usr/local/bin/bash
新しいターミナルを開き、以下で確認します。
echo "$SHELL"
bash --version # 5.x が表示されればOK
6. ターミナルアプリ側の設定(任意)
Terminal.app
- 設定 → 「一般」 → 「シェルを開く」=「デフォルトのログインシェル」にしておくと、
$SHELLがそのまま使われます。 - プロファイル別に「コマンドを実行」にbashのパスを直書きすると、ログインシェルと不一致になることがあるため注意。
iTerm2
- Profiles → Command を Login shell にしておくのが無難。必要があるときだけ明示コマンドにします。
7. 設定ファイルの読み込み順(bash 編)
macOS の Terminal はデフォルトで ログインシェル として起動します。
bash の読み込みルールは以下です。
-
ログインシェル:
/etc/profile-
~/.bash_profileがあればそれを読む - なければ
~/.bash_login、それもなければ~/.profile
-
非ログイン・対話シェル:
~/.bashrc
実践上は ~/.bash_profile から ~/.bashrc を取り込むのが定番です。
# ~/.bash_profile
# (一度だけ読む系の設定:PATHや言語設定、pyenv初期化など)
[ -r ~/.bashrc ] && . ~/.bashrc
# ~/.bashrc
# (毎回読みたい:エイリアス、プロンプト、補完、関数など)
alias ll='ls -alF'
よくある質問:「設定が効かない」
→ Terminal がログインシェルで起動しているのに~/.bashrcしか書いていないケース。~/.bash_profileから~/.bashrcを読み込む記述を追加すると解決します。
8. zsh からの移行メモ
- zsh の設定は主に
~/.zshrc。bash に移ると そのままでは読み込まれません。必要なエイリアスや関数は~/.bashrcに移植します。 - zsh 独自機能(
autoload、setopt、zleなど)は bash に互換がありません。置き換えや削除が必要な場合があります。 - 補完は bash-completion を利用可能です(Homebrewの
bash-completion@2が bash5 系向け)。
9. ターミナル起動時にメッセージが表示されないよう環境変数を設定する
macOS Catalina 以降では、Apple がデフォルトシェルを bash から zsh に変更しました。
そのため、bash を使い続けていると、毎回次のようなメッセージが表示されます。
The default interactive shell is now zsh.
To update your account to use zsh, please run `chsh -s /bin/zsh`.
For more details, please visit https://support.apple.com/kb/HT208050.
この警告を非表示にするには、以下の環境変数を .bash_profile に追記します。
echo 'export BASH_SILENCE_DEPRECATION_WARNING=1' >> ~/.bash_profile
手順まとめ
-
ターミナルで上記コマンドを実行
-
設定を反映:
source ~/.bash_profile -
新しいターミナルを開いて確認。メッセージが表示されなければ成功です。
解説
Apple は、この警告を抑制するための専用フラグとして BASH_SILENCE_DEPRECATION_WARNING を用意しています。
値を 1 に設定することで、この警告を非表示にできます。
.bash_profile に書く理由:macOS の Terminal はログインシェルとして起動するため、~/.bash_profile に設定するのが確実です。
10. もとに戻す(zsh に復帰)
chsh -s /bin/zsh
11. トラブルシュート
11.1 chsh: /xxx/bash: non-standard shell と言われる
/etc/shells にそのパスが載っていない可能性。管理者権限で追記してから chsh を再実行。
echo "/opt/homebrew/bin/bash" | sudo tee -a /etc/shells
chsh -s /opt/homebrew/bin/bash
11.2 設定が反映されない
- 新しいウィンドウ / タブを開く、または一度ログアウト→ログイン。
- Terminal / iTerm のプロファイルで「任意のコマンドを実行」にしていないか確認(Login shellにする)。
11.3 PATH やツール初期化が効かない
-
bash の読み込み順を再確認。
~/.bash_profileと~/.bashrcを適切に分担。 -
pyenv / nodenv / rbenv などは ログインシェル側(
~/.bash_profile)に初期化を置くと安定します。# ~/.bash_profile export PATH="$HOME/.pyenv/bin:$PATH" eval "$(pyenv init -)" [ -r ~/.bashrc ] && . ~/.bashrc
11.4 一時的にだけ bash を使いたい
zsh のままでも、ターミナル上で bash と打てば そのセッションだけ bash になります(exit で戻る)。
12. まとめ:最短手順(用途別)
-
標準の古い bash でOK(簡単・安全)
chsh -s /bin/bash -
新しい bash(5系)が必要(新機能・最新構文)
brew install bash # Apple Silicon echo "/opt/homebrew/bin/bash" | sudo tee -a /etc/shells chsh -s /opt/homebrew/bin/bash # Intel # echo "/usr/local/bin/bash" | sudo tee -a /etc/shells # chsh -s /usr/local/bin/bash
最後に、新しいターミナルを開き、echo "$SHELL" と bash --version で結果を確認してください。これで zsh → bash への切り替えは完了です。