【環境構築】fishの環境設定手順

## はじめに
以前ペアプロ、モブプロ中にベテランエンジニアの方のシェル操作が非常に早く、画面も見やすかったので、自分は衝撃を受けました。

自分以外にも技術力のあるメンバーの方がfishを導入したり、チーム内でも少しずつ「fish良いね」と広がり始めました。
今回、私もfish導入したので、なるべく覚えているうちに環境構築の際に役立つように導入の手順などを残そうと思いました。

macOS Catalina(バージョン10.15.7)
macOS Big Sur(バージョン11.3)

私の場合は上記の2つの環境で導入しました。

## fishとは
[fish](https://fishshell.com/)
bashやzshなどの仲間で、shellの一種です。fishは「__f__riendly __i__nteractive __sh__ell」の略らしいです。

私の設定だとこんな感じの見た目になっています。補完の雰囲気などが伝わると良いです。

![fishサンプル.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479957/84fcbbe1-c744-d9e8-e62e-f47669762db0.gif)


特徴としては動作は軽く、デフォルトで強力な補完やサジェスションなどが有効になっていること、カラーテーマやプロンプトの設定がGUIで簡単に出来ることです。
設定すればzshやbashでも同じような使用感にすることは出来ると思いますが、導入の手軽さもfishの魅力の一つだと思っています。

もともとzshなどをカスタマイズしなかった理由として、あまり凝った設定をしても後から手順を思い出せず、プライベートのPCと仕事のPCで同じ環境に出来ない可能性があるということを懸念していました。fishであればデフォルトに近い状態でも十分に使いやすいです。

## 導入手順
※記憶を辿って書いているので手順違っている部分もあるかもしれません。

- 手順1.brewでfishをインストールする

```shell
brew install fish
```
 
- 手順2.インストールしたfishのパスを確認する

```shell
which fish
```

- 手順3./etc/shellsに、手順2で確認したfishのパスを追加する
（homebrewの設定によって変わる。/usr/local/bin/fishの場合が多そうなので。/usr/local/bin/fishをベースに記載する。私の環境では、/opt/homebrew/bin/fishでした）

```shell
sudo vi /etc/shells
```

![スクリーンショット 2021-06-13 12.07.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479957/db6d7bdf-1e22-cbac-ceca-dc5b683beec3.png)

- 手順4.デフォルトのシェルを変更する(手順2で確認したパスを指定すること)

```shell
chsh -s /usr/local/bin/fish
```

- 手順5.ここでターミナルを再起動するとshellがfishに変更された気がします。続いてテーマ設定などをします

- 手順6.環境変数の設定

zshだと.zshrcなどに書いていたと思いますが、fishの場合は.config/fish/config.fishに記載します。（デフォルトではconfig.fishファイルはないので新しく作ること）

他のシェルとは書き方が変わるので自分的には少し面倒でした。
色々書き方があるそうなのですが、深入りせずに以下のような形式で記載しました。

```.config/fish/config.fish
set -x PATH /Users/todahiro/hoge/flutter/bin $PATH
```

※環境変数の設定に失敗したとき、viも使えなくなったりしたので、その時は一度zshに戻したりして切り抜けました。

![スクリーンショット 2021-06-14 19.28.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479957/43811735-e913-7bfb-cb0b-fd85973adf3a.png)


- 手順7.fishシェルでfish_configを実行して、好きな見た目に整える

```shell
fish_config
```
を実行すると、自動でTheme設定のwebページが開かれる

![スクリーンショット 2021-06-13 2.06.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479957/d0bbf2f8-5807-4991-2b5d-e9654dd78d26.png)

好きなカラーテーマやプロンプトを選んでSet Themeボタンを押すとfishに適用されます。（選択後はctrl+cで終了）
カラーテーマは好きなものを選択するのが良いと思うのですが、個人的にはプロンプトは、「Informative Vcs」など、gitの現在のブランチ名が表示されるものが便利かと思いました。（これで頻繁に実行していたgit branchコマンドから解放されました）

![スクリーンショット 2021-06-14 21.18.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479957/efed89eb-4fdd-c722-7d98-50d63f907e6e.png)

### 導入の際の注意点

一応カラーテーマ設定などのハマりどころとして、ターミナルの設定でプロファイルで設定を変更していると色が変わってしまい、少しハマってしまいました。Basicテーマなどをデフォルトにしておくのが良さそうです。

![スクリーンショット 2021-06-13 2.17.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479957/09ab8eda-c547-a370-c5c1-42bc5fd642f1.png)


## さいごに

私自身、モバイルアプリエンジニアとして日々コードは書けるようになってきたり、成長を感じる時もありますが、ベテランエンジニアの方と比べてシェルやコマンドが十分に使いこなせておらず、それゆえに経験不足感が出ている時があるような気がしています。

またアプリ作成の技術やフレームワークの知識は、日々新しい技術が生まれるので陳腐化することも多いと思いますが、シェルやコマンドはあまり枯れない技術であり、一度学んでおくとその後のエンジニア人生で長く使い続けられる気がしており、費用対効果高いです。

最近はデフォルトのzshをそのまま使っていたので、今回fishを導入することでコマンドラインの操作のスピードが上がり、以前より手際も良くなりました。
まだ導入しただけという段階なので、他にも導入が簡単で、なおかつ便利なものがあればもう少しカスタマイズして、新しい環境に挑戦してみようと思います