Windows TerminalでGitの現在のブランチ名を表示する(PowerShell編)

## 問題

- 開発用のターミナルとして`Windows Terminal(PowerShell)`使っているけどブランチ名が表示されない。
- **現在のブランチをいちいち確認する手間を省きたい**

## 解決策
**[dahlbyk/posh-git: A PowerShell environment for Git](https://github.com/dahlbyk/posh-git)を使う**

### 環境確認
`Windows Terminal`を開いたら次のコマンドを実行して、現在の`PowerShell`のバージョンを確かめる。

```
$ $PSVersionTable.PSVersion
```

このコマンドを実行すると、下記のように`Powershell`のバージョンが確認できる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218398/3e5fc4c3-3f5c-5b88-f37e-539395e4f2a0.png)

`README.md`を読んでみると`5.x`系のバージョンであれば、このまま進めていって良さそうなので次に進む。

### posh-gitのインストール

`管理者として実行`で`Windows Terminal`を開きなおし、次のコマンドを実行する。

```
$ PowerShellGet\Install-Module posh-git -Scope CurrentUser -AllowPrerelease -Force
```

このように(↓)`AllowPrerelease`が認識されなかったら、`PowerShellGet`のバージョンが要件以下という事。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218398/cbc7b913-da97-5700-bd13-9bdd9c767c1f.png)

次のコマンドを実行して`NuGet`をインストールし、`PowerShellGet`における更新の準備を行う。

```
$ Install-Module PowerShellGet -Scope CurrentUser -Force -AllowClobber
```

このように尋ねられるが`Y`でOK。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218398/5a1370b4-c70e-efea-ab46-dd18a5eecef6.png)

`NuGet`をインストールできたら、`PowerShellGet`がインストールされているかどうかを次のコマンドで確かめる。

```
$ Install-Module -Name PowerShellGet -Force
```

あったみたい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218398/50583afd-5536-19aa-1c64-6955d62781ba.png)

なら`PowerShellGet`の更新を。

```
$ Update-Module -Name PowerShellGet
```

今までの設定を反映してもらうために一回閉じる。
準備ができたところで改めて`posh-git`をインストール。

```
$ PowerShellGet\Install-Module posh-git -Scope CurrentUser -AllowPrerelease -Force
```

### posh-gitを使う
インストールしても、それを`PowerShell`に認識してもらったり使えるようにしてもらったりしなければ、ただそこにあるだけ。
ということで、インストールした`posh-git`を使えるようにするための設定をしていく。

まずは次のコマンドを実行し、`posh-git`を`PowerShell`に認識してもらう。

```
$ Import-Module posh-git
```

インストールが完了すると早速表示が変わった。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218398/667309dc-3a9a-9b94-7168-4e4f12cb52b8.png)

「これで完了かな?」と思い管理者以外のユーザーで開いてみると、`posh-git`が使えていなかった。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218398/460a6972-5510-e9ec-276f-faae62114fef.png)


ということで、`Windows Terminal`を開けば自動で`posh-git`が読み込まれたり管理者以外のユーザーでも使えるようにしたりするために次のコマンドを入力していく。

```
$ Add-PoshGitToProfile
$ Add-PoshGitToProfile -AllHosts
$ Add-PoshGitToProfile -AllUsers -AllHosts
```

- **`Add-PoshGitToProfile`**: `Windows Terminal`を開けば自動で`posh-git`が読み込まれるようにする。
- **`Add-PoshGitToProfile -AllHosts`**: 他の`PowerShell`ホストでも`posh-git`が使えるようにする。
- **`Add-PoshGitToProfile -AllUsers -AllHosts`**: 全てのユーザーが`posh-git`を使えるようにする。

`Add-PoshGitToProfile -AllUsers -AllHosts`の適用には`-Forceパラメーターが必要`という警告が出ることもある。
その場合は次のコマンドを実行する。

```
$ Add-PoshGitToProfile -AllUsers -AllHosts -Force
```

管理者以外のユーザーで`Windows Terminal`を開き、`posh-git`が読み込まれているかを確かめる。

### posh-gitのカスタマイズ
`posh-git`ではブランチ名だけでなく、表示カスタマイズなどもできる。

デフォルトはこの状態だが、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218398/c3a773cc-f09e-4c68-ad74-58b67dce4d67.png)

自分はこのように変更した。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218398/1d1a0415-5428-89ea-28a6-86caa8a66ee2.png)

次のコマンドで設定一覧を確認できる。

```
$ $GitPromptSettings
```

変更したい設定は**`$GitPromptSettings.項目名`**で変更する。
自分が実行したのは次のコマンド達。

```
$ $GitPromptSettings.DefaultPromptAbbreviateHomeDirectory = $false
$ $GitPromptSettings.DefaultPromptPath.ForegroundColor = 'Orange'
$ $GitPromptSettings.DefaultPromptBeforeSuffix.Text = '`n'
$ $GitPromptSettings.DefaultPromptBeforeSuffix.Text = '`n$([DateTime]::now.ToString("MM-dd HH:mm:ss"))'
$ $GitPromptSettings.DefaultPromptBeforeSuffix.ForegroundColor = [ConsoleColor]::Magenta
```

`$GitPromptSettings.`を省略して解説。

- **`~.DefaultPromptAbbreviateHomeDirectory = $false`**: 現在のディレクトリ以外のパスを`~`で省略しない
- **`~.DefaultPromptPath.ForegroundColor = 'Orange'`**: 現在のパスをオレンジ色に。
- **`~.DefaultPromptBeforeSuffix.Text = '‘n'`**: パス名とコマンド入力欄の間に改行を入れる。(`の代わりに‘を使用しています。)
- **`~.DefaultPromptBeforeSuffix.Text = '‘n$([DateTime]::now.ToString("MM-dd HH:mm:ss"))'`**: コマンド入力欄の前に現在の時刻を表示する。(`の代わりに‘を使用しています。)
- **`~.DefaultPromptBeforeSuffix.ForegroundColor = [ConsoleColor]::Magenta`**: 現在の時刻をマゼンタ色で表示する。

この他にも設定できる箇所はあり、それらは`posh-git`の[README.md](https://github.com/dahlbyk/posh-git#customizing-the-posh-git-prompt)で解説されている。

**自分に合った`posh-git`を設定して使いこなそう!!**


## 参考資料
- [PowerShellプロンプトで現在のgitブランチ名を表示するにはどうすればよいですか?](https://www.366service.com/jp/qa/95f7c9ce02d3a873364d18e1f44b4fa5)
- [dahlbyk/posh-git: A PowerShell environment for Git](https://github.com/dahlbyk/posh-git)
- [PowerShellGet のインストール - PowerShell | Microsoft Docs](https://docs.microsoft.com/ja-jp/powershell/scripting/gallery/installing-psget?view=powershell-7)