fishシェルを使ってみませんか?

和田です。

「趣味はゲーム」と答えていますが、実はそんなにプレイできていないのでそれでいいのか感があります。

ただ最近は夜な夜なオーストラリアへ車で駆り出してフェスを運営しております。


開発者の方は使用頻度の多少はあれどシェルに触れる機会があるはずです。

本日は「fish」シェルについて紹介したいと思います。

「シェルなんてそんなに触らないな」な方から「バリバリカスタマイズしております」な方までおすすめできるシェルです。むしろあまり触らない方におすすめできるかも。

何がそんなにいいの?

超ざっくり説明すると

  • 軽い
  • キレイ
  • 設定かんたん
  • 補完つよい

です。

注意点としてはbash/zshと互換性がないため、ちょっと面倒くさい場面があります。

意味分からんって方が大多数だと思いますが、順に説明していきます。

軽い?

軽いです。bash並に軽いです(筆者比)。

乗り換え前はoh-my-zshを使用していたのですが、起動の遅さにイライラしていました。

しかし、fishに乗り換えてからはサクサク動作してくれているためとても快適なシェル環境になっています。

キレイ?

24bitカラーのため表示がキレイです。

24bit表示できるターミナルが必要になりますが、MacであればApple純正のTerminal.appやiTerm2が使用できます。
僕はWindowsのターミナル環境は疎いので、24bit対応ターミナルはWindows Subsystem for Linuxくらいしかわかりませんが、その他はここから探してみてください!

設定かんたん?

簡単です。

fishシェル上から fish_config と打つとブラウザで設定画面が開きます。

その設定画面では色の設定や、プロンプト表示の変更、関数定義などなどまさかのGUI上で操作できるという親切さ。CUIどこ行った。

ぜひ体験してみてください!

補完つよい?

つよい。

ある程度まで打つと、以前入力した内容があればそれを表示してくれますし、なければサジェストしてくれます。

また、 Tab キーを押下した際の動作も、ファジー検索や、フィルタリング機能などを備えており大変素晴らしいと思いました(小並感)


さて、ここまでは素晴らしい素晴らしいばかりでしたが、負の面もお伝えします。

ただしこれはいままでにシェルスクリプトや ~/.bashrc などのシェル設定ファイルを触ったことのある方限定です。

以下の点が僕が感じた残念です。

  1. シェルスクリプトが使えない
  2. 設定ファイルの記述が独特

シェルスクリプトが使えない?

言葉足らずですが、いままでのスクリプトは使えないものだと思ってください。

凄く簡単な例をあげます。例えばbash/zshの場合、 コマンドAが成功時にコマンドBを実行する という挙動を実現したい場合、以下のようになると思います。

$ some_command && other_command

それがfishシェルの場合、以下のようになります。

$ some_command; and other_command

更には if などの文法も違います。bash/zshの場合以下のようになります。

#!/bin/sh
var1="A"  
var2="B"

if [[ $var1 = $var2 ]]; then  
  echo "Same"
else  
  echo "Different"
fi  

fishの場合はこうです。

#!/PATH/TO/fish
set var1 "A"  
set var2 "B"

if test $var1 = $var2  
  echo "Same"
else  
  echo "Different"
end  

わかりやすいけど……どうしてこうなった。。

幸い、僕の周りではシェルスクリプトのやり取りが無いため、問題にはなっていませんが、よくやり取りされる方は注意が必要です。

設定ファイルの記述が独特?

上記のスクリプト内にも出てきているのですが、環境変数の設定方法が独特なため、最初はハマりました。

例えば、 ~/.bashrc に新しい環境変数を追加する際、以下のようにすると思います。

# :
export PATH=/NEW/PATH/TO/DIR:$PATH  
# :

fishでは、まず設定ファイルが ~/.fishrc では ありません

~/.config/fish/config.fish になります。えぇ……。

本題の環境変数の設定は以下の通りです。

# :
set -x PATH /NEW/PATH/TO/DIR $PATH  
# :

Oh, yes...

そこは ~/.bashrc を踏襲しても良かったのでは?感があります。


駆け足で紹介しましたが、いかがだったでしょうか。

悪い面も周りを fish使い(通称fisherman. 命名,僕) にしてしまえば悪いことにならないのです……。

それ以外の場合も自分で使う分にはとても素晴らしいシェルだと思いますので、ぜひ体験してみてください。

最後に、fishにハマった人のページへのリンクを張って記事を締めたいと思います。

comments powered by Disqus