
ãã¶ã€ããŒãäžåšã®çµç¹ã§ããããŒãã¶ã€ã³ãçæããä»çµã¿
banner-design-harness ãšããä»çµã¿ãäœããŸããã
Notion AI ã§èŠä»¶å®çŸ©ããã ãã誰ã§ãäœããŠã厩ãããå šéšæ®ããå°åž³ã«1è¡ã§ãããšããã®10ç§åŸã«ãããŒãçæãããSlack ã«æçš¿ãããèšé²ãåãè¡ã«æ»ãä»çµã¿ã§ãã
Claude Code / GitHub / Figma ãªã©ã®ããŒã«ãäœãè§Šããã«ã¯ãªãšã€ãã£ããçæã§ãããã¶ã€ã³ããŒãã¹ã§ãã


banner-design-harness/
âââ CLAUDE.md AI ã®å
¥å£ãèªã¿é ãšãå®ãã¹ã15ã®ã«ãŒã«
âââ README.md 人ã®å
¥å£ãäœãåããŠäœãåããªãã
âââ config.json æ¥ç¶å
ïŒNotion å°åž³ã® ID ãªã©ïŒãããŒã¯ã³ã¯æžããªã
âââ requirements.txt äŸå㯠Pillow ã®ã¿
âââ slack-app-manifest.yml Slack ã¢ããªã®å®çŸ©
âââ .env / .env.example æå
ã®ç§å¯ãèªã¿èŸŒã¿å£ã¯ src/net.py ã® load_env() ã ã
âââ .gitignore
â
âââ context/ ãªããã®åœ¢ãªã®ãïŒäººãèªãå±€ïŒ
â âââ 01-design.md èšèšã®æ ¹æ ãå®è£
ãæžãåã«èªã
â âââ 02-open-points.md 決ãŸã£ãããšïŒæ±ºãŸã£ãŠããªãããš
â âââ 03-status.md ããŸãããã»ãã·ã§ã³ããŸããå
¥å£
â
âââ docs/
â âââ banner-harness.html èšèšå³ïŒæ§æå³ã€ã1æïŒããŸããããèŠã
â âââ reference/
â âââ figma-standard-1920.png Figma æšæºãã¶ã€ã³ã®å®æž¬å
â
âââ templates/ â
L1ïŒæ±ºå®çãã³ãã¬ãŒã
â
âââ tokens/
â âââ banner-tokens.json ãããŒåºæã®å¹Ÿäœãšã¿ã€ããè²ã¯æããªã
â âââ upstream-mirror.json äžæµã®è²ãäžžããšåããäžæ¹åã®ãã©ãŒ
â
âââ assets/ â
L3ïŒæ¿èªæžã¿ã¢ã»ãããAI ã¯éžã¶ã ã
â âââ manifest.json éžå®ã®å®çŸ©ïŒwhen / avoid / keywordsïŒ
â âââ brand/
â âââ illustrations/
â âââ backgrounds/
â âââ fonts/
â
âââ data/
â âââ campaigns/ L2 ã®å
¥åãæ¬çªã§ã¯ Notion ã®1è¡ã«ããã
â âââ wordbreak-katakana.json
â
âââ prompts/
â âââ notion-ai-hearing-skill.md â
åæ®µã®ãã¢ãªã³ã° Skill åçš¿
â âââ l2-copywriter.md L2ïŒäºåïŒã®æäœãšå¶çŽãçãå°åž³ã«èšé²
â
âââ src/
â âââ render.py L1 ã¬ã³ããªã³ã°ïŒèšé²ã®æžãåºã
â âââ inpage-checks.js ããŒãžå
ã®å®æž¬ã枬ãã ãã§å€å®ããªã
â âââ check.py 決å®çãã§ãã¯18çš®ãå€å®ãããæ¢ããªã
â âââ sync.py å°åž³âL2âå°åž³âçæâå°åž³âSlackãæ¬äœã®çµè·¯
â âââ agent.py â
L2ïŒæŠèŠã ãã®è¡ãæãäºåãäž»çµè·¯ã§ã¯ãªã
â âââ dates.py æ¥æè¡šèšãé嬿¥ããçµã¿ç«ãŠã
â âââ tokens.py è²ã®æ£ãèªãå¯äžã®å£ãäžæµãç¡ããã°æ¢ãŸã
â âââ mirror_tokens.py äžæµ â upstream-mirror.json ãæžãåºã
â âââ figma.py Figma ãã宿ž¬å€ãèªãïŒèšèšã枬ãçŽããšãã ãïŒ
â âââ net.py å€éšãšã®å£ãload_env() ã¯ãã1ã€
â âââ notion.py / slack.py å°åž³ãšæ²èŒå
â âââ doctor.py å¥ã®ãã·ã³ã§åãããå
ã«ç¢ºããã
â âââ verify_connections.py ããŒã¯ã³ãéããã確ãããïŒå€ã¯è¡šç€ºããªãïŒ
â âââ diff_render.py 2ã€ã®ç°å¢ã®å®æž¬ãžãªã¡ããªãçªãåããã
â âââ fetch_fonts.py æžäœã®å梱ãäœãçŽã
â
âââ ops/
â âââ schedule.sh æå
ã®å®æå®è¡
â âââ linux-check/ ç°å¢ã®ç
§åãLinux ãšçªãåããã
â â âââ Dockerfile
â â âââ entrypoint.sh
â â âââ run.sh
â âââ notion-relay/ â
åãå£ãNotion â GitHub ã®åœ¢ãäœãçŽã15è¡
â âââ worker.js
â âââ README.md
â
âââ .github/workflows/
â âââ render-check.yml ç
§åçš
â âââ sync.yml æ¬çª
â
âââ out/
âââ CMP-XXXX/ â banner.png / record.json / checks.jsonãã©ã³ãæ¯æãŒãã®ã¯ãªãšã€ãã£ãããçŽæ0æ¥ã§æäŸãã
æåã«çœ®ããæ¡ä»¶ã¯ãåè³ªã»æš©å©é¢ä¿ã»è²ãããŽã®åŽ©ããªã©ã®çºçãããŒããã«ããããšã§ãã
ç€Ÿå¡æ°ã®å€ãçµç¹ã§ãå šã¯ãªãšã€ãã£ããã¬ãã¥ãŒããããšã¯ããããäžå¯èœã§ãããªããªãããããŒãªã©ã¯èª°ã§ãèªåã§äœã£ãŠãªãªãŒã¹ã§ããŠããŸãæ§é ãããããã
ãããŠãæã ãé·ãæ©ã¿ãæ±ããŠããã®ããçŽæãã§ããçŽæãè¿«ã£ãŠããŠããæ¡ä»¶ã§ã¯ããã¶ã€ããŒãæç€ºãããªãŒãã¿ã€ã ãæ¡çšãããããšã¯ãããŸãããåžžã«ãçŽæã®æ±ºå®æš©ã¯"äŸé Œè åŽ"ã«ããã®ã§ãã
ã§ã¯ã©ãããããããã©ã³ãæ¯æãŒãã®ã¯ãªãšã€ãã£ãããçŽæ0æ¥ã§æäŸããããããå®çŸããä»çµã¿ãäœããããšèããŸããïŒçŸåšãææŠäžã§ãïŒã
"æšæºåãžã®å ¥ãå£"ããã£ã¬ã¯ã·ã§ã³ãã
ä»çµã¿ãèããã«ããã£ãŠäžã®äžã®ååã調ã¹ãŸãããå ±éããã®ã¯ããã³ãã¬ãŒããæ±ºå®çã«ã¬ã³ããªã³ã°ããAIãæ ãã®ã¯ãæµã蟌ããã©ã¡ãŒã¿ããšãçŽ æã®éžæãã ãããšãã忥ã§ãã

