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ã®å€æŽå å®¹ã¯æ¬¡ã®ããã«ãªã£ããç·ã®éšåããä»å远å ã»å€æŽããæ°ããç®æã«ãªãã
ã³ãŒãå·®åã§ã¯ããŸã倿Žç¯å²ãæå³éããã確èªããããæå®ããŠããªããã¡ã€ã«ã倿ŽãããŠããªãããæå®ãããã¡ã€ã«ãæ£ãã倿ŽãããŠãããããã§ãã¯ãããä»åã®ãœãŒãæ©èœã§ããã°ãããããœãŒãé¢é£ã®ã³ã³ããŒãã³ããšäžèЧã管çãããã¡ã€ã«ä»¥å€ã®ãã®ã倿ŽãããŠããã°ããã®çç±ããšãŒãžã§ã³ãã«ç¢ºèªããã»ããããã
次ã«ã倿°ã®å®çŸ©ãããžãã¯ã®è©³çްãå¯èœãªéã確èªããããœãŒãã®éžæè¢ãã©ã®ããã«è¡šçŸããŠãããããäžŠã¹æ¿ãã®åŠçã®å®è£ æ¹æ³ãªã©ãã³ãŒãäžã®èª€ãããªãããã§ããéããã§ãã¯ããããã³ãŒãã®å 容ãçè§£ã§ããªãå Žåã¯ããã®æ®µéã§ãã£ããã§ãšãŒãžã§ã³ãã«èããŠæããã«ããŠãããæ¹ãããã
Webãã©ãŠã¶ã§åäœç¢ºèªãã
å®è£ ã«åé¡ããªããã°ããšãŒãžã§ã³ãã¯å®è£ èšç»ã®ãæ€èšŒèšç»ãã®ã¿ã¹ã¯ã«é²ãããšããããŸãèªåãã¹ãã宿œããŠãããèãããã®ã§ããRunããæŒãã°ãå®è£ èšç»éãã«TypeScriptã®ã³ã³ãã€ã«ãã¹ããè¡ãããã
ããã§åé¡ãçºçããªããã°å®è£ ã¯å®äºã ã
宿ããã¢ããªãå®è¡ããã«ã¯ãæç€ºã©ããããã³ããã«ãnpm run devããšå ¥åããã°ãããã¢ããªãç«ã¡äžãã£ãããWebãã©ãŠã¶ã§ãhttp://localhost:3000ãã«ã¢ã¯ã»ã¹ããå®è¡èšç»æžã®æåãã¹ãã®é ç®ã«ãããã£ãŠåäœç¢ºèªãè¡ããããªããAntigravityã«ãããã¹ãçšã®ãã©ãŠã¶ãŒç°å¢ã¯ãAgent Managerã®å·Šäžã®ãã©ãŠã¶ã¢ã€ã³ã³ã§èµ·åã§ããã
ä»åã¯ããšãŒãžã§ã³ãã«æç€ºãåºãâå®è£ èšç»ã確èªããâä¿®æ£ãŸãã¯æ¿èªããâå®è£ çµæã確èªããããšããäžé£ã®ãµã€ã¯ã«ãäœéšããããã®ãµã€ã¯ã«ãç¹°ãè¿ãããšãããšãŒãžã§ã³ããã¡ãŒã¹ãéçºã®åºæ¬çãªæµãã«ãªããæåã®ãã¡ã¯èšç»æžãã³ãŒãå·®åã®ç¢ºèªã«æéãããããããããªãããæ £ããŠãããšããã®èšç»ã¯ä¿¡é Œã§ããããããã¯èŠç¢ºèªããšãã倿ãçŽ æ©ãã§ããããã«ãªã£ãŠããã¯ãã ã
次åã¯åŒãç¶ãããšãŒãžã§ã³ãã«ãã£ãŒãããã¯ãäžããªããã¢ããªã®ä¿®æ£ãé²ããæ¹æ³ã«ã€ããŠè§£èª¬ããã






