Copilot Workspaceを使ったアプリ開発

## イントロダクション
こんにちは！YOKKO(よっこ)です。
[Copilot Workspace](https://githubnext.com/projects/copilot-workspace)のテクニカルプレビューが使えるようになったため、ほとんどの実装をCopilot君に任せてFlutterでToDoアプリを開発してみました！

## プロジェクトの準備
### 1.githubで空のリポジトリを作成
テキトーにリポジトリを作ります。
![スクリーンショット 2024-10-19 20.04.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581663/92ea887a-ba58-de90-ec78-0c09c2e27d9a.png)

### 2.Flutterプロジェクトを作成してgithubにPush
サクッとプロジェクト作成してえいやと先ほどのリポジトリにプッシュ
```
flutter create to_do_app
cd to_do_app
git init
git add .
git commit -m "first commit"
git remote add origin [リポジトリのURL]
git branch -M main        
git push -u origin main
```
![スクリーンショット 2024-10-19 20.17.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581663/6e5a9b3d-282d-0493-7c71-a773aedda683.png)

## Copilot Workspaceを使ってみる
### 1.指示の作成
右上の「Code」クリックし、「Copilot」のタブを選択。
ここに実行したい内容をつらつらと記載。
あんまり長いと一部の記載を無視されるかも
![スクリーンショット 2024-10-19 20.17.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581663/6c8f8927-6676-e53a-059d-11ece9d5955e.png)

今回は下記のような指示内容を記載。
```
Flutterを用いてToDOアプリを作成します。

# 使用技術について
- プログラミング言語: Dart
- フレームワーク: Flutter
- データストレージ: SharedPreferences

# 機能一覧
- タスクの追加
ユーザーがタスクのタイトルと説明を入力し、リストに追加できるようにします。

- タスクの表示
追加されたタスクはリスト形式で表示されます。
各タスクには、タイトル、説明、作成日、完了ボタンが表示されます。

- タスクの完了
ユーザーが完了ボタンをクリックすると、そのタスクは完了としてマークされ、リストの下に移動します。

- タスクの削除
ユーザーがタスクを削除できるボタンを用意します。

- タスクのフィルタリング
完了したタスクと未完了のタスクをフィルタリングできる機能を追加します。

- データの永続化
アプリを再起動してもタスクが保持されるように、ローカルストレージ（SharedPreferencesなど）を使用します。

# 成果物
Androidアプリ
```
### 2.Brainstorm
「Start Task」で実行すると、現状の実装内容と実現するための方法が提案される。
そりゃ作ったばっかのプロジェクトだから何も実装されてないよ。
![スクリーンショット 2024-10-19 21.17.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581663/6c9d4414-4cfe-6e51-44c5-f9550540ed8f.png)
### 3.Plan
次に「Generate Plan」を実行すると、作成する具体的なファイルとその内容について箇条書きで出てくる。

この時、考慮するべき点に不足があれば、画面下の「Revise」から入力したり、各ファイルごとに実装内容を直接記載することも可能。（日本語でOK）
ちゃんと最初に言ったのに考慮できてないじゃん！ってことが多々あるので考慮不足はここで補ってあげよう。
![スクリーンショット 2024-10-19 21.18.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581663/821b9a12-c189-bb95-2011-c9926bf1d350.png)

### 4.実装
準備が完了したらいよいよ実装へ。「Implement selected files」をクリック！
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581663/b85dc6c0-49e9-4f63-862f-0aaf42ec5aad.png" width=50%>

すると右側に次々とコードが書かれていくではありませんか！
どんどん生成されていく様は、みているだけで痛快！！
なお、生成されたコードは直接編集することも可能！
![スクリーンショット 2024-10-19 21.19.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581663/887ef5de-1a61-eb45-2d97-dd4cf8100817.png)
では、作成されたコードを右上の「Create Pull Request」からPR作成してみましょうかね。
と思いましたが、作業用のブランチすら作ってないので、ブランチ作成してプッシュを実施。
なんとここでも「Generate description」で説明書は自動で生成してくれちゃう！
![スクリーンショット 2024-10-19 20.55.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581663/17388ab6-957a-99e1-a37f-c60a484463f1.png)
できたできた
![スクリーンショット 2024-10-19 20.58.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581663/7ef7494b-78db-5591-d63d-7ffa9478af37.png)

## 動作確認
さてさて、出来上がったコードをエミュレータで動かしてみよう。
```
flutter run
```
あれ、右下に追加ボタンがあるけどうまく反応しないなあ。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581663/951f1def-bfff-a13d-9f0c-1383cf15cb35.png" width=50%>
というわけで改良を加えてみる。
本来はソースコードが自動生成された段階でしっかりコードも確認して、実装にも手を加えていくのが良いのでしょうが、その辺は今回すっ飛ばしました。
うまくいかない部分をIssueに記載して、Issueをcopilot君に見てもらう。
右下の「Open in Workspace」をクリックです。
![スクリーンショット 2024-10-19 21.36.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581663/2edb280d-2778-e861-fd7f-7b51946946f0.png)
先ほどと同じように順々に実行。
![スクリーンショット 2024-10-19 21.38.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581663/43c58c62-4b9f-1403-2173-eae8757adc14.png)

![スクリーンショット 2024-10-19 21.37.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581663/9f41d179-2d1b-d3bd-8fa4-bd038fc02a5e.png)
さて、実装が終わったので再度確認してみると、うまく動きましたね！！🎉
提案した機能もバッチリ動いてそう！

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581663/d0b882a6-1bfa-6a8b-6b1b-96fdc45fa088.gif" width=100%>


と、いうわけでCopilot Workspaceを使ってアプリを開発してみたのですが、開発スピードが格段に上がる予感がしますね。
Issue作成しておいてとりあえず実装進めさせてみるのでもいいかも。
どこまで精度が上がるのか、これからの進歩に期待！

## 参考
https://www.multifverse.com/blog-posts/github-copilot-workspace-introduction

https://zenn.dev/headwaters/articles/36294cbd04c721