ãã£ãŠãå±€ã3ã€ã«åè§£ããŸããã
ðŒïžÂ L1 ãã³ãã¬ãŒã
â ãã¶ã€ããŒãäœãå±€ãAIã«è§Šãããªãã16:9 / ã»ãŒããšãªã¢ / ããŽäœçœ® / ã¿ã€ãã¹ã±ãŒã« / äœçœ
ðŒïžÂ L2 ãã©ã¡ãŒã¿
â AIãæ
ãå±€ããã ãåºå㯠JSON ã§ãã£ãŠãç»åã§ã¯ãªã
ðŒïžÂ L3 çŽ æ
â æ¿èªæžã¿ã®ã¢ã»ããããéžã¶ã ãã®å±€ãçæããªã
ããªãã§ãçæã§ããããšããAIã®é åã¯ãè£ãè¿ãã°ããªãã§ãçæã§ããŠããŸãããšããããšãçµç¹ã«ãšã£ãŠå€§ããªãªã¹ã¯ã§ãã
衚çŸã®èªç±åºŠã¯ãæ°äž»åã®å£ãšãªãåŽé¢ããããŸããçãåãã»ã©ã誰ã§ã䜿ããããã«ãªãããã¶ã€ããŒã®åœ¹å²ã¯ããã®"æšæºåãžã®å ¥ãå£"ããã£ã¬ã¯ã·ã§ã³ããããšã§ãã
çæç©ã決å®çã«ãããšãã°ã©ãã£ãã¯ã«ãlinterãæžãã
ã³ãŒãã® linter ãæç«ããã®ã¯ãå¯Ÿè±¡ãæ±ºå®çã ããã§ãããªãã°ãçæç©ã®åŽã決å®çã«ããŠããŸãã°ããããããèšèšã®è»žã§ãã
L1 ãæ±ºå®çã§ããéãã¬ã€ã¢ãŠãã¯åŽ©ãããããªãããããã§ãã¯ãã¹ã察象ãã厩ãããã©ããããããå€ãæ£ãããã©ãããã«å€ãããŸãã
L1 㯠HTML + CSS ã headless Chrome ã§ã¬ã³ããªã³ã°ãã圢ã«ããŸãããã¬ã³ããªã³ã°åŸã®å®æž¬ãžãªã¡ããªãåããããã§ããæåã®ã¯ã¿åºããã»ãŒããšãªã¢ãžã®äŸµå ¥ããæšå®ã§ã¯ãªã宿ž¬ã§å€å®ã§ããŸãã

