【AI時代の開発】GitHub Copilot Workspaceのプレビューアクセスをもらったので試してみた

## これは何?

GitHub Copilot WorkspaceというGitHubの最新AI機能が使えるようになったので使用感など書いていきます。

[GitHub Copilot Workspace公式](https://github.blog/jp/2024-04-30-github-copilot-workspace/)からテクニカルプレビューに申し込めます。

---

## GitHub Copilot Workspaceはなにが違うのか

従来のGitHub Copilotでは，2024/12/25現在では以下の機能を使うことができます。

- エディタ上でのコードの提案
- Copilot Chatによ: チャットでAIに質問することができる
    - プロンプトとして開いているコードやリポジトリ全体を入れることが可能
        - コードの要約やテストコードの作成も可能
    - 作成したコードをそのままソースに反映することが可能
- Copilot Explain
    - チャットでAIに直してほしいところをいうと反映してくれる
    - Copilot Chatよりも修正に特化しているのでスピーディーに編集できる

これだけでも，すごいのですが，Copilot Workspaceではより上流工程からAIアシスタントとコーディングできるのが特徴です。

[GitHub Copilot Workspace公式](https://github.blog/jp/2024-04-30-github-copilot-workspace/)に書いてあることをベースに抜粋しておきます。

- タスクの作成: プロジェクトの開始時になにをしないといけないかの計画の洗い出し
- 計画の立案: Issueを解決するための計画をリストで作成してくれる
- GitHub Copilot Workspaceで直接コードを実行できるらしい

---

## Copilot Workspaceを実際に使ってみる

### 注意

[公式のマニュアルリポジトリのVSCode用](https://github.com/githubnext/copilot-workspace-user-manual/blob/main/vscode.md)はこちらになります。現状全機能を試しているわけではないので，適宜こちらを参照してください。

ベースでは自分のアドベントカレンダーの題材にもしているリポジトリを使いました。

https://qiita.com/advent-calendar/2024/sigma_security

### 動作イメージ

1. [https://copilot-workspace.githubnext.com/](https://copilot-workspace.githubnext.com/)にアクセスする
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/29e480e2-4be2-b7dc-ad90-b01a8ab0364a.png)
2. あたらしいリポジトリを作ってもよいのですが，今回は既存のリポジトリを選びます。するとこのようなページが表示されます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/6ea15b67-a74a-f40f-09eb-d4288ce8a303.png)
    
    :::note info
    VSCodeで開きたい場合，VSCodeアイコンを押すとVSCodeで開けます。拡張機能のインストールやら言われたとおりやります。
    (自分はこのアイコンがリポジトリを選ぶまで表示されないのにすぐに気がつけなかったので記載しておきます。)
3. Taskを入力する ※2024/12/25現在では，VSCodeからの編集はできなさそう。
    ```
    # Form認証機能を作成するための計画

    ## 実装方針

    - 認証画面はhtmlで作成する
    - localhost/formにアクセスした際に認証画面を表示する
    - ユーザが認証した場合，redisにある認証情報と照らし合わせる
    - 認証失敗の場合は再度認証画面を返し，認証成功ならリクエストを転送する
    ```
4. Brainstormを押す
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/1ee625e6-127b-17f4-96ae-6f704eb23847.png)
    正しいかはちゃんと見てないですが，すごく具体的な実装プランを書いてくれました。感動!
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/1339d48d-29fa-9066-e7f7-0de6662b940a.png)
5. planを作成する
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/2a3c6e9f-4b55-d272-94f0-b505b6e6deb9.png)
6. Implimented Selected Taskを押す
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/bc50dc9a-bcc2-377d-c455-0d61a35f9ae0.png)
    編集すべき箇所を比較でき，pull requestまで作成できる模様。
    ちなみに各編集内容に関してもボタン一つで説明してくれる。More Options→Explain changes
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/736f5d07-13b8-5eaf-95b1-f3d293d86b54.png)

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/4a04984e-811d-9552-5f93-754ebc149e14.png)

    
    :::note warn
    現状ブラウザで作成したTask，Taskをもとに作成したBrainstormはVSCodeとsyncしますが，PlanはSyncしていなさそうです。
    ローカルで動作検証などすると思うので個人的にはVSCodeからPlanを作成してImplimented Selected Taskを押すのが良さそうです。
    ~~ですが，自分の環境だと，VSCodeから実行した際に以下のエラーが出たので調査中~~
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/d6ef5b42-5461-572e-d55e-06ac7e9148b6.png)
    再度ブラウザからVSCodeで開くを実行するとpushするためのアイコンが現れました。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/5557f912-bf7f-c402-e371-adce7a6eb6e9.png)
    リモートにpushするのは嫌なので，チェックを外して実行するとブランチが変更され，ローカルに変更が適用されました。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/4ac392d2-4d9d-cddd-e081-42b7d268562a.png)
    どうやらブランチ名はブラウザで開いているGitHub copilot workspaceに紐付いているようでブランチ名を変更するとセッションが切れてしまいます。
    TODO: 名前を指定する方法を調べる

---

## 感想

タスクを切るところから編集してpull requestまで全部やってくれるので，人間に必要なのはテストとレビューだけという状態になりました。
AIはこれからUIの戦いになるという話を聞いたことがありますが，デザインと機能が洗練されていてGitHubというプラットフォームは今後さらに使われるようになるだろうなと感じました。