VSCode拡張型AIエージェントClineがヤバイ！

# AIエージェント型のVSCode拡張機能「Cline」が普通にやばかった！

アドベントカレンダーの空いているところを埋めるために３本書くこととなった😅
（これが２本目です）

## Clineとは？

いきなりですが、公式のGitHubの[リンク](https://github.com/cline/cline)を貼っておきます。

README.mdの中から印象的な部分だけ引用しておきます。

> [Claude 3.5 Sonnet のエージェント コーディング機能](https://www-cdn.anthropic.com/fed9cc193a14b84131812372d8d5857f8f304c52/Model_Card_Claude_3_Addendum.pdf)により 、Cline は複雑なソフトウェア開発タスクを段階的に処理できます。ファイルの作成と編集、大規模なプロジェクトの調査、ブラウザーの使用、ターミナル コマンドの実行 (許可後) を可能にするツールにより、コード補完やテクニカル サポートを超えた方法で支援できます。
自律 AI スクリプトは従来、サンドボックス環境で実行されますが、**この拡張機能は、すべてのファイル変更とターミナル コマンドを承認するための人間参加型 GUI を提供**し、エージェント AI の可能性を探索するための安全でアクセスしやすい方法を提供します。

実際に使ってみると感じることですが、Human-in-the-Loopと呼ばれるパターンでファイルの保存やコマンド実行都度に人間の承認を求めるため、安心して使うことができます。（少し煩わしいと感じることもありますが、現時点でのAIエージェントの振る舞いとしては、妥当な内容だと思います。）

## この記事で触れる内容

この記事では、Clineの実践的な利用イメージをつかんでいただくために、いくつかのケースを挙げて、それぞれごとにプロンプト内容と、出来上がったアプリのイメージを紹介します。

逆に、セットアップ方法であったり、動作原理の深掘りはしませんので、ご了承ください。

それでは、コンテンツの紹介をしていきます！

## コンテンツ

1) UI設計はClineにお任せ！部員紹介アプリを構築（React）

2) 画面イメージを渡して、弊社技術ノウハウサイト（[Fintan](https://github.com/Fintan-contents/spring-sample-project)）のサンプルアプリを構築（React)

3) RestAPIをSpringBootで構築

自慢することでもないですが、**今回は自分では一切コードを書いておらず、全てClineに任せています！**

### 1) UI設計はClineにお任せ！部員紹介アプリを構築（React）

まずこのアプリは以下の場所で公開しています。（リポジトリ名が超適当です。）
https://github.com/tis-abe-akira/cline02

#### プロンプト

README.mdの中でも紹介していますが、再掲しておきます。
（比較的大雑把な指示で作っています）

```
カジュアルなトーンの部員紹介のアプリを作りたいと思います。
Reactとvite, TypeScriptで作ってください。

初期段階なので、認証処理やデータの永続化処理は不要です。（後で別途追加します）

要件：
- 部員のアイコン画像、自己紹介メッセージがリストで表示される（この時長いメッセージは途中で切られるが詳細表示画面で見れる）
- 部員のアイコン画像は、ドラッグ&ドロップでアップロードできる
- リストは並べ替えることができる（ドラッグ&ドロップで）
- リストから部員をタップすると詳細を見ることができる
- 部員にタグをつけられる（職位、趣味などタグの管理ビューも別途ある）
- フローティングアクションボタンを押すとモーダルが立ち上がり部員情報を入力できる
- 自分が編集できるデータをタップすると詳細画面表示画面に編集ボタンがあり内容編集ができる
- 同様に削除も可能（削除の際にはダイアログで確認を求める）
```

#### Clineとの対話の様子

対話の様子をごく一部ですがスクショで説明します！

- 機能漏れが見つかったので修正を依頼（このように[Comupter use](https://www.anthropic.com/news/3-5-models-and-computer-use)を用いた動作確認もしてくれます）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130262/a1339a4a-b875-266d-a606-0301f8c103e0.png)


#### アプリのイメージ

アプリの実行イメージを掲載します。（アニメーションGif形式です）

![cline02.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130262/1fc5dcf1-9ea4-5e16-6f7c-a3ac86d8ae8e.gif)

### 2) 画面イメージを渡して、弊社技術ノウハウサイトのサンプルアプリを構築（React)

このアプリは以下の場所で公開しています。(あくまでもフロントエンドだけの実装で、検索結果は固定値を返すようになっています！)
https://github.com/tis-abe-akira/cline04

#### プロンプト
少々長いので、GitHubを参照ください。
[prompt](https://github.com/tis-abe-akira/cline04/blob/29b5115e67d77994bfbe2922cc296459b9f5f3c5/proman/prompt.md)


#### アプリのイメージ

アプリの実行イメージを掲載します。

:::note info
少しプロンプトで指示した画面とはレイアウトが異なっています。
修正を重ねた結果当初の見た目から変化してしまっていますが、時間の関係で修正をしていません。
:::

![cline04.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130262/5c1e4997-cbd4-07f2-34bb-a302fa28ae52.gif)

### 3) RestAPIをSpringBootで構築

このアプリは以下の場所で公開しています。
https://github.com/tis-abe-akira/projectman


#### プロンプト

GitHubを参照ください。アーキテクチャーやレイヤーについて少し踏み込んで指定しています。
[prompt](https://github.com/tis-abe-akira/projectman/blob/7c9b4ebb4b17064ebe31b9d1d65eeca50c589ba3/prompt.md)

#### アプリのイメージ

RestAPIの実行は地味ですが、Swagger（いまだにSwaggerって言ってしまう）での実行の様子をご覧ください。


![projectman.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130262/5d0ea4d3-59d8-4773-e32b-7c8144ced927.gif)

ID以外の項目による検索も動作確認取れました。
なんとも予定調和的なテストデータですがこれも生成AIが作ってくれた内容です。（弊社の意思は含まれていません）
![Screenshot 2024-12-07 at 15.15.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130262/7e03aa84-1649-fd80-86a5-293a6c6b1e56.png)

## 所感

**Clineはかなり有望だと思います！**

まず、プロトタイピングにはかなり有効です。
既存のコードベースの読解力はあまり試せていませんが、ここがうまくいくとメンテナンスフェーズでも有効な気がします。

使ってみて気づいたポイントを書いておきます。

- プロンプトは細く指示するか、いっそエージェントにお任せするか、どっちかに振り切った方が良さそう
- 会話が長くなってくると精度が落ちるので、新しいスレッドを立てた方が良い
- Computer useのテストは「動作確認程度」なので、現時点では手動でやった方が早そう

**エンジニアでなくても、初期のプロトタイプやPoCを実施できる時代が来たと思います！**