WindowsでGit関連のコマンドをAlias登録する

インターネット上にWindowsでのエイリアス設定の断片的な解説はあるのですが、それらを見てもPowerShellでの汎用的で永続的なエイリアス設定は分かりづらいなと感じたため、本記事を作成しました。

WindowsでVSCodeでコードを書き、ターミナルで以下操作を実行するとします。

```
git branch
git checkout -b xxxx
git add .
git commit -m ""
git push origin xxxx
git checkout main
git branch -d xxxx
```

VSCodeのGUIでもGitの操作は可能ですが、コマンドラインからの方が楽なときがあります。でも毎回このようなコマンド入力をするのが面倒なので、エイリアスを設定したいと思いました。
Linuxではエイリアスは設定が簡単(```alias gcb='git checkout -b'```)なのですが、Windowsだとちょっと面倒です。

WindowsでVSCodeのデフォルトのターミナルはPowerShellで、私もそのまま使っているので、PowerShellでエイリアスを設定します。
PowerShellではエイリアス設定コマンドがあり(Set-Alias)、一見これで済みそうに思えますが、Set-Aliasではコマンド単体へのエイリアスのみ設定可能で、コマンドのオプションや引数を含めたエイリアスは残念ながら作成できません。
PowerShellでLinuxライクなエイリアスを作成するためには、エイリアスで実行したいコマンドを一度Powershellでの関数(Function)として定義する、その関数に対してSet-Aliasを実行する、PowerShell起動時に読み込まれるスクリプトに定義する、という手順を踏むと実現できそうです。
Linuxに比べると若干面倒ですが、一旦設定手順が分かればガシガシエイリアスを追加できます。
以下手順です。

まずPowerShellを起動します。
スタートメニュー > powershell と入力し、```Windows PowerShell```をクリック
またはコマンドプロンプトから```powershell```を実行など

次に、以下のコマンドで、PowerShell起動時に読み込まれるスクリプトのファイル名を確認します。
```$profile```

実行結果は以下のようになります。
```C:\Users\USERNAME\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1```

私の環境では、このファイルは存在していなく、格納ディレクトリもありませんでした。
なので、ディレクトリから作成します。
マイドキュメントを開き、```WindowsPowerShell```ディレクトリを作成します。

次にそのディレクトリに移動し、新規作成 -> テキストドキュメントで```Microsoft.PowerShell_profile.ps1```を作成します (拡張子も.txtから.ps1に変更します)

任意のエディタで```Microsoft.PowerShell_profile.ps1```を開き、以下の内容を入力して保存します。
※```Set-Alias | findstr g```を実行してもらうと分かるのですが、gから始まるコマンドにはデフォルトで複数のエイリアスが登録されています(```gc: Get-Content```など)。そのため、今回追加で設定するGitコマンドのエイリアスでは、```gi+オプション```といった形の省略形で登録しました(```gt```より```gi```の方が打ちやすいためそうしました)。
最終行に、giから始まるエイリアスの疑似的な一覧(単にエイリアス名にgiを含むもの)を登録しています。

```powershell:Microsoft.PowerShell_profile.ps1
function git-branch { git branch $args }
Set-Alias -Name gib -Value git-branch

function git-checkout-b { git checkout -b $args }
Set-Alias -Name gicb -Value git-checkout-b

function git-add { git add $args }
Set-Alias -Name gia -Value git-add

function git-commit-m { git commit -m $args }
Set-Alias -Name gicom -Value git-commit-m

function git-push-origin { git push origin $args }
Set-Alias -Name gipo -Value git-push-origin

function git-checkout-main { git checkout main $args }
Set-Alias -Name gicm -Value git-checkout-main

function git-branch-d { git branch -d $args }
Set-Alias -Name gibd -Value git-branch-d

function git-help { Get-Alias | Out-String -Stream | Select-String "git" }
Set-Alias -Name gih -Value git-help
```

新規にPowerShellや、VSCodeを起動します。以下コマンドでエイリアスの登録確認をします。

```
PS C:\Users\USERNAME> Get-Alias | findstr git
Alias           gia -> git-add
Alias           gib -> git-branch
Alias           gibd -> git-branch-d
Alias           gicb -> git-checkout-b
Alias           gicm -> git-checkout-main
Alias           gicom -> git-commit-m
Alias           gih -> git-help
Alias           gipo -> git-push-origin
```

ここまで確認できていれば、以降は、PowerShellやVSCodeのターミナルにおいて、冒頭のコマンドが、以下で可能になります。

```
git branch --> gib
git checkout -b xxxx --> gicb xxxx
git add . --> gia .
git commit -m "" --> gicom ""
git push origin xxxx --> gipo xxxx
git checkout main --> gicm
git branch -d xxxx --> gibd xxxx
```

こんな感じで、エイリアスをどんどん登録していけます。

# その他
LinuxからWindowsにくると、grepがない違和感がすごいので、grepを作ろうと思ったのですが、findstrや```Out-String -Stream | Select-String```をgrepとしてエイリアス登録しても、うまくいっていません

# 参考記事
https://tonari-it.com/windows-powershell-ailas/

https://win.just4fun.biz/?PowerShell/PowerShell%E3%82%B3%E3%83%B3%E3%82%BD%E3%83%BC%E3%83%AB%E8%B5%B7%E5%8B%95%E6%99%82%E3%81%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95

# 更新履歴
function内でエイリアス対象のコマンドに```$args```を渡さないと、エイリアスに引数を与えられないことに気づいたため、エイリアス対象の各コマンドに```$args```を追加しました