Claude Codeã«é·æèšæ¶ãæããã4å±€ã¢ãŒããã¯ã㣠âãæ¯åãŒããã説æããããã話
Claude Codeã¯ã»ãã·ã§ã³ãè·šããšå¿ããŸããæ°ããã»ãã·ã§ã³ãéããã³ã«ããããžã§ã¯ãã®èæ¯ã»éå»ã«æ±ºããããšã»èªåã®å¥œã¿ã説æãçŽãããããæ°ã¶æç¶ããçµæããèšæ¶ã1ã€ã®ã¡ã¢ã«å šéšæžããã®ã§ã¯ãªãã鮮床ãšèªã¿æã§4å±€ã«åããèšèšã«èœã¡çããŸããã
ãã®èšäºã§ã¯ããã®4å±€ã¢ãŒããã¯ãã£ã®èšèšã»å®è£ ã»éçšããŠèžãã èœãšãç©ŽãæžããŸããæåŸã«ã仿¥30åã§ç䌌ã§ããæå°æ§æãã眮ããŠããã®ã§ãå šéšèªãŸãªããŠãããã ãæã¡åž°ã£ãŠããããã°ååã§ãã
å°ãããšã®æ£äœïŒèšæ¶ã«ã¯çš®é¡ããã
ãClaude Codeã«èšæ¶ãæããããããšäžå£ã«èšã£ãŠããäžèº«ã¯æ§è³ªã®éã4çš®é¡ãæ··ãã£ãŠããŸãã
- å®éã«äœãèµ·ãããã®çãã°ïŒæ¹å€ãããŠã¯å°ããéã¯å€ãïŒ
- çŽè¿æ°æ¥ã®äœæ¥æèïŒããè ããæ¬¡ã®ã»ãã·ã§ã³ã«åŒãç¶ãããïŒ
- 確å®ããäºå®ã»å¥œã¿ã»æ¹éïŒè ããªããæ¯ã»ãã·ã§ã³èªãŸãããïŒ
- 人éã®èªåãèªã¿è¿ãæŽçæžã¿ç¥èïŒLLMçšã®åœ¢åŒã§ã¯èªã¿ã«ããïŒ
ããã1ãã¡ã€ã«ã«æ··ãããšãçãã°ã奜ã¿ãåãããããå€ãäœæ¥ã¡ã¢ãä»ã®å€æãæ±æããŸããããã§å±€ãåããå±€ããšã«ãæžããŠããäž»äœãã1ã€ã«åºå®ããŸããã
èšèšïŒ4å±€ãšäžæ¹åãããŒ
ïŒâ»noteã§ã¯äžã®è¡šãnoteã®è¡šãããã¯ã§äœãçŽããŠãã ãããMarkdownã®è¡šã¯ãã®ãŸãŸã ãšè¡šç€ºãããŸããïŒ
ã4å±€ã®æŽçã
- å±€1ïŒæºæ³ãã° â å®äœã¯
~/knowledge-base/raw/conversations/ãå šã»ãã·ã§ã³ã®çãã°ã§äžå€ã»è¿œèšå°çšãæžãæã¯ Stop hookã®ã¹ã¯ãªããã®ã¿ - å±€2ïŒæ®çºãããã¡ â å®äœã¯
~/.remember/ãçŽè¿äœæ¥ã®èšæ¶ãSessionStartã§æèã«ããŒããæžãæã¯å ¬åŒ remember ãã©ã°ã€ã³ã®ã¿ - å±€3ïŒç¢ºå®äºå® â å®äœã¯
~/.claude/projects/<dir>/memory/ã確å®ãããããã£ãŒã«ã»æ¹éã»é²è¡äžæ¡ä»¶ãæžãæã¯Claudeãæå³çã«æžã - å±€4ïŒäººéåãWiki â å®äœã¯ Obsidian VaultãèªåãèªãæŽçæžã¿ç¥èãæžãæã¯Claudeãingestçµç±ã§æžã
æµãã¯äžæ¹åã§ãã
å³1ïŒ4å±€ã¢ãŒããã¯ãã£ã®äžæ¹åãããŒå³ â ããã«ç»åãæ¿å ¥ãZennã§ã¬ã³ããªã³ã°ãããmermaidå³ãã¹ã¯ã·ã§ããã mermaid.live ã§PNGæžãåºã
ååã¯1ã€ã ããäžæµã¯äžæµãäžæžãããªãã æš©åšã¯åžžã«å±€(1)ã§ã(2)(3)(4)ã¯ããããã®æŽŸçã§ããé£ãéããèµ·ããã(1)ã«ç §ãããŠçŽããŸãã
å®è£
å±€(1)ïŒStop hookã§äŒè©±ãã°ãMarkdownåãã
Claude Codeã¯ã»ãã·ã§ã³ã®å
šæã ~/.claude/projects/ é
äžã«JSONLã§æ®ããŠããŸãããããStop hookïŒã»ãã·ã§ã³çµäºæã«çºç«ããhookïŒã§Markdownã«å€æãã远èšå°çšãã£ã¬ã¯ããªã«èœãšããŸãã
settings.jsonïŒæç²ïŒïŒ
{
"hooks": {
"Stop": [
{
"matcher": "",
"hooks": [
{ "type": "command",
"command": "python3 ~/knowledge-base/extract_conversations.py" }
]
}
]
}
}
倿ã¹ã¯ãªããã®éªšåïŒextract_conversations.py ã®èŠç¹ã ãæç²ïŒïŒ
#!/usr/bin/env python3
"""Claude CodeäŒè©±ãã°ãknowledge baseçšã®Markdownã«å€æãã"""
import json
from pathlib import Path
PROJECTS_DIR = Path.home() / ".claude" / "projects"
RAW_DIR = Path.home() / "knowledge-base" / "raw" / "conversations"
def parse_session(jsonl_path):
messages = []
with open(jsonl_path, encoding="utf-8") as f:
for line in f:
obj = json.loads(line)
if obj.get("type") not in ("user", "assistant"):
continue
# user/assistantã®ããã¹ãã ãæœåºïŒtool_resultã¯æšãŠãïŒ
...
return messages
ãã€ã³ãã¯2ã€ãtool_resultïŒããŒã«å®è¡çµæïŒã¯æšãŠãããšïŒéãççºããå²ã«åŸããèªãŸãªãïŒããããŠåºåãã¡ã€ã«åã <ãããžã§ã¯ãå>_<ã»ãã·ã§ã³ID>.md ã«ããŠãåŸããgrepã§ããã®äœæ¥ãã€ãã£ãã£ãããåŒããããã«ããããšã§ãã
å±€(2)(3)ïŒæ¬¡ã®ã»ãã·ã§ã³ã«èªåã§æèãæž¡ã
å±€(2)ã¯å
¬åŒã® remember ãã©ã°ã€ã³ã«ä»»ããŠããŸããçŽè¿ã®äœæ¥ã now.md ã«å
¥ããå€éã®consolidateã§ recent.md â archive.md ãžçæããã€ã€éè€æé€ãããSessionStartã§èªåçã«æèãžããŒããããŸãã
â ïž å±€(2)ã®ãã¡ã€ã«ã¯æç·šéçŠæ¢ã§ããæã§è§Šããšconsolidateãå£ããŸãã
å±€(3)ã¯ã確å®ããäºå®ã ããã眮ãå Žæã§ããMEMORY.md ã玢åŒã«ããŠã1ãããã¯1ãã¡ã€ã«ã§äºå®ãæžããããã®ãããžã§ã¯ãã®DBã¯Tursoããå±éºãªæäœã¯å®è¡åã«ç¢ºèªãåããã®ãããªãè
ããªãæ
å ±ã ããããã«å
¥ããŸããäœæ¥ãã°ãæ··ããªãã®ãã³ãã§ãã
å±€(4)ïŒäººéçšã®hot.mdãAPIã³ã¹ããŒãã§èªåæŽæ°
Obsidian VaultåŽã® hot.md ã«ã¯ãçŽè¿10ã»ãã·ã§ã³ã®è¡šããèªåã§å
¥ããŸããä»çµã¿ã¯åçŽã§ãå±€(1)ã®ãã¡ã€ã«åãšæ¥æè¡ãæ£èŠè¡šçŸã§ããŒã¹ããããŒã«ãŒã§å²ã£ãé åã«è¡šã泚å
¥ããã ããLLMãåŒã°ãªãã®ã§ã³ã¹ãã¯ãŒãã§ãã
hot.mdïŒæ³šå ¥é åã®ã€ã¡ãŒãžïŒïŒ
| æ¥æ | ãããžã§ã¯ã | æåã®æç€º |
|---|---|---|
| 2026-06-10 09:12 | my-app | ã¬ã¹ãã³ã·ã厩ããçŽã㊠|
ð¡ ããŒã«ãŒã§ãèªåé åããæç€ºããã®ã¯å°å³ã«éèŠã§ããããããªããšäººéïŒèªåïŒããã£ããæç·šéããŠã次åã®æ³šå ¥ãå£ããŸãã
éçšããŠèžãã èœãšã穎
èœãšã穎1ïŒmacOSã®TCCã§launchdãžã§ããé»ã£ãŠæ»ã¬
ãããæå€§ã®ãããã§ãããå€éã®èªåãžã§ããlaunchdã§åãããšããã~/Documents é
äžã®Vaultãžã®æžã蟌ã¿ã ããéãã«å€±æããšã©ãŒãåºãŸããã
åãåãããšãlaunchdé
äžã§ã bash ã®æžã蟌ã¿ã¯éãã®ã«ãclaude ãã€ããªã»gitã»python ã ãã匟ããããåå ã¯macOSã®TCCïŒãã©ã€ãã·ãŒä¿è·ïŒã§ã~/Documents ~/Desktop ~/Downloads ã¯ãã€ããªåäœã®Full Disk Accessããªããšæžããªãé åã§ããã
察çã¯FDAãä»äžããŠåããããæžã蟌ã¿å
ãä¿è·é åã®å€ã«åºãæ¹ãå
ç¢ã§ãïŒãã€ããªãæŽæ°ãããŠããã¹ãå€ãã£ãŠãå¹ãïŒãVaultã®å®äœã ~/Documents ã®å€ãžç§»èšããå
ã®å Žæã«ã¯symlinkã匵ããŸããã
èœãšã穎2ïŒãrecentã2ã€ããããçµ±åããããªã
å±€(2)ã® recent.mdïŒLLMçšïŒãšå±€(4)ã® hot.mdïŒäººéçšïŒã¯å
容ã被ããŸããäžèŠåé·ã§çµ±åããããªããŸãããèªã¿æãéãã ãã§äž¡æ¹ãšãå±€(1)ç±æ¥ãã©ã¡ãããæ£ã«ããŠä»æ¹ãåŸããããšããã©ãŒãããèŠä»¶ãè¡çªããŠäž¡æ¹äœ¿ãã«ãããªããŸããåé·ãªãŸãŸæŸçœ®ãæ£è§£ã§ããã
èœãšã穎3ïŒå£ããããšã«æ°ã¥ããªã
èªåãã€ãã©ã€ã³ã¯éãã«æ¢ãŸããŸããæ©æèŠåã®ã·ã°ãã«ã決ããŠãããšæŸããŸãã
now.mdã«åäžèŠçŽã3å以äžäžŠã¶ â consolidateé å»¶ã®å å- æºæ³ãã°ã®çŽ¢åŒã24æé以äžå€ã â 倿hookãåã£ãŠããªãçã
hot.mdã®ããŒã«ãŒæ¶å€± â è¡šã®æ³šå ¥å€±æ
ãã¡ã§ã¯ããã1æ¬ã®ãã«ã¹ãã§ãã¯ã¹ã¯ãªããã«ãŸãšããå šå±€ã®æ»æŽ»ã1ã³ãã³ãã§ç¢ºèªã§ããããã«ããŠããŸãã
仿¥30åã§ç䌌ã§ããæå°æ§æ
4å±€å šéšã¯ãããŸãããå±€(1)ã ãã§å¹æããããŸãã
~/knowledge-base/raw/conversations/ãäœã~/.claude/projects/ã®JSONLããuser/assistantã®ããã¹ãã ãæããŠMarkdownä¿åããã¹ã¯ãªãããæžãïŒäžã®éªšåã§ååãClaude Codeèªèº«ã«æžãããã®ãéãïŒsettings.jsonã®Stop hookã«ç»é²ãã
ããã ãã§ãå
šã»ãã·ã§ã³ãgrepå¯èœãªããã¹ããã«ãªããŸãããå
é±ã©ãçŽããã£ããã grep -r "ã¬ã¹ãã³ã·ã" ~/knowledge-base/raw/ ã§åŒããã®ã¯ãæ³å以äžã«å¹ããŸããå±€(2)ã(4)ã¯ããã®çãã°ãæºãŸã£ãŠäžäŸ¿ãæããŠããè¶³ãã°éã«åããŸãã
ãŸãšã
- èšæ¶ã¯éã§ã¯ãªã鮮床ãšèªã¿æã§å±€ãåãã
- å±€ããšã«æžãæã1ã€ã«åºå®ããäžæµã¯äžæµãäžæžãããªã
- launchd Ã
~/Documentsã¯TCCã§é»ã£ãŠæ»ã¬ãæžã蟌ã¿å ãä¿è·é åã®å€ãž - ãŸãã¯Stop hook 1æ¬ã®ãçãã°å±€ããã
ãã®ç°å¢ã«ã¯ä»ã«ããClaudeãèªåã§ã¹ãã«ãæžããŠæé·ããauto-skillséçšããæ¯æGitHubãèªåå·¡åããŠæçšOSSãæŸããã€ãã©ã€ã³ãä¹ã£ãŠããŸããç¶ç·šã§æžãäºå®ãªã®ã§ãèå³ãããã°ãã©ããŒããŠãããããšå¬ããã§ãã
LilyïŒ@bokuwalilyïŒâ å人éçºè ãClaude Code ã§èªåååºç€ãçµã¿ãªãããiOSã¢ããªãWebãµãŒãã¹ãéç£ããŠããŸã
- äœã£ãã¢ããªã¯ ããŒããã©ãªãª ã«ãŸãšããŠããŸãð±
- æ°çã»éçºã®è£åŽã¯ X @bokuwalily ã§çºä¿¡ããŠããŸãð
- OSS: github.com/bokuwalily ð
- ãã®ä»çµã¿ã§ãäœæ¥ããããªããç°å¢ããåããŠæ120äžã«æ»ãã話㯠noteã«ç¡æã§ æžããŠããŸã
çããã® â€ïž ãã·ã§ã¢ãå±ã¿ã«ãªããŸãïŒ