bashからfishに切り替えて快適なターミナル環境を構築する

# 快適なターミナル環境のために
git の管理をしたり、サーバーに入ったり、ファイルを書き換えたり、何かとお世話になっているターミナル。
しかし、デフォルトで入っている bash というシェルでは、何かと不便なことが多いものです。

例えば、git のコマンドを補完してくれなかったり、（`$ git branch`と変換したいのですが、ここで Tab を押しても何も反応しません。。。）

<img width="647" alt="スクリーンショット.png" src="https://qiita-image-store.s3.amazonaws.com/0/227196/d6b10686-cbd1-1b67-f192-35b797f664f7.png">

ディレクトリ移動の時に Tab を押しすぎてごちゃごちゃしたり、（3回くらいならまだ良いほうかも）

<img width="644" alt="スクリーンショット2.png" src="https://qiita-image-store.s3.amazonaws.com/0/227196/c037244a-1a12-3907-946b-0b4a276f2944.png">

コマンドを間違えていても気がつかないし、（自分が悪いんだけれども。。。）

<img width="644" alt="スクリーンショット3.png" src="https://qiita-image-store.s3.amazonaws.com/0/227196/a2abd88d-d8e8-1fc6-d7e0-18d2c28b6e56.png">

地味に困ることが色々とあります。

そして、これらのイライラを解消してくれるのが、fish というシェルなのです。

# fish でできること
fish は、Friendly Interactive SHell の略語で、とにかくユーザーフレンドリーに作られたシェルです。
他のシェルとは違って、特にカスタマイズすることなく使用することができます。

fishを使うと、今までの問題がこんな風に解決できます。

## Git コマンドの補完
<img width="641" alt="スクリーンショット 2018-06-27 10.49.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/227196/7a42835e-ec8c-21d9-99e6-8f494d07cba5.png">

`$ git branch`を入力しようとしたら、履歴にそのコマンドがあれば灰色の文字で表示されるし、履歴にない場合でもTabを押せば補完候補からコマンドを選ぶことができます。

それに加えて、`$ git branch -`でTabを押すと選択できるオプションも一覧で表示してくれます。これは結構便利です。

<img width="645" alt="スクリーンショット 2018-06-27 12.06.32.png" src="https://qiita-image-store.s3.amazonaws.com/0/227196/279fdcf8-1d96-a081-2bc6-66eaa123faf3.png">

他にも様々なコマンドにおけるオプションも表示できるので、いちいち調べる手間を省くことができそうです。

## ディレクトリの移動がスムーズに
ディレクトリの移動のときに Tab を押すと、移動できる候補が表示されて、Tab をもう一度押すと候補を選択することができます。

<img width="645" alt="スクリーンショット 2018-06-27 12.10.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/227196/b12d93c7-f355-d83c-1f30-e1e71ace3814.png">

もちろん選択には ←↓↑→ のキーを使うことも可能。
もう Tab の連打でターミナルに文字がごちゃごちゃすることはありません。

## コマンドの打ち間違いが視覚的にわかる
bash では実行しなければわからなかったコマンドの打ち間違いも、fish なら事前にわかります。

<img width="644" alt="スクリーンショット 2018-06-27 12.15.40.png" src="https://qiita-image-store.s3.amazonaws.com/0/227196/9b01ba18-5116-d530-2514-a8ef604a9917.png">

存在しないコマンドであれば、文字が赤いままなのでミスに気がつきやすいです。
地味に生産性が高まります。

この他にも便利な機能があり、素直におすすめです、fish。
フレームワークとして、[oh-my-fish](https://github.com/oh-my-fish/oh-my-fish) や [fisherman](https://github.com/fisherman/fisherman) などを使うと、より見た目に変化をつけたりできますが、個人的にはシンプルなものが好きなので、fish をダウンロードするだけで良いかなと。

以下に、MacBook における簡単な fish の導入方法を載せておくので参考までに。

# fishの導入方法（MacBook）
## Homebrewでインストール
まずは、fish をインストールしていきます。
ターミナルから以下のコマンドを実行してください。

```console:terminal
$ brew install fish
```

もしも Homebrew をインストールしていなくてエラーが出た場合は、公式ページを参考にしてインストールしてください。

https://brew.sh/index_ja

## デフォルトのシェルを fish に設定する
fish がインストールできたら、次にターミナルのデフォルト設定を fish に変更していきます。
ターミナルで以下のコマンドを実行して、シェルファイルに fish の情報を書き込みます。
ちなみに、シェルファイルへの書き込みは管理者権限が必要になります。

```console:terminal
// Mac M1 チップの場合は　/opt/homebrew/bin/fish
# echo -s /usr/local/bin/fish >> /etc/shells
```

次に、ターミナルを開いた時のデフォルトのシェルを fish に変更します。

```console:terminal
// M1 チップの場合は　/opt/homebrew/bin/fish
$ chsh -s /usr/local/bin/fish
```

これらのコマンドが無事に反映されたら、ターミナルを再起動してください。
上部バーに fish と表示されるようになっているのがわかると思います。
これでデフォルトで fish を使うことができるようになりました。

無事にあなたもfish民です。

## おまけ：さらにshellをカスタマイズする
`$ fish_config` を実行すると GUI から fish の設定を行うことができるので便利です。

<img width="1563" alt="スクリーンショット 2020-08-06 14.28.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227196/249583a4-8240-e6bf-8de4-c6e60ec84289.png">

また、fish でエイリアスを設定することで、自分好みのコマンドを設定することもできます。

例えば、ターミナルから SublimeText で任意のディレクトリを開きたい場合、以下のように記載して

```.config/fish/config.fish
# ターミナルからSublimeTextで開く
alias sb='open -a /Applications/Sublime\ Text.app'
```

ターミナルに設定を読み込ませれば、aliasで設定したコマンドを使えるようになります。

```sh
# 設定の読み込み
$ source .config/fish/config.fish

# SublimeTextでディレクトリを開く
$ sb MyProjects/myapp
```

よく使うコマンドなどは、ショートカットとして登録しておくと便利になるのでおすすめです。

ちなみに、Android Studio で fish を使うためには、Android Studio の設定→Terminal→Shell Path に `/usr/local/bin/fish` を指定する必要があります。