Kiro ãç®åãã«ã仿§é§åéçºãã話é¡ã«ãªããæè¿ã§ã¯ Spec Kit ã®ãããªãã¬ãŒã ã¯ãŒã¯ãç»å Žããä»åŸäœãäž»æµã«ãªããèªããªãç¶æ³ã ã èªåã¯ããŒã«ãå€ãã€ã€ããMarkdown ã§ã¿ã¹ã¯ãªã¹ããäœã£ãŠéçºãããããªææ³ãç¶ããŠããŠããŠãçŸæç¹ã§ã®ããæ¹ãæ¯ãè¿ããå ŒããŠäžåºŠãŸãšããŠããããšæã£ãã
ã¢ãããŒã·ã§ã³
ãã®æ¹æ³ã§ãã£ãŠããçç±ãšããŠã¯ãCline ãäž»ã«äœ¿ã£ãŠããé ããããããææ³ã§ãã£ãŠããããããšããã®ãã»ãšãã©ãã¹ãŠãªã®ã ãã现ãããšããã§èšããšã
- å°ãªããšã Kiro ã«é¢ããŠã¯ UI ããããªã®ã埮åŠã«æãã
- ææªã³ããã§äœ¿ããèŠæš¡ã®å°ããããã³ããã§å®çµããããã«ããã
- èŠä»¶ã®å ¥åã«æ±çšæ§ãã»ããã£ã(äŸãã° ADR ããœãŒã¹ã«ããããéœåºŠã®äŒè©±ã§è¡ã£ãã)
- èªåãçŽè¿ã§æ±ã£ãŠããã¿ã¹ã¯ã«é¢ããŠã¯ãKiro ã Spec Kit ã®ãããªãã¬ãŒã ã¯ãŒã¯ãæå±ãããããŒã¯å€§ããã«æãã
- 仿§é§åéçºã®åçš® md ã Git 管çããã¹ããªã®ããããã£ãŠããªããŠãããªãã®ã§ããã°ãã©ãŒãããã¯èªç±ã§ããã®ã§ã¯ãšæã£ã
- ããã«é¢ããŠã¯ãèªåã¯ãGit 管çããããªãããšæã£ãŠããŠãä»åãããŠããªã
ããããããããšã¯ãã圱é¿ãåããŠããªãããšãããšããã§ããªããã¿ã¹ã¯ãªã¹ãã®äœãæ¹ã«å€§ããå€åããã£ãã®ã§ã仿§é§åéçºé¢šãšããããããŸã§é¢šã§ããã
ãŸããä»ã®ããŒãžã§ã³ã¯ä»¥äžã®åœ±é¿ã倧ããåããŠãã:
Prompts
3 ã€ã®ããã³ããã Claude Code ã® Custom Slash Command ãšããŠäœ¿çšããŠããã éãå€ããã®ã§ã¯ãªããClaude Code ç¹æã®äœãã䜿ãããã§ããªãã®ã§ãä»ã®ããŒã«ã§ãåæ§ã®æ©èœã䜿ã£ããã³ããã§å©çšã§ãããšæãã 1 ã€ç®ãš 3 ã€ç®ã¯ããŸãéèŠã§ã¯ãªãã®ã§ããªããšãè¯ãã
/dev-plan:new
ããªãã¯ããã®ãœãããŠã§ã¢ãšã³ãžãã¢ã§ãã
ãããããŠãŒã¶ãŒãæäŸããã³ã³ããã¹ããããšã«ãŠãŒã¶ãŒãšè°è«ãè¡ããã³ãŒãããŒã¹ã詳ããåæãããœãããŠã§ã¢ãèšèšããå®è£
èšç»ãç«ãŠãŸãã
ãŠãŒã¶ãŒãã `/dev-plan:create-md` ã§äœææç€ºããããŸã§ã¯ã³ãŒããããã¥ã¡ã³ãã¯äœæãããèæ¯ãæ±ºå®ãèŠç¹ãèšç»ããŸãšããããšã«åŸ¹ããŠãã ããã
éå§æã«äœ¿ãããã³ããã§ãè²ã æžããŠãããããŸã ã³ãŒããæžããªãã§ããšããããšãäŒããã°å²ãšãªãã§ãããã Claude Code ã® Plan mode ã ãšãäœããçžè« â èšç»ãæ¿èª â ã³ãŒããæžããšããæµãã«ãªã£ãŠããŸããäºåã«å€§ããã®æ±ºãäºããããçšéãšã¯åã¿åããªãããã«æãã
/dev-plan:create-md
ãããŸã§ã®ã³ã³ããã¹ãããå®è£
ã«å¿
èŠãªã¿ã¹ã¯ãªã¹ããã³ãŒãããŒã¹ãåæããŠäœæããŠãã ããã
å®è£
ã¿ã¹ã¯ã¯ããã®ãªããžããªå
ã®å®è£
ã®ã¿ã«ãã©ãŒã«ã¹ããŸãã
ããã€ããã§ãŒãºã«åå²ãããããããç¬ç«ãå®çµãããã§ãŒãºã«ãªãããã«ããŠãã ããã
ããããã®ãã§ãŒãºã§å®è£
ãã¹ããã®ãéæãã¹ããŽãŒã«ãå
·äœçãªã³ãŒããªã©ã亀ããŠè©³ããæèšããŠãã ããã
ã¿ã¹ã¯ãªã¹ãã¯æ¬¡ã®ã«ãŒã«ã«æ²¿ã£ãŠäœæããŸã:
- 詳现ãªè¡çªå·ã¯èšèŒããããã¡ã€ã«åãšã·ã³ãã«ã®ã¿ã§ãç°¡æœã«èšèŒ
- ã¿ã¹ã¯ã¯ twada æ°ã® TDD ã®ååã«æ²¿ã£ãŠäœæ
- RED/GREEN/REFACTOR ã® prefix ã¯ã€ããªã
- ãã¹ã㯠1 ã±ãŒã¹ã¥ã€å®è£
ãããäžåºŠã«è€æ°ã®ãã¹ãã远å ããããšã¯çŠæ¢
- ã¿ã¹ã¯ã¯ãã¹ãããªã
ãã©ãŒãããã¯ä»¥äžã§ã:
```md
# ${title}
## Overview
## Phase N: ${title}
ãã®ãã§ãŒãºã§å®è£
ãã¹ããã®ãéæãã¹ããŽãŒã«ã詳ããæèšããŸãã
ç¹ã«ã³ã³ããã¹ãããèªã¿åããèšå®ãæ°å€ã«ã€ããŠã¯å
·äœçã«èšèŒããŸãã
å®è£
æ¹éãã³ãŒãäŸãæè¡ã¹ã¿ãã¯ã«ã€ããŠãèšèŒããŸãã
### Requirements
EARSèšæ³ã§æ¬¡ã®ããã«èŠä»¶å®çŸ©ããŸã:
- THE SYSTEM SHALL <å¿ç>.
- WHEN <æ¡ä»¶>, THE SYSTEM SHALL <å¿ç>.
### Targets
- ${filename} - ${note}
### Tasks
- [ ] task1
- [ ] task2
### References
- ${filename} - ${note}
## Tech Stack
䜿çšããæè¡ã¹ã¿ãã¯ã«ã€ããŠãŸãšããŸãã
## Note
å®è£
ã«ããã£ãŠæ³šæããã¹ãããšãããã°èšèŒããŸãã
```
ãã¡ã€ã«ã¯ .dev-plans 以äžãž .md 圢åŒã§ä¿åããŠãã ããã
Claude Code ãšè©±ãåã£ãŠå€§äœã®æ¹éãæ±ºãŸã£ãããšã«ãèšç»ã Markdown ãšããŠä¿åããããã«äœ¿ããä»åã®è©±ã®äžå¿ãšãªããã®ã ãã¡ã€ã«ã®ãã©ãŒããããæå®ãã€ã€ãé©åœãªå®è£ åäœã§ä»¥äžã®ãã®ããŸãšããŠããã£ãŠãã:
- åãã§ãŒãºã®æŠèŠ
Requirements
- ãã®ãã§ãŒãºã§å®è£ ããã¹ãèŠä»¶å®çŸ©Targets
- 倿Žå¯Ÿè±¡ãšãªããã¡ã€ã«Tasks
- TDD ã«æ²¿ã£ãå ·äœçãªã¿ã¹ã¯References
- åèã«ã«ãªãæ å ±ã®ãããã¡ã€ã«
Requirements
ãš Tasks
ã»ã¯ã·ã§ã³ãç¹ã«éèŠã§ãèšç»ãã¬ãã¥ãŒããéã¯ãã® 2 ã€ãèŠãããšã§æ³å®ããŠããªããã®ãäœãããšããŠããªããã確èªããŠããã
å®éã©ã®ãããªãã®ã«ãªããã¯åŸè¿°ããã
/dev-plan:next
çŸåšã®ã³ã³ããã¹ãã«ãã .dev-plans 以äžã®å®è¡èšç»ãåç
§ããªãããå®è£
ãè¡ããŸãã
æ°ããäœæ¥ãå§ããåã«ãååã®ã¿ã¹ã¯ãããã° Markdown ã§ãã§ãã¯ãªã¹ããå®äºã«ãªã£ãŠããããšã確èªããŠãã ããã
```markdown
- [x] å®äºæžã¿ã¿ã¹ã¯
- [ ] æªå®äºã¿ã¹ã¯
```
確èªããããæªå®äºã®æ¬¡ã® $ARGUMENTS ã**ã²ãšã€ã ã**é²ããŠãã ãããå®äºããããMarkdown ã®ãã§ãã¯ãªã¹ããæŽæ°ããŠãã ããã
task
ã phase
ãåŒæ°ã«ãšã£ãŠããããäžã€é²ãããäžã€ã ãããæ¢ãŸããªãããšãããã坿ããã
ãã£ãšçްããã³ã³ãããŒã«ãããå Žåãªã©ãããã®ã§ãªããšãããããå®é䜿ããªãããšãããã
å®éã®ã¯ãŒã¯ãããŒã®äŸ
å人çšã«äœã£ãŠãã RSS ãªãŒããŒã®ã¯ã©ã€ã¢ã³ãçãªãã®ã顿ã«ããæ¥ä»ããšã«æ¢èªã«ãããæ©èœã®è¿œå ãäœããããšããã
Claude Code ãèµ·åãããã /dev-plan:new
ã§å®è£
èšç»ã®äœæãéå§ããã
> /dev-plan:new is runningâŠ
â ããã®ãœãããŠã§ã¢ãšã³ãžãã¢ãšããŠãæäŒãããŸãããããããŠãŒã¶ãŒãæäŸããã³ã³ããã¹ããããšã«ãã³ãŒãããŒã¹ã®åæãšèšèšã®è°
è«ãé²ããŠãããŸãã
å®è£
èšç»ãç«ãŠãããã«å¿
èŠãªæ
å ±ãæããŠãã ããã以äžã®ãããªæ
å ±ããããšå©ãããŸãïŒ
- å®çŸãããæ©èœã解決ããã課é¡
- èæ¯ãåæ©
- çŸåšã®åé¡ç¹
- æ³å®ããŠããã¢ãããŒããã¢ã€ãã¢
ã³ãŒãããŒã¹ã®åæãå¿
èŠãªå Žåã¯ã察象ãšãªãããã±ãŒãžããã¡ã€ã«ã®æ
å ±ãæããŠãã ããã
/dev-plan:create-md ã®æç€ºããããŸã§ã¯ãã³ãŒããããã¥ã¡ã³ãã¯äœæãããèšèšãšèšç»ã®è°è«ã«éäžããŸãã
ã³ãŒããæžããªãã¢ãŒãã«ãªã£ããå ·äœçãªèŠä»¶ãäŒããŠãæãèŠä»¶ã«ãªãããã«äŒè©±ããã å¥é ADR ã®ãããªãã®ããã£ããããå Žåãããã§æž¡ããŠç¢ºèªããŠãããããªãã¹ãããã®æ±çšæ§ãé«ããªãããã«ããããšããæå³ããã£ãŠãããªã£ãŠããã
> @packages/reader ã«æ¥ä»ããšã«é¢é£ããèšäºãæ¢èªã«ããæ©èœã远å ããŸãã\
\
- 忥ä»ã»ã¯ã·ã§ã³ã®æåŸã«ãæ¢èªã«ããããšããããã¹ãã§ãã¿ã³ã远å ãã\
- ãæ¢èªã«ããããã¿ã³ãæŒããšãã»ã¯ã·ã§ã³ã®å
å®¹ãæ¢èªã«ãªãæ¶ãã\
- åå¥èšäºãã¯ãªãã¯ããŠæ¢èªã«ããå Žåã®ã³ã³ãã©ã¹ã倿Žãšã¯ç°ãªãã衚瀺ããªãããã«ãã\
- ã»ã¯ã·ã§ã³ã«èšäºãäžã€ããªããšãã¯ãæ¢èªã«ããããã¿ã³ã衚瀺ããªã
â äºè§£ããŸããã@packages/reader ã«æ¥ä»ããšã®èšäºãäžæ¬æ¢èªã«ããæ©èœã远å ããèšç»ãç«ãŠãŠãããŸãã
ãŸããçŸåšã®ã³ãŒãããŒã¹ã®æ§é ãåæãããŠãã ãããããã³ããšã³ãã®å®è£
ã確èªããŸãã
......
â å®ç§ã§ããã³ãŒãããŒã¹ã®åæãå®äºããŸããã以äžãå®è£
èšç»ããŸãšããŸãã
---
èæ¯ãšèŠä»¶
å®çŸãããæ©èœ
æ¥ä»ã»ã¯ã·ã§ã³ããšã«èšäºãäžæ¬æ¢èªã«ããæ©èœã远å ããŸãã
å
·äœçãªèŠä»¶
1. 忥ä»ã»ã¯ã·ã§ã³ã®æåŸã«ãæ¢èªã«ããããã¿ã³ãé
眮
2. ãã¿ã³ãã¯ãªãã¯ãããšããã®ã»ã¯ã·ã§ã³ã®å
šèšäºãæ¢èªã«ãªãé衚瀺ã«ãªã
3. ã»ã¯ã·ã§ã³ã«è¡šç€ºãããèšäºã0ä»¶ã®å Žåã¯ãã¿ã³ã衚瀺ããªã
4. åå¥èšäºã®æ¢èªãã¿ã³ïŒã³ã³ãã©ã¹ã倿ŽïŒãšã¯ç°ãªããå®å
šã«é衚瀺ã«ãã
---
çŸåšã®å®è£
ã®åæ
ããŒã¿æ§é
- æ¥ä»ã§ã°ã«ãŒãå: GroupedArticlesByDate åã§æ¥ä»ããŒïŒäŸ: "20251013"ïŒããšã«èšäºã管ç
- 忥ä»å
ã§2ã€ã«åé¡:
- withSummary: èŠçŽããèšäºãããã«authorå¥ã«ã°ã«ãŒãã³ã°
- withoutSummary: èŠçŽãªãèšäº
......
---
ãã®èšç»ã§åé¡ãªããã°ã/dev-plan:create-md ã§è©³çްãªå®è£
ããã¥ã¡ã³ããäœæããŸãã
質åãä¿®æ£ãããç¹ãããã°æããŠãã ããã
é·ãã®ã§åºåã¯å€§ããçç¥ããŠããããããŸã§ã§äžéæãªéšåãªãããããã°è³ªåãããããŠãããã¯ãã ä»åã¯éãã§å®è£ ããããã€ãã¹ãåšãããããããããªããããé©åœãªçç±ãã€ããŠæ¬æ¥äžèŠãª API ãæ°èŠå®è£ ããã
> æ©èœåäœã§ã®åé€ã容æã«ãããããAPI ã¯æ°ãã«å°çšã®ãã®ãäœæããŠãã ãã
â äºè§£ããŸãããå°çšã®APIãšã³ããã€ã³ããäœæããããã«èšç»ãä¿®æ£ããŸãã
---
èšèšæ±ºå®ã®å€æŽ
æ°èŠAPIãšã³ããã€ã³ã
決å®: /api/articles/read/by-date ãæ°èŠäœæ
ãšã³ããã€ã³ã仿§
POST /api/articles/read/by-date
Content-Type: application/json
ãªã¯ãšã¹ãããã£: string[] (èšäºIDã®é
å)
ã¬ã¹ãã³ã¹:
{
"ids": string[],
"read": true,
"feature": "by-date" // èå¥çš
}
æ¢åã® bulk API ãšã®éã
- ãšã³ããã€ã³ããåé¢: æ©èœããšã«ç¬ç«ãããšã³ããã€ã³ã
- åé€ã容æ: ãã®æ©èœãåé€ããéã¯ããã®ãšã³ããã€ã³ããšé¢é£ã³ãŒãã®ã¿åé€ããã°ãã
- å®è£
ã¯é¡äŒŒ: å
éšçã«ã¯åãããžãã¯ïŒèšäºIDãªã¹ããåãåã£ãŠæ¢èªã«ããïŒ
---
æŽæ°ãããå®è£
èšç»
1. ããã¯ãšã³ãïŒbackend/index.tsïŒ
æ°èŠãšã³ããã€ã³ã远å (138è¡ç®ä»è¿ãæ¢åã®bulk APIã®åŸã«è¿œå )
.post('/api/articles/read/by-date', zValidator('json', z.string().array()), async (c) => {
// å
·äœçãªå®è£
äŸ
})
2. ããã³ããšã³ãïŒuse-backend.tsïŒ
æ°é¢æ°è¿œå (markAsReadAll ã®åŸã«è¿œå )
const markAsReadByDate = async (dateKey: string) => {
// å
·äœçãªå®è£
äŸ
};
3. UIå®è£
ïŒapp.tsxïŒ
倿ŽãªãïŒåè¿°ã®èšç»éãïŒ
4. ã¹ã¿ã€ã«ïŒapp.module.cssïŒ
倿ŽãªãïŒåè¿°ã®èšç»éãïŒ
---
æ©èœåé€æã®æé
å°æ¥ãã®æ©èœãåé€ããå ŽåïŒ
1. ããã¯ãšã³ã: /api/articles/read/by-date ãšã³ããã€ã³ããåé€
2. ããã³ããšã³ã:
- use-backend.ts ãã markAsReadByDate 颿°ãåé€
- app.tsx ããæ¥ä»ã»ã¯ã·ã§ã³ã®ãã¿ã³UIãåé€
- app.module.css ãã .dateMarkAsReadButton ãåé€
æ¢åã® markAsReadAll ãå奿¢èªæ©èœã«ã¯äžå圱é¿ããŸããã
---
ãã®ä¿®æ£ã§åé¡ãªããã°ã/dev-plan:create-md ã§å®è£
ããã¥ã¡ã³ããäœæããŸãã
ãããŸã§ã§ãããšãã埮åŠã«ãªã£ãŠãããªããšæã£ããå šéšã°ã£ããæšãŠãŠããŠãäŒè©±ã§åŸãç¥èã§æåã®ããã³ããã調æŽããŠããã ä»å貌ãä»ããŠãããã®ã¯ 2 åç®ã®çµæã§ã 1 åç®ã¯ãã¿ã³ãã©ãã«çœ®ããå»¶ã ãšèããŠããè£ çœ®ã«ãªã£ãŠããŸã£ãã®ã§æšãŠãŠããã
å
容ã«åé¡ããªããªã£ãã /dev-plan:create-md
ã§å®è£
èšç»ã Markdown ãšããŠä¿åããã
> /dev-plan:create-md is runningâŠ
â å®è£
èšç»ãããã¥ã¡ã³ããšããŠäœæããŸãããŸããã³ãŒãããŒã¹ãããã«åæããŠããã¹ããã¡ã€ã«ã®æ§é ãæ¢åã®ãã¹ããã¿ãŒã³ã確èªã
ãŸãã
......
â å®ç§ã§ãããã¹ãã®æ§é ãçè§£ã§ããŸãããããã§ã¯å®è£
èšç»ããã¥ã¡ã³ããäœæããŸãã
çµæãšããŠã§ãã Markdown ã以äžãTech Stack ã Note 以äžã¯ãã®è§£èª¬ã§ã¯ããŸãéèŠã§ã¯ãªãã®ã§çç¥ããŠããã
# æ¥ä»ããšã®äžæ¬æ¢èªæ©èœã®å®è£
## Overview
`reader` ããã±ãŒãžã«ãæ¥ä»ã»ã¯ã·ã§ã³ããšã«èšäºãäžæ¬ã§æ¢èªã«ããæ©èœã远å ããŸãããã®æ©èœã«ããããŠãŒã¶ãŒã¯ç¹å®ã®æ¥ä»ã®èšäºããŸãšããŠæ¢èªã«ããŠé衚瀺ã«ã§ããŸãã
**äž»ãªæ©èœèŠä»¶:**
- 忥ä»ã»ã¯ã·ã§ã³ã®æåŸã«ãæ¢èªã«ããããã¿ã³ã衚瀺
- ãã¿ã³ãã¯ãªãã¯ãããšããã®æ¥ä»ã®å
šèšäºãæ¢èªã«ãªãé衚瀺ã«ãªã
- ã»ã¯ã·ã§ã³ã«è¡šç€ºãããèšäºã0ä»¶ã®å Žåã¯ãã¿ã³ã衚瀺ããªã
- æ©èœã®åé€ã容æã«ãããããå°çšã®APIãšã³ããã€ã³ããäœæ
**æè¡ã¹ã¿ãã¯:**
- ããã¯ãšã³ã: Hono + Cloudflare Workers + D1 Database
- ããã³ããšã³ã: React + TypeScript
- ãã¹ã: Bun test framework + Hono testClient
## Phase 1: ããã¯ãšã³ãAPIå®è£
ïŒTDDïŒ
ãã®ãã§ãŒãºã§ã¯ãæ¥ä»ããšã®äžæ¬æ¢èªAPIãšã³ããã€ã³ã `/api/articles/read/by-date` ãå®è£
ããŸããæ¢åã® `/api/articles/read/bulk` ãšåæ§ã®åäœãããŸãããæ©èœãšããŠç¬ç«ãããããšã§å°æ¥ã®åé€ã倿Žã容æã«ããŸãã
### Requirements
- THE SYSTEM SHALL èšäºIDã®é
åãåãåãã該åœããå
šèšäºãæ¢èªã«ããã
- WHEN èšäºIDã®é
åãPOSTãããå ŽåãTHE SYSTEM SHALL D1ããŒã¿ããŒã¹ã®ReadArticleããŒãã«ã«èšé²ããã
- WHEN äžéšã®èšäºIDãååšããªãå ŽåãTHE SYSTEM SHALL ååšããèšäºã®ã¿ãæ¢èªã«ããŠ201ãè¿ãã
- WHEN å
šãŠã®èšäºIDãååšããªãå ŽåãTHE SYSTEM SHALL 404ãšã©ãŒãè¿ãã
- WHEN 空é
åãPOSTãããå ŽåãTHE SYSTEM SHALL 404ãšã©ãŒãè¿ãã
- WHEN ç¡å¹ãªããŒã¿åãéä¿¡ãããå ŽåãTHE SYSTEM SHALL 400ããªããŒã·ã§ã³ãšã©ãŒãè¿ãã
- WHEN æ¢èªç»é²ãæåããå ŽåãTHE SYSTEM SHALL `{ ids: string[], read: true, feature: "by-date" }` ã®åœ¢åŒã§ã¬ã¹ãã³ã¹ãè¿ãã
### Targets
- src/backend/index.ts - æ°èŠãšã³ããã€ã³ã `/api/articles/read/by-date` ã®è¿œå
- src/backend/index.test.ts - æ°èŠãšã³ããã€ã³ãã®ãã¹ã远å
### Tasks
- [ ] POST /api/articles/read/by-date ã空ã®DBã§ç©ºé
åãéä¿¡ãããš404ãè¿ããã¹ãã远å
- [ ] POST /api/articles/read/by-date ãšã³ããã€ã³ããå®è£
ïŒç©ºé
åã§404ãè¿ãæå°å®è£
ïŒ
- [ ] POST /api/articles/read/by-date ãè€æ°èšäºãäžæ¬æ¢èªã§ãããã¹ãã远å
- [ ] èšäºIDããArticleãæ€çŽ¢ããReadArticleããŒãã«ã«ç»é²ããåŠçãå®è£
- [ ] POST /api/articles/read/by-date ãæåæã«æ£ããã¬ã¹ãã³ã¹æ§é ãè¿ããã¹ãã远å
- [ ] ã¬ã¹ãã³ã¹ã« `feature: "by-date"` ãã£ãŒã«ããå«ããå®è£
ã远å
- [ ] POST /api/articles/read/by-date ãéšåçã«ååšããªãèšäºããã£ãŠãæåãããã¹ãã远å
- [ ] ååšããèšäºã®ã¿ãåŠçããå®è£
ã確èªïŒæ¢åã³ãŒãã§å¯Ÿå¿æžã¿ïŒ
- [ ] POST /api/articles/read/by-date ãå
šãŠååšããªãèšäºã§404ãè¿ããã¹ãã远å
- [ ] å
šèšäºãååšããªãå Žåã®404ã¬ã¹ãã³ã¹åŠçã確èª
- [ ] POST /api/articles/read/by-date ãç¡å¹ãªããŒã¿åã§ããªããŒã·ã§ã³ãšã©ãŒãè¿ããã¹ãã远å
- [ ] zodããªããŒã·ã§ã³ã®è¿œå ïŒ`z.string().array()` ã䜿çšïŒ
- [ ] POST /api/articles/read/by-date ã§äžæ¬æ¢èªåŸã«GET /api/articlesã§å
šãŠisRead: trueã«ãªããã¹ãã远å
- [ ] ãšã³ãããŒãšã³ãã®åäœç¢ºèªïŒæ¢åã®ReadArticleããŒãã«ãšã®é£æºïŒ
### References
- src/backend/index.ts:138-173 - æ¢åã® `/api/articles/read/bulk` ãšã³ããã€ã³ãïŒå®è£
ãã¿ãŒã³ã®åèïŒ
- src/backend/index.test.ts:236-321 - æ¢åã®äžæ¬æ¢èªæ©èœã®ãã¹ãïŒãã¹ããã¿ãŒã³ã®åèïŒ
- src/backend/test/fixtures/test-data.ts - ãã¹ãããŒã¿ã®ã»ããã¢ãã
- src/backend/test/mocks/d1.ts - D1ããŒã¿ããŒã¹ã®ã¢ãã¯å®è£
## Phase 2: ããã³ããšã³ãç¶æ
管çå®è£
ãã®ãã§ãŒãºã§ã¯ã`use-backend.ts` ã«æ¥ä»ããšã®äžæ¬æ¢èªåŠçãè¡ã `markAsReadByDate` 颿°ã远å ããŸãããã®é¢æ°ã¯ãæå®ãããæ¥ä»ããŒã«å¯Ÿå¿ããå
šèšäºãæ¢èªã«ããæ¥œèŠ³çæŽæ°ãšãšã©ãŒãã³ããªã³ã°ãæäŸããŸãã
### Requirements
- THE SYSTEM SHALL æ¥ä»ããŒïŒäŸ: "20251013"ïŒãåãåãããã®æ¥ä»ã®å
šèšäºãæ¢èªã«ããã
- WHEN æ¥ä»ããŒãååšããªãå ŽåãTHE SYSTEM SHALL åŠçãäžæããã
- WHEN èšäºã0ä»¶ã®å ŽåãTHE SYSTEM SHALL åŠçãäžæããã
- THE SYSTEM SHALL æ¥œèŠ³çæŽæ°ã«ããå³åº§ã«UIãæŽæ°ããã
- WHEN APIåŒã³åºãã倱æããå ŽåãTHE SYSTEM SHALL ç¶æ
ãããŒã«ããã¯ããã
- THE SYSTEM SHALL pendingæ¢èªç¶æ
ãã¯ãªã¢ããã
- THE SYSTEM SHALL æ°èŠAPIãšã³ããã€ã³ã `/api/articles/read/by-date` ãåŒã³åºãã
### Targets
- src/frontend/component/use-backend.ts - `markAsReadByDate` 颿°ã®è¿œå
### Tasks
- [ ] `markAsReadByDate` 颿°ã®ã¹ã±ã«ãã³ã远å
- [ ] æ¥ä»ããŒãã `groupedArticles[dateKey]` ãååŸããåŠçãå®è£
- [ ] `withSummary` ã®å
šauthoré
äžã®èšäºIDãåéããåŠçãå®è£
- [ ] `withoutSummary` ã®èšäºIDãåéããåŠçãå®è£
- [ ] èšäºIDã0ä»¶ã®å Žåã«æ©æãªã¿ãŒã³ããåŠçã远å
- [ ] æ¥œèŠ³çæŽæ°ã«ãã `readOnThisSession` ãæŽæ°ããåŠçãå®è£
- [ ] `pendingReadOnThisSession` ãã該åœèšäºãåé€ããåŠçãå®è£
- [ ] `/api/articles/read/by-date` APIãåŒã³åºãåŠçãå®è£
- [ ] API倱ææã®ç¶æ
ããŒã«ããã¯åŠçãå®è£
- [ ] ãšã©ãŒãã°åºååŠçã远å
- [ ] `useBackend` ã®æ»ãå€ã« `markAsReadByDate` ã远å
### References
- src/frontend/component/use-backend.ts:146-171 - æ¢åã® `markAsReadAll` 颿°ïŒå®è£
ãã¿ãŒã³ã®åèïŒ
- src/frontend/component/use-backend.ts:21-69 - `groupedAndSorted` 颿°ïŒããŒã¿æ§é ã®åèïŒ
- src/frontend/component/use-backend.ts:98-115 - `markAsRead` 颿°ïŒãšã©ãŒãã³ããªã³ã°ã®åèïŒ
## Phase 3: UIå®è£
ãšã¹ã¿ã€ãªã³ã°
ãã®ãã§ãŒãºã§ã¯ã忥ä»ã»ã¯ã·ã§ã³ã«ãæ¢èªã«ããããã¿ã³ã远å ããé©åãªã¹ã¿ã€ã«ãé©çšããŸãã衚瀺ãããèšäºã0ä»¶ã®ã»ã¯ã·ã§ã³ã§ã¯ãã¿ã³ã衚瀺ããªãããã«ããŸãã
### Requirements
- THE SYSTEM SHALL 忥ä»ã»ã¯ã·ã§ã³ã®æåŸã«ãæ¢èªã«ããããã¿ã³ã衚瀺ããã
- WHEN ã»ã¯ã·ã§ã³å
ã®ãã£ã«ã¿åŸã®èšäºã0ä»¶ã®å ŽåãTHE SYSTEM SHALL ãã¿ã³ã衚瀺ããªãã
- WHEN ãã¿ã³ãã¯ãªãã¯ãããå ŽåãTHE SYSTEM SHALL `markAsReadByDate` 颿°ãåŒã³åºãã
- THE SYSTEM SHALL æ¢åã® `.toggleButton` ãšçµ±äžæã®ããã¹ã¿ã€ã«ãé©çšããã
- THE SYSTEM SHALL ãã¿ã³ã«é©åãªããŒãžã³ãèšå®ããèŠèŠçã«åãããããé
眮ããã
### Targets
- src/frontend/component/app.tsx - æ¥ä»ã»ã¯ã·ã§ã³ãžã®ãã¿ã³è¿œå
- src/frontend/component/app.module.css - ãã¿ã³ã¹ã¿ã€ã«ã®è¿œå
### Tasks
- [ ] æ¥ä»ã»ã¯ã·ã§ã³å
ã®ãã£ã«ã¿åŸèšäºæ°ãã«ãŠã³ãããåŠçã远å
- [ ] `withSummary` ã®å
šauthoré
äžã®ãã£ã«ã¿æžã¿èšäºæ°ãèšç®
- [ ] `withoutSummary` ã®ãã£ã«ã¿æžã¿èšäºæ°ãèšç®
- [ ] èšäºæ°ã0ãã倧ããå Žåã®ã¿ãã¿ã³ã衚瀺ããæ¡ä»¶åå²ã远å
- [ ] ãæ¢èªã«ããããã¿ã³ã®èŠçŽ ã远å ïŒ`button` ã¿ã°ïŒ
- [ ] ãã¿ã³ã®ã¯ãªãã¯ãã³ãã©ã« `markAsReadByDate(key)` ãèšå®
- [ ] app.module.css ã« `.dateMarkAsReadButton` ã¯ã©ã¹ã远å
- [ ] ãã¿ã³ã®åºæ¬ã¹ã¿ã€ã«ïŒè²ãããã£ã³ã°ãããŒããŒïŒãèšå®
- [ ] ãã¿ã³ã®ãããŒã¹ã¿ã€ã«ã远å
- [ ] ãã¿ã³ã®é
眮çšããŒãžã³ãèšå®ïŒæ¥ä»ã»ã¯ã·ã§ã³å
ã§é©åã«é
眮ïŒ
### References
- src/frontend/component/app.tsx:59-94 - æ¢åã®æ¥ä»ã»ã¯ã·ã§ã³ã¬ã³ããªã³ã°
- src/frontend/component/app.tsx:96-103 - æ¢åã®ã³ã³ãããŒã«ãã¿ã³
- src/frontend/component/app.module.css:58-77 - æ¢åã® `.toggleButton` ã¹ã¿ã€ã«
- src/frontend/component/app.tsx:43-55 - `filterArticle` 颿°
## Phase 4: çµ±åãã¹ããšåäœç¢ºèª
ãã®ãã§ãŒãºã§ã¯ãå®è£
ããæ©èœãæ£ããåäœããããšã確èªããŸããç¹ã«ãæ¥ä»ã»ã¯ã·ã§ã³ããšã®æ¢èªåŠçãé©åã«åäœããUIãæåŸ
éãã«æŽæ°ãããããšãæ€èšŒããŸãã
### Requirements
- THE SYSTEM SHALL éçºç°å¢ã§å
šãŠã®æ©èœãæ£åžžã«åäœããã
- THE SYSTEM SHALL æ¥ä»ã»ã¯ã·ã§ã³ã®ãã¿ã³ãã¯ãªãã¯ãããšããã®ã»ã¯ã·ã§ã³ã®èšäºãé衚瀺ã«ãªãã
- THE SYSTEM SHALL ãã¿ã³ã¯ãªãã¯åŸãã»ã¯ã·ã§ã³èªäœãé衚瀺ã«ãªãïŒèšäºã0ä»¶ã«ãªãããïŒã
- THE SYSTEM SHALL ä»ã®æ¥ä»ã»ã¯ã·ã§ã³ã«åœ±é¿ãäžããªãã
- THE SYSTEM SHALL ãšã©ãŒã±ãŒã¹ã§é©åã«ããŒã«ããã¯ããã
### Targets
- å
šå®è£
ã³ãŒã
- éçºç°å¢ã§ã®ãã©ãŠã¶åäœç¢ºèª
### Tasks
- [ ] ããã¯ãšã³ãã®ãŠããããã¹ããå
šãŠå®è¡ïŒ`bun test src/backend/index.test.ts`ïŒ
- [ ] ãã¹ããå
šãŠãã¹ããããšã確èª
- [ ] ãã«ããæåããããšã確èªïŒ`bun run build`ïŒ
- [ ] éçºãµãŒããŒãèµ·åïŒ`bun run dev`ïŒ
- [ ] ãã©ãŠã¶ã§è€æ°æ¥ä»ã®èšäºã衚瀺ãããããšã確èª
- [ ] ææ°æ¥ä»ã®ãæ¢èªã«ããããã¿ã³ã衚瀺ãããããšã確èª
- [ ] ãã¿ã³ãã¯ãªãã¯ããŠããã®æ¥ä»ã®èšäºãé衚瀺ã«ãªãããšã確èª
- [ ] ä»ã®æ¥ä»ã»ã¯ã·ã§ã³ã圱é¿ãåããªãããšã確èª
- [ ] ããŒãžããªããŒãããŠãæ¢èªç¶æ
ãæ°žç¶åãããŠããããšã確èª
- [ ] Chromeæ¡åŒµæ©èœããã«ãïŒ`bun run build-extension`ïŒ
- [ ] Chromeæ¡åŒµæ©èœã§åæ§ã®åäœç¢ºèª
- [ ] biomeã«ããã³ãŒãå質ãã§ãã¯ïŒ`bunx @biomejs/biome check --apply ./`ïŒ
### References
- CLAUDE.md:13-38 - ãã«ãã»éçºã³ãã³ãã®äžèЧ
- packages/reader/README.md - Reader ããã±ãŒãžã®ããã¥ã¡ã³ãïŒããååšããå ŽåïŒ
## Tech Stack
......
## Note
### å®è£
äžã®æ³šæç¹
......
Markdown ãã§ãããããã®å 容ã詳ããã¬ãã¥ãŒãããç¹ã« Requirements ãš Tasks ã»ã¯ã·ã§ã³ãéç¹çã«èŠãŠãæ³å®ãããã®ã«ãªã£ãŠãããã確èªããã äŸãã°ä»¥äžã®ãããªãã®ãããã°èª¿æŽãã:
- 仿§ã®äžè¶³ / äžèŠãªä»æ§ãæ··ãã£ãŠãã â 仿§ãèŠä»¶ã®è»éä¿®æ£
- ã¿ã¹ã¯ã®ç²åºŠã倧ãããã â 1 ã¿ã¹ã¯ãèªèº«ãã¬ãã¥ãŒãããããšæããããµã€ãºã«èª¿æŽ
- ãã¹ããè¶³ããŠããªã â æžããŠã»ãããã¹ããæç€ºã远å
- å®è£ ã®é çªãäžé©å â ã¿ã¹ã¯ã®é çªãå ¥ãæ¿ããæç€ºã倧ããå€ãããšãã¯çŽæ¥ç·šéããŠèªã¿èŸŒã¿çŽã
> - WHEN æ¢èªç»é²ãæåããå ŽåãTHE SYSTEM SHALL `{ ids: string[], read: true, feature: "by-date" }` ã®åœ¢åŒã§ã¬ã¹ãã³ã¹ãè¿ãã\
\
read: true ãš feature ãã£ãŒã«ãã¯äžèŠã§ã
â æ¿ç¥ããŸãããã¬ã¹ãã³ã¹åœ¢åŒã { ids: string[] } ã®ã¿ã«ä¿®æ£ããŸãã
â Update(.dev-plans/mark-as-read-by-date.md)
â¿ Updated .dev-plans/mark-as-read-by-date.md with 1 addition and 1 removal
27 - WHEN å
šãŠã®èšäºIDãååšããªãå ŽåãTHE SYSTEM SHALL 404ãšã©ãŒãè¿ãã
28 - WHEN 空é
åãPOSTãããå ŽåãTHE SYSTEM SHALL 404ãšã©ãŒãè¿ãã
29 - WHEN ç¡å¹ãªããŒã¿åãéä¿¡ãããå ŽåãTHE SYSTEM SHALL 400ããªããŒã·ã§ã³ãšã©ãŒãè¿ãã
30 - - WHEN æ¢èªç»é²ãæåããå ŽåãTHE SYSTEM SHALL `{ ids: string[], read: true, feature: "by-date" }` ã®åœ¢åŒã§ã¬ã¹ãã³ã¹ãè¿ãã
30 + - WHEN æ¢èªç»é²ãæåããå ŽåãTHE SYSTEM SHALL `{ ids: string[] }` ã®åœ¢åŒã§ã¬ã¹ãã³ã¹ãè¿ãã
31
32 ### Targets
33
â Update(.dev-plans/mark-as-read-by-date.md)
â¿ Updated .dev-plans/mark-as-read-by-date.md with 1 removal
41 - [ ] POST /api/articles/read/by-date ãè€æ°èšäºãäžæ¬æ¢èªã§ãããã¹ãã远å
42 - [ ] èšäºIDããArticleãæ€çŽ¢ããReadArticleããŒãã«ã«ç»é²ããåŠçãå®è£
43 - [ ] POST /api/articles/read/by-date ãæåæã«æ£ããã¬ã¹ãã³ã¹æ§é ãè¿ããã¹ãã远å
44 - - [ ] ã¬ã¹ãã³ã¹ã« `feature: "by-date"` ãã£ãŒã«ããå«ããå®è£
ã远å
44 - [ ] POST /api/articles/read/by-date ãéšåçã«ååšããªãèšäºããã£ãŠãæåãããã¹ãã远å
45 - [ ] ååšããèšäºã®ã¿ãåŠçããå®è£
ã確èªïŒæ¢åã³ãŒãã§å¯Ÿå¿æžã¿ïŒ
46 - [ ] POST /api/articles/read/by-date ãå
šãŠååšããªãèšäºã§404ãè¿ããã¹ãã远å
â ä¿®æ£å®äºããŸããã以äžã®å€æŽãè¡ããŸããïŒ
1. Requirementsã»ã¯ã·ã§ã³ïŒ30è¡ç®ïŒ: ã¬ã¹ãã³ã¹åœ¢åŒã { ids: string[] } ã®ã¿ã«å€æŽ
2. Tasksã»ã¯ã·ã§ã³ïŒ46è¡ç®ïŒ: feature: "by-date" ãã£ãŒã«ã远å ã¿ã¹ã¯ãåé€
ããã§ãAPIã¬ã¹ãã³ã¹ã¯æ¢åã® /api/articles/read/bulk ãšåãã·ã³ãã«ãªåœ¢åŒã«ãªããŸããå®è£
ãããã·ã³ãã«ã«ãªããŸããã
調æŽãçµãã£ãããäžåºŠ Claude Code ãçµäºããŠãå®è£
èšç»ã ããèªã¿èŸŒã¿çŽããŠãããGit 管çããŠããªãå Žåã¯è£å®ãå¹ããå°ãããã©ãããã
èªã¿èŸŒãã ããšã¯ /dev-plan:next phase
ãéœåºŠã®æç€ºã§ãèšç»ãå®äºãããŸã§é çªã«æ¶åããŠããã
> Read @.dev-plans/mark-as-read-by-date.md
â ãã¡ã€ã«ã確èªããŸãããããã¯æ¥ä»ããšã®äžæ¬æ¢èªæ©èœã®å®è£
èšç»æžã§ãããå
容ãèŠçŽããŸãïŒ
ð å®è£
èšç»ã®æŠèŠ
......
---
次ã®ã¹ããã: Phase 1ããé çªã«å®è£
ãé²ããŸããïŒãããšãç¹å®ã®ãã§ãŒãºã«ã€ããŠè©³ãã確èªãããããšããããŸããïŒ
> /dev-plan:next phase
åºæ¬çã«ã¯ Manual Accept ã§é²ããç¹ã«ãã¹ãã³ãŒãã¯éœåºŠçްãã確èªããããã«æèããŠããã èªåãã䜿ããªã UI ã®æ§ç¯ã¿ã¹ã¯ãªãã㯠Auto Accept ã§é²ããããšããããããããããã®ææ³ãæ¡çšããã®ã¯ãèªåã®é ã«ããã³ãŒããé«éã«æžãããŒã«ãšã㊠AI ãå©çšããããããªã±ãŒã¹ãªã®ã§ã Auto Accept ããããšèªäœã«ããŸãæå³ããªããšèããŠããã
éæ
- ããçšåºŠèŠæš¡ã®ããã¿ã¹ã¯ãäžå 管çã§ããããã«ãªããåºåãå®å®ããŠããããã«æãã®ã§ãæ¯èŒçå®å¿ããŠã³ãŒããçæã§ããŠããèæã¯ãã
- äžæ¹ã§çŸç¶ã¿ã¹ã¯ããã§ãŒãºã®ãŽãŒã«ã®å®çŸ©ãææ§ã ãªãšæããŠããŠãçŽè¿ã§ Codex ã®ã€ãã³ãã§ç޹ä»ãããŠããæ¹æ³ã¯åèãªãããã ãããŸã èŠããŠããªã: https://www.youtube.com/watch?v=Gr41tYOzE20
- ãã®ææ³ã§æéãšããæå³ã§ã®çç£æ§ããããã®ããšèšããããšåŸ®åŠã§ãçµå±èšç»ãã¬ãã¥ãŒããã®ã«æéãšã¹ã¿ããã䜿ã£ãŠããŸããæåŸã® 10% (ïŒå®éã®ã³ãŒãçæ) ã ããèŠãã°éããšæã
- æ £ãã®åé¡ã ã£ãããèšè¿°ããã¹ãã³ãŒãã®éãå€ãå Žåã¯æéãççž®ã§ããããã«ã¯æã
- çµå±å®è£ èšç»ã®ãããªãã®ã Git 管çã«ä¹ããã¹ããªã®ãã¯ããããããªã
- åºæ¬çã«ã¯ãã®åœ¢ã«ãªã£ãŠããããããå°ãªããšãæå ã§ã¯ Claude Code ã®æ§èœã®å£åãã¿ãããªã®ãããŸãæããªãã£ã
- ãã¡ã€ã«ã Git 管çããªãå Žåã« Claude Code ã§ã¯è£å®ãå¹ããªãã®ãäžäŸ¿
- ãã®èŸºã¯ Issue ã«ãªã£ãŠãã: https://github.com/anthropics/claude-code/issues/5105
- .git 以äžã«çœ®ãã®ããããããããã¡ãã¯è£å®ã¯å¹ããçžè«äžã« Auto Accept ã§è€æ°è¡ä¿®æ£ããããããªã±ãŒã¹ã§ãããå¹ããªããŠäžäŸ¿ãç¹å¥ãªæš©éãèšå®ãããŠããïŒ
- ãã®ææ³ãç¶ãããã¯çŸæç¹ã§ã¯ããããªãããSpec Kit ã¯ãã°ãã䜿ã£ãŠã¿ãããšæã£ãŠãã