Github CopilotでJavaのコードをTypeScriptに変換してみた

# Github CopilotでJavaのコードをTypeScriptに変換してみた

## はじめに
AI EditorとしてCursor使うつもりだったけど、会社側がGithub Copilot businessを使えるようにしてあると聞いて、Github Copilotを使ってみることにした。

## Github Copilotのインストール
VS Codeで、会社のアカウントでgithubにログインしたら、Github Copilotをインストールするように言われる。

![Screenshot 2024-04-09 at 10.26.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63415/8376a53f-706c-f60a-ec78-31398d5fefc3.png)


もちろん、インストールをクリック。

`Github Copilot Chat`も`Github`にSign inしていいか聞かれるので、もちろん`Allow`。

![Screenshot 2024-04-09 at 10.29.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63415/21e71123-c8e0-0fc8-0690-6d5222c06434.png)

認可の画面が出るので、`Authorize`をクリック。

![Screenshot 2024-04-09 at 10.35.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63415/0e464a61-0327-6027-3c9d-a72fbbeba687.png)

認証のページになるので、もちろん、Passkeyを使う。

![Screenshot 2024-04-09 at 10.36.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63415/906ceb00-ec7f-2249-b64c-e528648b104a.png)

認証が終わると、VS Codeに制御が戻る。

ネットの情報だと、`Github Copilot Labs`というExtensionを使って、ある言語のソースコードを別の言語のソースコードに変換するということだったが、その機能は、`Github Copilot Chat`に吸収されてなくなったらしい。


`Github Copilot Chat`は、先ほど、`Github Copilot`をインストールした時に、一緒にインストールされている。

## java-oauth-serverのgit clone
今回の目的は、Javaで書かれたAuthleteの[java-oauth-server](https://github.com/authlete/java-oauth-server/tree/master)のコードのうち、[OID4VCI](https://openid.github.io/OpenID4VCI/openid-4-verifiable-credential-issuance-wg-draft.html)に関わる部分をTypeScriptに移植すること。そこで、java-oauth-serverをgit cloneする。

```bash
git clone https://github.com/authlete/java-oauth-server.git
```

## PushedAuthReqEndpoint
最初にPAR Endpointの処理をTypeScriptに移植したいので、[PushedAuthReqEndpoint](https://github.com/authlete/java-oauth-server/blob/master/src/main/java/com/authlete/jaxrs/server/api/PushedAuthReqEndpoint.java)を開く。

`Extension Pack for Java`をインストールするように進められるので、インストールしておく。これで、コマンド(CTL)クリックで、対象のソースコードにJumpできる。

`Activity Bar`にChatアイコンがあるのでクリックする。

![Screenshot 2024-04-09 at 13.19.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63415/5243f7bf-857c-6379-4556-491a6bc2bee8.png)

Chat Windowが開く。

![Screenshot 2024-04-09 at 13.22.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63415/5fc57d87-3444-8b72-b553-110ed785f3bc.png)

現在開いているファイルが対象になる。

`typescriptに変換して`とお願いしてみよう。

![Screenshot 2024-04-09 at 13.24.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63415/a3dd857f-f5fc-33f3-fbcc-3ca872d00ec5.png)

つぎのような結果が返ってくる。

![Screenshot 2024-04-09 at 13.28.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63415/c9c09fd4-e0b0-01e4-a8f5-16f6ca47f91a.png)

みてわかるように、`post()`の変換は不十分だし、`buildParams()`は、変換されていない。これで、`Github Copilot`は、ダメなんだと決めつけてはいけない。

`post()`全体を選択して、

![Screenshot 2024-04-09 at 13.33.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63415/4d0b6bbd-3fa5-89f9-ed93-a80ff9aeabbf.png)

再度、`typescriptに変換して`と頼んでみよう。
それっぽい結果が出てきた。

![Screenshot 2024-04-09 at 13.36.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63415/636d0a12-af58-09ed-ecce-1ee4ac1664c7.png)

## 結論
`Github Copilot`でJavaのソースコードをTypeScriptに変換するのは、自動で全てうまくいくような感じではない。ただ、全てを一から自分でやるよりは幾分マシと言ったところかな。