çŸæç¹ã§æ±ºå®çã«å€å®ããŠããã®ã¯18çš®é¡ãã³ã³ãã©ã¹ãæ¯ãããŽåšå²ã®äœçœãæå®å€ã«ã©ãŒãæžäœãã¯ã¿åºããæå°ãã©ã³ããµã€ãºããããŠå°åž³ã®å ¥åãšãããŒäžã®æèšã®äžèŽã
ã²ãšã€åŸ¹åºããã®ã¯ãèšæž¬ãšå€å®ãæ··ããªãããšã§ããããŒãžå ã§æž¬ãã¹ã¯ãªããã¯æž¬ãã ãã§ååŠãæãããå€å®ã¯å¥ã®ã³ãŒããæã¡ãŸããæ··ãããšãå€å®åºæºãå€ããããšãã«ãã³ãã¬ãŒãæ¬äœãŸã§è§Šãããšã«ãªããããã³ãã¬ã¯æ±ºå®çããšããåæã®ã»ãã厩ããŸãã
厩ããªãã®ã¯ããã§ãã«ãŒã匟ããŠããããã§ã¯ãããŸãããL1 ãæ±ºå®çã ããã§ãããã§ãã«ãŒã¯ãå€ãæ£ãããã©ããã®æèŠãè¿ã圹ã«åŸ¹ããŠããŸãã

