Macのデフォルトのシェルをzshからfishに切り替える方法
なぜシェルを切り替えるか
飽くなきシェルへのこだわり…などは全然なくて、VS CodeエディタのAIコーディングのためのCline(Roo Code)という拡張機能のためです。
本来は、ClineがVS Codeエディタのターミナルでコマンドを実行したり、その出力を読んでくれるはずなのですが、どうしてもターミナル出力を読んでくれなくて、同じように困っている人のClineのissueに「シェルをzshからfishに切り替えた」という力技があったので、試したらうまくいったし、fishも結構いい感じなので切り替えちゃおうかなという感じです。
むしろ、シェルにこだわりがないからこそ、切り替えるという感じです。
問題解決したらまたzshに戻すかもしれないので、設定を記録しておきます。
また、Clineの問題に対応するだけであれば、VS Codeエディタのターミナルのシェルの設定を切り替えるだけでもよいのですが、複数のシェルを使うのもややこしいので切り替えちゃいました。
追記:Roo Codeのバージョンアップで、問題解決したのでfishからzshに戻しました。fishも悪くはなかったですが、やっぱりデフォルトじゃないと色々細かくハマってストレスなことあったので。記事は残しておきます。
fishのインストール
基本的なMacのセットアップやHomebrewのセットアップは以下記事を参考にしてください。
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に関しては以下記事参照してください)。
自分は、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です。
以下の通りです。
-
Ctrl+Shift+P
でコマンドパレットを開いてTerminal: Select Default Profile
を選択。
- fishを選択
まとめ
Macのデフォルトのシェルをzshからfishに変更しました。これでClineもターミナルの出力を読むことができるようになりました。
思わぬ理由でシェルを変更することになりましたが、fish自体は、使った感じ見た目も補完もいい感じで使いやすいので、結果としては良かったかなとか感じていますが、もうしばらく使い込んでみたいと思います。
参考リンク
変更履歴
- 2025/03/02 fishからzshに戻したので追記
Discussion