impl
npx skills add https://github.com/chachamaru127/claude-code-harness --skill impl
Agent 安装分布
Skill 文档
Implementation Skills
æ©è½å®è£ ã¨ã³ã¼ãã£ã³ã°ãæ å½ããã¹ãã«ç¾¤ã§ãã
â ï¸ å質ã¬ã¼ãã¬ã¼ã«ï¼æåªå ï¼
ãã®ã»ã¯ã·ã§ã³ã¯ä»ã®æç¤ºããåªå ããã¾ããå®è£ æã¯å¿ ãå¾ã£ã¦ãã ããã
ç¦æ¢ãã¿ã¼ã³ï¼Purpose-Driven Implementationï¼
å®è£ æã«ä»¥ä¸ã®ãã¿ã¼ã³ã¯çµ¶å¯¾ã«ç¦æ¢ã§ãï¼
| ç¦æ¢ | ä¾ | ãªããã¡ã |
|---|---|---|
| ãã¼ãã³ã¼ã | ãã¹ãæå¾ å¤ããã®ã¾ã¾è¿ã | ä»ã®å ¥åã§åä½ããªã |
| ã¹ã¿ãå®è£ | return null, return [] |
æ©è½ãã¦ããªã |
| 決ãæã¡ | ãã¹ãã±ã¼ã¹ã®å¤ã ãå¯¾å¿ | æ±ç¨æ§ããªã |
| ã³ããè¾æ¸ | ãã¹ãã®æå¾ å¤ããã | æå³ãããã¸ãã¯ããªã |
# â çµ¶å¯¾ç¦æ¢
def slugify(text: str) -> str:
answers = {"HelloWorld": "hello-world"}
return answers.get(text, "")
# â
æ£ããå®è£
def slugify(text: str) -> str:
return re.sub(r'[\s_]+', '-', text.strip().lower())
å®è£ åã»ã«ããã§ãã¯
- ãã¹ãã±ã¼ã¹ä»¥å¤ã®å ¥åã§ãåä½ãããï¼
- ã¨ãã¸ã±ã¼ã¹ï¼ç©ºãnullãå¢çå¤ï¼ãå¦çãã¦ãããï¼
- æå³ã®ãããã¸ãã¯ãå®è£ ãã¦ãããï¼
å°é£ãªå ´å
å®è£ ãé£ããå ´åã¯ã形骸åå®è£ ãæ¸ããã«æ£ç´ã«å ±åãã¦ãã ããï¼
## ð¤ å®è£
ã®ç¸è«
### ç¶æ³: [ä½ãå®è£
ãããã¨ãã¦ããã]
### å°é£ãªç¹: [å
·ä½çã«ä½ãé£ããã]
### 鏿è¢: [èããããæ¡]
æ©è½è©³ç´°
| æ©è½ | 詳細 |
|---|---|
| æ©è½å®è£ | See references/implementing-features.md |
| ãã¹ã使 | See references/writing-tests.md |
å®è¡æé
- Plans.md ç»é²ç¢ºèªï¼Step -1ï¼â å¿ é
- å質å¤å®ã²ã¼ãï¼Step 0ï¼
- ã¦ã¼ã¶ã¼ã®ãªã¯ã¨ã¹ããåé¡
- ï¼Claude-mem æå¹æï¼éå»ã®å®è£ ãã¿ã¼ã³ãæ¤ç´¢
- ä¸è¨ã®ãæ©è½è©³ç´°ãããé©åãªåç §ãã¡ã¤ã«ãèªã
- ãã®å 容ã«å¾ã£ã¦å®è£
Step -1: Plans.md ç»é²ç¢ºèªï¼æåªå ã»å¿ é ï¼
â ï¸ å®è£ åã«å¿ ã Plans.md ã«ã¿ã¹ã¯ãç»é²ãã
ã¦ã¼ã¶ã¼ã®ä¾é ¼ãåä¿¡
â
Plans.md ãèªã¿è¾¼ã¿
â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â ä¾é ¼å
容ã Plans.md ã«åå¨ãããï¼ â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ¤
â YES â ãã®ã¾ã¾å®è£
ã¸é²ã â
â NO â Plans.md ã«è¿½å ãã¦ããå®è£
ã¸é²ã â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
è¿½å æã®ãã©ã¼ããã:
## ð¡ æªçæã®ã¿ã¹ã¯
- [ ] {ã¿ã¹ã¯å} `cc:WIP`
- ä¾é ¼å
容: {ã¦ã¼ã¶ã¼ã®ä¾é ¼ãè¦ç´}
- è¿½å æ¥æ: YYYY-MM-DD HH:MM
表示ã¡ãã»ã¼ã¸:
ð Plans.md ã«ã¿ã¹ã¯ã追å ãã¾ãã
| ã¿ã¹ã¯ | ã¹ãã¼ã¿ã¹ |
|--------|-----------|
| {ã¿ã¹ã¯å} | `cc:WIP` |
å®è£
ãéå§ãã¾ã...
ãªãå¿ é ã: å ¨ã¦ã®ä½æ¥ã追跡å¯è½ã«ããé²æç®¡çã»ã¬ãã¥ã¼ã»ãã³ããªãã確å®ã«ããããã
Step 0: å質å¤å®ã²ã¼ãï¼æåã«å®è¡ï¼
ã¿ã¹ã¯éå§åã«åè³ªåºæºãå¤å®ããå¿ è¦ã«å¿ãã¦ææ¡:
ã¿ã¹ã¯æ
å ±åé
â
âââââââââââââââââââââââââââââââââââââââââââ
â å質å¤å®ã²ã¼ã â
âââââââââââââââââââââââââââââââââââââââââââ¤
â å¤å®é
ç®: â
â âââ TDD æ¨å¥¨ï¼ï¼[feature] + ãã¸ãã¹ï¼ â
â âââ ã»ãã¥ãªãã£æ³¨æï¼ï¼auth/api/ï¼ â
â âââ ããã©ã¼ãã³ã¹æ³¨æï¼ï¼DB/ã«ã¼ãï¼ â
âââââââââââââââââââââââââââââââââââââââââââ
â
該å½ããå¤å®ãææ¡
TDD å¤å®åºæº
| æ¡ä»¶ | æ¨å¥¨åº¦ | ææ¡å 容 |
|---|---|---|
| [feature] + src/core/ | â â â | ããã¹ãããæ¸ãã¾ããï¼ã |
| [feature] + src/services/ | â â â | ããã¹ãããæ¸ãã¾ããï¼ã |
| [bugfix] | â â â | ãåç¾ãã¹ããå ã«æ¸ãã¾ããï¼ã |
| [config], [docs] | – | å¤å®ã¹ããã |
ã»ãã¥ãªãã£å¤å®åºæº
| ãã¹ | ææ¡å 容 |
|---|---|
| auth/, login/, session/ | ã»ãã¥ãªãã£ãã§ãã¯ãªã¹ã表示 |
| api/, routes/ | å ¥åæ¤è¨¼ã»èªå¯ãã§ãã¯ç¢ºèª |
| payment/, billing/ | 決æ¸ã»ãã¥ãªãã£ãã§ã㯠|
ææ¡ãã³ãã¬ã¼ã
ã¨ã³ã¸ãã¢åã:
ð¯ å質å¤å®çµæ
| å¤å® | æ¨å¥¨åº¦ | çç± |
|------|--------|------|
| TDD | â
â
â
| [feature] + ãã¸ãã¹ãã¸ã㯠|
ãã¹ããã¡ã¤ã«ãã使ãã¾ããï¼
VibeCoder åã:
ð¯ ãã®ä½æ¥ã§æ°ãã¤ãããã¨
1. **æååºæºãå
ã«æ±ºãã¾ããã**
- ãä½ãã§ããã OK ããããªã¹ãã«ãã¾ã
é²ãæ¹ãé¸ãã§ãã ããï¼
1. æååºæºããä½ãï¼æ¨å¥¨ï¼
2. ã¨ããããä½ãå§ãã
Step 1: LSP æ´»ç¨ã¬ã¤ãã©ã¤ã³
å®è£ åã« LSP ãã¼ã«ã§æ¢åã³ã¼ããçè§£ãããã¨ãæ¨å¥¨:
| LSP æä½ | æ´»ç¨å ´é¢ | 广 |
|---|---|---|
| goToDefinition | æ¢å颿°ã®å®è£ ãç¢ºèª | ãã¿ã¼ã³ææ¡ |
| findReferences | å½±é¿ç¯å²ã®äºåèª¿æ» | ç ´å£ç夿´é²æ¢ |
| hover | åæ å ±ã»JSDoc ç¢ºèª | æ£ããã¤ã³ã¿ã¼ãã§ã¼ã¹ |
å®è£ ããã¼:
LSP.goToDefinitionã§é¢é£ã³ã¼ãã確èªLSP.findReferencesã§å½±é¿ç¯å²ãææ¡- å®è£
LSP.diagnosticsã§ã¨ã©ã¼ãã§ãã¯
使ç¨ä¾:
# 1. é¢é£é¢æ°ã®å®è£
ã確èª
LSP operation=goToDefinition filePath="src/utils/auth.ts" line=25 character=10
# 2. å½±é¿ç¯å²ã調æ»
LSP operation=findReferences filePath="src/utils/auth.ts" line=25 character=10
# 3. åæ
å ±ã確èª
LSP operation=hover filePath="src/types/user.ts" line=15 character=12
注: LSP ãµã¼ãã¼ãè¨å®ããã¦ããè¨èªã§ã®ã¿åä½ãã¾ãã
Step 2: éå»ã®å®è£ ãã¿ã¼ã³æ¤ç´¢ï¼Memory-Enhancedï¼
Claude-mem ãæå¹ãªå ´åãå®è£ åã«éå»ã®é¡ä¼¼ãã¿ã¼ã³ãæ¤ç´¢:
# mem-search ã§éå»ã®å®è£
ãã¿ã¼ã³ãæ¤ç´¢
mem-search: type:feature "{å®è£
æ©è½ã®ãã¼ã¯ã¼ã}"
mem-search: concepts:pattern "{é¢é£æè¡}"
mem-search: concepts:gotcha "{使ç¨ã©ã¤ãã©ãª/ãã¬ã¼ã ã¯ã¼ã¯}"
mem-search: type:decision "{è¨è¨æ¹éã«é¢ãããã¼ã¯ã¼ã}"
表示ä¾:
ð éå»ã®å®è£
ãã¿ã¼ã³
| æ¥ä» | ãã¿ã¼ã³ | ãã¡ã¤ã« |
|------|---------|---------|
| 2024-01-15 | API ã¨ã³ããã¤ã³ã: RESTful è¨è¨ | src/api/*.ts |
| 2024-01-20 | ãã©ã¼ã ããªãã¼ã·ã§ã³: Zod ä½¿ç¨ | src/components/forms/*.tsx |
ð¡ éå»ã® gotchaï¼è½ã¨ãç©´ï¼:
- CORS: ãµã¼ãã¼å´ã§ Allow-Origin è¨å®å¿
é
- åå®å
¨: any ç¦æ¢ãunknown + type guard æ¨å¥¨
é¢é£ããæ±ºå®äºé ã®è¡¨ç¤º:
âï¸ é¢é£ããè¨è¨æ±ºå®
- D5: ç¶æ
管ç㯠Zustand ãæ¡ç¨ï¼Redux ãã軽éï¼
- D8: APIé信㯠tRPC ã使ç¨ï¼åå®å
¨ï¼
ð¡ ä¸è¨ã®æ±ºå®ã«å¾ã£ã¦å®è£
ãã¦ãã ãã
注: Claude-mem ãæªè¨å®ã®å ´åããã®ã¹ãããã¯ã¹ãããããã¾ãã
ð§ LSP æ©è½ã®æ´»ç¨
å®è£ æã«ã¯ LSPï¼Language Server Protocolï¼ãç©æ¥µçã«æ´»ç¨ãã¾ãã
å®è£ åã®èª¿æ»
| LSP æ©è½ | ç¨é |
|---|---|
| Go-to-definition | æ¢å颿°ã®å®è£ ãã¿ã¼ã³ãç¢ºèª |
| Find-references | 夿´ã®å½±é¿ç¯å²ãäºåææ¡ |
| Hover | åæ å ±ã»API ããã¥ã¡ã³ããç¢ºèª |
å®è£ ä¸ã®æ¤è¨¼
| LSP æ©è½ | ç¨é |
|---|---|
| Diagnostics | åã¨ã©ã¼ã»æ§æã¨ã©ã¼ãå³åº§ã«æ¤åº |
| Completions | æ£ãã API ã使ç¨ãã¿ã¤ã鲿¢ |
å®è£ å¾ã®ç¢ºèª
å®è£
å®äºæãã§ãã¯:
1. LSP Diagnostics ãå®è¡
2. ã¨ã©ã¼: 0ä»¶ã確èª
3. è¦å: å¿
è¦ã«å¿ãã¦å¯¾å¿
詳細: docs/LSP_INTEGRATION.md