【ターミナル】Macのターミナルにfishを導入する

## はじめに
この記事は[Life is Tech! Tokai Mentors Advent Calendar 2018](https://qiita.com/advent-calendar/2018/lit-tokai-mentors)の16日目の記事です。

普段ターミナルを触らないで生きてきた方にちょくちょく遭遇するんですが、ターミナルって**なんだか取っつきにくい印象**があったりするらしいんです。

「表示が白黒で見づらい」
「英語ばっかだし何が書いてあるかわからない」
「ターミナルとか触ったことないからどういうことができるか分からない」

と感じている未経験者も、

「たまにしか使わないしそのままでもいいと思ってるんだけど...」

という初心者も。

まずはおしゃれでイケてるターミナル環境を構築して
**「ワタシ　Terminal　チョットデキル」**
と言えるようなエンジニアに近づいてみませんか？

## なにをするのか
今回の記事では、

- シェルの変更(fishの導入)
- ターミナルのカスタマイズ

という作業でターミナルをちょっとだけ使いやすくします。

## シェルとfish

まずはシェルをbashからfishに変更します...と書いて意味がわかる方はGoogleで「fish shell」と検索して**この章を読み飛ばしてください**。

### シェル(shell)とは

シェルとは何かについてしっかりと言及するとこの記事では収まらないので簡単に説明すると、

**"普段マウスを使ったりしてやっているようなPCの操作を、プログラミングのようにキーボードで命令を入力して実行するためのソフト"**

みたいな感じになります。厳密にいうと説明不足や語弊がありますが、今回の記事ではこういう認識でいきます。もうちょっとだけ詳しく(本当にちょっとでしかも易しく)知りたい方は[この記事](https://academy.gmocloud.com/keywords/20170324/4010)がいいと思います。

### fishとは
![fish.png](https://qiita-image-store.s3.amazonaws.com/0/163599/1bc7d00c-3cb1-67ef-35f0-0e54c67eff16.png)

先ほど説明したシェルにもいくつか種類があります。

多くのターミナル(Windowsのコマンドプロンプトは除く)で使われているのは「**bash**」というシェルです。正直このままでも必要充分なレベルの機能はついています。

そして、シェルの変更をしようとすると必ずと言っていいほど名前を聞くのが「**zsh**」。bashよりもカスタマイズ性に優れていて、使い込むほど自分に馴染んでくるようなシェルですが初心者にはやや取っつきにくいかもしれません。

今回我々がインストールするのは上記のどちらでもない「**fish**」というシェルです。

fishは、

- 入力の補完をしてくれる(しかも高性能)
- マニュアルが分かりやすい
- カラフル(エラーが起きた時に色を自動で変えてくれたり etc...)

などの機能がほぼ無設定で使えるというユーザーに優しいシェルです。

初心者に優しいだけでなく長く使い込むこともできるのがfishの良い点です。

## fishを導入しよう
以下の手順はMacにfishをインストールすることを想定しています。
もちろんWindowsやLinuxにも対応しているのでMac以外のOSを使用している方は[こちら](https://github.com/fish-shell/fish-shell)を参考にしてください。

まずは、ターミナルを立ち上げて、

```.bash
$ brew install fish
```

と入力しましょう。これでインストール作業は完了です。
(Homebrewをインストールしていない方は[こちら](https://qiita.com/pypypyo14/items/4bf3b8bd511b6e93c9f9)の記事を参考にインストールしてから行なってください)

次に使用するシェルをfishに変更するため、

```.bash
$ echo /usr/local/bin/fish | sudo tee -a /etc/shells
$ chsh -s /usr/local/bin/fish
```
の2行を入力します。

これでfishの導入は終了です。

_**ね？簡単でしょ？**_

## fishをカスタマイズしよう
fishはそのままでも充分使えるんですが、せっかくなのでちょっとだけカスタマイズしてみましょう。

### Fisherのインストール
fishをカスタマイズするため、まずはプラグインマネージャである「**Fisher**」をインストールします。

プラグインマネージャって何かって？
**要するにfishのカスタマイズが簡単にできるようになる**ってことです。

以下のコマンドでFisherをインストールできます。

```.bash
$ curl https://git.io/fisher --create-dirs -sLo ~/.config/fish/functions/fisher.fish
```

### パッケージの追加

Fisherを使ってパッケージを追加するには以下のように`add`を使います。

```.bash
$ fisher add 公式プラグイン名
$ fisher add omf/oh-my-fishのプラグイン名
$ fisher add GitHubユーザー名/リポジトリ名
$ fisher add GistのURL
$ fisher add ローカルのディレクトリ
```

試しにカラーテーマをインストールしてみましょう。
(カラーテーマは[こちら](https://github.com/oh-my-fish/oh-my-fish/blob/master/docs/Themes.md)で一覧が見れます。)

今回は「**bobthefish**」というテーマをインストールしてみます。

```.bash
$ fisher add oh-my-fish/theme-bobthefish
```

とターミナルに入力してください。

しばらく待機するとカラーテーマのインストールが完了します。
(ターミナルを再起動しないとカラーテーマが反映されないかもしれません)

bobthefishというテーマは特殊なフォントを使用する必要があるので、フォントのインストールも合わせて行います。

デスクトップなど好きな場所にパワーラインフォントのリポジトリをクローンしましょう。

```.bash
$ git clone https://github.com/powerline/fonts.git
```

クローンが終了すると`fonts`という名前のフォルダが出現します。

その後、`fonts`フォルダの中まで移動してフォントのインストールを行います。

```.bash
$ cd fonts
$ ./install.sh
```

インストールが終了したら`ターミナル->環境設定`からフォント設定を忘れずに変更します。

フォントは「**Meslo**」あたりにしておけば問題なく表示されます。

<img width="681" alt="terminal.png" src="https://qiita-image-store.s3.amazonaws.com/0/163599/37f6cfd1-aa07-b57f-aad1-fad6c9e88173.png">

### その他のコマンド
`fisher help`と入力することで以下のようなヘルプが表示されます。

```
usage: 
       fisher add <PACKAGES>    add packages
       fisher rm  <PACKAGES>    remove packages
       fisher                   update installed packages
       fisher ls                show installed packages
       fisher help              show this help
       fisher version           show version
       fisher self-update       update fisher
       fisher self-uninstall    uninstall fisher

examples:
       fisher add jethrokuan/z rafaelrinaldi/pure
       fisher add gitlab.com/owner/foobar@v2
       fisher add ~/path/to/myfish/pkg
       fisher rm rafaelrinaldi/pure
       fisher ls | fisher rm
       fisher add < bundle
 ```

コマンドを忘れてしまっても`help`さえ覚えておけば問題ありません。英語も簡単なので親切ですね。

## まとめ

今回はお手軽に使いやすくてイケてるターミナル環境を構築してみました。

設定ファイルをいじることなくここまでターミナルの使用感を上げることができる**fishは最高**ですね。

気が向いたらzshとかと使い比べてみるのもいいかと思います。

<img width="571" alt="スクリーンショット 2018-12-15 19.20.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/163599/0443e2d6-372c-29c8-562e-9e0c88588da0.png">


## 追記

Sierra以前あたりからHomebrewのアップデートをしていないと`brew update`や`brew upgrade`を行う際にエラーが出ることがあります。

その症状が出た場合はHomebrewを再インストールすると治るようなので試してみることをお勧めします。
(参考記事は[こちら](https://qiita.com/hayate00/items/0aa4aa5b51235267aefd))