åçš¿ã確å®ãããå·¥çšããçæã®å€ã«çœ®ã
äœã®ããã®æœçã§ã»èª°ã«ã»äœãããŠã»ããã¯ãªãšã€ãã£ããªã®ããç§ãæãéèŠããŠããã®ã"èŠä»¶å®çŸ©"ã§ãã
ãã®å·¥çšãä»çµã¿ã®å€ã«åºããŸãããå皿㯠Notion AI ã®ãã¢ãªã³ã° Skill ã§äººã確å®ããããå°åž³ã«å ¥ã£ãæèšã¯ã以éã®å·¥çšã§äžèšäžå¥å€ããªãããå°åž³ã«è¡ãããããšïŒäººãåçš¿ã確å®ããããšããšããæå³ãæãããŸããã
äœãã®ã¯ãã¢ãªã³ã°ãåãã®ãä»çµã¿åŽãããã¯ä»ã®ä»çµã¿ãäœããšããåãããããªãã¯ãªãšã€ãã£ãããç²ŸåºŠãæ±ºããŠããã®ã¯çæãšã³ãžã³ã§ã¯ãªã"èŠä»¶å®çŸ©ã®å·¥çš"ã§ããAIã«äœãæžããããããã人ãäœã決ãããã®ã»ããå ã«ãããŸãã
åæã®æ¹è¡äœçœ®ããæ©æ¢°ã«æ±ºãããã
æ¹è¡äœçœ®ã¯ã¯ãªãšã€ãã£ãã®åè³ªãæ±ºããéèŠèŠçŽ ã®ã²ãšã€ã§ããããã¶ã€ã³æšé²ã¡ã³ïŒããŒåéãã®ãããªæ¹è¡ã¯é¿ããªããã°ãããŸããã
ããã§ãèªåæ¹è¡ãæ¢ããããã§ãèªç¶ãªåãç®ã«ã ããããã§æã£ãŠããããšæããä»çµã¿ã«ããŸãããå€å®ã¯3段éã§è¶³ããŠãã£ãã
âïž å©è©ãšå¥èªç¹
â æåã®çããã ãå©è©ã1ã€ãç¡ãã¿ã€ãã«ã¯ãæãå ŽæããŒãã«ãªã
âïž æåçš®ã®å€ããç®
â æ¥æ¬èªã§ã¯æå³ã®åãç®ã§ãããããã ã3ã€å€ããïŒæ°åã絡ãå¢ç®ã¯æ¡ããªã / äž¡åŽã2æå以äžã®ãšãã ãæ¡ã / è±åãšã«ã¿ã«ãã®å¢ç®ã¯æ¡ããªãïŒ
âïž ã«ã¿ã«ãèªã®å®çŸ©
â ããšãã° "ã³ãã¥ãã±ãŒã·ã§ã³ãã¶ã€ã³" ã¯èªãç¥ããªããšåœãŠããããäœçœ®ãæ©æ¢°çã«æ±ºãããšèªã®éäžã§å²ãã
ãããŠã人ããïœããå ¥ããäœçœ®ã ãã§æããããã«ããŸããã1ã€ã§ãå ¥ã£ãŠããããæ©æ¢°ã®å€å®ã¯äžå䜿ããŸãããäººã®ææã®ã»ããåžžã«åŒ·ããšããé åºã§ãã

çæãç»é²ãèªååãã"ãã¿ã³ãäœããªã"èšèš
çæã®æ¡ä»¶ã¯1ã€ãå°åž³ã® asset_id ã空ã§ããããšããã¯ãªãã¯ããæéãäœããªãèšèšã§ãã
ä¿®æ£ããå Žåã¯ãå 容ãèšæ£ã㊠asset_id ãæ¶ãããããåŒãéã«ãªã£ãŠæ¬¡ã®çãåºãŸãããåçæãã¿ã³ãã¯çšæããŠããŸãããasset_id ã空ãªãããŸã çæãããŠããªãè¡ã§ãã
èšé²ãåãèãæ¹ã誰ãããã€ãäœãå ¥åããŠãã©ã®ãã³ãã¬çã§äœã£ãã®ããçæç©ãèªåèšé²ããŠããããšã¯ãæåããéèŠèŠããŠãã芳ç¹ã§ãã
1,600åèŠæš¡ã®çµç¹ã§ãçæãããç»é²ããŠãã ããããšããã«ãŒã«ã¯å®ãããªãããã£ãŠãç»é²å·¥çšã®èªååã¯å¿ é ã§ãã

