2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

fishに乗り換えてみて

Last updated at Posted at 2023-03-15

私は以前、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-autosuggestionszsh-syntax-highlightingを用意しなくてもインストールした時点でハイライトや補完や予測は申し分ない性能があり、いちいち自分で設定しなくて良かったところが良かったです。
Screenshot from 2023-03-15 21-13-18.png

このようにオプションすべて表示してその説明もついていたりします。

cdが賢くなった

今までzsh-autosuggestionsをインストールしていると今までのhistoryから予測を示してくれますが、fishは特に設定しなくてもその階層にどのようなディレクトリがあるかを把握してくれています。

具体的にはScreenshot from 2023-03-15 21-17-26.png
このように補完が最初は出てきたとします。
その次にzshであれば
cd workspace/rione/
が予測として出てきてしまいます。一番新しい履歴をたどってしまうためです。

ですが、その階層にいたときに実行したコマンドの履歴をたどってくれるのでかなり精度の高い予測を行ってくれます。

Screenshot from 2023-03-15 21-20-29.png

実際にspeech_and_NLPというディレクトリは存在しているのでそのまま右矢印キーを押してEnterを押すだけで次の階層に進むことができます。

設定がとても楽だった。

zshを使用しているときはPS1をいい感じに書き換えて右プロンプトにブランチ名を表示して、、と結構.zshrcファイルがややこしくて管理も面倒だったのですが、fishにしてからとても設定が楽で、

fish_config

と入力するだけでfishの設定をGUI上で行うことができます。
(↓あと何気に良かったのがexitコードが出てくることです)
Screenshot from 2023-03-15 21-24-15.png
とすると自動でブラウザが立ち上がりScreenshot from 2023-03-15 21-25-26.png

これでテーマやプロンプトを選ぶことができます。非常にかんたんで設定しやすいです。

デメリットや不満点

最初でも書いたのですが、POSIX準拠ではなくzshやbashとコマンドが違ってきます。
ほとんど同じですが、たまに引っかかることがあります。

fishシェルでは変数を設定する場合、環境変数かローカル変数かを明示的に指定する必要があります。環境変数はset -xコマンドを使用して設定し、ローカル変数はsetコマンドを使用して設定します。

例えば、環境変数を設定する場合は以下のようになります。

fish
set -x MY_VARIABLE value

ローカル変数の場合は

fish
set MY_VARIABLE value

fishシェルでは変数名にドル記号($)をつける必要があります。例えば、環境変数を参照する場合は以下のようになります。

fish
echo $MY_VARIABLE

zshではグローバル変数やローカル変数に違いがなく

zsh
MY_VARIABLE=value

で完了です。環境変数を参照する場合も、ドル記号をつける必要はありません。

zsh
echo $MY_VARIABLE

呼び出すときはfishと変わりません。

あとはパスを通すのに戸惑って一苦労しています。

nvmがなかなかうまく動いてくれず、困っていますがzshでも色々あったのでそれはお互い得意不得意はあると思って使用しています。

Screenshot from 2023-03-15 21-35-57.png

以上です。zshも極めればfishを超える性能があるかもしれませんが手軽で使いやすいシェルだったので紹介しました。

参考になれば幸いです。

参考文献

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?