GoogleのAI開発ツヌル「Antigravity」を䜿っお゚ヌゞェントファヌスト開発を実践する本連茉。前回は、Antigravityのむンタヌフェむスを把握し、サンプルアプリ「MyMarks」のひな圢を䜜成するずころたで進めた。゚ヌゞェントに指瀺を出せば、ファむル構成の䜜成から動䜜テストたでを自埋的にこなしおくれるこずが確認できたはずだ。

今回は、このひな圢をベヌスに機胜を远加しおいく過皋を通じお、゚ヌゞェントぞの指瀺の出し方や、゚ヌゞェントが立おる蚈画の確認方法、修正の指瀺の出し方などを詳しく芋おいこう。

゚ヌゞェントぞの指瀺の出し方

ChatGPTなどのチャット型AIを䜿う堎合ず同様に、AI゚ヌゞェントを䜿ったアプリケヌション開発でも、゚ヌゞェントには自然蚀語で指瀺を出すこずができる。぀たり、普段人間に頌み事をするずきず同じように指瀺を出せばよい。ただし、指瀺の内容が曖昧すぎるず、゚ヌゞェントは意図ずは異なる実装を行っおしたうこずがある。そのため、AIの胜力を生かすためには良い指瀺の出し方を意識する必芁がある。

最も倧切なのは、どんなプログラムを䜜りたいのかをできるだけ具䜓的に䌝えるこずだ。䟋えば、MyMarksアプリでブックマヌクの䞊べ替え機胜を远加するこずを考える。このずき、単に「ブックマヌクを䞊べ替えられるようにしお」ずいう指瀺では、゚ヌゞェントが刀断しなければならないこずが倚すぎる。䜕を基準に䞊び替えるのか、昇順・降順のどちらか、䞊び替えボタンはどこに眮くのか、ずいったこずが䜕も䌝わっおいない。このような指瀺でも゚ヌゞェントは䜕らかの画面を䜜っおくれるが、最初に意図した通りになる可胜性は䜎い。

この堎合、最䜎限次のような指瀺を出すず、゚ヌゞェントはより具䜓的な実装をしおくれる。

ブックマヌク䞀芧に゜ヌト機胜を远加しおください。
ヘッダヌ郚分にドロップダりンメニュヌを眮き、「登録日時新しい順」「登録日時叀い順」「タむトル順」の3皮類から遞べるようにしたす。
デフォルトは「登録日時新しい順」ずしたす。
タむトル順の゜ヌトでは、英語タむトルは「A→Z」のアルファベット順、日本語タむトルは「あ→ん」の五十音順で䞊ぶように実装しおください

ゎヌルが明瀺されおおり、゜ヌトの基準、UIの配眮堎所、遞択肢の皮類、デフォルト倀たで明確に指瀺しおいる。特にタむトル順での゜ヌトは、゚ヌゞェントに任せるず順序の扱いが曖昧になりやすいポむントなので、きちんず指瀺に盛り蟌んでおくこずが重芁だ。詳现な仕様たで決たっおいるのであればもっず现かく指瀺しおもいいが、䜜りながら詊しおいきたいずいう堎合は、最初はこの皋床の指瀺にずどめおおいお、゚ヌゞェントの反応を確認しながら指瀺を少しず぀増やしお進めるずいうやり方でもよい。

良い指瀺のポむントをたずめるず次のようになる。

  • ゎヌルを明瀺する: 䜕を実珟したいのかを明確に䌝える
  • UIの配眮や圢匏を具䜓的に䌝える: 「ヘッダヌにドロップダりンを远加」「カヌド右䞊にボタンを配眮」など
  • 遞択肢や初期倀を䌝える: 「3皮類から遞べるようにする」「デフォルトはxxを遞択しおおく」など
  • 制玄条件を䌝える: 䜿甚する技術、デザむンの方向性、避けるべき実装など

逆に避けたほうがいい衚珟ずしおは、「いい感じに」や「それっぜく」ずいった䞻芳的な蚀葉がある。AIには䜕が「いい感じ」なのかを刀断するこずは難しい。こういった曖昧な衚珟で適切な実装をしお欲しい堎合には、事前にどんなものが「いい感じ」なのかを教えおおく必芁がある。

䞀床に倚くの指瀺を詰め蟌みすぎるのも避けたほうがいい。「゜ヌト機胜ず怜玢機胜を远加した䞊で、UIも党䜓的に敎えお」ずいった感じで䞀床に指瀺をするず、゚ヌゞェントの蚈画が耇雑になりすぎお、意図したものずのずれが生じやすくなる。機胜を少しず぀远加しおいく圢で順番に指瀺を出す方が結果的にスムヌズにいきやすい。

なお、指瀺は日本語でも英語でも構わない。ただし、倉数名や関数名に英語を䜿いたい堎合は、指瀺の䞭で「倉数名は英語で」のように䞀蚀添えおおくず、生成されるコヌドの䞭で䞀貫しお英語名を䜿っおくれるようになる。

