PowerShellで`curl.exe`と何度も入力せずに済むようにエイリアスをいじる方法

## はじめに
Javaを使いはじめてWSLではなくWindows環境での開発機会が増えました。
Linuxコマンドと異なりWindowsのPowerShellだとcurlの使い勝手が悪いので、エイリアスで調整をしたプロセスを残しておきます。

curl.exe と毎回入力するのが面倒な方がいればご参考になると幸いです。

## やりたいこと

PowerShellでcurl.exeではなくcurlと入力したらcurlできるようにしたい



## 前提
`curl -X POST http://localhost:8080/name `とコマンド入力するとエラーが出る。

```bash
 
Invoke-WebRequest : A parameter cannot be found that matches parameter name 'X'.
At line:1 char:6
+ curl -X POST http://localhost:8080/name
+~~ + CategoryInfo : InvalidArgument: (:) [Invoke-WebRequest],
ParameterBindingException + FullyQualifiedErrorId : NamedParameterNotFound,
Microsoft.PowerShell.Commands.InvokeWebRequestCommand      
```

## 原因

- Windowsには標準でcurlコマンドが使えない
- 使いたいならcurl.exeと入力するとcurlっぽい動きをする
- ただ何回も.exeまで入力するのは手間

## 解決策

- WSLでUbuntuなどをつかう
    - すでにWindows環境でIntelliJなどをインストールしているので今回はパス

:::note info
以下の記述はコメントいただいた内容を元に追記しています
:::
- デフォルトのcurlエイリアス（Invoke-WebRequestコマンドのエイリアス）を削除する
    - やり方
        - メモ帳、VSCodeなどで以下のスクリプトを記述
            ```
            # This script will add the Remove-Item alias:curl command to an existing PowerShell profile or create one if it does not exist
            # If it is run from PowerShell ISE an ISE profile will be created: Microsoft.PowerShellISE_profile.ps1
            # Otherwise a regular profile will be created: Microsoft.PowerShell_profile.ps1
            
            $removeCurlAlias = @"
            # Remove Alias curl -> Invoke-WebRequest
            Remove-Item alias:curl
            "@
            
            if (-Not (Test-Path $Profile))
            {
                New-Item –Path $Profile –Type File -Value "$removeCurlAliasrn"
            }
            else
            {
                Add-Content –Path $Profile -Value "rn$removeCurlAlias"
            }
            ```
        - Remove-CurlAlias.ps1などの名前で保存
        - PowerShell上でRemove-CurlAlias.ps1を実行
            - デスクトップに保存した場合、デスクトップまで移動して`.\Remove-CurlAlias.ps1`とコマンド
        - PowerShellを再起動
        - 以下のエラーが出た場合の対処法
            ```
            rn# : The term 'rn#' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the
            spelling of the name, or if a path was included, verify that the path is correct and try again.
            At /pass/to/your/profile
            + rn# Remove Alias curl -> Invoke-WebRequest
            + ~~~
                + CategoryInfo          : ObjectNotFound: (rn#:String) [], CommandNotFoundException
                + FullyQualifiedErrorId : CommandNotFoundException            
            ```
            - 上記エラー分のAT以降のパスを指定してnotepadを開く
                ```
                notepad /pass/to/your/profile
                ```
            - `rn#`と記述されている箇所を`#`に修正し、上書き保存
            - PowerShellを再起動
        - デフォルトのcurlエイリアス（Invoke-WebRequestコマンドが呼ばれるエイリアス）が削除され、自動でcurlと入力すると、curl.exeが呼ばれるように！


:::note warn
もともと本記事は以下の内容で記載していました
:::
- エイリアスを使ってclなどcurl以外のコマンドで使う
    - やり方
        - プロファイルファイルにエイリアスを記述
            - プロファイルファイルが開けるか試す
                ```bash
                notepad $PROFILE
                ```
                
            - 開けなかった場合プロファイルファイルを作成する
                
                ```bash
                New-Item -Path $PROFILE -ItemType File -Force
                ```
                
                - `Force`オプションにより、ファイルが存在しない場合は新規作成され、既に存在する場合は上書きされません。
            - ファイルが作成されたら再度プロファイルファイルを開く
                
                ```bash
                notepad $PROFILE
                ```
                
            - メモ帳が開かれるので、以下を記述して保存
                
                ```bash
                Set-Alias cl "curl.exe"
                ```
                
        - 管理者権限でPowerShellを起動
            - 実行ポリシーを確認
                
                ```bash
                Get-ExecutionPolicy
                ```
                
                - Restrictedの場合変更が必要
            - 実行ポリシーを変更
                
                ```bash
                Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
                ```
                
                - RemoteSigned
                    - ローカルで作成したスクリプトは実行可能だが、インターネットからダウンロードしたスクリプトは、署名されていない限り実行できないという設定
                    - インターネットからダウンロードしたスクリプトに悪意のあるコードが含まれている場合、そのスクリプトを無断で実行できないことはセキュリティ上の保護になる
                - CurrentUser
                    - 前提として実行ポリシーにはポリシー（RemoteSignedなど）と、スコープという概念がある
                    - ポリシーはセキュリティの厳しさ、スコープはポリシーの適用範囲
                    - CurrentUserを設定すると、現在のユーザーのみRemoteSignedが適用され、同じマシンで他のユーザーが利用する際には別のポリシー（デフォルトでは一番厳しいポリシー）が適用される
                    - 詳細は以下参照
                        - [PowerShellの実行ポリシーについて調査（その設定で本当に大丈夫ですか？）](https://qiita.com/torippy/items/b10d84733f38e2225f53)
        - PowerShellを再起動するとエイリアスが使えるように！



## 参考

- [PowerShellの実行ポリシーについて調査（その設定で本当に大丈夫ですか？）](https://qiita.com/torippy/items/b10d84733f38e2225f53)
- [Windows 10で標準で用意されるようになったcurlを使ってみる](https://ascii.jp/elem/000/004/021/4021036/)
- [RemoveCurlAlias.ps1](https://gist.github.com/lfalck/fbb04ef438b521064e0c5742bcd28c2f)