Windows10で快適なfishシェル環境構築

![image.png](https://qiita-image-store.s3.amazonaws.com/0/125538/b1f6e6dd-7184-709e-4f57-09573142009d.png)

## はじめに

本記事ではWindows10を対象に、快適なターミナル環境を設定します。
本環境のメリットは、以下の３つです。

1. 視認性が高く、モダンなテーマ(ログインするだけでテンションが上がる)
2. 強力な補完機能(Tabを連打するだけで簡単)
3. 日常使いのためのエイリアス(ひたすら効率化)

環境

- Windows 10 (Version 1903,初投稿時は1603)
- Windows Subsystem for Linux
- git 2.20.1
- fish 3.0.2
- fisher 4.1.0 (2020/11/9 update!)
- Homebrew 2.0.0 (2019/2/2 update!)
- ConEmu (version: 190526)

本記事では、Windows10 Version 1709で正式機能となった```Windows Subsystem for Linux```で環境を作っていきます。（Version 1703以前の場合には以下の記事が参考になりました。）
参考：[Bash on Ubuntu on Windowsをインストールしてみよう！](http://qiita.com/Aruneko/items/c79810b0b015bebf30bb)

## 1.fishのインストール

fish-shellです。```apt-get``` でサクッと入ります。

```bash
$ sudo apt-add-repository ppa:fish-shell/release-2
$ sudo apt-get update
$ sudo apt-get install fish
```
使い方は、少し古いですが以下が参考になります。
尚、fish 3.0.0から```&&```や```||```が公式対応し、非常に使いやすくなりました。
参考：[fish2.4日本語ドキュメント:すぐ使える25の便利機能と実例](http://fish.rubikitch.com/document-ja/)

## 2.fisherのインストール
fish用プラグインマネージャです。
[公式](https://github.com/jorgebucaran/fisher)に従って、以下のコマンドで入ります。

```fish
$ curl -sL https://git.io/fisher | source && fisher install jorgebucaran/fisher
```

## 3.agnosterのインストール
カッコいいfishのテーマです。以下のコマンドで入ります。

```fish
$ fisher install oh-my-fish/theme-agnoster
```
![image5.png](https://qiita-image-store.s3.amazonaws.com/0/125538/41aca66d-f6cb-6447-d747-0b5c31dcb649.png)
...見辛い、とても見辛い。この辺りがWSL版bashの限界ですね。
フォントとターミナルカラーを設定しましょう。

## 4.Powerline fontのインストール
本記事では、視認性が高く、```agnoster```テーマが文字化けしない```Sauce Code Powerline```フォントをインストールします。

```bash
$ git clone https://github.com/powerline/fonts.git
$ mv fonts /mnt/c/
```
Cドライブ直下にfontsフォルダが移動したと思うので、
<code>C:&yen;fonts&yen;SourceCodePro&yen;Sauce Code Powerline Regular.otf</code>
をダブルクリックし、フォントをインストールしてください。
![image7.png](https://qiita-image-store.s3.amazonaws.com/0/125538/dd826045-4020-5ade-b726-372ace82f0c0.png)

## 5.ConEmuのインストール
Windows用タブ付きコンソールエミュレータです。
[公式](https://www.fosshub.com/ConEmu.html)から```Download ConEmu Stable, Installer (32-bit, 64-bit) ```を選択して、
exeファイルをDLし、インストールしてください。

## 6.ConEmuの設定

ConEmuを起動し、右上メニューの```Setting...```から設定をします。

[Main]の設定では、Main Console fontを先ほどインストールした```Sauce Code Powerline```に設定し、Monospaceのチェックを外します。(文字化け対策)
![image2.png](https://qiita-image-store.s3.amazonaws.com/0/125538/081a90c0-f16f-09f4-ef26-4a6683f0345f.png)

[Startup]>[Tasks]の設定では、以下のようにCommandsを設定してください。タスク名、アイコン等はお好みです。

<code>%windir%&yen;system32&yen;bash.exe ~ -new_console:t:"Fish" -cur_console:p -c fish</code>
![image3.png](https://qiita-image-store.s3.amazonaws.com/0/125538/734acdd2-5f1c-e0bc-5bc7-8ddbbd433778.png)

その後、[Startup]で先ほど設定したタスク名を選択します。
![image8.png](https://qiita-image-store.s3.amazonaws.com/0/125538/4e6461ea-5f30-92ac-8a3c-c0aa00f1e610.png)

最後に、[Colors]設定です。
用意されているSchemesから```<Solarized (Luke Maciak)>```を選択し、
右下の[Save Settings]をクリックすれば設定完了です。
![image4.png](https://qiita-image-store.s3.amazonaws.com/0/125538/0023aa22-5064-558b-c649-1c054a259546.png)

## 7.見た目完成
ConEmuを再起動すると、素晴らしい環境が現れます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/125538/b1f6e6dd-7184-709e-4f57-09573142009d.png)

## 8.プラグインの設定
ここでは、非常に便利なfishのプラグインを紹介していきます。

#### [edc/bass](https://github.com/edc/bass)
標準では使えないbashの記法に対応できるようになります。

```bash
$ fisher install edc/bass
```

#### [fzf](https://github.com/jethrokuan/fzf)
```Ctrl + R ```でコマンド履歴を検索できるようになります。めちゃくちゃ便利です。

```bash
# pluginのインストール
$ fisher install jethrokuan/fzf

# fzf本体のインストール
$ git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
$ ~/.fzf/install
```
#### [z](https://github.com/jethrokuan/z)

`z`コマンドで、ディレクトリ移動がかなり捗ります。

```bash
$ fisher install jethrokuan/z
```
#### [fish-bd](https://github.com/0rax/fish-bd)

`cd ./..`を`bd`コマンドでできるようになります。地味ですが、これもディレクトリ移動がかなり捗ります。

```bash
$ fisher install 0rax/fish-bd
```
#### [nvm](https://github.com/jorgebucaran/fish-nvm)

`node.js`バージョンマネージャです。
（2018年秋頃には```fnm(fish nodejs manager)```という名前だったのですが、いつの間にか改名されていました。）
`nvm use latest`コマンドで最新版を利用、`nvm use lts`コマンドで安定版を利用できるようになります。

```bash
$ fisher install jorgebucaran/fish-nvm
```

## 9.その他（`config.fish`の設定）
`.bashrc`相当の設定は以下から。

```bash
$ vim ~/.config/fish/config.fish
```

参考に筆者のconfig.fishの一部を掲載します。
いろいろ検索して、最適なfish環境を作り上げてください。

```bash
## vimで開く
alias vi='/usr/bin/vim'

## for windows explorer (required win10 creators update)
alias open='explorer.exe'
alias e='explorer.exe .'

# cd > ls
function cd
  builtin cd $argv
    ls -a
end

# lsの色を見やすく変更
if test ! -e ~/.dircolors/dircolors.ansi-dark
    git clone https://github.com/seebi/dircolors-solarized.git ~/.dircolors
end
eval (dircolors -c ~/.dircolors/dircolors.ansi-dark)

# aliases for git
alias g="git"
alias gd="git diff"
alias ga="git add"
alias gca="git commit -a -m"
alias gcm="git commit -m"
alias gbd="git branch -D"
alias gp="git push"
alias gb="git branch"
alias gcob="git checkout -b"
alias gco="git checkout"
alias gba="git branch -a"
alias glog="git log --graph --date=iso --pretty='[%ad]%C(auto) %h%d %Cgreen%an%Creset : %s'"
alias gll="git log --pretty=format:'%C(yellow)%h%Cred%d\\ %Creset%s%Cblue\\ [%cn]' --decorate --numstat"

```
## 10.(参考)Homebrewの利用方法
Macユーザーにはお馴染みの```Homebrew```が```Windows Subsystem for Linux```に正式対応しました。本記事で紹介している```fish shell```自体もこの```Homebrew```を使って、インストールできます。
ここではインストール方法を紹介します。

```bash
$ sudo apt-get install build-essential curl file git
$ curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install.sh | sh
$ echo 'set -gx fish_user_paths $HOME/.linuxbrew/bin $fish_user_paths' >> ~/.config/fish/config.fish
$ brew update
```
## 11.(参考)ghqのインストール
Gitのローカルリポジトリが増えてくると、フォルダ構成や移動が悩みどころですよね。そんなときにおすすめしたいのが、[```ghq```](https://github.com/motemen/ghq)です。
```git clone {url}```と同じように```ghq get {url}```で使えます。```brew```でさっくり入れましょう。
fishのTAB補完も使えるよう[```fish-ghq```](https://github.com/decors/fish-ghq)も追加します。

```bash
$ brew install ghq
$ fisher install decors/fish-ghq
```

## 参考

>*1) 2017年お手軽なのに格好良くて最強のWindowsターミナル環境構築。「Windows8.1にcmder＋Powerline」にて
http://qiita.com/hmcGit/items/98b80507406cf25c10b4
>*2) 詳解 fishでモダンなシェル環境の構築(fish,tmux,powerline,peco,z,ghq,dracula)
http://qiita.com/susieyy/items/ac2133e249f252dc9a34