Windows TerminalでWindowsのターミナル環境を良い感じに整える

本記事は[東京学芸大学 櫨山研究室 Advent Calendar 2020](https://qiita.com/advent-calendar/2020/hazelab)の六日目の記事になります．

# はじめに

本記事はWindowsのターミナル環境を良い感じに整えるというものです．

なお本記事はターミナル環境にGit bashを押すため，

- 「学生時代はmacを使っていたけど会社支給のPCはWindows…」
- 「お金がないのでmacは買えないけどwindowsでmacOS/Linuxに近い開発体験がしたい！」

のようなことを考えたことがある方向けの内容になります，ご了承ください🙇‍♂️


# 概要

- Git bashを使おう
- Windows Terminalを使おう
- PureLineでプロンプトを見やすくしよう
- `.bash_profile`，`.bashrc`を書こう

# 完成形

完成形としては以下の画像のようになります．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225901/6a145330-08c3-c5e6-2e22-5be25370d68b.png)

# Git bashのインストール

[Git bash](https://gitforwindows.org/)はコマンドラインからgitを利用するためのbashエミュレータです．
Windowsに標準でインストールされているPowerShellもlinuxコマンド風の命令をサポートしていますがGit bashの方が使用感が断然良いです．
~~(まあbashなので当然なのですが…)~~

パッケージ管理ソフトウェアのScoopのインストールがインストールされていれば以下のコマンドでインストール可能です．

```ps:PowerShell
PS> scoop install git
```

#Windows Terminal

[Windows Terminal](https://github.com/microsoft/terminal)はMicrosoftが開発をしているターミナルソフトウェアです．
同じインターフェースでコマンドプロンプト，PowerShell，WSLのUbuntuに組み込まれているBash，Azure Cloud Shellなどを利用することができます．
これにより~~混沌としていた~~Windowsのターミナル環境を一つにまとめることができます．

![](https://docs.microsoft.com/ja-jp/windows/terminal/images/overview.png)

> [画像引用元] What is Windows Terminal?, https://docs.microsoft.com/ja-jp/windows/terminal/ 

**Windows Terminalでは標準で画面分割などができます！**

`alt`+`shift`+`+`で右側に分割，`alt`+`shift`+`-`で下側に分割します．
`alt`+`←↓↑→`で分割した画面の行き来ができます．


## Windows Terminalのインストール


Scoopをインストールしていれば`extras`バケットを追加した後にインストールすることが可能です．

```ps:PowerShell
PS> scoop bucket add extras
PS> scoop install windows-terminal
```

# Windows TerminalでGit bashを使えるようにする

デフォルトではWindows TerminalはGit bashに対応していません．
設定ファイルを編集することで使えるようにします．

はじめにWindows Terminalを起動します．

windows terminalを起動した状態で`ctrl + ,`を入力すると`settings.json`がメモ帳で開かれます．
windows terminalではVSCodeと同様に`settings.json`で設定の管理が可能です．

`settings.json`にGit bashの設定を追加するために調べておく必要がある情報は以下の3つです．

1. `bash.exe`のパス
2. Git bashのiconファイルのパス
3. Git bashに割り当てるGUID

## `bash.exe`のパスの確認

`where bash`コマンドで調べることができます．

```sh:Git_bash
$ where bash
```

なおScoopを使ってインストールしている場合はデフォルトで以下のパスになります，

```
C\Users\{ユーザー名}\scoop\apps\git\current\bin\bash.exe
```

## Git bashのiconファイルのパス

Git bashのアイコンフィルは`git-for-windows.ico`という名前になります．
Scoopを使ってインストールしている場合はデフォルトで以下のパスになります．

```
C\Users\{ユーザー名}\scoop\apps\git\current\mingw64\share\git\git-for-windows.ico
```

## Git bashに割り当てるGUIDの取得

Windows Terminalでは新しいCUIを追加する際にGUIDを割り当てる必要があります．
GUIDはPowerShellで以下のコマンドで取得することができます．

```ps:PowerShell
PS> [guid]::NewGuid()
```

## `settings.json`に追記してGit bashを利用できるようにする

上で取得した情報を元に`settings.json`を編集していきます．
`settings.json`の`profiles` => `list`要素に以下のスキーマを追加します．


```json:settings.json
{
  "guid": "{取得したGUID}",
  "commandline": "C:\\Users\\{ユーザー名}\\scoop\\apps\\git\\current\\bin\\bash.exe --login",
  "icon": "C\\Users\\{ユーザー名}\\scoop\\apps\\git\\current\\mingw64\\share\\git\\git-for-windows.ico",
  "name": "Git bash"
}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225901/dfec8830-d37b-c66f-621e-dfa0ab158a4b.png)

ここまでの設定をするとWindows TerminalでGit bashを起動することができます✨

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225901/eba91075-ab2d-b711-537b-6525abc42a7f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225901/d20a7605-45eb-5615-7771-e32a88d8ea0e.png)

きちんと起動していますね✨

ただ，このままだと使いづらいので設定を追加していきましょう！
以下の設定をします．

1. デフォルトの起動ディレクトリをHOMEディレクトリにする
2. `exit`コマンドでwindowが閉じるようにする
3. タブ名を`Git bash`で固定にする
4. ダークテーマにする


1と2は先ほどの`settings.json`のスキーマに追加するだけでできます．

```json:settings.json
{
  "guid": "{取得したGUID}",
  "commandline": "C:\\Users\\{ユーザー名}\\scoop\\apps\\git\\current\\bin\\bash.exe --login",
  "icon": "C\\Users\\{ユーザー名}\\scoop\\apps\\git\\current\\mingw64\\share\\git\\git-for-windows.ico",
  "name": "Git bash",
  "closeOnExit": true,
  "startingDirectory" : "%USERPROFILE%",
  "tabTitle": "Git bash",
  "suppressApplicationTitle": true
}
```

デフォルトでGit bashが起動する設定とダークテーマの設定は`settings.json`の`defaultProfile`，`theme`属性を編集します．
(`theme`はデフォルトではなかったので追記しています．)

```json:setting.json
 "defaultProfile": "{取得したGUID}",
 "theme": "dark",
```

わかりにくいので追加位置のスクショを載せておきます．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225901/c933ee25-98ce-c650-25f3-b709e20fe0fb.png)

# Git bashのカスタマイズ

Git bashのプロンプトをカスタマイズします．
今回は[PureLine](https://github.com/chris-marsh/pureline)を利用します．

![](https://github.com/chris-marsh/pureline/raw/master/Screenshots/screen6.png?raw=true)

> [画像出典元] chris-marsh/pureline, https://github.com/chris-marsh/pureline

## `Cascadia Code PL`フォントのインストールと設定

`PureLine`を正しく表示するためにフォントを追加しておく必要があります．
今回はMicrosfotが提供する`Cascadia Code PL`フォントを使用します．
以下のリンクからダウンロードできます．

https://github.com/microsoft/cascadia-code/releases

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225901/ea186e08-fa78-6e5b-4e1d-3faf03df3428.png)

`CascadiaCode-2009.22.zip`をダウンロードして展開します．
`otf/static`配下の`CascadiaCodePL-Regular.otf`をクリックしてインストールします．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225901/940f37c4-a584-f327-ac3f-169aa72935fd.png)

### Windows Terminalのフォントを`Cascadia Code PL`にする

`settings.json`の`profiles`=>`defaults`にする設定は全てのターミナルで共通になります．

```json:settings.json
  "fontFace": "Cascadia Code PL"
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225901/b544709f-7a1c-1081-d239-ea47364e9063.png)


## PureLineのインストール

PureLineをGitHubからcloneして適用します．

```sh:Git_bash
$ git clone https://github.com/chris-marsh/pureline.git
$ cp pureline/configs/powerline_full_256col.conf ~/.pureline.conf
```

以下のコマンドでPureLineを有効にできます．

```sh:Git_bash
$ source ~/pureline/pureline ~/.pureline.conf
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225901/44e8358a-855b-d57f-bd69-076b599e176e.png)

### `.pureline.conf`の編集

`.pureline.conf`を編集することで見た目を整えることができます．
例えば，`PL_USER_SHOW_HOST`をデフォルトの`true`から`false`にすることでコンピュータ名を表示しないようにできます．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225901/e806a1b6-9dd9-faaa-deef-e45d121ae927.png)

良い感じのプロンプトになりました✨

# `bash_profile`，`bashrc`の設定をする

bashでは`bash_profile`，`bashrc`を利用して色々と設定をすることができます．
`bash_profile`はログイン時に`bashrc`はインタラクティブモードのbashを起動する際に毎回実行されます．

- 言語設定を日本語にする
- `winpty`を有効にした状態でbashを起動する
- PureLineを有効にした状態で起動する
- エイリアスを設定しよう

## 言語設定を日本語にする

環境変数`LNAG`を`ja_JP.UTF-8`に設定します．
これはログイン時に設定すれば良いので`.bash_profile`に記述します．

```bash:bash_profile
# lang
export LANG=ja_JP.UTF-8
```

## `winpty`を有効にした状態でbashを起動する

Git bashではPythonやMySQLなどの一部コマンドでは`winpty`を先頭につけないと実行できない．
この現象は標準入力や標準出力の文字コードが絡んでいるようです．

解決策としては`.bash_profile`でbashログイン時に`winpty bash`として起動してしまいます．

```bash:bash_profile
# winpty
exec winpty bash
```

## PureLineを有効にした状態で起動する

先ほどは手動で行っていたpurelineの起動をbash起動時に有効にします．
こちらの設定は`.bashrc`に記述します．

```bash:.bashrc
# pureline
source ~/pureline/pureline ~/.pureline.conf
```

## エイリアスを設定しよう

`alias`はコマンドの別名です．
ここでは個人的にmacで便利だと思っている2つのコマンドを登録しておきます．

macを使っていると`open`コマンドでディレクトリをFinderで開くことがあります．
これに近いwindowsのコマンドとして`explorer`があります．
そこでaliasを貼ることで近い使用感にすることができます．

`pbcopy`は標準出力の内容をクリップボードに流せるmacのコマンドです．
windowsだと`clip`コマンドが近い動きをします．

```bash:.bashrc
# mac風のaliasを設定する
alias open='explorer'
alias pbcopy='clip'
```


以上で完成です！

# おわりに

今回はwindowsのターミナル環境を良い感じにする設定を紹介しました．

ターミナル環境は開発者一人ひとりで好みが異なると思いますので，各々で弄って理想の環境に近づけていきましょう💪