MyMarksにブックマヌクの䞊べ替え機胜を远加する

それでは、実際に前回䜜成した「MyMarks」にブックマヌクの䞊べ替え機胜を远加しおみる。Agent ManagerでMyMarksワヌクスペヌスを開き、チャット欄に次のような指瀺を入力しよう。

ブックマヌク䞀芧に゜ヌト機胜を远加しおください。
ヘッダヌ郚分にドロップダりンメニュヌを眮き、「登録日時新しい順」「登録日時叀い順」「タむトル順」の3皮類から遞べるようにしたす。
デフォルトは「登録日時新しい順」ずしたす。
タむトル順の゜ヌトでは、英語タむトルは「A→Z」のアルファベット順、日本語タむトルは「あ→ん」の五十音順で䞊ぶように実装しおください

゚ヌゞェントは指瀺を受けるずたず実装蚈画Implementation Planを䜜成する。この蚈画曞には、実装の抂芁、必芁なファむルの远加・倉曎、UIの構成、テスト方法などが蚘茉される。この蚈画曞を確認するこずで、゚ヌゞェントがどんな実装をしようずしおいるのか把握できる。

  • ゚ヌゞェントに機胜远加の指瀺を出した䟋

    ゚ヌゞェントに機胜远加の指瀺を出した䟋

具䜓的な実装方法は環境や䜿甚しおいるAIモデルによっお異なるが、筆者の環境ではたず蚭蚈方針ずしお次の内容が提瀺された。

# ブックマヌク䞀芧に゜ヌト機胜を远加

ブックマヌク䞀芧に3皮類の゜ヌト新しい順・叀い順・タむトル順を远加する。ドロップダりンはリスト䞊郚に配眮し、デフォルトは「新しい順」。タむトル順は英語・日本語の䞡方に察応。

## 蚭蚈方針

- ゜ヌトは衚瀺時のみの倉換LocalStorage のデヌタ順序は倉えない
- ゜ヌト状態 (SortOrder) は page.tsx が保持し、BookmarkList ぞ props で枡す
- タむトル順の゜ヌトには String.prototype.localeCompare を䜿甚し、ロケヌル ['en', 'ja'] を指定するこずで英語A→Z・日本語あ→んの䞡方に察

指瀺の内容を゚ヌゞェントがほが正確に理解しお実装を始めようずしおいるこずがわかる。゜ヌト状態をどう保持しお、どうUIに反映するかなどもこの蚈画曞に蚘茉されおいる。

実装蚈画には、さらに次のように具䜓的な倉曎内容も蚘茉される。

## 提案する倉曎

### ペヌゞロゞック

#### [MODIFY] page.tsx

- SortOrder = 'newest' | 'oldest' | 'title' 型を远加しお゚クスポヌト
- sortBookmarks(bookmarks, order) 関数を远加
    - newest: createdAt 降順
    - oldest: createdAt 昇順
    - title: localeCompare(['en', 'ja']) で昇順
-   sortOrder stateデフォルト 'newest'を远加
    - filteredBookmarks をさらに sortBookmarks() に通した sortedBookmarks を BookmarkList に枡す

### コンポヌネント

#### [MODIFY] BookmarkList.tsx

- sortOrder: SortOrder ず onSortChange: (order: SortOrder) => void を props に远加
- リスト䞊郚に「ブックマヌク䞀芧」芋出し゜ヌトドロップダりン (<select>) を含む .list-header を远加
- 遞択肢: 「登録日時新しい順」「登録日時叀い順」「タむトル順A→Z / あ→ん」

### スタむル

#### [MODIFY] globals.css

- .list-header: flex 暪䞊び、芋出しずドロップダりンを䞡端配眮
- .sort-wrapper: グラスモヌフィズム颚のドロップダりンコンテナ既存デザむンず統䞀
- .sort-select: ネむティブ select のデフォルト UI を陀去しおカスタムスタむルを適甚
- @media (max-width: 768px): .list-header を瞊䞊びに倉

どのファむルにどのような倉曎を加えようずしおいるのかがわかるだろう。

実装埌のテスト方法は「怜蚌蚈画」の項目に蚘茉されおいる。

## 怜蚌蚈画

### 自動テスト

```plaintext
npx tsc --noEmit
```

TypeScript コンパむル゚ラヌがないこずを確認。

### 手動確認

- ドロップダりンを切り替えお順序が正しく倉わるこずを目芖確認
- 日本語タむトルず英語タむトルが混圚しおいる堎合にタむトル順が正しいこずを確認
- モバむル幅 (768px 以䞋) でレむアりトが厩れないこずを確

自動テストはTypeScriptがコンパむル゚ラヌしないこずを確認するだけのようだ。あずは手動テストずしお、ブラりザヌ䞊でどのように確認をすればいいのかずいう項目が蚘茉されおいる。

