GitHub Copilot Workspace、GitHub Copilot Edits、Cline(Roo-Cline)を使ってみた

# 当記事の背景
2024年12月に[Devin AI](https://devin.ai/)が正式リリースされ、コード生成AIエージェントの存在が注目されました。Devin自体は2024年3月にベータ版がリリースされており、存在は何となく知っていましたが、2024年の年末にDevinに関するいくつかの記事を読む中で、2025年はAIエージェントの年になりそうなことをあらためて感じました。

2024/12/30には、これも長らくWaitlistで待っていた[GitHub Copilot Workspace](https://githubnext.com/projects/copilot-workspace)が[GitHub Copilotの有償契約者全てに公開](https://github.blog/changelog/2024-12-30-expanding-access-to-the-github-copilot-workspace-technical-preview/)されました。

GitHub Copilotは、2024年10月に[GitHub Copilot Edits](https://code.visualstudio.com/docs/copilot/copilot-edits)のプレビューも提供を始めています。従来、GitHub Copilotはコード予測・補完や、GitHub Copilot Chatでのチャットが主な機能でしたが、チャットでの依頼に沿って複数ファイルの編集を実施してくれる機能が提供され始めました。

2025年1月になると、今度は[Cline](https://github.com/cline/cline)が大きな注目を集めました。Clineは、VSCodeのエクステンションとして動作するAIエージェントで、Claude、DeepSeek、GPT-4o、Gemniniなどの生成AIサービスを使用し、ローカルの環境でAIエージェントに開発を行わせることが（取っ掛かりとしては）低コストで実施できるということで、数多くの記事が公開されました。

この流れの中で、Devinは高くて試せませんでしたが、GitHub Copilot Workspace、GitHub Copilot Edits、Cline(の派生の[Roo-Cline](https://github.com/RooVetGit/Roo-Cline))を試しましたので、その所感を記したいと思います。


# GitHub Copilot Workspace
GitHub Copilot Workspaceは、2023年11月に発表され、Issueを起点として、AIが仕様を作り、コードを書き、デバッグ・テストまで実施してくれるということで話題になりました。2024年4月からテクニカルプレビューが開始され、私もWaitlistに登録したものの、なかなか使えるようにはならない状況が続きましたが、上記の通り2024/12/30から利用できるようになりました。

GitHub Copilot Workspaceは、現段階ではまだプレビュー段階で、実験的機能が提供されるgithubnext.com ドメインで公開されています。Web上で提供されているAIサービスで、ブラウザでアクセスすると以下のような画面になります。GitHubのリポジトリと紐づけて利用するようになっており、以下の画面では1リポジトリを紐づけている状態になっています。「Start new session」の下のリポジトリ名をクリックすると、「タスク」を記述する画面に遷移します。
![2025-01-19 at 00.50.38@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386149/42842947-9c6a-dc28-6d2b-c5368729b9d8.png)


タスクの定義画面では、具体的にどのようなタスクを与えるかを記述することができます。

![2025-01-19 at 00.56.48@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386149/cb404602-5ce5-ceda-4c16-abb250a9bff9.png)

試しに、あらかじめリポジトリ内に格納していた、Quarkusの初期アプリ（Quarkus CLIあるいはMavenでアプリを作成した直後の状態。`/hello`というAPIエンドポイントのみが実装されている）を対象として、新しく`/bye`エンドポイントを追加するタスクを与えてみました。

```text
code-with-quarkus アプリに新しいエンドポイント /bye を作成する。
JSON形式で「message : bye」を返す。
```

「Brainstorm」ボタンを押すことで、現在の状態が分析され、タスクを遂行するのに必要なソリューションが提案されました。既存のファイルに新しくエンドポイントを追加すること、対応するテストケースクラスを新しいエンドポイントに対応させることが提案されています。
![2025-01-19 at 01.04.07@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386149/c5caac2e-1da6-b3a3-181d-0f80abff1cc0.png)

「Generate plan」ボタンを押すことで、Brainstormでのソリューションに沿って具体的なPlanが作成されます。問題なさそうであれば、「Implement seletected files」を押します。
![2025-01-19 at 01.10.20@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386149/7cef7e1b-aa70-ce58-1162-a0be23dc795f.png)

すると、ソースコードが生成され、既存のコードとのdiffが取られます。内容に問題が無ければ「Create pull request」を押すことで、Pull Requestの作成を行うことができます。
![2025-01-19 at 01.11.39@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386149/0e86b312-d2e6-f0c3-ffde-c3371fd30d2a.png)


使用してみたところの感想は以下の通りです。

- ゼロからのアプリ作成は現状では困難。上記のように、既にアプリの土台がある状態で、簡単な追加・修正といったタスクであればこなせそう
- ただ、簡単な機能追加であってもコンパイルエラーが含まれる状態の実装が提案される場合がある。ソースコードのみを扱っており、Copilot Workspace側で環境を持たないため、コンパイルエラーも検知されることがない？（何かやりようがある？）
- Webだけでなく、VSCodeにCopilot Workspaceのエクステンションを追加することで、VSCode内でCopilot Workspaceを操作することが可能であるが、現状sync errorが多発し、まともに使えなかった（このエクステンションがまともに使えれば、多少のエラーは手で直しつつ使えるかもしれない）
- 使い方が悪いのかもしれないが、2023年の発表当初に期待していたAIによる自動実装には至っていない印象


# GitHub Copilot Edits
GitHub Copilot Editsは、この3つの中では最も基本的な機能しか有さないもので、Copilot Chatに複数ファイルを編集する機能を持たせた、というイメージです。

Copilot EditsはGitHub Copilotの一機能であるため、GitHub Copilotを導入すると利用できます。以下の画面右側のサイドパネルがCopilot Editsになります。サイドパネル上部のアイコンでCopilot Chatと切り替えて使用します。
![2025-01-19 at 17.05.00@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386149/763f0a35-d675-cd72-dd0b-c79f10bc6fe5.png)

Copilot Workspaceのときと同様に、`/bye`エンドポイントを追加してみます。

実装対象となる`GreetingResource.java`を開いた状態で、
```
新しいエンドポイント /bye を作成して。 JSON形式で「message : bye」を返す。
```
という指示を与えます。

以下のように自動編集が実行され、この編集内容を「採用」するか「破棄」するかを選択できます。
![2025-01-19 at 17.08.03@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386149/7b53bf5f-10fd-fa32-bb2c-a28d298bcc11.png)

今度は`/bye`エンドポイントのJUniテストケースを追加します。
```
/byeエンドポイントのJUnitテストケースを追加して。
```
という指示を与えると、`GreetingResource`に対応するテストクラスとして`GreetingResourceTest`を認識し、このクラスにテストメソッドを追加してくれました。

![2025-01-19 at 17.22.13@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386149/7b4dafe9-d724-371a-fabb-06bd97df311d.png)


使用してみたところの感想は以下の通りです。

- Copilot Workspaceと同様、ゼロからのアプリ作成は現状では困難。既にアプリの土台がある状態での利用が前提となる
- 任意のファイルを「作業セット」として追加することができる（VSCodeで開いているファイルは自動的に追加される）。「作業セット」に追加されているファイルはコンテキストとして認識され、そのファイルに対する作業指示はある程度正しく認識される
- 作業セットにないものに対する指示は、通る場合と通らない場合がある。例えば上記のように、`GreetingResource`クラスを開いている状態で「/byeエンドポイントのJUnitテストケースを追加して。」と指示を出すと、`GreetingResource`と紐づけて`GreetingResourceTest`を認識してくれるが、作業セットに何もない場合は「どのファイルを変更する必要があるか教えてください。」と返ってくる
- コンテキストをある程度与えないと有用な結果が得られない印象がある
- 指示に対して編集の方針を作って確認を求めるといったことはせず、いきなり編集を始めてしまう
- GitHub Copilotの著作権侵害対策の設定として、「Suggestions matching public code (duplication detection filter)」という項目がある。これを「Blocked」に設定すると、Publicなコードと150字程度を基準として一致するコードの提案がブロックされる。企業ユースでは基本的に「Blocked」にすると思われるが、これが「Blocked」になっていることで、Copilot Editsの編集がブロックされることがしばしばある


# Cline
Clineは、元々は「Claude Dev」という名前で開発されていたもので、ユーザからの指示に対して、Claudeなどの生成AIと連携しつつ、自律的に開発作業を実行するエージェントツールです。

Clineは2024年10月から日本語の記事が出始め、2025年1月に日本国内で爆発的に認知され始めました。ClineのGitHubリポジトリからフォークされた派生版が多く作られていることも特徴で、2025年1月時点ではRoo-Cline、Cool Cline、Reclineといったものが主に利用されている印象です。

Clineを使用するにあたっては、何らかの生成AIサービスのAPIを利用できることが前提となります。元々が「Claude Dev」であることから、2025年1月時点ではAnthropic Claude 3.5 Sonnet v2の利用が最も推奨されています。

私自身は派生版の1つであり、活発に機能追加が行われている[Roo-Cline](https://github.com/RooVetGit/Roo-Cline)を使用しました。エージェントをローカル環境でいきなり動作させることは（安全性の観点で）少し抵抗があったため、GitHub CodespacesにRoo-Clineのエクステンションを導入して利用しました。

以下はGitHub Codespaces（ブラウザアクセス）にRoo-Clineのエクステンションを追加した画面になります。デフォルトではファイルを参照する、更新する、コマンドを実行するなどのタイミングで、都度利用者に許可を求めるようになっています。Roo-ClineにはAuto-approve機能があり、どこまでを自動承認するかの設定が可能です（Roo-Clineなどのフォーク版で先に実装されましたが、本家Clineにもv3.0で実装されました）。安全性と効率化の天秤だと思いますが、私はファイル参照についてはAuto-approveするようにしています。
![2025-01-19 at 18.30.03@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386149/53767f8a-7015-ee53-2f4c-35a45112ea6b.png)

Roo-Clineでは、v3.0、v3.1で大きな機能追加が行われており、その1つがChat Modeの導入です。プロンプトごとに「Code」「Architect」「Ask」の3つのモード切り替えが行えるようになり、「Architect」ではハイレベルな技術デザイン、アーキテクチャ検討を行うよう調整されているようです。「Code」は従来と同様のモード、「Ask」は質問専用のモードになります。

また、もう1つの大きな機能追加は、GitHub Copilotの有償プランを契約していることで、VSCodeの「Language Model API」を介してGitHub Copilotのチャット用APIを利用できるようになっていることです。これはReclineが先に実装した機能で、それをRoo-Clineに取り込んだものになります。

Cline（Roo-Cline）の特徴はやはりAIエージェントとして自律的に動作する点です。

例えば、アプリを開発する最初の段階で以下のようなプロンプトを与えてみます。
```
モンティ・ホール問題を直感的に理解できるようなWebアプリケーションを作成する。

まず、Viteを使用し、ReactベースのWebアプリケーションを初期化して。アプリの名前は「monty-hall-problem」とする。
```

すると、生成AIにアクセスし、必要な手順を洗い出すところからスタートします（1つ目の赤枠）。次に、洗い出した手順に沿ってコマンドを実行していきます。コマンド実行も含めて自律的に実行しています（2つ目の赤枠）。コマンドの内容の精度は利用する生成AIによって大きく変わってきます。
![2025-01-19 at 18.42.39@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386149/edec26f4-b684-6de3-63cd-c22236f8f5bd.png)

アプリの初期化の後、具体的な仕様を伝えて実装を指示します。題材が一般的なモンティ・ホール問題のシミュレータであったため、生成AIの認識精度が高かったのかもしれませんが、与えた指示に沿ってタスク分析を行い、実装対象ファイルの中身を参照し、ファイルを書き換えて実装しています。画像ファイルがうまく取得できなかったため、絵文字に切り替えている点もうまいことやっています。
（なお、ハズレがヤギではなく羊になっているのは私の単なる勘違いです）
![2025-01-19 at 18.51.29@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386149/f64b35ce-28b4-5164-c6c3-6c97001b1fab.png)
![2025-01-19 at 18.52.43@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386149/2d5efd5b-b470-a1be-1c21-a62555d3c1f4.png)


アプリの実装だけでなく、不具合修正も十分に対応してくれます。以下は、生成されたアプリに不具合があったため、その内容と、どのように修正するかを指示したところ、問題箇所を特定し、修正方針を立て、それに沿って見事に修正してくれました。
![2025-01-19 at 18.47.28@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386149/76200144-0a67-c468-2299-a42472ad8382.png)


最終的にできあがったアプリは以下のようなものになりました。モンティ・ホール問題を直感的に理解できるよう、扉の数を3 or 20で選択できるようにしています。なお、このアプリの実装において私自身はコードを1行も書いておらず、全てRoo-Clineへの指示のみで実装しました。
![2025-01-19 at 18.58.54@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386149/e8d88656-bd0c-4632-8818-4349040de94a.png)

![2025-01-19 at 18.58.05@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386149/2f446c35-0522-3af8-c3e0-71929ee275e4.png)

最後に、Cline（Roo-Cline）を使用しての感想は以下の通りです。

- ローカルで手軽にAIエージェントを利用した開発を始められる点で、現時点でとても有力なツールである
- 生成AIサービスは、（Roo-Clineでは）Claude、DeepSeek、GPT-4oなどの他、Amazon Bedrock、Azure OpenAI Serviceも利用可能であり、企業ユースでも利用しやすい（特にAmazon BedrockではClaude 3.5 Sonnet v2が利用可能）
- いくつかの生成AIサービスを試した & Web・Xの情報を観測した範囲では、Claude 3.5 Sonnet v2が最も精度が高いと考えられる
- （自分が試した範囲での感想でしかないが）同じ生成AIサービスを使用した場合でも、Clineの種類によって精度が変わる印象がある。Roo-Clineが最も良さそう
- （Roo-Clineでは）Ollamaも使用できるため、ローカルLLMの精度が上がってくると、無料で利用でき、かつ、インターネット上の生成AIサービスの利用制限がある環境でも利用できるようになる（PCのスペックは必要）
- ローカルで動作するため、Clineがうまく対応できない場合は自分で補正することができる
- VSCodeで動作するため、GitHub Copilotとの併用が可能。どちらかに完全に寄せる必要はない


以上、GitHub Copilot Workspace、GitHub Copilot Edits、Cline(Roo-Cline)を使ってみた感想でした。

この界隈は動きが早く、数カ月先にはまた違った感想になっているかもしれないですね。