Windows Terminal (PowerShell) + starship でイイ感じのTerminal 環境をつくりたい

#はじめに
#### Windows Terminal って何？
　― PowerShell や WSL 向けに最適化されたオープンソースの MicroSoft 製ターミナルです。

#### starship って何？
　― 簡単に、イイ感じに、カスタマイズ可能なプロンプト。Rust 製でとても高速です。

　
2020年5月、正式版である Windows Terminal 1.0 がリリースされたので、Windows Terminal のインストールから始めてイイ感じの Terminal 環境をつくるまでための備忘録を残しておきます。
starship 導入の Before After はこんな感じです。
![qiita_2021021001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537419/dbf3c368-051e-cdcc-ade4-c0ee454baf0c.png)

#目次

0. Nerd Font のインストール
1. Windows Terminal のインストール
1. Windows Terminal の設定
1. starship のインストール
1. starship の設定

# 1. Nerd Font のインストール
starship は Nerd Font を利用してリッチなターミナル表記を実現しています。
Nerd Font とは [nerdfonts.com](https://www.nerdfonts.com/) にあるような多様なアイコン等のグリフを含んだフォントです。

### Nerd Font のインストール
[starship の公式インストールガイド](https://starship.rs/ja-jp/guide/#%F0%9F%9A%80-%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)にリンクがある `Fira Code Nerd Font` もしくはその他お好みの Nerd Font をインストールします。
今回は Nerd Fonts 追加版も公開されているプログラミングフォント「白源 (はくげん／HackGen)」にしました。
参考：[【文字幅 半角3:全角5 も追加】Ricty を神フォントだと崇める僕が、フリーライセンスのプログラミングフォント「白源」を作った話](https://qiita.com/tawara_/items/374f3ca0a386fab8b305)

# 2. Windows Terminal のインストール
[Microsoft Store](https://www.microsoft.com/ja-jp/p/windows-terminal/9n0dx20hk701?activetab=pivot:overviewtab) からインストールする方法と Windows向けのCLIなインストーラである [scoop](https://scoop.sh/) でインストールする方法があります。
今回はインストール作業を Terminal で完結させたいので scoop を利用してインストールします。
（インストール要件は`PowerShell 5`以上 かつ `.NET Framework 4.5`以上です。 ）

### scoop のインストール
[scoop公式](https://scoop.sh/)の記載に従ってインストールします。
PowerShellを管理者権限で起動して下記のコマンドを入力します。

```powershell:powershell:
PS C:\Users\muimui> Set-ExecutionPolicy RemoteSigned -scope CurrentUser
PS C:\Users\muimui> Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh')
```
デフォルトの実行ポリシーでは権限エラーが発生するので、`Set-ExecutionPolicy`で実行ポリシーを変更してから scoop をインストールしています。

### Windows Terminal のインストール
早速、scoop を利用して Windows Terminal をインストールします。

```powershell:powershell:
PS C:\Users\muimui> scoop bucket add extras
PS C:\Users\muimui> scoop install windows-terminal 
```

Windows Terminal は scoop の標準パッケージに含まれていないため、`scoop bucket add extras`で extra パッケージを追加しています。これだけで Windows Terminal のインストールは完了です。

# 3. Windows Terminal の設定
Windows Terminal を起動したら、`Ctrl + ,`で設定ファイルを開きます。
この設定ファイル`setting.json`に設定項目を記載していきます。

`defaults`でデフォルトの設定値、`list`でアプリごとに個別の設定ができます。
今回は`defaults`のフォント、背景の透過率を変更してみます。
フォントには先程用意した Nerd Font を指定します。

```json:settings.json:
    :
  (中略)
    :

    "profiles":
    {
        "defaults":
        {
            // Put settings here that you want to apply to all profiles.
            "fontFace": "HackGenNerd Console",
            "fontSize": 11,
            "useAcrylic": true,
            "acrylicOpacity": 0.50
        },
        "list":
        [
    :
  (中略)
    :
```

# 4. starship のインストール

### starship のインストール
Windows Terminal と同様、scoop を利用して簡単にインストールできます。

```powershell:powershell:
PS C:\Users\muimui> scoop install starship
```

### PowerShell に 初期化スクリプトを追記
PowerShell に Starship を適用するため、PowerShell のプロファイルに Starship の初期化スクリプトを追記します。
下記のコマンドでプロファイル（Microsoft.PowerShell_profile.ps1）の場所を確認。

```powershell:powershell:
PS C:\Users\muimui> $PROFILE
```

プロファイルのパスが表示されます。これはあくまでこのパスが存在すれば読み込まれるという設定値です。
プロファイルが既に作成されているかどうかはtest-pathコマンドで確認できます。

```powershell:powershell:
PS C:\Users\muimui> test-path $PROFILE
```

作成されていれば `True`、いなければ `False` が返ってくるので、
プロファイルが存在しない場合は下記のコマンドで作成します。

```powershell:powershell:
PS C:\Users\muimui> new-item -path $PROFILE -itemtype file -force
```

作成した or 既に存在している Microsoft.PowerShell_profile.ps1 に下記の初期化処理を追記します。
プロファイルの文字コードはBOM付き（BOM付きUTF-8など）なので、メモ帳で編集保存すれば問題ありません。

```powershell:Microsoft.PowerShell_profile.ps1:
Invoke-Expression (&starship init powershell)
```

これで starship のインストールも完了です。
Windows Terminal を再起動すれば powershell に starship が反映されているはずです。

# 5. starshipの設定
デフォルトで既にプロンプトの表示が変更されていたり、カレントディレクトリの表示が変更されていたりして既にだいぶイイ感じになっていますが、starship ではこれらを含め更にカスタマイズすることができます。
カスタマイズの設定は`~/.config/starship.toml`を作成して記載していきます。

冒頭に挙げた After 画像は試しに下記の２つを設定したものです。

1. コマンド成功/失敗時のシンボル変更
2. 現在時刻表示の追加


```toml:starship.toml:
[character]
disabled = false
success_symbol = "[➜](bold green)"
error_symbol = "[✗](bold red)"

[time]
disabled = false
time_format = "%Y-%m-%d %H:%M:%S"
utc_time_offset = "+9"
```

# まとめ
昔に比べると相当お手軽にターミナル環境を改善できるようになりました。

[Starship は v0.45 で設定項目が整理、刷新されているので](https://starship.rs/ja-JP/migrating-to-0.45.0/)、古い情報を参照する場合は注意。
公式の設定項目の一覧：https://starship.rs/ja-JP/config/

見ていくと他にもGitやバッテリ残量などの設定項目もあります。
あとはお好みでカスタマイズしてください！