🐟

Macのデフォルトのシェルをzshからfishに切り替える方法

2025/02/13に公開

なぜシェルを切り替えるか

飽くなきシェルへのこだわり…などは全然なくて、VS CodeエディタのAIコーディングのためのCline(Roo Code)という拡張機能のためです。

本来は、ClineがVS Codeエディタのターミナルでコマンドを実行したり、その出力を読んでくれるはずなのですが、どうしてもターミナル出力を読んでくれなくて、同じように困っている人のClineのissueに「シェルをzshからfishに切り替えた」という力技があったので、試したらうまくいったし、fishも結構いい感じなので切り替えちゃおうかなという感じです。

https://x.com/karaage0703/status/1889310027980394799

むしろ、シェルにこだわりがないからこそ、切り替えるという感じです。

問題解決したらまたzshに戻すかもしれないので、設定を記録しておきます。

また、Clineの問題に対応するだけであれば、VS Codeエディタのターミナルのシェルの設定を切り替えるだけでもよいのですが、複数のシェルを使うのもややこしいので切り替えちゃいました。

追記:Roo Codeのバージョンアップで、問題解決したのでfishからzshに戻しました。fishも悪くはなかったですが、やっぱりデフォルトじゃないと色々細かくハマってストレスなことあったので。記事は残しておきます。

fishのインストール

基本的なMacのセットアップやHomebrewのセットアップは以下記事を参考にしてください。
https://zenn.dev/karaage0703/articles/a1ee72f22882e9

fishのインストールは以下コマンド実行するのみです。

$ brew install fish

これで、ターミナルでfishとコマンドを打てばシェルがfishに変わります。

デフォルトのシェルをfishに設定

デフォルトのシェルをfishにする方法です。

以下コマンドでパスを確認します。

$ which fish

自分の場合は/opt/homebrew/bin/fishでした。

以下コマンドで /etc/shellsを編集します。

$ sudo vim /etc/shells

先程のパスを追加します。以下は自分の例です。

/bin/bash
/bin/csh
/bin/dash
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
/opt/homebrew/bin/fish

あとは、以下コマンドでfishのパスを指定することで、デフォルトのシェルに設定できます。

$ chsh -s /opt/homebrew/bin/fish

これで、ターミナル起動すると、デフォルトのシェルがfishになります。一時的にzshにもどしたいときはzshとコマンドをうてばOKです。デフォルトのシェルを戻したいときは以下コマンドとなります。

$ chsh -s /bin/zsh

fishの設定

fishの設定ファイルは~/.config/fish/config.fishです。zshでいうところの~/.zshrcですね。

Homebrewを使えるようにする

Homebrewが使えなくて不便なので~/.config/fish/config.fishに以下を追記して、パスを通してHomebrewを使えるようにします。

if status is-interactive
    # Commands to run in interactive sessions can go here

    # PATH
    set PATH /opt/homebrew/bin $PATH # <-追加
end

参考:M1 Mac でシェルを fish + bobthefish + brew にした

MiniForge設定

自分の場合はPython環境をMiniForgeで構築しているので、その設定だけ実施しました(MiniForgeに関しては以下記事参照してください)。

https://zenn.dev/karaage0703/articles/f3254b14898b4d

自分は、zshで既にMiniForgeをセットアップしていたので、zsh上で以下コマンドを実行するだけで~/.config/fish/config.fishに必要な設定が追記されました。

$ conda init fish

fish_config

以下コマンドで、見た目など色々手軽にGUIでカスタムできるので、カスタマイズしたい人は試してみると良いと思います。

$ fish_config

function

私は、ほとんどシェルの設定はしていないのですが、GitHubアカウント使い分けの設定に関数を使っているのですが、fishとzshで以下のように文法が違うのでちょっとだけとまどいました。

zshの関数

function main(){
    command
}

fishの関数

function main
    command
end

VS Codeエディタのターミナルのデフォルトシェル変更

(自分にとって)肝心のVS Codeエディタのターミナルのデフォルトシェルは、VS Codeエディタで個別に設定する必要があります。Clineの問題に対応するだけなら、デフォルトのシェルは切り替えずに、この設定だけやってもOKです。

以下の通りです。

  1. Ctrl+Shift+Pでコマンドパレットを開いてTerminal: Select Default Profileを選択。

  1. fishを選択

参考:VSCodeのデフォルトターミナルを変更する方法

まとめ

Macのデフォルトのシェルをzshからfishに変更しました。これでClineもターミナルの出力を読むことができるようになりました。

思わぬ理由でシェルを変更することになりましたが、fish自体は、使った感じ見た目も補完もいい感じで使いやすいので、結果としては良かったかなとか感じていますが、もうしばらく使い込んでみたいと思います。

参考リンク

https://www.wantedly.com/companies/luxy-inc/post_articles/362074

https://natsukium.github.io/fish-docs-jp/tutorial/functions.html

変更履歴

  • 2025/03/02 fishからzshに戻したので追記

Discussion