🐟たのしいfishライフのすすめ🐟

こんにちは。
RUNTEQ26期の山田 貴俊です。
RUNTEQのアドベントカレンダー9日目ということで、私が普段使っているfishというシェルについて書きたいと思います。

# 🐟 fishってなに？
前書きにも書きましたが、fishはシェルの1つです。
bashやzshの仲間と覚えてもらえればオッケーです！
色々と便利機能があるのと、ちょっとマニアックなツール使ってる俺格好いいって気分になります。

https://fishshell.com/
## 🐠 メリット
- 補完機能が強い。何かコマンドを打つとhistoryから自動で補完を拾ってくれる。タイポが減る。
- 略語機能(abbr)が使いやすい。エイリアスに似てるけどちょっと違う。
- Fisherというブラグイン管理ソフトが用意されており、管理がしやすい。
- fish_configでlocalhostが立ち上がり、色設定やhistoryをGUIで確認・編集できる。
- マニュアルが読みやすい(個人の感想)。
- かっこいい(個人の感想、重要)。

## 🐡 デメリット
- POSIX非互換。これが致命的なデメリット。デフォルトシェルにするのはリスクがあるので、私はエディタの立ち上げ時にzshから自動でfishに切り替えするように設定してます。デフォルトにしないので試しに使ってみるハードルが低いとも言えるかも。POSIXはOSのインターフェースや環境を定義するIEEEの規格です。
- 癖がある。

# 🐟 fishを使おう
とりあえず試しましょう。
```
# install
brew install fish

# パス表示 ex: /usr/local/bin/fish
which fish

# fishへの切り替え
fish

# デフォルトシェルに戻る
exit

# GUIでの設定立ち上げ
fish_config
```
これでfishが使えるようになりました。

# 🐟 便利機能紹介
私のお気に入り機能である補完と略語機能について紹介します！

## 🐠 補完機能
コマンドを打った後に候補が出てくれます。
tabを打つと一覧を表示。
![tmux-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2194216/7074223a-f850-a25d-5b93-06a352c9b7bf.png)
また、コマンドの途中にハイライトが出てくるので、それはctrl + fで補完できます。履歴から自動で読み込んでくれるので、キーボードのfが壊れていない限りは超便利です。
~~著者は現在進行形でMacBookのキーボードのfが壊れているので不便。サンタさん自作キーボードのキットください。~~
![tmux-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2194216/5b25e0c2-3183-ce97-fa6f-be767ecf4da4.png)

## 🐡 略語機能(abbr)
これがあるからずっとfish使ってます。
エイリアスと違ってfishの略語を打つと文字が展開されます。
打ったコマンドを随時確認できるところが便利。
![13ed9b1e5ae7999552b40527133800d0.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2194216/0e19f5c1-3a1d-1a5c-fe30-a18d9686e105.gif)
上記ケースでは`bers`を略語にして、それを`bundle exec rails s`に展開するようにしています。
この機能は標準入力から受けた行をインクリメントサーチするパッケージの「peco」と組み合わせるのも便利です。
```
# 略語登録の仕方
abbr -a 略語 コマンド

# 登録一覧。abbr --showのalias。
abbr 

# 登録一覧からコマンド絞り込み
abbr | peco

# abbr自体を略語化。-Uはユニバーサル変数として登録。
abbr -a aba 'abbr -a'

# ex: 長い単語も短く書けるので時短
abbr -a berap 'bundle exec rails assets:clobber ;  bundle exec rails assets:precompile'
```
# 🐟 fisherの導入
先ほど話してたプラグイン管理ソフトであるfisherを導入してみましょう。
それだけだと楽しくないので、このままfishのロゴを表示してみましょう。
```
# install
curl -sL https://git.io/fisher | source && fisher install jorgebucaran/fisher

# とりあえずこれを入れよう
fisher install laughedelic/fish_logo

# んで叩いてみる
fish_logo
```
https://github.com/jorgebucaran/fisher

https://github.com/laughedelic/fish_logo

色も変えたりできます。黒にすると少しホラー。
![tmux-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2194216/74fcee17-7350-384e-2bf2-1ea277c2a8e5.png)
プラグインに関しては色々と便利なものがあります。
私の場合は他のシェルでも定番の機能が多めです。
さわりだけ紹介。何か面白そうなものがあったら今度探しておきます。

### 🐠 z

行ったことのある全てのディレクトリに飛べる。部分一致、tabで候補を出してくれる。

```bash
# 導入方法
fisher install jethrokuan/z

# 使用法
z 行き先ディレクトリ
```

### 🐡 fzf
コマンドやファイルの検索。
ctrl + rは便利すぎる。
```
brew install fzf
fisher install jethrokuan/fzf
```

| コマンド | 内容 |
| --- | --- |
| ctrl + o | ファイルを検索 |
| ctrl + r | コマンド履歴を検索 |

### 🐠 fish-bd

ディレクトリを上に遡れる。補完が強い。

```bash
# 導入方法
fisher install 0rax/fish-bd

# 使い方
bd
```
# 🐟 参考文献
fishの各機能は他のシェルでも実現可能かもしれませんが、慣れると強力なのでおすすめです。
最後に今回この記事を執筆する元となった文章を置いて終わりとします。
本当は山ほどリファレンスを参考にしてましたが、あまりに多いので興味がある方はこちらの記事の「リファレンス」からご覧ください。

https://handy-lentil-478.notion.site/fish-a81705c904ee411eb5b2108867190789

**それでは、良きfishライフを🐟🐠🐡🐟🐠🐡🐟🐠🐡**

# 🐟 おまけ: .zshrcにfish切り替えを挟んで擬似的にログインシェルをfishにする
```
# ~/.zshrcに記述

## Fish対応
if [[ -o interactive ]]; then
    exec fish
fi
```