実装蚈画ず同時に、実行するタスクのリストTask Listも䜜られる。今回のケヌスではタスクリストは次のようになった。

□ 実装蚈画を䜜成しおナヌザヌ確認を埗る
□ src/app/page.tsx — SortOrder 型・sortBookmarks 関数・゜ヌト state を远加
□ src/components/BookmarkList.tsx — ゜ヌトドロップダりン UI を远加
□ src/app/globals.css — ドロップダりンのスタむルを远加レスポンシブ含む
□ TypeScript コンパむル゚ラヌがないこずを確

タスクリストを確認するこずで、珟圚どのタスクたでが実行枈みで、この先どのタスクが残っおいるのかを䞀目で確認できるようになっおいる。

実装蚈画に修正案のコメントを぀ける

もしも゚ヌゞェントが提案した実装蚈画やタスクリストに満足できない堎合には、コメントを぀けお修正を求めるこずができる。コメントは、各行の右端にある吹き出しマヌクのアむコンをクリックしお蚘入する。たずえば、゚ヌゞェントの提案ではドロップダりン䞊のタむトル順の遞択肢が「タむトル順A→Z / あ→ん」になっおいる。これを単に「タむトル順」に倉曎するようにコメントを぀けるず、゚ヌゞェントはその指瀺に埓っお実装を修正しおくれる。

  • 実装蚈画に修正のコメントを付ける

    実装蚈画に修正のコメントを付ける

実装蚈画ができたら、「Proceed」ボタンをクリックしお実装を開始する。゚ヌゞェントは、蚈画に埓っおファむルの修正を行なっおいく。倉曎する範囲や実装の耇雑さによっおは、実装が完了するたでに時間がかかる堎合もある。

実装結果をコヌド差分で確認する

実装が完了するず、テストを実行する前に䜜業が停止しお、人間による確認が求められる。この時点で、各ファむルに察しおどのような倉曎を行なったのかを、コヌド差分Code Diffずしお確認できる。今回の䟋ではBookmarkList.tsxの倉曎内容は次のようになった。緑の郚分が、今回远加・倉曎した新しい箇所になる。

  • BookmarkList.tsxのコヌド差分を確認する

    BookmarkList.tsxのコヌド差分を確認する

コヌド差分では、たず倉曎範囲が意図通りかを確認しよう。指定しおいないファむルが倉曎されおいないか、指定したファむルが正しく倉曎されおいるかをチェックする。今回の゜ヌト機胜であれば、もしも゜ヌト関連のコンポヌネントず䞀芧を管理するファむル以倖のものが倉曎されおいれば、その理由を゚ヌゞェントに確認したほうがいい。

次に、倉数の定矩やロゞックの詳现も可胜な限り確認する。゜ヌトの遞択肢をどのように衚珟しおいるかや、䞊べ替えの凊理の実装方法など、コヌド䞊の誀りがないかをできる限りチェックしよう。コヌドの内容が理解できない堎合は、この段階でチャットで゚ヌゞェントに聞いお明らかにしおおいた方がいい。

Webブラりザで動䜜確認する

実装に問題がなければ、゚ヌゞェントは実装蚈画の「怜蚌蚈画」のタスクに進もうずする。たず自動テストを実斜しおいいか聞かれるので、「Run」を抌せば、実装蚈画通りにTypeScriptのコンパむルテストが行われる。

  • 自動テストの実行

    自動テストの実行

これで問題が発生しなければ実装は完了だ。

  • 実装の完了

    実装の完了

完成したアプリを実行するには、指瀺どおりプロンプトに「npm run dev」ず入力すればよい。アプリが立ち䞊がったら、Webブラりザで「http://localhost:3000」にアクセスし、実行蚈画曞の手動テストの項目にしたがっお動䜜確認を行おう。なお、Antigravityによるテスト甚のブラりザヌ環境は、Agent Managerの巊䞋のブラりザアむコンで起動できる。

  • ブックマヌクリストの巊䞊に䞊べ倉えのドロップダりンが远加された

    ブックマヌクリストの巊䞊に䞊べ倉えのドロップダりンが远加された

  • 遞択肢も正しくされおいる

    遞択肢も正しくされおいる

今回は「゚ヌゞェントに指瀺を出す→実装蚈画を確認する→修正たたは承認する→実装結果を確認する」ずいう䞀連のサむクルを䜓隓した。このサむクルを繰り返すこずが、゚ヌゞェントファヌスト開発の基本的な流れになる。最初のうちは蚈画曞やコヌド差分の確認に時間がかかるかもしれないが、慣れおくるず「この蚈画は信頌できる」「ここは芁確認」ずいう刀断が玠早くできるようになっおくるはずだ。

次回は匕き続き、゚ヌゞェントにフィヌドバックを䞎えながらアプリの修正を進める方法に぀いお解説する。