zsh から fish (shell) へお引っ越しを試みた話

目次

fish との出会い

これは本当に偶然の出会いで、 「『大きなスクリーンにソースコードを映して、周囲からいろいろヤジ飛ばされながら、ナビゲーターとドライバーとでペアプロする』あのあれ、なんだったかな?確か頭の方が"fish"みたいな音じゃなかったかな?」と音を頼りに

「fish プログラミング」

というキーワードで検索したところ、fish shell がヒットしたのであった。

仕事用もプレイベート用Macもzshを設定していて、個人的にはそれなりに満足していたのですが、色々zshにインストールしていたこともあって、起動やキー入力に若干もたつきを感じていたのもalternative factでしたので、ちょっと試してみようかなと思ったのが始まりです。

fishとは

fish のfishは Friendly interactive shell の略でユーザフレンドリーさを売りにしたUNIX shellとのことです。どのあたりがユーザーフレンドリーか、というとざっと以下のようです。

  • コマンドのautocompleteやシンタックスハイライト
  • web上でカラーチョイスができるカラフルなターミナル
  • 健全でシンプルな文法(bash等とは若干違うらしい)
  • manページの自動生成と親切なヘルプメッセージ

もちろん、以前使用していたzshでも.zshrcに設定を入れたり、プラグインやテーマをインストールすることで自分好みの使いやすいターミナルに仕上げることができます。

セットアップ手順

fishのインストール

Homebrewを使用してfishをインストールします。 (これ以外にもMacportsやインストーラー、Windows版、tarboll等様々サポートしていますので公式サイトを確認してください)

brew install fish

デフォルトのシェル切り替え

/etc/shells を確認すると、使用可能なshellを確認できます。

cat /etc/shells
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.

/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh

今のままでは fish は使用できませんので末尾に1行fishのパスを追記しましょう。

which fish
/usr/local/bin/fish  #これを/etc/shellsに追記

以下のコマンドでターミナル起動時のログインシェルをfishに切り替えることができます。

chsh -s /usr/local/bin/fish

ターミナルを再起動する

ターミナルを再起動することでシェルが切り替わっていることを確認できます。 個人的にはもう少しカラフルでかっこよくしたいのでプラグインを入れる方法を模索します。

fisherman でpluginをインストールする

fishの場合、fisherman がplugin managerとして利用可能なようですので、こちらをインストールして拡張していきましょう。

fisherman のインストール

curl -Lo ~/.config/fish/functions/fisher.fish --create-dirs git.io/fisher

プラグインのインストール

まずはプロンプトのテーマをインストールします。今回はjokerのテーマをインストールしてみます。

fisher joker

powerlineのインストール

私のmacではjokerのテーマで使用しているpowerlineをまだインストールしていなかったため、jokerのREADMEに添付されている画像のようなデザインになりませんでした。そのため、別途powerlineをインストールします。

fonts のインストール

加えてfontsも別途インストールしなくてはいけないようです。(やること増えてきてしまった。。。) fontsのインストール手順 を参考にインストールするとpip を使用する方法が紹介されていて微妙なので、gitリポジトリ からcloneしてきてシェルでフォントを一括でインストールします。

git clone https://github.com/powerline/fonts
sh ./install.sh

iTerm2(ターミナル)の設定

iTerm2でインストールしたフォントが利用できるように設定をします。 [Preference] > [Profile]メニュー > [Text]タブ > [Font]と[Non-ASCII Font] の双方で「Change Font」を選択します。 [All Fonts ] > [Source Code Pro for Powerline] を選択します。

やっとpowerlineが出ました。。 補間も効くみたいですね。

あとは.zshrcで記載しているPATHのexportやコマンドのailasを ~/.config/fish/config.fish に転記しましょう。

起動時のconfigファイルを書き換える

.zshrc にものすごいたくさん書いていた私の場合、このお引越が一番時間かかりました。。 fish起動時にconfig.fishを読み込んで、変数のexportやaliasの登録をしたい場合には以下のような書き換えが必要です。

export

  • zshの場合
    export ANT_HOME=/usr/bin/apache-ant-1.9.4
  • fishの場合
    set -x ANT_HOME /usr/bin/apache-ant-1.9.4

コマンドのalias

  • zshの場合
    alias la='ls -a'
  • fishの場合
    alias la='ls -a'
    function la
         ls -a $argv
    end

aliasの登録がかなり面倒な感じになってしまっていますね。

おまけ: bashを使えるようにする

fishの場合、bashとは文法が異なるため

bash hoge.sh
のように実行する必要があるため、少々不便です。

そのため、fishでもbashのシェルが実行できるよう、プラグインを入れてあげる必要があります。

fisher edc/bass

まとめ

  • fishはユーザーに優しいインターフェースを提供している(?)
    • 実はzshでも同じプロンプトのデザインを提供しているケースもあるので見た目自体にはzshとの大きな差別化は図れていない。
    • autocompleteはzshよりも少し便利かなという印象
  • fishのconfigファイルは.zshrcや.bashrcと文法的な互換性がないので抵抗感がある
    • 慣れなのかもしれないが、正直ここに時間をかけたくない
  • fish の場合、コマンド履歴に対する操作がちょっと弱い
    • ! ${履歴番号} でコマンド再実行ができないみたい。(個人的には重宝していたのに。。)
    • history コマンドでそもそも履歴の番号表示されないですし。。

しばらくはプライベートはfish、仕事はzshで行こうと思いました。