私は以前、z-shellを使っていましたが、最近fishシェルに乗り換えてみました。この記事では、なぜ私がfishシェルに変更したのか、どのようにインストールしたかについて紹介したいと思います。
fishとは
記述が簡潔でわかりやすい
fishシェルはコマンドの補完や色付きのプロンプトなど、使いやすい機能が豊富です。また、コマンドのオプションや引数を入力する際にも、候補がリストアップされて選択することができるため、記述が簡潔でわかりやすくなります。
デフォルトのシェルスクリプトが使いやすい
fishシェルには、bashやzshなどの他のシェルに比べてデフォルトのシェルスクリプトがシンプルでわかりやすい特徴があります。ですがこれが仇となって未だになれていません。。
プラグインマネージャーが豊富
fishシェルには、公式のプラグインマネージャーであるfisherがあります。このツールを使用すると、コマンドの補完やテーマの変更など、様々なプラグインを簡単にインストールできます。また、他のユーザーが作成したプラグインを共有するためのコミュニティも存在しています。
セキュリティに配慮
fishシェルは、bashなどの他のシェルに比べて、セキュリティ面で優れた特徴があります。例えば、環境変数の自動展開を無効にするなど、セキュリティ上の問題に対処するための機能が充実しています。
インストール
- Ubuntu
sudo apt-get install fish
- Arch
sudo pacman -S fish
デフォルトに設定するには
chsh -s /usr/bin/fish
で完了です。
どのあたりがよかったか
zsh-autosuggestions
やzsh-syntax-highlighting
を用意しなくてもインストールした時点でハイライトや補完や予測は申し分ない性能があり、いちいち自分で設定しなくて良かったところが良かったです。
このようにオプションすべて表示してその説明もついていたりします。
cdが賢くなった
今までzsh-autosuggestions
をインストールしていると今までのhistory
から予測を示してくれますが、fishは特に設定しなくてもその階層にどのようなディレクトリがあるかを把握してくれています。
具体的には
このように補完が最初は出てきたとします。
その次にzshであれば
cd workspace/rione/
が予測として出てきてしまいます。一番新しい履歴をたどってしまうためです。
ですが、その階層にいたときに実行したコマンドの履歴をたどってくれるのでかなり精度の高い予測を行ってくれます。
実際にspeech_and_NLP
というディレクトリは存在しているのでそのまま右矢印キーを押してEnterを押すだけで次の階層に進むことができます。
設定がとても楽だった。
zshを使用しているときはPS1
をいい感じに書き換えて右プロンプトにブランチ名を表示して、、と結構.zshrc
ファイルがややこしくて管理も面倒だったのですが、fishにしてからとても設定が楽で、
fish_config
と入力するだけでfishの設定をGUI上で行うことができます。
(↓あと何気に良かったのがexitコードが出てくることです)
とすると自動でブラウザが立ち上がり
これでテーマやプロンプトを選ぶことができます。非常にかんたんで設定しやすいです。
デメリットや不満点
最初でも書いたのですが、POSIX準拠ではなくzshやbashとコマンドが違ってきます。
ほとんど同じですが、たまに引っかかることがあります。
fishシェルでは変数を設定する場合、環境変数かローカル変数かを明示的に指定する必要があります。環境変数はset -xコマンドを使用して設定し、ローカル変数はsetコマンドを使用して設定します。
例えば、環境変数を設定する場合は以下のようになります。
set -x MY_VARIABLE value
ローカル変数の場合は
set MY_VARIABLE value
fishシェルでは変数名にドル記号($)をつける必要があります。例えば、環境変数を参照する場合は以下のようになります。
echo $MY_VARIABLE
zshではグローバル変数やローカル変数に違いがなく
MY_VARIABLE=value
で完了です。環境変数を参照する場合も、ドル記号をつける必要はありません。
echo $MY_VARIABLE
呼び出すときはfishと変わりません。
あとはパスを通すのに戸惑って一苦労しています。
nvmがなかなかうまく動いてくれず、困っていますがzshでも色々あったのでそれはお互い得意不得意はあると思って使用しています。
以上です。zshも極めればfishを超える性能があるかもしれませんが手軽で使いやすいシェルだったので紹介しました。
参考になれば幸いです。
参考文献