10ç§ã§çæãããèµ·åèšèš
åœåã®èµ·åèšèšã¯ã10åããšã«å°åž³ãèŠã«è¡ããasset_id ã空ã®è¡ãèŠã€ãããçæïŒåŸ ã¡æéæå€§10åïŒãšãããã®ãç§ã¯ãæ®ã£ãŠããå·¥çšã®ãå°åž³ãèŠã«è¡ã圹å²ããèªåã® PC ããå€ãäœæ¥ãé²ããŠããŸããã
ãã®ãšãã宿å®è¡ãæåããŠããªãã£ãããšãçºèŠããŸãããããã«æ¹åçãèããå°åž³ã«è¡ãã§ããç¬éãšãasset_id ãæ¶ãããç¬éã«ãNotion ã®ã»ãããç¥ãããŠããã圢ã«å€ããŸãããå®è£ ã¯ãåãå£ãšã㊠Cloudflare ãéã«çœ®ããŸããïŒCloudflare Workers ã«ãã£ãŠãåžžæåãããµãŒããŒãæããã«æžãïŒã
çµæãåŸ ã¡æéã¯äœæ10ç§çšã«ãåŒãéã¯2ã€ãšããç¶æ ãã®ãŸãŸã§ããã¿ã³ã¯æåŸãŸã§1ã€ãäœããŸããã§ããã


ãã¶ã€ã³ããŒãã¹ã®èšèšã¯ããã¶ã€ããŒã«ããã§ããªã
ãã®ä»çµã¿ã¯ããã¶ã€ããŒãããªããŠãäœãããããã¶ã€ã³ããŒã«ãéããã«äœããããç®çã«ãããã®ã§ããããããã¶ã€ããŒãæãåãããã®ã§ããã°ãFigmaã§äœãã°æžã話ã§ãã
ç§ã¯ãå šãŠã®ã¯ãªãšã€ãã£ããèªååã§ãããšã¯æã£ãŠããŸãããçã£ãŠããã®ã¯ããã¶ã€ããŒãäœããªããŠããæœçã®ç®çãéæå¯èœãªã¯ãªãšã€ãã£ãã®èªååã§ããããã¯ãå質ãé«ãããšãå šãŠã®ç®çã§æ±ããããã®ãããšããèªåãžã®åãã«å¯Ÿãããå®éšèšé²ã§ãã
ããã²ãšã€ãæè¿æèããŠããããšã¯ãã¬ãã¥ãŒãåæã«ããªãããšãããã¶ã€ããŒã¯ãä»è·çš®ãäœã£ããã®ãã¬ãã¥ãŒããããšããŸããããèªäœã¯çµ¶å¯Ÿã«æ£ããããã ç§ã¯ããã®åæãäžæŠçããããå€§èŠæš¡çµç¹ã§å šãŠã確èªããããšã¯äžå¯èœãã ãšãããšãã¬ãã¥ãŒã§æ ä¿ããã®ã§ã¯ãªãããªã¹ã¯ãæ§é çã«ãŒãã«ããè§£ãæ¢ãããã®ã§ãã
ãã¬ãã¥ãŒããªããã°ãªããªãããšèãããšããèªåã®ä»äºãå¢ããããšããŠããèªåãããŸãããããçµç¹ã«ãããŠã¯ãããã«èªåãäžèŠã«ã§ãããããããã·ã§ã³ã§ãã
ãã®ããã§ããã¶ã€ã³ãçæããä»çµã¿ã®ãã©ãã«å¶çŽãæãããã©ãã蚱容ããããæ±ºããèšèšã¯ããã¶ã€ããŒã«ããã§ããªãã§ãããã