
NFT
NFTã¯ãNon-Fungible Tokenãã®ç¥ã§ãçŽèš³ãããšãéä»£æ¿æ§ããŒã¯ã³ãã§ãã
ããã¯ããžã¿ã«è³ç£ã®äžçš®ã§ããããã¯ãã§ãŒã³æè¡ãå©çšããŠããŸãããããã¯ãã§ãŒã³ã¯æ å ±ã忣ããŠä¿åããæè¡ã§ããããã³ã€ã³ãªã©ã®ä»®æ³é貚ã«ã䜿ãããŠããŸãã
NFTã¯ããžã¿ã«ã¢ãŒãã鳿¥œãã²ãŒã å ã¢ã€ãã ãªã©ãããžã¿ã«ã³ã³ãã³ããäžæã«èå¥ããããã®èšŒææžã®ãããªãã®ã§ãã
äŸãã°ããã¢ãŒãã£ã¹ããããžã¿ã«ã¢ãŒããäœæãããããNFTãšããŠçºè¡ãããšããã®ã¢ãŒãäœåã¯äžçã§äžã€ã ãã®ååšãšãªããŸãããããŠããã®æææš©ã¯ãããã¯ãã§ãŒã³äžã«èšé²ããã誰ããã®NFTãææããŠããããå ¬éãããŸãã
NFTã®é åã¯ããžã¿ã«ã³ã³ãã³ãã®æææš©ã蚌æã§ããããšã«ãããŸããã€ã³ã¿ãŒãããäžã§ã¯ç»åã鳿¥œãªã©ã®ããžã¿ã«ã³ã³ãã³ãã¯ç°¡åã«ã³ããŒã§ããŠããŸããŸãããããNFTãããã°ããã®ã³ã³ãã³ããããªãªãžãã«ãã§ããããšã蚌æã§ããŸããããã«ãããã¢ãŒãã£ã¹ãã¯èªåã®äœåã®äŸ¡å€ãé«ããããã販売ããããšãå¯èœã«ãªããŸãã
ãŸããNFTã¯ããžã¿ã«ã³ã³ãã³ãã売買ããããã®æ°ããªåžå Žãçã¿åºããŠããŸããNFTåžå Žã§ã¯ã¢ãŒãã£ã¹ããçŽæ¥èªåã®äœåã販売ããããæ¶è²»è ããã®äœåãè³Œå ¥ãããããããšãã§ããŸããããã«ããã¢ãŒãã£ã¹ãã¯åµäœæŽ»åãéããŠåå ¥ãåŸãæ°ããªéãéãããšãã§ããã®ã§ãã
79ååã33ååãã®äŸ¡å€ãã€ããNFTã¢ãŒããããããšã§ã話é¡ã«ãªããŸããã
NFTã«ã¯æ³šæç¹ããããŸããNFTã®äŸ¡å€ã¯åžå Žã®é絊ã«ãã£ãŠæ±ºãŸããããäŸ¡æ Œã¯å€§ããå€åããŸãããŸããNFTãååŒããéã«ã¯ææ°æãçºçããããšããããŸãããã®ãããNFTãè³Œå ¥ããéã«ã¯ãååãªæ å ±ãåŸãŠããæ±ºå®ããããšãéèŠã§ãã
NFTã¯ããžã¿ã«ã³ã³ãã³ãã®äŸ¡å€ã確ç«ããæ°ããªåžå Žãçã¿åºãå¯èœæ§ãæã£ãŠããŸããNFTã®ååã«æ³šç®ããç¶ç¶çãªæ å ±åéãããŠãããŸãããã
ããã¯ããžã¿ã«è³ç£ã®äžçš®ã§ããããã¯ãã§ãŒã³æè¡ãå©çšããŠããŸãããããã¯ãã§ãŒã³ã¯æ å ±ã忣ããŠä¿åããæè¡ã§ããããã³ã€ã³ãªã©ã®ä»®æ³é貚ã«ã䜿ãããŠããŸãã
NFTã¯ããžã¿ã«ã¢ãŒãã鳿¥œãã²ãŒã å ã¢ã€ãã ãªã©ãããžã¿ã«ã³ã³ãã³ããäžæã«èå¥ããããã®èšŒææžã®ãããªãã®ã§ãã
äŸãã°ããã¢ãŒãã£ã¹ããããžã¿ã«ã¢ãŒããäœæãããããNFTãšããŠçºè¡ãããšããã®ã¢ãŒãäœåã¯äžçã§äžã€ã ãã®ååšãšãªããŸãããããŠããã®æææš©ã¯ãããã¯ãã§ãŒã³äžã«èšé²ããã誰ããã®NFTãææããŠããããå ¬éãããŸãã
NFTã®é åã¯ããžã¿ã«ã³ã³ãã³ãã®æææš©ã蚌æã§ããããšã«ãããŸããã€ã³ã¿ãŒãããäžã§ã¯ç»åã鳿¥œãªã©ã®ããžã¿ã«ã³ã³ãã³ãã¯ç°¡åã«ã³ããŒã§ããŠããŸããŸãããããNFTãããã°ããã®ã³ã³ãã³ããããªãªãžãã«ãã§ããããšã蚌æã§ããŸããããã«ãããã¢ãŒãã£ã¹ãã¯èªåã®äœåã®äŸ¡å€ãé«ããããã販売ããããšãå¯èœã«ãªããŸãã
ãŸããNFTã¯ããžã¿ã«ã³ã³ãã³ãã売買ããããã®æ°ããªåžå Žãçã¿åºããŠããŸããNFTåžå Žã§ã¯ã¢ãŒãã£ã¹ããçŽæ¥èªåã®äœåã販売ããããæ¶è²»è ããã®äœåãè³Œå ¥ãããããããšãã§ããŸããããã«ããã¢ãŒãã£ã¹ãã¯åµäœæŽ»åãéããŠåå ¥ãåŸãæ°ããªéãéãããšãã§ããã®ã§ãã
79ååã33ååãã®äŸ¡å€ãã€ããNFTã¢ãŒããããããšã§ã話é¡ã«ãªããŸããã
NFTã«ã¯æ³šæç¹ããããŸããNFTã®äŸ¡å€ã¯åžå Žã®é絊ã«ãã£ãŠæ±ºãŸããããäŸ¡æ Œã¯å€§ããå€åããŸãããŸããNFTãååŒããéã«ã¯ææ°æãçºçããããšããããŸãããã®ãããNFTãè³Œå ¥ããéã«ã¯ãååãªæ å ±ãåŸãŠããæ±ºå®ããããšãéèŠã§ãã
NFTã¯ããžã¿ã«ã³ã³ãã³ãã®äŸ¡å€ã確ç«ããæ°ããªåžå Žãçã¿åºãå¯èœæ§ãæã£ãŠããŸããNFTã®ååã«æ³šç®ããç¶ç¶çãªæ å ±åéãããŠãããŸãããã
ã€ãã³ã
該åœããã³ã³ãã³ããèŠã€ãããŸããã§ãã
ãã¬ãžã³

æè¡ããã°
ããã«ã¡ã¯ becosuke ã§ããã¡ã«ã«ãª NFT ãšããã®äžã§ç«ã¡äžããŠããæ°èŠãµãŒãã¹ã® Backend ãæ
åœããŠããŸãããã®èšäºã¯ã Merpay & Mercoin Tech Openness Month 2026 ãã® 20æ¥ç®ã®èšäºã§ãã ãã®èšäºã§ã¯ãç§ãã¡ã¡ã«ã«ãª NFT ããŒã ããã®4ã¶æã»ã©ã§åãçµãã§ãã AI-Native ãªéçºã«ã€ããŠæžããŸãã1ææ«ãããéçºã®ããæ¹ãã®ãã®ã倧ããäœãå€ããŠããŠããŠãæçµçã«ã¯äººã®æãã§ããã ãä»ããã«ãµãŒãã¹ãäœãç¶ããããç¶æ
ãç®æããŠããŸãããã®éçšã§åŸãåŠã³ãã䌌ãããšã«åãçµãããšããŠããæ¹ã«æã¡åž°ã£ãŠããããããšæã£ãŠããŸãã å
ã«çµè«ã ãæžããŠãããŸããç§ãã¡ããªãœãŒã¹ãéäžãããã¹ãã ãšå€æããã®ã¯ãæ£è§£ããã®ãã®ã§ã¯ãªããäœãæ£ããäœã誀ããã®ãå€æåºæºã( 泚1 )ã§ãããAI ãåããããã®æ©æ§ã¯ãããããã©ãã©ãå€ããæã«å
¥ãããã«ãªããŸããããã©å€æåºæºã ãã¯ããã®æ¡ä»¶ãªãã§ã¯ã®äŸ¡å€èгãã®ãã®ãªã®ã§ã倿³šã§ããŸãããã ããç§ãã¡ã¯ãæ©æ§ãäœãããšãããããã®äžã«èŒããå€æåºæºãæ®ãããšã«æéããããŸããããªãããèããã®ãããããŠå®éã«äœããã£ãã®ãããé ã远ã£ãŠæžããŠãããŸãã ãã®æ¡ä»¶ã®äœçœ®ä»ã ç§ãã¡ã¯ãNon-Fungible TokenïŒNFTïŒã®å£²è²·ãè¡ãããŒã±ãããã¬ã€ã¹ã§ãã ã¡ã«ã«ãª NFT ãæ¢åãµãŒãã¹ãšããŠéå¶ããŠããŸããããŸæ°ããç«ã¡äžããŠããã®ã¯ããã®æ¢åã® ã¡ã«ã«ãª NFT ã®ã³ãŒãããŒã¹ãåå°ã«ããæ°èŠãµãŒãã¹ã§ãã ãã®æ¡ä»¶ã«ã¯ã2ã€ã®é¡ããããŸãã1ã€ã¯ãæ°ãããããã¯ãã®ç«ã¡äžãã§ããããšãããã²ãšã€ã¯ãAI-Native ãªéçºã®ããæ¹ãã®ãã®ã詊ã Proof of ConceptïŒPoCïŒã®å Žã§ããããšã§ãã ã¡ã«ã«ãªã«ã¯äŒç€Ÿå
šäœãšã㊠AI-Native åãé²ããæ¹éãããã瀟å
åºç€ããã§ã«ãã£ããæŽã£ãŠããŸãããã®æ¹åæ§ã«ã¯ç§ãã¡ã匷ãå
±æããŠããã®ã§ãããä»åã¯ãããŠäžåºŠãããé¢ããŠãåæããçµã¿çŽããšã©ããªããã詊ããŠã¿ãããšã«ããŸãããçç±ã¯3ã€ãããŸãã 1ã€ç®ã¯ãAI ã« spec ããéçºãé§åãããã«ã¯ããã® spec ãè§£éããããã®äŸ¡å€åºæºãå€æã®æ ¹æ ãåæãšããŠå¿
èŠã ãšèããããã§ããããããã¡ã°ã倧ããªçç±ã§ããã瀟å
åºç€ã®äžã«ä¹ã£ããšããŠããAI ããäœãåºæºã«å€æãã¹ããããæããªããã¡ã¯èªèµ°ã§ããŸãããåºç€ã®è¯ãæªãã®åé¡ã§ã¯ãªãããã®æåã§äŸ¡å€åºæºãšéå»ã®å€æã®æ ¹æ ãæºããåå·¥çšããç§ãã¡ã«ã¯ãŸã å¿
èŠã ã£ããšããããšã§ããã ãããŸãã¯ãããæºãèŸŒãæ®µéãèžãã§ãããæçããå
ã§æ¢åã®ä»çµã¿ã«æ¥ç¶ããããšããé åºãéžã³ãŸããã 2ã€ç®ã¯ãæ¢åã®æ£è§£ã®äžã«ä¹ããšããã®æ å
ã§ã®æé©åããã§ããªãããã§ãããã®æ¡ä»¶ã¯æ°ãããããã¯ãã®ç«ã¡äžãã§ãããšåæã« AI-Native éçºã® PoC ã§ãããã®ã§ããã£ããæ¢æã®æ ãå€ããŠåæããçµã¿çŽãããšã«æå³ããããŸããAI-Native ãšããŠæ¬åœã¯äœãå¿
èŠãªã®ããæ€èšŒãããã£ãã®ã§ãå¥ã®ã¢ãããŒãã§çµã¿ç«ãŠçŽãããšã§èŠããŠãããã®ãåªå
ããŸããã瀟å
åºç€ã䜿ããããžã§ã¯ããšãå¥è§£ã詊ããããžã§ã¯ãã䞊走ããã°ãäŒç€Ÿå
šäœãšã㊠AI-Native éçºã®å¹
ãåºãããŸãã 3ã€ç®ã¯ãClaude Code æ¬äœã®é²åã«èº«è»œã«ã€ããŠããããã£ãããã§ããClaude Code ã«ã¯ plugin ã Agent Teams ã®ãããªãéçºã®çµã¿ç«ãŠæ¹ãã®ãã®ã«é¢ããæ©èœè¿œå ãæ°ã¶æåäœã§å
¥ã£ãŠããŠãAI ã«éçºããããè¶³å Žã®äœãæ¹ã次ã
ã«å€ãã£ãŠãããŸããããããæ°æ©èœãããåã蟌ããããã CLAUDE.md ãš rulesãskillãhooks ã ãã®è»œãæ§æã§è©Šãããã£ããšããäºæ
ããããŸããæšæºæ©èœã ãã§çŽ æŽã«çµãããšã§ãäœã广ãçãã§ããã®ãã®åãåãããããããªããŸãã 念ã®ããæžããŠãããšããã®ç¬èªè·¯ç·ã¯ç€Ÿå
åºç€ãšå¯Ÿç«ãããã®ã§ã¯ãããŸããããããŸã§ä»ã®æ®µéã§ã®éžæã§ãã£ãŠãèç©ãæçãããã瀟å
åºç€ã®èãæ¹ãåã蟌ãã ããéã«ãã®æ¡ä»¶ã§åŸãããæ¹ã瀟å
ã®ã»ãã®æ¡ä»¶ã§ã䜿ããããã«ãããããšããåæ¹åã®åæµãèŠéã«å
¥ããŠããŸãã ãã®èšäºã§ãã¡ã°ãäŒãããããšïŒæ©æ§ã¯å€ãããå€æåºæºã¯èªåã§ å
·äœäŸã«å
¥ãåã«ããã®èšäºã貫ãäžå¿ã®èãæ¹ããæžããŸãã AI agent ã¯ãã¢ãã«ãšããã®åšããåãå²ãæ©æ§ïŒããŒãã¹ïŒã§ã§ããŠãããšèšãããŠããŸãïŒAgent = Model + HarnessïŒããã®ã¢ãã«ãåãå²ãç°å¢ã»å¶çŽã»ãã£ãŒãããã¯ãèšèšããèŠåŸã¯ã2026幎2æã« Mitchell Hashimoto æ°ãããã°( 泚2 )ã§ "engineer the harness" ãšåä»ããŠä»¥éãããŒãã¹ãšã³ãžãã¢ãªã³ã°ãšåŒã°ããŠæ¥éã«åºãŸããŸãããprompt engineering ãã context engineeringããã㊠harness engineering ãžããšããçºå±ã®ç³»èã§ãã ããŒãã¹ã«ã¯ããã«ãã¢ãã«æäŸå
ãåºè·ããå
åŽããŒãã¹ïŒAgent SDK ãªã©ïŒãšããã®äžã«ç§ãã¡ãçµã¿ç«ãŠãå€åŽããŒãã¹ããããŸããThoughtworks ã® Birgitta Böckeler ã¯ãå€åŽããŒãã¹ã agent ã®åã«æéãå¶çŽãæž¡ã Guide / GuardrailïŒfeed-forwardïŒãšãagent ã®åºåã芳枬ããŠãã£ãŒãããã¯ãè¿ã SensorïŒfeedbackïŒã«åããããã§ãããŒãã¹ã®è°è«ã¯çŠæ¢ãã¬ãŒãã¬ãŒã«ã®åŽã«åããã¡ã§ã芳枬ã®åŽã¯ãããæèã«ãªãããããšææããŠããŸãã ããŒãã¹ã«ã¯å€§ãã3ã€ã®åœ¹å²ããããŸãã æ£è§£ã瀺ã ããš çµæã芳枬ãã ããš å±ãªãæäœãæ¢ãã ããš ãã®ã©ããããAI ã«å®å¿ããŠä»»ããããã«æ¬ ãããŸãããç§ãã¡ã¯ãã®åãã«éåæãæã¡ã3ã€ã®åœ¹å²ãçããæ¯ããæ©æ§ãã©ãã«ããã®ããèããŸããã ããã§ç§ãã¡ãç«ãŠã仮説ã¯ããã§ãããã®3ã€ãæ¯ããæ©æ§ã¯ããããããã©ãããã©ãŒã åŽãæŽããŠããããè©äŸ¡ã«ãŒããhooksãæš©éã®ããã³ããããµã³ãããã¯ã¹ãšãã£ãæ©æ§ã¯ãæ±çšéšåãšããŠå€ããæäŸãããæ¹åã«åãã£ãŠãããå®éãå±ãªãæäœãäºåã«æ¢ãã hooks ãæš©éã®ããã³ãã㯠Claude Code æ¬äœã«çµã¿èŸŒãŸããŠããŠãèªåã§å®è£
ãããã®ããæ¢è£œåãšããŠäœ¿ããã®ãžãšãåŸã
ã«ç§»ã£ãŠããŠããŸããã ãšããã°ããã®æ©æ§ã¥ããã¯ç§ãã¡ã®ããŒã ã§ã¯ãã§ããã ããããªãéšåããšããŠåãåããŠããããšèããŸããã äžæ¹ã§ã3ã€ã®åœ¹å²ãã¹ãŠã«å
±éããŠå¿
èŠã«ãªããã®ããããŸããäœãæ£è§£ãšããã©ããããåæ Œãšããäœãå±éºãšããããããããã®å€æåºæºã§ããããã¯ããã®æ¡ä»¶ãªãã§ã¯ã®äŸ¡å€èгãã®ãã®ãªã®ã§ãå€ããã¯æäŸãããŸããã芳枬ãšã³ãžã³ãåæ¢æ©æ§ã¯è²·ããŠãããã®åºæºã¯åæ¡ä»¶åºæã®å€æã®ç£ç©ã§ã倿³šã§ããªããæŽçãããšãäžæ¬æ±ã®ãã¹ãŠã«ã€ããŠãæ©æ§ã¯è²·ããïŒå€æã¯èªåããšããæ§å³ã«ãªããŸãã æ©æ§ å€æåºæº æ£è§£ã瀺ã context ãäŸçµŠããè¶³å Ž äœãæ£è§£ãšããã çµæã芳枬ãã è©äŸ¡ã«ãŒãã»eval åºç€ ã©ããããåæ Œãšããã å±éºãæ¢ãã hooksã»æš©éã»ãµã³ãããã¯ã¹ äœãå±éºãšããã åºã©ãã ãã©ãããã©ãŒã ãæäŸïŒè²·ããïŒ æ¡ä»¶åºæïŒèªåã§æã€ãããªãïŒ ãªããå€æåºæºããéããã®ã åå¥ã®æ£è§£ãäžã€ã²ãšã€éããŠãããããå€æåºæºãäžããã»ãããå¿çšãå¹ããŸãã1ã€ã®æ£è§£ã¯ç¹ã«ãããŸããããå€æåºæºã¯ãã®ç¹ãçã¿åºãèŠåã§ããã ããããŸã åºäŒã£ãŠããªãç¶æ³ã«ééããŠããåºæºããããã° AI ã¯èªãèããããšãã§ããŸãã äŸãã°ããŒã¿ã®æžãæãã«ã€ããŠãç§ãã¡ã¯ãInsertOrUpdateïŒUPSERTïŒã¯äœ¿ãããRead ã§ååšã確ãããŠãã INSERT ã UPDATE ã«åå²ããããšããæ¹éãæ®ããŠããŸããUPSERT ã¯å
šã«ã©ã ãæå®ããªããšæå³ããªããªã»ãããèµ·ããããã§ãããã®1ã€ã®æ¹éããAI ãæ°ããæžã蟌ã¿åŠçãæžããšãã®æéã«ããªããreviewer ã UPSERT ã®çŽã蟌ã¿ãäžæ¬¡ãã§ãã¯ãã芳ç¹ã«ããªããŸããAnthropic ã®èšèãåããã°( 泚3 )ãæ£è§£ã瀺ããšããã®ã¯ãã¢ãã«ã®æãŸããæåãæãçã¿ãããã³ã³ããã¹ããäžããããšãã§ã芳枬ãããšãã®åºæºãããããæŽŸçããŸããåãå€æåºæºããæ£è§£ã瀺ãåŽã«ããçµæã芳枬ããåŽã«ããäž¡æ¹ã®åºç€ã«ãªã£ãŠããããã§ãã æ©æ§ãšå€æåºæºã«ã¯ãããã²ãšã€å€§äºãªéãããããŸããã寿åœããéããšããããšã§ããAnthropic èªèº«ããããŒãã¹ã®åæ§æèŠçŽ ã¯ãããŸã®ã¢ãã«ã«ãããã§ããªãããšããåæã®ããã«çœ®ãããŠããã®ã§ããã®åæã¯ stress test ããŠãèŠããªããªã£ããå€ããŠãã察象ã ãšè¿°ã¹ãŠããŸãã( 泚4 )å®éãããäžä»£ã®ã¢ãã«ã§å¿
èŠã ã£ãæ§æèŠçŽ ããæ¬¡ã®äžä»£ã§ã¯äžèŠã«ãªã£ãããå¥ã®çµåãã«çœ®ãæãã£ããããŠããäŸãåºãŠããŠããŸãããã¡ãããtest ã®ããã«ã¢ãã«ãã©ãã ãé²åããŠãå€ããªãèŠ³æž¬ã®æ©æ§ãããã®ã§ããã¹ãŠã®æ©æ§ãäžåŸã«å€±å¹ããŠããããã§ã¯ãããŸãããããã§ããæ©æ§ã®åŽã«ã¯å
¥ãæ¿ãããããäžæ¹ã§ãç®æšãšæ£ããå€æåºæºãäžããåŽã¯å»ããã«æ®ããŸããã ããããå€æåºæºã¯ãç¹å®ã®ããŒã«ã®èšå®ãã¡ã€ã«ã«åã蟌ãã®ã§ã¯ãªããèªåãã¡ã®ãªããžããªã«ã坿¬ãªåœ¢ã§æã£ãŠããã¹ãã ãšèããŸããã ããããã¯ããã®èãæ¹ãå®éã®éçºã§ã©ã圢ã«ããã®ãã4ã€ã®å
·äœäŸãšãããã«ããå€åããããã瀟å
ã®ã»ãã®æ¡ä»¶ã§å
±æããæ¹æ³ã«ã€ããŠæžããŠãããŸããã©ã®åãçµã¿ããæ©æ§ãäœã蟌ãããšãããããã®äžæµã«ããå€æåºæºãæ®ãããšã«éç¹ã眮ãã話ãšããŠèªãã§ãããããšãã€ãªãããèŠããŠãããšæããŸãã 1. ã³ãŒãã®äžè²«æ§ïŒèšèã®æå³ãæ£ããããæ¹ã1ã€ã«åºå®ãã 1ã€ç®ã¯ãã³ãŒãã®äžè²«æ§ã§ãã æ¢åã®ã³ãŒãããŒã¹ãéäžãã AI-Native ã«åãæ¿ããããã«ãæåã«ãã£ãããšã¯å€§éã®ãªãã¡ã¯ã¿ãªã³ã°ã§ããã人éãªãããŸãæ°ã«ããªããããªã¡ãã£ãšããèšèã®ããããAI ã®å€æãçãããŠããŸãã®ã§ãæå³ã1ã€ã«æããŠããå¿
èŠããããŸããåãæŠå¿µãå Žæã«ãã£ãŠéãååã§åŒã°ããŠããããæžãæ¹ãå Žæããšã«éã£ãããããšãAI ã¯ãã®ãã³ã«åšèŸºããããã®æ¡ä»¶ã§ã¯ã©ãæžããŠãããããæšæž¬ããããšã«ãªããåºåãã¶ããŸãã ããã§ãäºæ®µéã§æããŸããã ãŸããåãèšèãè€æ°ã®æå³ãæããŠããç¶æ
ãããã®éããªãããŠãã1ã€ã®æŠå¿µã«ã¯1ã€ã®ååã1ã€ã®ååã«ã¯1ã€ã®æå³ããšãããšãããŸã§åŸ¹åºããŸãããåœå㯠AI ãã³ãŒãããŒã¹ã®å
šäœåãæŽããšãã«æåã«é Œãæããããªã®ã§ããããã¶ããŠãããšããã®å
ã®ã©ããªæç€ºãèšèšæžãæž¡ããŠã粟床ãèœã¡ãŠããŸããŸã( 泚5 )ã æ¬¡ã«ãæ£ããããæ¹ãäœéãããããã®ã«ã€ããŠãã©ãã§ããããæ±ºããŠã«ãŒã«ãšããŠæžãæ®ããŸãããäŸãã°ãšã©ãŒã®æ±ããããŒãžããŒã·ã§ã³ã®å®è£
ãenum ã®æã¡æ¹ã®ããã«ããæ£è§£ã¯è€æ°ããããæ¡ä»¶ãšããŠã¯ãã®åœ¢ã«æããããšãããã®ãã«ãŒã«åããŠãããããããŠãããšãä»åŸåããããªèª²é¡ã«ã¶ã€ãã£ããšããAI ã¯è§£æ±ºã®æ¹æ³ãè¿·ããéžã¹ãŸããåã®ç« ã§æžããã1ã€ã®æ£è§£ïŒç¹ïŒãã§ã¯ãªããå€æåºæºïŒèŠåïŒããæ®ãããšããã®ãå°ã§ããäœæ¥ã§ããã ãã®æéãæ§é ãæŽããªãããå·®ãåŒãã§äžåäœã®è¡æ°ã®ã³ãŒããæžãããŸãããæ©èœãåã£ãã®ã§ã¯ãªããéè€ãäžèŠãªæœè±¡ãæŽçããŠãåãããšãããå°ãªãã³ãŒãã§è¡šãããã«ããçµæã§ããAI ãèªãŸãããéãæžãã1ã€ã®æŠå¿µã«ãããå Žæãäžç®æã«éãŸãããšã§ãAI ã«æž¡ãæèã¯ãã€ãºã®å°ãªããã®ã«ãªããŸããã³ãŒãããŒã¹ãæŽããããšãããèªäœããAI ã®ããã®ç°å¢æŽåã®åå°ã«ãªãäœæ¥ã ã£ããšèããŠããŸãã 2. å€æãæ®ãä»çµã¿ïŒspec / design ãš RDR / ADR 2ã€ç®ã¯ãå€æãæ®ãä»çµã¿ã§ãã ç§ãã¡ã¯ã仿§æžïŒspecïŒã«ã¯ãããŸã©ããªã£ãŠããããã ããæžããŠãããªãããæ±ºããã®ãããã©ã®æ¡ãæšãŠãã®ãããšãã倿ã¯å¥ã®ãã¡ã€ã«ã«åããŠæ®ããŠããŸãã倿ã®çµç·¯ãæ®ããŠãããªããšããã°ããçµã£ãŠããããªããããããæ±ºãããã ã£ãããšäººã agent ãäœåºŠãæ©ã¿çŽãããšã«ãªããŸããäžåºŠæ©ãã ããšãæåã«ããŠããã°ã次ã®äººã AI ã¯ãã®äžããèãå§ããããŸãã èšèšïŒdesignïŒã®å€æã«ã¯ãããšããš ADRïŒArchitecture Decision RecordsïŒãšããèãæ¹ãããã瀟å
åºç€ã§ã䜿ãããŠããŸããç§ãã¡ã¯ããã仿§ã®åŽã«ãæã¡èŸŒãã§ããªããã®ä»æ§ã«ããã®ããšãã倿ã RDRïŒRequirements Decision RecordsïŒãšããå°çšã®ãã¡ã€ã«ã«æ®ãæ¹éã«ããŸãããspec æ¬äœã¯ãçŸæç¹ã®ä»æ§ãã衚ããRDR ã¯ãããã«è³ããŸã§ã®å€æã®ç©ã¿éããã衚ãããšãã圹å²åæ
ã§ãã ADR ã RDR ããã©ãæžããããã©ããªãšãã«æ°ããã¬ã³ãŒããäœããããšãã£ãäœæ³ã¯ã decision-record ãšãã skill ã«ãŸãšããŠãããŸããèšé²ãã®ãã®ã¯åæ¡ä»¶ã«åºæã®ãã®ãªã®ã§æã¡éã¹ãŸãããããèšé²ã®äœãæ¹ãã®ã»ãã¯å
±éã®æé ãšããŠé
ãããšãã§ããŸãã 倿ã®çµç·¯ãåŽäžããä»£æ¿æ¡ãæ¬æã«æ··ãããšããä»ã®ä»æ§ã¯ã©ããããèªã¿åãã«ãããªã£ãŠããŸããŸããçŸæç¹ã®èŠæ±ã ãã spec ã«æ®ãã倿ã®å±€ã RDR ã«åãåºãããšã§ãã¬ãã¥ãŒå¯Ÿè±¡ããã€ãºããå®ã£ãŠããŸãã AI åŽããèŠãŠãããã®åé¢ã«ã¯æå³ããããŸãããšãŒãžã§ã³ãã¯æ®æ®µã¯çŸç¶ïŒspec / designïŒã ããèªã¿ã仿§ãå€ãããšãã«ã ããçŽã¥ã RDR / ADR ãå¿
èŠã«å¿ããŠåŒãã«ãããŸãããããããšãAI ã«æž¡ã context ã«ã¯ãããŸã©ãããããã ããå
¥ããéå»ã®è°è«ãåŽäžæ¡ããã€ãºãšããŠæ··ãããªãç¶æ
ãä¿ãŠãŸãã Git ã origin ã«ãNotion ãèªãå Žæã« ããã¥ã¡ã³ãã®åæ¬ã¯ãã¹ãŠ Git ã«çœ®ããŠããŠãNotion ã«ã¯èªåã§åæããã³ããŒã眮ããŠãèªãå Žæãã³ã¡ã³ããã€ããå ŽæãšããŠäœ¿ã£ãŠããŸãã Notion ããã®ãŸãŸ origin ã«ãããšãããã¥ã¡ã³ããããŒã ã®åæãªãã«èª°ã§ãç·šéã§ããç¶æ
ã«ãªããèšèšãå®è£
ãšã®æŽåæ§ãç Žç¶»ããŸããéã« Git ã origin ã«ãããšãProduct ManagerïŒPdMïŒã Designer ã« GitHub ã® Pull RequestïŒPRïŒã¬ãã¥ãŒã匷ããããšã«ãªããã¬ãã¥ãŒåå ã®æ·å±
ãäžãã£ãŠããŸããããã§ãorigin 㯠Git ã«åºå®ããããã§ãNotion åŽã¯ãèªãå Žæããã³ã¡ã³ããã€ããå Žæããšå²ãåããŸãããããã§ãéãšã³ãžãã¢ã®ã¬ãã¥ã¢ãŒã¯äœ¿ãæ
£ãã Notion ã§ã¬ãã¥ãŒã«åå ã§ããŸããã倿Žå±¥æŽã¯ git log ã«æ®ããŸãã Git ãã Notion ãžã®åæã¯ç§ãã¡ã§ã¹ã¯ãªãããæžããŠããŸãããäž¡è
ãã€ãªãæ§æèªäœã¯ãããµãããã®ã§ãæè¡çã«ã¯é£ãã話ã§ã¯ãããŸããããããé£ããã£ãã®ã¯ãã©ã¡ãã origin ã«ããããšããæ¹éãæåã«æ±ºããŠãéçšã®ãªãã§ã¶ããã«å®ãããšã®ã»ãã§ããã ã¬ãã¥ãŒã skill ã«èç©ãã ãããŠãéãŸã£ãã³ã¡ã³ãã¯è·çš®ããšã®ã¬ãã¥ãŒçš skill ã«åæ ããŠãããŸãããããã¯ãã®èгç¹ããã¶ã€ã³ã®èгç¹ããäžåºŠããã£ãææã«ãã£ãŠã次ãã㯠AI ã«ããäžæ¬¡ãã§ãã¯ãã§ããããã«ãªããŸãã ã³ã¡ã³ããéãããšããã«ã¯ã1ã€å®è£
äžã®èœãšã穎ããããŸãããNotion ã®ã³ã¡ã³ãã¯ã解決æžã¿ïŒresolvedïŒã«ãããšã³ã¡ã³ã API ããã¯ååŸã§ããªããªããŸããã¬ãã¥ãŒã®ã³ã¡ã³ãã¯ææãåæ ãããã°è§£æ±ºæžã¿ã«ããŠãããã®ãªã®ã§ãã³ã¡ã³ã API ã ããèŠãŠãããšããã¡ã°ãåŠã³ã«ãªããå¯Ÿå¿æžã¿ã®ææãããã£ããæãèœã¡ãŠããŸããããã§ç§ãã¡ã¯ãã³ã¡ã³ããéãããšãã¯ã³ã¡ã³ã API ã§ã¯ãªãå±¥æŽ API ã®ã»ãããååŸããããã«ããŠããŸãã äŸãã°ãããã¯ãã®ã¬ãã¥ãŒçš skill ã¯ããã€ãçç¢ºãªææããããã¡ã³ããŒã®ã³ã¡ã³ãããè²ãŠãŠããŸããä»ã®æ¡ä»¶ããã¯ãªããªãã¬ãã¥ãŒããé¡ããã¥ããç«å Žã®æ¹ã§ãããã®èгç¹ã AI ããã€ã§ãäžæ¬¡ãã§ãã¯ãšããŠè¿ããŠãããããã«ãªãã®ã§ã䟡å€ã倧ãããšæããŠããŸããã¬ãã¥ãŒããã®å Žéãã§æ¶ããã« AI ã®äžãžç©ã¿äžãã£ãŠããã®ããå€æåºæºãæ®ãããšã®1ã€ã®åœ¢ã§ãã spec â design â plan â issue ã®ãã€ãã©ã€ã³ ãããŸã§æžããŠãã仿§æžãèšèšæžãããã«ã¬ãã¥ãŒã® skill ã¯ãã€ãªããŠé£ç¶çã«åããããšãã§ããŸããäžã€ã²ãšã€ãæã§é²ããŠãååæ©èœããŸãããã€ãªããŠãããšã仿§æžã®å€æŽãããªã¬ãŒãšãªã£ãŠå®è£
ãŸã§èªèµ°ãããããšãã§ããŸãã ç§ãã¡ã¯3ã€ã®ããã¥ã¡ã³ãã䜿ãåããŠããŸãã ããã¥ã¡ã³ã åœ¹å² å¯Ÿå¿ãã skill spec 仿§æž spec-review design èšèšæž design plan æé æž plan ããããã«å°çšã® skill ããã£ãŠãæ°ãã仿§æžãå
¥ã£ãŠãããšããŸã spec-review skill ããã®å
容ãã¬ãã¥ãŒããŸããè¯ãããã ãšå€æãããããæ¬¡ã« design skill ã§èšèšæžãã€ããããããã plan skill ã§å®è£
èšç»ãç«ãŠãŸããplan skill ã¯ãããšããšãã plan ã¢ãŒããå°ãæ¡åŒµãããã®ã§ãç«ãŠãèšç»ããã¡ã€ã«ãšããŠãªããžããªã®äžã«æ®ãããã®æé ã®äžã€ã²ãšã€ã«é²æã®ãã§ãã¯ãã€ãããã«ãªã£ãŠããŸãããªããžããªã«ãã¡ã€ã«ãšããŠæ®ããŠããããšã§ãsession ããŸããã§ããå¥ã®ã¡ã³ããŒãèŠãŠãããã®èšç»ãšé²æããã®ãŸãŸèªããç¶æ
ã«ãªããŸãã æåŸã® issue skill ã ãã¯å°ãæ¯è²ãéã£ãŠããŠãããã¥ã¡ã³ããšãããããã§ãããã£ãèšç»ãå®è£
åŠçãžæž¡ãããã®åãæž¡ã圹ã§ããissue skill ã§ GitHub issue ãçšæããããã« plan ãã¡ã€ã«ãžã®åç
§ãå
¥ããŠãããšãGitHub Actions ããããæŸã£ãŠå®è£
ãé²ããçµãããš PR ãåºããŠãããŸããã€ãŸãã仿§æžã®å€æŽãããªã¬ãŒãšãªã£ãŠããããŸã§äžæ°é貫ã§é²ãããããšããããã§ãã ãã®ãã€ãã©ã€ã³ã®åå°ã«ãªã£ãŠããã®ã¯ãããããã® skill ã®ãªãã«æžãçããŠããå€æåºæºã§ããspec-review ãèŠãã¹ã芳ç¹ããdesign ã plan ã®çµã¿ç«ãŠæ¹ãããã¹ãŠç§ãã¡ãå°ããã€èšèã«ããŠãããã®ã§ãããã€ãã©ã€ã³ã®çµã¿ç«ãŠèªäœã¯ Claude Code ã®æšæºæ©èœãš GitHub Actions ã®çµã¿åãããªã®ã§ãç®æ°ããã¯ãããŸãããæ°ããã®ã¯ãæ©æ§ã®åŽã§ã¯ãªãããã®äžã«ç©ã¿äžããåºæºã®ã»ãã§ãã 3. æ€èšŒã«ãŒãïŒæšè«ã§ã¯ãªããæ±ºå®è«ãçšæãã 3ã€ç®ã¯ããã¹ãã®è©±ã§ããAI ã«éçºãä»»ãããšãããã¡ãããšåããŠããããšãã©ã確ãããããã¯ãåç« ã§æããäžæ¬æ±ã®ãã¡èŠ³æž¬ã®åœ¹å²ã«ããããŸãã ãã©ãŠã¶ãåãããŠæäœãã²ãšéã確ããããéãã® End-to-EndïŒE2EïŒãã¹ããæãæµ®ãã¹ãŠãã ãããAI ã«ãããããããæ¹æ³ãšããŠãClaude ã®ããã«ããã®å Žã§ãã©ãŠã¶ãçŽæ¥æäœããŠãããããæ¹ããããŸãããã ãããã®æ¹æ³ã¯æ¯å AI ã®æšè«ãå
¥ãã®ã§ãçµæããããŸãããå®è¡ã®ãã³ã«ããŒã¯ã³ãæ¶è²»ããŸãããã¹ãã®æ¬æ¥ã®ç®çã¯ãåãå
¥åãªãåãçµæã«ãªãããšãã確ãããããšãªã®ã«ã確ãããåŽããããŠããŸããšãæ¬æ«è»¢åã§ãã ããã§ç§ãã¡ã¯ãAI ãæŽ»çšããã®ã¯ãã¹ãã®å®çŸ©ãäœããšãããŸã§ã«ããŠãå®è¡ã®ã»ãã¯æšè«ãæãŸãªã確å®çãªããæ¹ã«ããŸãããAI ã«æ°ããæ©èœã®æäœæé ãšæåŸ
ãããçµæãæžããŠããããæžãçµãã£ããããã®åŸã®å®è¡ã«ãŒããã㯠AI ãæãããšããåãæ¹ã§ãããããããšããããå¯èœæ§ã®ããæšè«ããæ±ºå®è«ã«å€ãã£ãŠãåãå
¥åãªãå¿
ãåãçµæã«ãªããŸããContinuous IntegrationïŒCIïŒã§ãæå
ã§ãåãã¹ã¯ãªãããåãããã«èµ°ãã®ã§ãå·®åãåºãã°ããã㯠AI ã®ãããã§ã¯ãªãããããã¯ãã«æ¬åœã®å€åããã£ããµã€ã³ã ãšãã¯ã£ããåãåããããŸãã å®éã«ãã¡ã«ã«ãª NFT ã®äž»èŠãªãããŒã Playwright ã§çµã¿ãŸãããåºåã賌å
¥ããªãã¡ãŒãæ¿è«Ÿãè²·åãé
éãšãã£ãäžé£ã®æµããã売ãæãšè²·ãæãåãæ¿ããªããéãã§å®è¡ããŸããããããregression test ã宿œããŠãã®äžèšã§ AI ãå
šã·ããªãªãèµ°ãããç¶æ
ã«ããŠããã®ã§ãã³ãã³ããèŠããå¿
èŠã¯ãããŸããã 確ããæ¹ãã®ãã®ããæ£è§£ããšããŠåºå®ãããšããã®ããå€æåºæºãæ®ãããšã®1ã€ã®åœ¢ã§ããAI ã«ä»»ããç¯å²ãåºããã»ã©ã人ã®ä»£ããã«çµæã芳枬ããæ©æ§ã¯å€§äºã«ãªããŸãããã®ãšãã«ã芳枬ããåŽãŸã§ AI ã«ä»»ããã£ãŠããŸããšããããå€å®ã§ãããå®è£
ã確ããããšããäžå®å®ãªæ§é ã«ãªã£ãŠããŸããŸãã確å®çã«åãéšåã芳枬ã®åŽã«æ®ããããšã§ãAI ã«ä»»ããç¯å²ãå®å¿ããŠåºããããšãã§ããããã«ãªããŸããã 4. å人æ
å ±ïŒPIIïŒã®å€å±€é²åŸ¡ 4ã€ç®ã¯ãã»ãã¥ãªãã£ããšãã«å人æ
å ±ã®æ±ãã§ãã瀟å
ã§ã泚ç®ãããŠããããŒãã§ãã commit ã PR ã«ãã£ããå人æ
å ±ãæ··å
¥ããããšã¯ã人ã§ã AI ã§ãèµ·ããããŸããç§ãã¡ã¯ commit ã PR ããããã« Jira ãã±ããã®äœæã AI ã«ãã£ãŠããã£ãŠããã®ã§ãAI ã«éçºãåºãä»»ããã®ã§ããã°ãå人æ
å ±ã®ä¿è·ã«ã AI ãæŽ»çšããã®ã¯èªç¶ãªæµãã ãšèããŸããã ããã§ãäžé£ã®æµãã«å¯ŸããŠå人æ
å ±ãä¿è·ããæ©æ§ããäžæ®µã®é²åŸ¡ãšããŠèŒããããšã«ããŸããã äžæ®µã«ããæå³ã¯ãã©ããäžæ®µãèœã¡ãŠãå¥ã®æ®µãã«ããŒããæ§æã«ãããã£ãããã§ããäžæ®µç®ãããæããŠãäºæ®µç®ã§æ¢ãŸãããããè¶ããŠããŸã£ããäžæ®µç®ã§åŸå§æ«ã§ãããå®å
šã«ãã¹ããªããããšãæåŸ
ããã®ã§ã¯ãªãããã¹ã¯èµ·ããåæã§è€æ°ã®ç¶²ãéããããšããã¹ã¿ã³ã¹ã§ãã ããã²ãšã€ãskill ã«ããã³ã¡ã³ããªã©ã§å人æ
å ±ãåŒçšãããšãã¯ãå
é ã®æ°æåã ãæ®ããŠããšã¯ãã¹ãã³ã°ããã«ãŒã«ã«ããŠããŸããAI ã®ã³ã¡ã³ãã¯ãPR ã®æ¬æã«æ®ã£ãããã³ãããã¡ãã»ãŒãžãå¥ããã¥ã¡ã³ãã«åŒçšãããããšãæãã¬å Žæã«æµããŠãããŸãã該åœç®æãç¹å®ã§ããçšåºŠã«é ãæ®ããŠãã以å€ãäŒããŠããã°ãAI ãããšã§ã©ããã«æžãæ®ããšãã«ããæ¬ç©ã®å人æ
å ±ãæ··å
¥ããããšã¯ãããŸããã ãã®äŸã§ã¯ãæ©æ§ïŒhooks ã CI ã®ã¹ãã£ã³ãåŸ©æ§æé ïŒãå€æåºæºïŒäœãå人æ
å ±ãšã¿ãªããïŒããã©ã¡ãããã©ãããã©ãŒã ã§ãªãç§ãã¡åŽã§çšæãããã®ã§ããããã§ããæ©æ§ãšå€æåºæºãå¥ç©ãšããŠæ±ããå€æåºæºãæ©æ§ã®äžæµã«çœ®ãããšããæ§å³ã¯å€ãããŸãããäž¡è
ãåºå¥ããŠå¥ã
ã«æ±ãããšããæ§å³èªäœã¯åŽ©ããªããšããããšãããã®äŸã¯ãããããŠæãåºãããŠãããŸããã ã©ããããå€ãã£ãã ãããŸã§ã«ç޹ä»ãã4ã€ã®åãçµã¿ã¯ãå®éã«ããŒã ã®éçºã«ã©ããªå€åããããããã®ããææšãšããŠã¯å®éçã«èŠããããã®ãšãæ¥ã
ã®éçšæèŠãšããŠæãã宿§çãªãã®ã®äž¡é¢ã§ãããã€ãããããããå€åãåºãŠããŸããã ã³ãŒãã®äžè²«æ§ãæŽããéçºã®å¹çãäžãã skill ãå
¥ããŠãã£ãçµæãããŒã å
šäœã® PR ã®æ°ãã®ãã®ãå¢ããŸããããããããã®æ¡ä»¶ã¯1ææ«ã«ãã£ããéçºããŒã ãè§£æ£ããŠããŠããã以éã¯ãšã³ãžãã¢ã2人ããããã¯ããšãã¶ã€ã³ã1人ãã€ããšããå°äººæ°ã®äœå¶ã§ããããŒã å
šäœã®æµéãå¢ããŠããããã«äººæ°ãå°ãªãã®ã§ã1人ãããã§èŠãã°äœåã«ããªã£ãŠããèšç®ã§ãã ãã㯠AI ãå°å
¥ããããèªåçã«å¢ããããšããããã¯ãAI ãåãåºããããã«ã³ãŒããå€æåºæºãå
ã«æŽããŠããçµæã ãšèããŠããŸããæŒ«ç¶ãš AI ãå°å
¥ããã ãã§ã¯ãåãçµæã«ã¯ãªããªãã£ãã¯ãã§ãã ããã²ãšã€ãPR ã®äžèº«ã«ã€ããŠãè§ŠããŠãããŸããéçºå
šäœã® PR æµéãå¢ããŠããäžæ¹ã§ãä¿®æ£ç³»ã® PR ã®å²åã¯æããããŠããŸããæ°æ©èœãæ¹åã® PR ã®äŒžã³ããä¿®æ£ç³»ã®äŒžã³ãäžåã£ãŠããããšããããšã§ãããã㯠PR ã®ä¹±é ã§ã¯ãªããå質ãäžããäžã§æµéãå¢ããŠãããšãããéåžžã«å€§ããªææã ãšæã£ãŠããŸãã ãããšã¯å¥ã«ãã¢ã©ãŒãã®èª¿æ»ã AI ã«ä»»ããããã® skillïŒç£èŠåºç€ãçŽæ¥è§Šããããã«ãããã®ïŒãæŽåããŸãããã¢ã©ãŒãã® URL ãæž¡ãã ãã§åå ã調ã¹ãŠä¿®æ£ãŸã§ãŸãšããŠãã£ãŠãããããã«ãªããŸãããæ¥ã
ã®éçšæèŠãšããŠã倧ããå€åã§ããã å
±éãšåºæãåããïŒã»ãã®æ¡ä»¶ã«æã£ãŠããããã« ãããŸã§ç©ã¿äžããŠããä»çµã¿ã¯ããã®æ¡ä»¶ã ãã§éããŠããŸãã®ã¯ãã£ãããªãã®ã§ã瀟å
ã®ã»ãã®æ¡ä»¶ã§ã䜿ããããã«ããŠãããããšèããŸããããã®ããã«ãã£ãã®ã¯ãã©ããå
±éã§ãã©ãããã®æ¡ä»¶åºæã®ãã®ãããã¯ã£ããåããŠããããšã§ãã ãã®ãå
±éãšåºæãåãããããæ¹ã¯ããã£ã1ã€ã®å°ããªå€æããå§ãŸããŸããã瀟å
å
±éã®ãã¬ãŒã ã¯ãŒã¯ã§ãã monorail ãã¢ããã°ã¬ãŒããããšãã®ããšã§ããmonorail ã®ããŒã ã¯ãã¢ããã°ã¬ãŒãã®å
±éæé ã monorail-upgrade ãšãã skill ã§æäŸããŠãããŠããŸãããã ãç§ãã¡ã®æ¡ä»¶ã«ã¯ãããã ãã§ã¯è¶³ããªãåºæã®æé ããããŸãããããã§ããã®ååã®ãããã« -local ãã€ãã monorail-upgrade-local ãšãã skill ãäœã£ãŠãåºæã®æé ããã¡ãã«çœ®ããŸããããã®å°ããªåãåãããããŸã®åœ¢ã®ååã«ãªããŸããã ç§ãã¡ã®ãããã¯ãã¯ãBackend ãš Frontend ãå¥ã
ã®ãªããžããªã«åãããŠããŸãããå
±éã§äœ¿ãã skill ã¯ã1ã€ã® plugin ã«ãŸãšããŠé
ã£ãŠããŸãããããŠãããããã®ãªããžããªã«åºæã®éšåã¯ããã® plugin ãäžæžããã -local 㪠skill ã«å
¥ããŠããŸããããããŠãããšãçæ¹ã®ãªããžããªã§ skill ãæ¹åãããšããçæ¹ã«ã暪å±éãããããªããŸãããskill ã®ååãèŠãã ãã§ãã©ããããå
±éã§ãã©ããããæ¡ä»¶åºæãããå€å¥ã§ããŸãã ãã®ããæ¹ã¯ãClaude Code ã® CLAUDE.md ãš CLAUDE.local.md ã®èãæ¹ãå¿çšãããã®ã§ããplugin ãæ¡ä»¶ããšã«äžæžãããä»çµã¿ã¯ãClaude Code ã«æ©èœãšããŠçšæãããŠããããã§ã¯ãªããFeature Request ãšã㊠GitHub ã« issue ãåºãŠããæ®µéã§ããããã§ç§ãã¡ã¯ã -local ãšããååã®ã€ãæ¹ã決ããŠããã®èŠçŽã ãã§å
±éãšåºæã®å¢çã衚ãããšã«ããŸããã人ã«ãã£ãŠã¯ãã§ã«èªç¶ã«ãã£ãŠããããšãããããŸãããããããæé»ã®ãŸãŸã«ãããåœåã«ãŒã«ãšããŠæç€ºããŠããŸãã 倧ããªä»çµã¿ãæåããèšèšããå¿
èŠã¯ãããŸããã§ãããå°ããªå€æããæ¬¡ã®äººããã®ãŸãŸäœ¿ããåœ¢ã§æ®ããŠããã°ããããç©ã¿éãªã£ãŠããã€ã§ãåºããããåå°ã«ãªããŸãã è£ïŒå人çãªææ³ ããããã®è©±ã¯ããããŸã§ã®ç« ãšã¯å°ãæ§è³ªãéããŸãããã®æ¡ä»¶ã®ç¹æ§ããå°ããã話ãšããããã¯ãç§å人ã®éçšèгã®è©±ã ãšæã£ãŠèªãã§ãããããšãã¯ãããå°ãªããšæããŸããåãããšãããããšããŠãã人ãããããšéãããæ¹ãéžãã§ããªããåé¡ãããŸãããä»åã®èšäºã«çŽã蟌ãŸããŠããã®ã¯ããã®4ã¶æã®ãªãã§èªåã®äžã«ãŸãšãŸã£ãŠããèãæ¹ãããã£ãããªã®ã§æžãæ®ããŠããããã£ãããã§ãã å°éç¥è㯠skill ã«éããagent ã¯èãã©ãããŒã«ä¿ã€ Claude Code ã«ã¯ãç¥èãæé ããŸãšããŠãã skill ãšãç¬ç«ãã context ãæã£ãŠåããã subagent ãšãã2ã€ã®ä»çµã¿ããããŸããã³ãã¥ããã£ã® best practice ãçºããŠãããšãæ©èœé åããšã«å°çšã® subagent ãäœã£ãŠãããã«å°éç¥èãæãããŠããããæ¹ãããèŠãããŸããç§ãéžãã§ããã®ã¯ãããšã¯éãã«ãŒãã§ãå°éç¥è㯠skill ã«ãŸãšããŠãagent ã¯ãããåŒã¶ããã®èãã©ãããŒã«çãã ãšããåãæ¹ã§ãã agent ãš skill ã¯å¯Ÿç«ããéžæè¢ã§ã¯ãªããšæã£ãŠããŸããagent ãäœã£ãŠãããã®ã§ãããagent ã«ã¯ããã®å Žé¢ã§ã¯ãã® skill ããæ¬¡ã«ãã® skill ãåŒã¶ããšããã«ãŒãã£ã³ã°æ
å ±ã ãæžãããšèããŠããŸããå€æåºæºãæé ããã¡ã€ã³ç¥èãšãã£ãæ¬äœã¯ããã¹ãŠ skill åŽã«æžããããããŠãããšãåãå€æåºæºãè€æ°ã® agent ã«éè€ããŠåã蟌ãŸããããšããªããªããŸãããskill ãæŽæ°ããã°ããããåŒã¶ãã¹ãŠã®çµè·¯ã«åæ ãããŸãã äŸãã° Anthropic ã¯ãé·æéåã agent harness ã®èšèšã«ã€ããŠãå®è£
ãã generator agent ãšãã¹ããã evaluator agent ãå¥ã® agent ãšããŠåé¢ããããšãæšå¥š(泚4)ããŠããŸããçæãã agent ã«èªåã®ä»äºãæ¹å€ãããããããå¥ã® agent ãè©äŸ¡åœ¹ãšããŠå³ãããã¥ãŒã³ããã»ãããããããããšããçå±ã§ããagent ãåããšããããããããã¡ã€ã³ context ããã®éé¢ãšç¬ç«ãã倿ãããã«äŒŽãæš©éã¹ã³ãŒããåç¬ã§å¿
èŠãªãšããè¯ãããã§ãããã®å Žåãå°éç¥èãåã蟌ãŸãã«ãå¿
èŠãª skill 矀ãåŒã¶èãã©ãããŒãšããŠçµã¿ãŸããagent ã®åºæäŸ¡å€ã¯éé¢ã»ç¬ç«ããå€æã»æš©éã¹ã³ãŒãã§ãã£ãŠå°éç¥èãã®ãã®ã§ã¯ãªãããšããã®ãç§ã®èŠç«ãŠã§ããå°éç¥è㯠skill åŽã«éããã»ãããåå©çšãããããç¥èã®éè€ãèµ·ãããŸããã rewind ã§ã¯ãªããæ°ãã session ã fork ãã Claude Code ã«ã¯ãéå»ã®ããåããå·»ãæ»ããŠéäžã®ç¶æ
ããåéã§ãã rewind ãšããæ©èœããããŸãã䟿å©ãªæ©èœãªã®ã§ãããç§ã¯æèçã«ããŸã䜿ããªãããã«ããŠããŸããçç±ã¯åçŽã§ãrewind 㯠context ã® rebase ã«è¿ããšããããã£ãŠããã£ãŠããæµãã®äžéšã history ããæ¶ãã圢ã«ãªãããã§ãã ããã¯å¥œã¿ã®åé¡ã§ãgit ã® rebase ãæªããšèšãããããã§ã¯ãããŸãããgit log ããããã«ãªãã¡ãªãããšãæµãããã®ãŸãŸæ®ãã¡ãªããã«ã¯ãã©ã¡ãã«ã䟡å€ããããšæããŸãããã ç§èªèº«ã¯æµããæ®ããŠããããã»ãã§ãåŸããããã®ãšãäœã詊ããŠãäœã§å€±æããããã蟿ããã»ãã«äŸ¡å€ãæããŸãã ããçŽããããšãã¯ãrewind ã®ä»£ããã«æ°ãã session ã fork ããããã«ããŠããŸããã¬ãã¥ãŒããããšããã鲿ã®åºåãããšã«åããããšããããã®éœåºŠå¥ session ãç«ãŠãŸããsession ãåããã»ãããããããã® context ãå°ããä¿ãŠãã®ã§ãçµæçã«åããå®å®ãããšæããŠããŸãã plan ãã¡ã€ã«ãš TODO.local.md ã session éã®ããã³ã«ãªã session ãå€ãã«åãéçšã«ã¯ã1ã€åæããããŸãã鲿ãå¥ session ã«æž¡ããåœ¢ã§æ®ããŠããå¿
èŠããããšããããšã§ãããããæ
ã£ãŠããã®ã plan ãã¡ã€ã«ãšãããããããã²ãšã€ã TODO.local.md ãšãããã¡ã€ã«ã§ãã plan ãã¡ã€ã«ã®ã»ãã¯ãåç« ã§æžãã spec â design â plan â issue ã®ãã€ãã©ã€ã³ã§åºãŠããããã® plan ã§ããæé ã®äžã€ã²ãšã€ã«é²æã®ãã§ãã¯ãã€ããŠããŠããã¡ã€ã«ãšããŠãªããžããªã«æ®ã£ãŠããã®ã§ãå¥ã® session ãç«ãŠãŠããæåŸã«ã©ããŸã§çµãã£ãŠãããããã®ãã¡ã€ã« 1 æã§åŒãç¶ããŸã( 泚6 )ãåãããšã git worktree ãåã£ãŠäžŠåã§åãããŠãããšãã«ãåœãŠã¯ãŸããŸããworktree A ã§é²ããŠããäœæ¥ã worktree B ããç¶ããããšãã§ããŸãããagent éã§ã¿ã¹ã¯ãåŒãæž¡ããšãããplan ãã¡ã€ã«ã®è©²åœç®æãæãã°ããäºãã®ãªãã§åã鲿ã®çè§£ãåçŸã§ããŸãã TODO.local.md ã®ã»ãã¯ãå人ã¬ãã«ã® todo ãæ±ãããã®ãã¡ã€ã«ã§ãããã±ããåããã»ã©ã§ã¯ãªãããããã¯ãã±ããåããåæ®µéã®ãã®ãäŸãã°ãããšã§æ°ãåãããçŽãããããææ¥ã®æãã¡ã§æãä»ããããšãã£ãã¬ãã«ã®å人 todo ããããã«çœ®ããŠããŸããããã管çããããã® todo skill ãçšæããŠããŠã远å ãå®äºããŒã¯ãäžèŠ§è¡šç€ºãã³ãŒãå
TODO ã®éçŽ( 泚7 )ãªã©ãã§ããŸãããã±ããã»ã©éããªãããã®å Žã®ç¬ãèšã§æ¶ããŠããŸããªããäžéå°ç¹ã®ã¿ã¹ã¯ç®¡çã«æå³ããããŸãã plan ãã¡ã€ã«ãš TODO.local.md ã®2ã€ã§ããã±ããã«äžããã»ã©ã§ã¯ãªãäœæ¥ã®é²æããsession ã worktreeãagent ããŸããã§éã¹ãããã«ãªã£ãŠããŸããããããsession ãå€ãã«åãç§ã®éçšãæ¯ããåå°ã§ãã äžå¿ã®è»žãšã®ã€ãªãã ãããŸã§æžããã®ã¯ç§ã®éçšèгãªã®ã§ãç« ã®é ã§æã£ããšãããéãããæ¹ãéžãã§ããªããåé¡ãããŸããããã ãæåã®ç« ã§æžãããæ©æ§ã¯å€ãããå€æåºæºã¯èªåã§ããšãã軞ãé ã«çœ®ããªããæ¯ãè¿ããšã1ã€æ°ä»ãããšããããŸãã skill ãš plan ãã¡ã€ã«ãš TODO.local.md ã¯ãå€æåºæºã宿ãåŽã«ãããšããããšã§ããå€æåºæºãæé ãé²æã®æèãã坿¬ãªãã¡ã€ã«ãšããŠæ®ããŠããããã§ããäžæ¹ã® agent ã rewindãsession ã®å¶åŸ¡ã¯æ©æ§ã®åŽã§ãå€æåºæºãã®ãã®ãæ±ã蟌ãŸãã察象ã§ã¯ãªãããšç§ã¯èããŠããŸãã æ©æ§ãšå€æåºæºãåããŠãå€æåºæºãæ©æ§ã®äžæµã«çœ®ãããšããæ§å³ã貫ãããšãããšãèªç¶ã«ããããéçšã«å¯ã£ãŠããã®ã§ã¯ãªãããšæããŸãã ãŸãšã AI ãåããæ©æ§ã¯ããããã©ãã©ãå€ããæã«å
¥ãããã«ãªãã®ã§ãç§ãã¡ã®ä»çµã¿åã¯ããã®äžã«èŒããå€æåºæºãæ®ãããšã«éäžããŠããŸããã äœãæ£è§£ãšããã©ããããåæ Œãšããäœãå±éºãšããã ã³ãŒãã®äžè²«æ§ãã倿ã®èšé²ãããã¹ãã®åºå®ããå人æ
å ±ã®ä¿è·ãããã¹ãŠãå€æåºæºãã䟡å€èгãšçç±ããšæ®ããŠããããšããåãèãæ¹ã§ã€ãªãã£ãŠãã 芳枬ãåæ¢ã®æ©æ§ã¯ã¢ãã«ãé²åããã«ã€ããŠå
¥ãæ¿ãã£ãããå€ãããããéšåããããäžæ¹ãå€æåºæºã¯å»ãã«ããè³ç£ãªã®ã§ãç¹å®ã®ããŒã«ã®èšå®ãã¡ã€ã«ã«åããã®ã§ã¯ãªããèªåãã¡ã®ãªããžããªã«å¯æ¬ãªåœ¢ã§æã£ãŠãã ããããããã®4ã¶æã®è©Šè¡é¯èª€ããåŸãåŠã³ã§ããã çµæãåºãã«è¶ããããšã¯ãªãã®ã§ããããŸã èª°ãæ£è§£ãåãã£ãŠããªãé åãªã®ã§ãããŸã¯çµæãã®ãã®ããããæ¹åããŠãããéçšã«éããçœ®ãæ®µéã ãšæã£ãŠããŸããåããããªããšã«åãçµãã§ããæ¹ãç䌌ããŠã¿ããæ¹ãããã°ããã²ã話ããããã§ããæåŸãŸã§èªãã§ããã ããããããšãããããŸããã èæ³š æ³š1 ããã§ãããå€æåºæºããšã¯ããã¡ã€ã³ç¥èãšéçºã«ãŒã«ã䜵ãããã®ã«è¿ããšãããŸã¯æããŠããŸãããã¡ã€ã³ç¥èã®ã»ãã«ã¯ããã®æ¥åãæãç«ãããããã®ç¥èã ãã§ãªãããã®ãã¡ã€ã³ã§äœã«éãã眮ãããšãã䟡å€èгãå«ãŸããŸãã æ³š2 Mitchell Hashimoto, "My AI Adoption Journey"ïŒ2026-02ïŒ https://mitchellh.com/writing/my-ai-adoption-journey 泚3 Anthropic, "Effective context engineering for AI agents"ïŒ2025-09ïŒ https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents 泚4 Anthropic, "Harness design for long-running application development"ïŒ2026-03, Prithvi RajasekaranïŒ https://www.anthropic.com/engineering/harness-design-long-running-apps 泚5 ããã¯äººéãééããåå ã«ãªãã®ã§ãAI ã䜿ããªããšããŠã培åºããã»ããè¯ããšæã£ãŠããŸããä»å㯠AI-Native ã®è©±ãªã®ã§ãæ¬çã§ã¯ãããŸãããã æ³š6 Justin Young, "Effective harnesses for long-running agents"ïŒ2025-11ïŒ https://www.anthropic.com/engineering/effective-harnesses-for-long-running-agents session ããŸããç¶ç¶æ§ã artifactïŒãã®å Žåã¯ããã¹ããã¡ã€ã«ïŒã§ç¢ºä¿ãããšããè¶£æšã該åœããŸãã æ³š7 ããã¯æ¡ä»¶å
ã§å
±éã®ãã®ãªã®ã§ TODO.md ã«ãŸãšããããŠããŸããIDE ãåžžã«éããŠããé ãªãããããã£ã TODO ã¯èªåçã«åéããŠããŠãããŸããããæè¿ã¯ Claude Code ã ãã§æžãã§ããŸãã®ã§ããããã£ããã®ãå¿
èŠã«ãªããŸããã
ããã«ã¡ã¯ãã¡ã«ã〠Growth Platform ããŒã ã§ãšã³ãžãã¢ãªã³ã°ãããŒãžã£ãŒãããŠãã @yo-gawa ã§ãããã®èšäºã¯ Merpay & Mercoin Tech Openness Month 2026 ã® 19 æ¥ç®ã®èšäºã§ãã ç§ã¯ 2018 幎ã«ã¡ã«ãã€ã«å
¥ç€Ÿããã¡ã«ãã€ã¯ãŒãã³ã決æžã«å¿ãããã€ã³ãéå
ã®ä»çµã¿ãªã©ãã¡ã«ãã€ã®ãã£ã³ããŒã³ãæ¯ããåºç€ã®éçºã»éçšã«æºãã£ãŠããŸããã ãæžãèµ·ãããã¡ã«ãã€ã®ãã£ã³ããŒã³ã®èå°è£ ãGrowthãæ¯ããä»çµã¿ã â å°å· è³æš¹ãMerpay Tech Fest 2021ã | ã¡ã«ã«ãªãšã³ãžãã¢ãªã³ã° çŸåšã¯ãã¡ã«ã«ãªã°ã«ãŒãå
šäœã®ã°ããŒã¹åºç€ã®ãšã³ãžãã¢ãªã³ã°ãçµ±æ¬ããŠããŸãã æ¬èšäºã§ã¯ãç§ã®èŠç¹ããã¡ã«ã«ãªã°ã«ãŒãã®ã°ããŒã¹åºç€ã®æŽå²ãšãã©ã®ããã«ããŒã ãæ¡å€§ããŠããã®ãããäŒãããŸãã Growth Platform ã®ç«ã¡äžã ã¡ã«ã«ãªã°ã«ãŒãã§ã¯ããã€ã³ããã¯ãŒãã³ãçšããããŒã±ãã£ã³ã°ïŒãã£ã³ããŒã³ãéåžžã«æŽ»çºã«è¡ãããŠããŸããæ¢åã®ã客ããŸåãã®æœçã«å ããã¡ã«ã«ãªãããã¡ã«ã«ãªã¢ãã€ã«ãšãã£ãæ°èŠäºæ¥ã®ã°ããŒã¹ã«ã掻çšãããŠããŸãããŸããã客ããŸãšã®ã³ãã¥ãã±ãŒã·ã§ã³ãã£ãã«ãšããŠãã¢ããªå
ãããŒãã¡ãŒã«ãPush éç¥ããããªããžã®ãç¥ãããçã䜵ããŠäœ¿ãããŠããŸããGrowth Platform ããŒã ã¯ãããããã°ããŒã¹æŽ»åãæ¯ããåºç€ã»ä»çµã¿ã¥ãããæ
ãããŒã ãšããŠæ©èœããŠããŸãã ãGrowth PlatformããšããããŒã åç§°ãçãŸããã®ã¯ãã¡ããã© 5 幎åã® 2021 幎 7 æã§ããã ãGrowth UXããŒã ãããGrowth PlatformããŒã ãã«åç§°å€æŽïŒãçµç¹æ¹ç·šã§èŠããPMã®åœ¹å²ãããŒã ã®å€å | mercan (ã¡ã«ã«ã³) äžèšã®èšäºã«ãããéãããå
±éããæ©èœã»åºç€ã暪æçã«èŠãŠãã·ã¹ãã éçºãéçšã®èгç¹ããäžæ¯ãããããšããããã·ã§ã³ã®ããšãããŸããŸãªåãçµã¿ãé²ããŠããŸããã Growth Platform ãšããããŒã ãçãŸããåã2019 幎ã®ã¡ã«ãã€ãµãŒãã¹éå§çŽåŸã¯ãããå€ãã®ã客ããŸã«ã¡ã«ãã€ã䜿ã£ãŠããã ããããæ±ºæžã«çµ¡ããã¯ãŒãã³ããã€ã³ãéå
ãã£ã³ããŒã³æœçãæ¬¡ã
ãšæã¡åºããŠããŸããããã®ã¹ããŒãæãæ¯ããã¹ããç¬èªã«ãã£ã³ããŒã³åºç€ãéçºããŠããŸããã äžæ¹ã§ãããŒã±ãããã¬ã€ã¹äºæ¥ã«ãåæ§ã«ãã£ã³ããŒã³ã Customer Relationship ManagementïŒCRMïŒãå®è¡ããåºç€ãååšããŠããŸããããé·ãã¡ã«ã«ãªã®æŽå²ã®äžã§çã¿åºãããŠãã PHP 補ããŒã«ã«ã¯å€ãã®è² åµããããã¡ã³ããã³ã¹æ§ã®èгç¹ãããããªãã¬ãŒã·ã§ã³äºæ
ãèµ·ããããæ§é ã«ãªã£ãŠããŸãããã¡ã«ãã€åŽã§ãããããã®ããŒã«ãå©çšããããšã«ãªã¹ã¯ãæããŠããŸããã ããã§ãã¡ã«ã«ãªãšã¡ã«ãã€ã®ãšã³ãžãã¢éã§å®åçãªã³ã©ãã¬ãŒã·ã§ã³ãã¹ã¿ãŒãããå€ãããŒã«ã廿¢ããŠãæ°ãã« Engagement Platform (EGP) ãšããå
補ããŒã±ãã£ã³ã°ãšã³ãžã³ãå
±åéçºããæ¹åæ§ã§åæããŸããã ãã®åŸã2023 幎 1 æããã¡ã«ãã€å
ã«çµ±åçµç¹ãäœãããJR (Japan Region) Growth PlatformããšããŠãäžäžžãšãªã£ãéçºäœå¶ãã¹ã¿ãŒããããŸããã詳现ã¯åœæã®ãšã³ãžãã¢ãªã³ã°çµ±æ¬ã§ãã£ã keigoand ã®èšäºã«ãŸãšãŸã£ãŠããŸãã Merging Teams for a Growth Platform | Mercari Engineering èšäºã«ããããŸãããåœåã¯ããããã®ããŒã ã§éçºã®é²ãæ¹ã倧ããç°ãªããŸãããã¡ã«ãã€ãæ¯èŒçå°èŠæš¡ã§ç«ã¡äžããé²ããèæ¯ããããç¬èªã®ãªãã¬ãŒã·ã§ã³ããŒã«ãããã«ãŠã§ã¢ãããããšã³ãžãã¢ãªã³ã°ã«ã«ãã£ãŒãç°ãªã£ãŠããŸããããŸããã¡ã«ãã€ã¯éèäºæ¥ãæ
ã£ãŠããããšããããã·ã¹ãã åè³ªã®æ
ä¿ãéèŠã§ãããªãªãŒã¹ããã»ã¹ã®å³æ ŒåããQAãªã©ã®åçš®åºæºãžã®æºæ ãªã©ã«ã€ããŠèªèãåãããªããéçºãé²ããããšã¯èŠåŽã䌎ããŸããããããŒã ã®ã±ã€ãããªãã£ã¯æ Œæ®µã«åäžããŸããã ã°ã«ãŒãã®æ¡å€§ãšãšãã« å
è¿°ããéããGrowth Platform ããŒã ã¯ã¡ã«ãã€ã«æå±ããªããããã¡ã«ã«ãªã°ã«ãŒãå
šäœãæ¯ããããŒã ã§ãã ãã®æ°å¹Žãã¡ã«ã«ãªã§ã¯è€æ°ã®æ°èŠäºæ¥ãç«ã¡äžãããŸããã ã¡ã«ã«ãªShops ã¡ã«ã³ã€ã³ ã¡ã«ã«ãªNFT ã¡ã«ã«ãªãã ã¡ã«ã«ãªã¢ãã€ã« è¶å¢ããžãã¹ ã¡ã«ã«ãªã°ããŒãã«ã¢ã㪠etc ãããã®ããžãã¹ããããã¯ãã® Product-Market Fit ãæ¯ããã¹ããGrowth Platform ã§ã¯ããŸããŸãªéçºãè¡ã£ãŠããŸãããäŸãã°ãæ°ãããµãŒãã¹ç»é¢äžã§ã®ãã£ã³ããŒã³ãããŒè¡šç€ºã蚎æ±ãæ°èŠã®ã客ããŸãžã®ã¯ãŒãã³ïŒãã€ã³ãé²åãå©çšå®çžŸã«å¿ãããã€ã€ãªãã£ããã°ã©ã ãªã©ã¯ãäžèŠå
±éã§ããã€ã€ããããããã®ãµãŒãã¹ã®ããŒã¿ãåºç€ã«çµ±åããããŒã±ãã£ã³ã°ããŒã ãæè»ãã€é«éã«ãã£ã³ããŒã³ãæã¡åºããä»çµã¿ãå¿
èŠã§ãããŸããã°ããŒãã«å±éã«ãããŠã¯ãåå°åã®èšèªããã¯ãŒãã³ã«ãããé貚ã®éããžã®å¯Ÿå¿ãªã©ãã¹ã³ãŒãã«ãªããŸãã ããã«ïŒäžéšäŸå€ã¯ãããŸããïŒãã¡ã«ã«ãªã®ãµãŒãã¹ã¯ 1 ã€ã®ã¡ã«ã«ãªã¢ããªäžã§åããŠããŸããèµ·åçŽåŸã«è¡šç€ºããããããŒã ç»é¢ãããããŒã±ãããã¬ã€ã¹ã«ããããåå詳现ç»é¢ããååŒç»é¢ãã§ã®ãã£ã³ããŒã³èšŽæ±ã¯ãã客ããŸã«ãµãŒãã¹èªç¥ãç²åŸããããã§éåžžã«éèŠã§ãããã®ãããªèšŽæ±ãšãªã¢ãéãããäžã§ãã©ã®ãµãŒãã¹ãããããã®ã客ããŸã«ãšã£ãŠæçšãªãã£ã³ããŒã³ã§ããã®ããã³ãã¥ãã±ãŒã·ã§ã³ãã£ãã«ããã€ãžãŒã«ãªããããªãã®ãããšãã£ãæé©åã«ã Machine Learning ããŒã ãåãçµãã§ããŸãã çµç¹ã®æ¡å€§ äºæ¥ã®æ¡å€§ã«å¯Ÿå¿ãããããGrowth Platform çµç¹ãæ¡å€§ãç¶ããŠããŸããã 2022 幎 6 æã«ã€ã³ãã»ãã³ã¬ã«ãŒã«ã«éçºæ ç¹ãšã㊠Mercari India ãèšç«ããŠä»¥éãèšç«åœåããäžç·ã«éçºãé²ããŠããŸããåœåã¯ã¯ãŒãã³ãã¡ã€ã³ãå
±åã§éçºãããšããããã¹ã¿ãŒãããŸãããæ°ããªããžãã¹ã«å¯Ÿå¿ããã¯ãŒãã³æ©èœã®éçºãé²ããªãããmercari-api ãšãã PHP 補ã¢ããªã¹ãããã€ã¯ããµãŒãã¹ãžã®ãã€ã°ã¬ãŒã·ã§ã³ãšããå€§èŠæš¡ãããžã§ã¯ããèªåŸçã«æšé²ããŠããŸãã Migrating Coupons from Monolith to Microservice – Mercari India è¿å¹Žã§ã¯ã¯ãŒãã³ãã¡ã€ã³ã ãã§ãªã CRM ãã¡ã€ã³ã§ãéçºäœå¶ãæ¡å€§ããBackendãFrontendãMobileã®ãšã³ãžãã¢ãäžäœãšãªã£ãŠã€ã³ãæ ç¹ã®ã¿ã§æ©èœéçºãå®çµãããããªäºäŸãåºãŠããŠããŸãã çŸåšã¯æ¥æ¬ãšã€ã³ãã®ãšã³ãžãã¢ãçŽ2:1ã®å²åã§ååããŠããŸãããŸããæ¥æ¬ãšã€ã³ãã®ãšã³ãžãã¢ãªã³ã°ãããŒãžã£ãŒå士ãå¯ã«é£æºããªããéçºãæšé²ããŠããŸãã Growth Platform ã®å
šäœããŒãã£ã³ã°ã§ã¯ãç¥èŠå
±æãå«ãã亀æµããšã³ãžãã¢å士ã§ç©æ¥µçã«è¡ã£ãŠããŸããå ããŠã宿çã«ã€ã³ããªãã£ã¹ãžåºåŒµããããã€ã³ãã®ãšã³ãžãã¢ãæ±äº¬ãªãã£ã¹ã蚪åããã¿ã€ãã³ã°ã«åãããŠäº€æµãæ·±ãããããŠããŸãã (ã€ã³ããªãã£ã¹ã«èšçœ®ãããŠãããªããžã§ãžã®ãµã€ã³) äžæ¹ã§ã䜿çšèšèªã®å£ã¯äŸç¶ãšããŠèª²é¡ã§ããã¡ã«ãã€ã¯åŸæ¥ãæ¥æ¬èªäžå¿ã§ã³ãã¥ãã±ãŒã·ã§ã³ããŠããŸããããå
ããŒã±ãããã¬ã€ã¹ã®ã¡ã³ããŒãã€ã³ããªãã£ã¹ã®ã¡ã³ããŒã¯è±èªäžå¿ã§ããGrowth Platform ããŒã ã®å
šäœããŒãã£ã³ã°ã¯è±èªã§è¡ãäžæ¹ãã¡ã«ãã€å
šäœã®ããŒãã£ã³ã°ã¯æ¥æ¬èªã§å®æœããŠãããšãã£ãç¶æ³äžã§ãGOTïŒéèš³ïŒããŒã ã®ãµããŒããåããªãããæ¥æ¬èªè©±è
ã»è±èªè©±è
ã®åæ¹ãæ©ã¿å¯ã£ãŠã³ãã¥ãã±ãŒã·ã§ã³ãé²ããŠããŸãã æ¬¡ãªããã£ã¬ã³ãžãž Growth Platform ããŒã ã®æçã¯ãã¡ã«ã«ãªã°ã«ãŒãã®ã°ããŒã¹ãšãšãã«ãããŸããã EGP ã¯ãããŸããŸãªæ©èœéçºãçµãŠå€§ããªé²åãéããŠããŸãã EGP – Mercariâs CRM Platform: Built Once, Powering Many | mercari GEARS 2025 AI ãšäœã HTML ããŒã¹ã® LP ãšãã£ã¿ EGP Code ãå
補ããçç± | ã¡ã«ã«ãªãšã³ãžãã¢ãªã³ã° ãŸããã¡ã«ãã€ã«ç¹åããåºç€ã§ãã Santa ãµãŒãã¹ãé²åãç¶ããŠããŸãã ã¡ã«ãã€ã®ãã£ã³ããŒã³åºç€ãã«ãŒã«ããŒã¹æ±çšã·ã¹ãã ã«æžãçŽããOtoku RevolutionãããŸã§ã®è©± | ã¡ã«ã«ãªãšã³ãžãã¢ãªã³ã° åºç€éçºãã§ãŒãºã¯äžå·¡ãããšæããŠããŸãããããžãã¹ãæ¯ããåºç€ãšããŠã¯ãŸã éåã°ã«ãããŸããç¹ã«ãããžãã¹ã®èŠæ±ã«å¯Ÿããã¢ãžãªãã£ãšã·ã¹ãã ã®ä¿¡é Œæ§åäžã¯ç¶ç¶çãªèª²é¡ã§ãã ããã§ä»åŸã¯ãã°ã«ãŒãããããã®ããžãã¹ã°ããŒã¹ãããçŽæ¥çã«æ¯ãã€ã€ãå®ããåºããããéçºäœå¶ãã€ããããã«ãGrowth Platform äœå¶ãšããŠã¯äžåºåããšããçµç¹ã CRMããŒã ãš IncentiveããŒã ã«åããããããã®ããã·ã§ã³ãæ
ã£ãŠãããŸãã CRM ããŒã ã¯ãããŒã±ãããã¬ã€ã¹ãã¯ãããšããåäºæ¥ã®æé·ãåŸæŒãããããããããã¯ããšå¯ã«é£æºããªãããEGP ãæŽ»çšããã客ããŸåãã³ãã¥ãã±ãŒã·ã§ã³æ©èœã®éçºã»æ¹åãé²ããŠãããŸãã Incentive ããŒã ã¯ãã¡ã«ã〠Payment & Customer Platform ã®äžå¡ãšããŠãã€ã³ã»ã³ãã£ããæ±çšçãã€å®å
šã«åãæ±ããä»çµã¿ã¥ãããæšé²ããŠãããŸãã ããŒã ã¯åãããŸãããã¡ã«ã«ãªã°ã«ãŒãå
šäœã§æŽ»çšãããå
±é Foundation ãšããŠã飿ºã¯ç¶ç¶ããŠãããŸãã ãŸãšã ãããŸã§ãGrowth Platform ã®ãããã¯ããããŒã ã®æ¡å€§ã«ã€ããŠç°¡åã«ã玹ä»ããŸããããããã¯ããæè¡ã®è©³çްã¯ãæ¬ãšã³ãžãã¢ãªã³ã°ããã°ãã«ã³ãã¡ã¬ã³ã¹ã§ã¡ã³ããŒã玹ä»ããŠããŸãã®ã§ããã¡ãããã²ã芧ãã ããã ãããããã¡ã«ã«ãªã°ã«ãŒãã®å¯èœæ§ãåºããããã®ä»çµã¿ã¥ããã远æ±ããŠãããŸãã æ¬¡ã®èšäºã¯ abcdefujiãã ãš becosukeããã§ããåŒãç¶ããæ¥œãã¿ãã ããã
p.fontbold{ font-weight: bold; } p.codeboxbefore{ margin-bottom:-70px; } @media screen and (max-width: 575px) { p.codeboxbefore{ margin-bottom:-13.4vw; } } ãã®èšäºã¯ Merpay & Mercoin Tech Openness Month 2026 ã® 13 æ¥ç®ã®èšäºã§ãã ããã«ã¡ã¯ãGrowth Platform Team ã§ã¡ã«ãã€ã®ãã€ã³ãéå
ãã£ã³ããŒã³åºç€ã§ãã Santa ãµãŒãã¹ã®éçºãæ
åœããŠãã @hasegway ã§ãã ãªããã¿ã€ãã«ã«ç»å ŽãããOtoku Revolutionããšã¯ãã³ãŒã決æžãäžå®åæ°äœ¿ããã³ã«å¿
ãå€åŒãäœéšãå±ãæ°äŒç»ã®ãã£ã³ããŒã³ (æ¬èšäºã§ã¯ãã³ãŒã決æžã®åæ°é£åãã£ã³ããŒã³ããšåŒã³ãŸã) ã®ç€Ÿå
åŒç§°ã§ãã詳ããã¯æ¬é£èŒ 17 æ¥ç®ã® @yutaro ã®èšäºã楜ãã¿ã«ããŠããŠãã ãããæ¬èšäºã§ã¯ãé·ãéçšããŠãã Santa ãµãŒãã¹ãã«ãŒã«ããŒã¹ã®æ±çšåºç€ (以éãRulebase åºç€ããšåŒã³ãŸã) ãšããŠæžãçŽãããªãã¡ã¯ã¿ãªã³ã°ã®è©±ãšãæ°åºç€ã®æåã®ãã£ã³ããŒã³ãšããŠãã³ãŒã決æžã®åæ°é£åãã£ã³ããŒã³ããç«ã¡äžãã話ãåãäžããŸããé ã远ã£ãŠã話ãããåã«ããŸã Santa ãšããåºå¹¹ãµãŒãã¹ãã©ã®ãããªæŽå²ãçµãŠãã©ããªè² åµãæ±ããã«è³ã£ããã«ã€ããŠã話ããããŠãã ããã Santa ã®æŽå² Santa ãšããååã¯ãåæã« ã䜿ã£ãç¿æ¥ã«ãããåŠçã§ãã€ã³ããä»äžããã ãµãŒãã¹ã ã£ããšããããæ¥ãŠããŸããå€ã®ãã¡ã«æºãŸã£ãã€ãã³ããç¿æãŸãšããŠé
ã£ãŠåããã·ã³ãã«ãªä»çµã¿ã§ãã (åæã®ä»çµã¿ã«ã€ããŠã¯ ã¡ã«ãã€ã®ãã£ã³ããŒã³ãæ¯ãããµã³ã¿ã®ç§å¯ ã詳ããã§ã)ã ããããäœå¹ŽãçµãŠãä»ã§ã¯ 1 æ¥æ°çŸäžã€ãã³ããåŠçããã¡ã«ã«ãª / ã¡ã«ãã€ã®ããŸããŸãªå©çšã·ãŒã³ã§ãã€ã³ãä»äžãè¡ãåºå¹¹ãµãŒãã¹ãžãšæé·ããŸããããã®æé·ã®éçšã§äžè²«ããŠããã®ã¯ã ããã£ã³ããŒã³ã®çš®å¥ããšã«å°çšã®ã€ãã³ããã€ãã©ã€ã³ãå®è£
ããã ã¹ã¿ã€ã«ã§æ©èœãç©ã¿éããŠããããšã§ããããããç¬èªã®ããŒãã«ãç¬èªã®ã€ãã³ããã³ãã©ãç¬èªã® Cap (äžé) ããžãã¯ãç¬èªã®ãã€ã³ãä»äžãããŒãæã£ãŠããŸããã 2021 幎ã®ãã£ã«ã¿ãªã³ã°æ©èœ ã¯ãè€æ°ã®æ¡ä»¶ã AND/OR ã§çµã¿åãããã çºæ³ã Santa ã«æã¡èŸŒãã ãæ±çšåã®æåã®äžæ©ã§ããã 2022 幎ã®ã¡ã«ã«ãŒãåžžæéå
ã¯ããã®äžã«ãã¡ã«ã«ãŒãã¹ããŒãžå¥ã®éå
çããè€æ°æã«ãŸããã Provision (åŒåœé) 管çã ãšãã£ã粟緻ãªããžãã¯ãä¹ããå€§èŠæš¡ãªãã€ãã©ã€ã³ã§ãçŸåšã§ã Santa æå€§ã®ãã€ãã©ã€ã³ã§ããããã§ãããã£ã³ããŒã³æ¬äœã®ã³ãŒã㯠CampaignType ããšã«å¥ç©ã®ãŸãŸã§ããã ãã®æ§é ã¯åœåã®èŠä»¶ã«ãããŠã¯åççã§ãããããããã£ã³ããŒã³èŠä»¶ã®è€éåãšãšãã«ãã³ãŒãã®åå©çšæ§ãäœãèšèšã«ããéçºé床ã®äœäžããã°ã®ãã£ã³ããŒã³å¥å¯Ÿå¿ã«ããéçšè² è·ã®å¢å€§ãšãã£ã課é¡ãç©ã¿éãªã£ãŠãããŸããã2025幎å€ã®æç¹ã§ã¯ãSanta ãšã³ãžãã¢ããŒã å
ã§ããã課é¡ãžã®å
±éçè§£ãã§ããŠãããæ¬¡äžä»£ãã£ã³ããŒã³æ§é ã®ã©ãèšèšãŸã§é²ãã§ããŸããããã ãåœæã¯ã¹ã±ãžã¥ãŒã«äžã®å¶çŽã§æ¬æ ŒçæãèŠéãã2025幎10æã«ããŒã³ãããã¡ã«ã«ãªã¢ãã€ã«åãç¹å
žãã£ã³ããŒã³ã¯æ¢åã·ã¹ãã ãæ¡åŒµãã圢ã§å®è£
ããŸããã ãã®åŸãPoCãé²ãã2025幎12æã«ããŒã åãã«ææãçºè¡šã2026幎æ¥ã«ãããŠãæ±çšãã£ã³ããŒã³ããŒãã«ã«ã«ãŒã«è©äŸ¡ãšã¢ã¯ã·ã§ã³å®è¡ã¢ãžã¥ãŒã«ãçµã¿åããã Rulebase åºç€ãæ°èŠã«æ§ç¯ããŸãããçŸæç¹ã§ã¯ãã³ãŒã決æžã®åæ°é£åãã£ã³ããŒã³ãã1件皌åãããŠããæ®µéã§ãæ¢åã®ãã£ã³ããŒã³çŸ€ã¯åŒãç¶ãåŸæ¥ã®å°çšãã€ãã©ã€ã³ã§åããŠããŸãããããæ¢åãã£ã³ããŒã³ã®æ®µéçãªç§»è¡ã¯ãããããå
ã®ãã§ãŒãºã§ãã å°çšãã€ãã©ã€ã³ãæ±ããè² åµ Rulebase åºç€ãäœãåã® Santa ã¯ããã£ã³ããŒã³ã®çš®å¥(CampaignType) ããšã«ãå°çšãã€ãã©ã€ã³ããå®è£
ããããšããã¹ã¿ã€ã«ã§æé·ããŠããŸããã代衚çãªãã£ã³ããŒã³çš®å¥ãšãåçš®å¥ã®ä»£è¡šçãªãã£ã³ããŒã³äŒç»ã¯æ¬¡ã®ãšããã§ãã ãã£ã³ããŒã³çš®å¥ äž»ãªãã£ã³ããŒã³äŒç» 賌å
¥æéå
ãè²·ã£ãŠãåŸ!dãã€ã³ãããªã© ã¡ã«ãã€ã®å®é¡æãã®éå
ãã¯ãããŠã®å®é¡æããã£ã³ããŒã³ããªã© ã¡ã«ãã€ã¹ããŒããããŒã®éå
ãååå©çšããã«ã ããã¯ãã£ã³ããŒã³ããªã© ã¡ã«ã«ãŒãéå
ãã¡ã«ã«ãŒãåžžæéå
ããªã© ãããã®çš®å¥ã¯ããããããå°çšã®ããŒãã«çŸ€ã決æžãè¿æžãåãåã Pub/Sub ã®å
¥ãå£ãããžãã¹ããžãã¯ãæ
ã Interactorããã€ã³ãä»äžå±¥æŽããŒãã«ãžã®æžã蟌ã¿ãã¹ãä»äžäžéã®èšç®ããžãã¯ãæ±ããŠããŸãããŸããäŒç»ããšã®çްããèŠä»¶ã®å®çŸã®ãããåºæ¬ã®ãã€ãã©ã€ã³ã®äžã«ããŸããŸãªåå²åŠçãå ããããŠããŸããæ°ãã«ãã£ã³ããŒã³äŒç»ã 1 æ¬ç«ãŠããã³ã«ããããã®ããŸããŸãªã¬ã€ã€ãŒãåå¥ã«èª¿æ»ã»å€æŽããªããã°ãªããªãããšããã®ã Santa ã®æšæºäœæ¥ã§ããã ãããŠãé·å¹Žéçšãããªãã§ãã®æ§é ãããã€ãã®è² åµãçãã§ããŸããã 环ç©ããéçšè² åµ ãŸããå°çšãã€ãã©ã€ã³ãå®è£
ããã¹ã¿ã€ã«ã§ã¯ãæ°ããªãã£ã³ããŒã³èŠä»¶ã®ããã®è¿œå éçºã暪å±éããŠåå©çšãã¥ããåé¡ããããŸããããŸããåœåã«æ³å®ããŠãããã£ã³ããŒã³èŠä»¶ã§ã¯èããããªãã£ãæ°ããªèŠä»¶ã¯ãåå¥å®è£
ã§å¯Ÿå¿ããããåŸãªãããšããããŸããããããã¯åŸã
ã«éçºé床ã®äœäžããªã°ã¬ãã·ã§ã³ãã¹ãã®è€éåãæããŠãããŸãããç¹ã« MercardCampaignType ã§ã¯ãã®åé¡ãé¡èã§ããªãã¡ã¯ã¿ãªã³ã°ã«èžã¿åãçŽæ¥çãªåŒãéã«ãªããŸããã MercardCampaignType ãããªãã§ã眮ãå ŽãåããŠãã£ã 2022 幎ã«ããŒã³ããã MercardCampaign ãã€ãã©ã€ã³ã¯ãåœåãå©çšã¹ããŒãžå¥ã®éå
çããšãæž
ç®èµ·ç¹ã®ãªã¢ã«ã¿ã€ã ã®ãã€ã³ãä»äžããçŽ çŽã«æ±ãããšãæ³å®ãããã·ã³ãã«ãªåžžæéå
ãã£ã³ããŒã³åãã®èšèšã§ããã ãã®åŸãã¡ã«ã«ãŒããŸããã®ãã£ã³ããŒã³èŠä»¶ã¯æ¥éã«åºãã£ãŠãããŸãã环èšè³Œå
¥é¡é£åãã£ã³ããŒã³ãã¡ã«ã«ãª NFT 決æžãžã®å¯Ÿå¿ãã¡ã«ã«ãŒã ãŽãŒã«ããã¡ã«ã«ãªã¢ãã€ã«å¥çŽè
åãã®ç¹å
žãªã©ãã©ãããã¡ã«ã«ãŒãä¿æè
ã»å©çšè
ããšããå
±éã®æèã¯ãããã®ã®ãèšèšåœæã®æ³å®ã«ã¯ãªãã£ãèŠä»¶ã°ããã§ããããã§ã眮ãå ŽãšããŠã¯ MercardCampaignType ãæãé©åã ã£ãããããããã®æ°èŠä»¶ã¯é 次 MercardCampaignType ã®äžã«å®è£
ãããŠãããŸããæ¬æ¥ã·ã³ãã«ã«èšèšãããŠããå
¥ãç©ã«æ³å®å€ã®æ©èœã次ã
ãšè¿œå ãããéå
çç®åºãäŒèšã³ãŒãæå®ãªã©ã®ä»çµã¿ãæ¬æ¥ã®çšéãè¶
ããŠæµçšãããããã«ãªã£ãŠãããŸããã ããã§ã¯ãç¹ã«æªã¿ãç®ã«èŠãã圢ã§è¡šé¢åãã3 ã€ã®äºäŸ â 环èšè³Œå
¥å (2024 幎 9 æ)ãã¡ã«ã«ãª NFT äŒèšã³ãŒãå·®ãæ¿ãå¯Ÿå¿ (2025 幎 12 æ)ãã¡ã«ã«ãªã¢ãã€ã«åãç¹å
žãã£ã³ããŒã³ (2025 幎 10 æ) â ãé ã«èŠãŠãããŸãã 环èšè³Œå
¥å ãš ã¡ã«ã«ãª NFT äŒèšã³ãŒãå·®ãæ¿ã 环èšè³Œå
¥é¡é£åãã£ã³ããŒã³ã§ã¯ã賌å
¥éé¡ãè€æ°ã®ãããå€ãé ã«è¶
ãããã³ã«æ®µéçã«ãã€ã³ããä»äžãããŸã (äŸ: 环èšè³Œå
¥é¡ã«å¿ããŠæå€§ P1,500 ãããã)ããã®ãã£ã³ããŒã³ã MercardCampaignType ã«æå
¥ãããæ¬æ¥ã®éå
çã¹ããŒãã«ã賌å
¥çޝç©ãã©ãã«ãŒãåã®æåãä¹ããŸãããã¡ã«ã«ãª NFT äŒèšã³ãŒãå·®ãæ¿ã察å¿ã§ã¯ããã£ã³ããŒã³ã®åçš®æ¡ä»¶ã¯ä»ãšå
±éã«ãã€ã€NFTååŒã®ã¿äŒèšã³ãŒããå·®ãæ¿ããããšããèŠä»¶ã®ãããã³ãŒãå
ã«åå²åŠçã远å ããããã£ã³ããŒã³èšå®å€ãè€éåããŸãããã©ã¡ããã¡ã«ã«ãŒãä¿æè
åãã®æœçã§ã¯ãããã®ã®ãåœåæ³å®ã®è²¬åç¯å²ãè¶
ããèŠä»¶ã§ãã ãããŠ3 äŸç®ã®ããã£ãšãæªã¿ã倧ããåºãã±ãŒã¹ããã¡ã«ã«ãªã¢ãã€ã«åãç¹å
žãã£ã³ããŒã³ã§ãã ã¡ã«ã«ãªã¢ãã€ã«åãç¹å
žãã£ã³ããŒã³ (2025 幎 10 æ) ã¡ã«ã«ãªã¢ãã€ã«åãç¹å
žãã£ã³ããŒã³ã®èŠä»¶ã¯ã 3 çš®é¡ã®ã¡ã«ã«ãŒãã¹ããŒã¿ã¹ (ä¿æç¡ã / éåžžç / ãŽãŒã«ã) à 4 çš®é¡ã®ã¢ãã€ã«ããŒã¿ãã©ã³ (4GB / 10GB / 20GB / 40GB) = 12 ã®ç¬ç«ãããã£ã³ããŒã³ãã¿ãŒã³ãæ¯æå¿
èŠããšãããã®ã§ããã å®è£
äžã¯ãæ¬æ¥ã¡ã«ã«ãŒãã¹ããŒãžå¥ã®éå
ã¬ãŒããä¿æããDBãã£ãŒã«ãããããŒã¿ãã©ã³å¥ã®ã¬ãŒããã®å
¥ãç©ãšããŠæµçšãããŸããã3 ã¹ããŒã¿ã¹ Ã4 ããŒã¿ãã©ã³ã® 12 çµã¿åããããã¡ã«ã«ãŒãçšããŒãã«ã®è¡ãšããŠæ¯æçæããéçšã§ãã ãŸããã客ããŸã®ã¡ã«ã«ãŒãã¹ããŒã¿ã¹ãã¢ãã€ã«ããŒã¿ãã©ã³ã¯æ¥ã
å€ããããããå€åã«åãããŠéå
ã¬ãŒããæã
ã®äžéãèšç®ãçŽãå¿
èŠããããŸãããããŠãåãã客ããŸãåæå
ã§å¥ã®çµã¿åããåããã£ã³ããŒã³ã«ãäºéã«ãããããŠéè€ä»äžãèµ·ããããããšãããªã¹ã¯ãæ®ããŸããåŸè
ã®éè€ä»äžãé²ãããã«ãã³ãŒãåŽã«ã¯ãããªé°å²æ°ã®ããŒãã³ãŒãããããå
¥ããŸãã (ç°¡ç¥åããã€ã¡ãŒãž)ã // ãã€ã³ãéè€ä»äžé²æ¢ã®ããããã£ã³ããŒã³IDãã³ãŒãã«åã蟌㿠TemporaryCampaignIDMapping = map[string]string{ "202510": "campaign-id-1", "202511": "campaign-id-2", // æ¯æè¿œå ãå¿
èŠ... ãããŠåæã«ãããŒã¿ãã©ã³å¥ã¹ããŒãžãå€å®ãã if æãæ£ãã°ããŸããã ããããŠãæ¯æ 12 ãã¿ãŒã³åã®ããŒã¿è¿œå éçšãå¿
èŠãªãTemporaryãããŒãã³ãŒãããããæ¬çªã«å±
ç¶ãïŒTemporaryãšã¯ã»ã»ïŒãã¢ãã€ã«å°çšã¹ããŒãžãåå²ããã if æããã€ã³ãèšç®ã»ãã£ã«ã¿è©äŸ¡ã»API ã¬ã¹ãã³ã¹ã«æ£åšããå°æ¥ããŒã¿ãã©ã³ã1ã€å¢ãããã³ã«ã³ãŒã倿Žãšãããã€ãå¿
èŠã«ãªããMercardCampaignType å
šäœã®ãªã°ã¬ãã·ã§ã³ãã¹ããå·»ã蟌ãããšããæ§é ãåºæ¥äžãã£ãŠãããŸããåœå㯠ãã¢ãã€ã«ãã£ã³ããŒã³ãã¢ãŒããã¯ãã£å·æ°ã®ãã£ããã«ããŠææ¬å¯Ÿå¿ããã èšç»ããããŸããããããŒã³ãææ¥ãšã®äž¡ç«ãé£ãããæçµçã«æ¢åãã€ãã©ã€ã³ãæ¡åŒµãã倿ãåããŸãããåœæã®å¶çŽäžã§ã¯åççãªéžæã§ãããæ ¹æ¬çãªæ§é 課é¡ã¯æã¡è¶ããéçšè² è·ã¯å¢ããŠããŸãã 3 äºäŸãšãããžãã¹æèã§ã¯çãéã£ãŠããäžæ¹ããã¡ã«ã«ãŒãéå
ã®å
¥ãç©ãããã¡ã«ã«ãŒãåšèŸºãã£ã³ããŒã³å
šè¬ã®å
¥ãç©ããšããŠäœ¿ãããMercardCampaignType ã®ã¹ããŒããšè²¬åç¯å²ãæŒãåºããããŠããã®ãåœæã®ç¶æ
ã§ããã®ã²ãã¿ã¯ç¡èŠã§ããªã倧ããã«ãªã£ãŠããŸããã Rulebase åºç€ã®èšèš ãã®ãªãã¡ã¯ã¿ãªã³ã°ãã®ãã®ã¯åããæ€èšããŠãããã®ã®ãããŒã³ã責任ãšã®äž¡ç«ãé£ãããæ¬æ Œçæã¯å幎å¯ãããŠããŸãããã®éãå
éšã§ PoC ã¯é²ããæ¬å®è£
ã§åºããæ¹éã¯ããã£ã³ããŒã³ã®æåããå°çšã³ãŒãããèšå®ããŒã¿ãžããšããã·ã³ãã«ãªãã®ã§ãã ããå
·äœçã«ã¯ã ãã©ã®ãããªãã£ããã§åããã (TriggerType)ã ãã©ã®ãããªæ¡ä»¶ã§ãããããããã (RuleCondition ãšããã®è©äŸ¡ãæ
ã RuleEvaluator)ã ãäœããããã (ActionExecutor) ãšãã3 ã€ã®è»žããã§ããã ã atomic 㪠(åå©çšå¯èœãªãµã€ãºã®) éšåãšããŠå®çŸ©ãããã®çµã¿åããã§å€æ§ãªãã£ã³ããŒã³èŠä»¶ã«å¯Ÿå¿ããããšããã®ãåºæ¬çãªçºæ³ã§ããåŸæ¥ã®ããã«ãã¡ã«ã«ãŒããã£ã³ããŒã³å°çšã®ããžãã¯ãæžãäžãããã®ã§ã¯ãªããTrigger / Condition / Action ãå°ããªéšåãšããŠçšæãããã£ã³ããŒã³å®çŸ©ã¯ãã®çµã¿åãããšããŠæžãããšããçºæ³ã§ããå°çšãã€ãã©ã€ã³æä»£ãšã®æ ¹æ¬çãªéãã¯ããã«ãããŸããäžåºŠå®è£
ãã Condition ã Action ãå¥ã® CampaignType ããèšå®å€ã ãã§åŒã³åºããããåçãªæ¡ä»¶åå²ãç¹°ãè¿ãæ¡ä»¶ã1 ã€ã®ãã£ã³ããŒã³å®çŸ©ã®äžã§è¡šçŸã§ãããããèœåããããããçãŸããŸãã å
šäœå ããŒã å
çºè¡šã§ããæ¬¡ã®å¯Ÿæ¯ã䜿ã£ãŠèª¬æããŸããã As-Is (ã¡ã«ã«ãŒãå°çšãã³ãã©ã®å
éšã« if ãç©ãŸããŠãã) func (h *MercardCampaignHandler) Execute(event Event) { if user.Stage == StageA { if user.Status == "Active" { if !h.HasReward(user.ID, event.ID) { points = amount * 0.03 h.RewriteRewardHistory(user.ID, event.ID) } } } else if user.Stage == StageB { if user.Status == "Gold" { points = amount * 0.10 if h.HasReward(user.ID, event.ID) { h.RewriteReward(user.ID, event.ID, points) } } } } To-Be (ãã£ã³ããŒã³å®çŸ©ã¯ JSON ããŒã¿ãè©äŸ¡ãšã³ãžã³ã¯æ±çš) { "rule_id": "mobile-std-4gb", "conditions": [ {"type": "user_attribute", "params": {"stage": "Standard", "plan": "4GB"}}, {"type": "period", "params": {"start": "2025-10-01", "end": "2025-10-31"}}, {"type": "payment_attribute", "params": {"transaction_type": "code_payment"}} ], "action": { "type": "ADD_POINTS", "params": {"rate": 0.05, "currency_points": 60, "monthly_cap": 200} } } ãã® JSON ã Spanner ã«æ°žç¶åããã¹ããŒããæ¬¡ã®3 ããŒãã«ã§ããCampaigns é
äžã« CampaignRulesããã®é
äžã« RuleConditions ã INTERLEAVE IN PARENT ã§äžŠã¹ãæ§é ã«ãªã£ãŠããŸãã -- 倧æ ã®å®£èš: æéã»CampaignTypeã»ãã£ã³ããŒã³åºæèšå® (JSON) Campaigns( CampaignID, CampaignType, StartAt, EndAt, Metadata, ... ) -- 1 ãã£ã³ããŒã³å
ã®è€æ°ã«ãŒã«: äœãããªã¬ã«ãã©ãéèšããã©ããªã¢ã¯ã·ã§ã³ãåãã CampaignRules( CampaignID, RuleID, TriggerType, CalculationType, ActionType, ActionParams (JSON), Priority, Enabled ) INTERLEAVE IN PARENT Campaigns -- 1 ã«ãŒã«å
ã®è€æ°æ¡ä»¶: AND/OR ã°ã«ãŒãã§åæ RuleConditions( CampaignID, RuleID, ConditionID, ConditionType, ConditionParams (JSON), ConditionGroup ) INTERLEAVE IN PARENT CampaignRules ããã«å¯Ÿå¿ããè©äŸ¡ãšã³ãžã³ (Rule Evaluation Engine) ãæ°èšãã以äžã®ãããª4 å±€æ§é ã® EvaluationData ãå
¥åãšããŠèµ°ãããŸãã Layer å
容 Event Data åä¿¡ãã Pub/Sub ã€ãã³ã Rule & Campaign DB ããèªãã CampaignRule + RuleConditions User Data ã客ããŸã®å±æ§ (ã«ãŒãçš®é¡ãå©çšå±¥æŽãªã©) Providers å€éšãµãŒãã¹ãžã® DI ãã³ãã« ã€ãã³ããå±ããŠããä»äžãŸã§ã®æµãã¯æ¬¡ã®ãšããã§ãã Condition/Rule ãš Action ã¯ãæ°ããçš®å¥ãå¿
èŠã«ãªã£ããšãã«å¯Ÿå¿ããå®è£
ã远å ããŠããããšã§ã以éã®ãããããã£ã³ããŒã³å®çŸ©ããåå©çšã§ããä»çµã¿ã«ãªã£ãŠããŸããæ°èŠãã£ã³ããŒã³ã®ç«ã¡äžãèªäœã¯ããã§ã«ã«ã¿ãã°ã«æã£ãŠãããã®ã®çµã¿åããã§å®çŸã§ãããã®ã§ããã°ãã³ãŒã倿Žã䌎ããã« SQL ã® INSERT ã§åæ ã§ããŸãã 3 ã€ã®è»žã®äžèº« ããããã¯ãåè¿°ãã3 ã€ã®è»žã Rulebase åºç€ã®äžã§ããããã©ãèšèšãããŠããããé ã«èŠãŠãããŸãã TriggerType â ã©ã®ãããªãã£ããã§åãã CampaignRules ããŒãã«ã® TriggerType åããåã«ãŒã«ããã©ã®ã€ãã³ãã«åå¿ãããã ã衚ããŸãã TriggerType ã¯å€éšã€ãã³ããš1察1ã«ãªãããå®çŸ©ããŠãããPub/Sub ããå±ããã¡ãã»ãŒãžãå
éšãã¡ã€ã³ã®ã¢ãã«ã«æ£èŠåããããã§ãåèŽãã TriggerType ãæã€ã«ãŒã«çŸ€ã CampaignRules ããåŒãåœãŠãæ¡ä»¶ãããã³ã°ãæ
ã2 段ç®ã®ãã³ãã©å±€ã«åŒãæž¡ããšãããŸã§ãããã®è»žã®è²¬ä»»ç¯å²ã§ããæ¡ä»¶è©äŸ¡ãå¯äœçšã¯ããã§ã¯æ±ãããåŸæ®µã«åãåºããŠããŸãã RuleCondition ãš RuleEvaluator â ã©ã®ãããªæ¡ä»¶ã§ããããããã CampaignRules ã«çŽã¥ã RuleConditions ããŒãã«ã«ã¯ãè©äŸ¡ãããæ¡ä»¶ã1è¡1 ä»¶ 䞊ãã§ããŸããåã¬ã³ãŒãã¯æ¬¡ã®3 ã€ã§æ§æãããŸãã ConditionType ã¯ããã®æ¡ä»¶ãã©ããªçš®é¡ã®å€å®ããããã瀺ãåé¡ã§ãåŸæ®µã§ã©ã® ConditionEvaluator ã«ãã£ã¹ãããããããæ±ºããŸãã ConditionParams ã¯ããã® ConditionType ã«æž¡ãå
·äœçãªãã©ã¡ãŒã¿ã§ãçš®å¥ããšã«å¿
èŠãªåŒæ°ãéããããåºå®ã¹ããŒãã§ã¯ãªã JSON ã§æè»ã«ä¿æããŠããŸãã ConditionGroup ã¯ãè€æ°ã®æ¡ä»¶ã AND ãš OR ã§çµã¿åãããããã®ã°ã«ãŒãã³ã°ã©ãã«ã§ãããã䜿ãããšã§ A AND (B OR C) ã®ãããªè€åçãªè«çåŒãããã©ãããªè¡ããŒã¿ã§è¡šçŸã§ããããã«ããŠããŸãã ããšãã°ãããæéå
ã§ãã客ããŸå±æ§ B ã C ã®ããããã«ããããããæç«ã ãšãã A AND (B OR C) ã®æ¡ä»¶ã¯ãRuleConditions ããŒãã«ã«æ¬¡ã®ããã« 3 è¡ã§äžŠã³ãŸãã ConditionID ConditionType ConditionGroup ã°ã«ãŒãã®æå³ A period NULL åç¬ã§ AND B user_attribute g1 ã°ã«ãŒã g1 å
ã§ OR C payment_attribute g1 ã°ã«ãŒã g1 å
ã§ OR è©äŸ¡ãšã³ãžã³ã®å
¥åã¯ãå
ã«æãã4 ã€ã®ã¬ã€ã€ãŒã®æ
å ±ã1ã€ã«æãã EvaluationData ã§ããConditionEvaluator åŽããã¯ãããããèªãã°å€å®ã«å¿
èŠãªå€ã¯ããã£ãŠããã ç¶æ
ã§åç
§ã§ããããã«ããŠãããŸããPoC ã§ã¯ããã«ãã£ã³ããŒã³åºæã®èšç®çµæãæãããæ¡ãæ€èšããŠããŸããããæ¬å®è£
ã§ã¯ãæ¡ä»¶è©äŸ¡ã®ãã§ãŒãºãšã¢ã¯ã·ã§ã³å®è¡ã®ãã§ãŒãºã§è²¬åãåããã¹ãããšå€æãã EvaluationData ã¯æ¡ä»¶è©äŸ¡ã«å¿
èŠãªæ
å ±ã ãã«çµã£ãŠããŸãã è©äŸ¡ãšã³ãžã³æ¬äœã¯ãConditionType ããšã®åå¥å€å®ãæ
ã ConditionEvaluator ãšãã«ãŒã« 1 ä»¶åã®çåœããŸãšãã RuleEvaluator ã® 2 æ®µæ§æã§ãã äžæ®µã® ConditionEvaluator ã¯ãConditionType ããšã« 1 ã€ãã€å®è£
ãçšæãããŠããã EvaluationData ãèªã¿åã£ãŠãã®æ¡ä»¶ 1 ä»¶åã®çåœãè¿ããŸããå€å®ã¯å¯äœçšãæãããå€éš API åŒã³åºãã DB æžã蟌ã¿ã¯èµ·ãããŸããã äžæ®µã® RuleEvaluator ã¯ããã®äžã«ä¹ã£ãŠã«ãŒã« 1 ä»¶åã®è©äŸ¡ãçµã¿ç«ãŠãŸããå
·äœçã«ã¯ã(1) RuleCondition ã®åè¡ããã® ConditionType ã«å¿ãã ConditionEvaluator ã«æ¯ãåãã(2) åè¡ãè¿ããçåœã ConditionGroup ã®ã»ãã³ãã£ã¯ã¹ (NULL ã¯åç¬ ANDãåãå€ã©ãã㯠ORãå¥ã®å€ã©ãã㯠AND) ã§ AND/OR åæãã(3) ã«ãŒã« 1 ä»¶åã®æçµçãªçåœãšãã©ã®æ¡ä»¶ãã©ãå¯äžãããã®å
èš³ãè¿ããŸããè¿ãã®ã¯çåœãšå
èš³ã ãã§ãèšç®çµæãå¯äœçšã¯å«ããŸããã æ°ããè©äŸ¡è»žãå¿
èŠã«ãªã£ããšãã¯ã察å¿ãã ConditionEvaluator ãå®è£
ã㊠ConditionType ã® enum ã«ç»é²ããŸããäžåºŠã«ã¿ãã°ã«å ããã°ã以éã®ãã£ã³ããŒã³å®çŸ©ã¯ RuleConditions ã® 1 è¡ãšããŠãã®è»žãèšå®å€ããŒã¹ã§åŒã³åºããŸãã ActionExecutor â äœãããã ãããããã«ãŒã«ã«å¯Ÿå¿ãã Action ãã ActionType ããšã® Executor ãå®è¡ããŸããäžéèšç®ããã€ã³ãä»äžã¹ããŒã¿ã¹ã®é·ç§»ããã€ã³ãå°åž³ãžã®æžã蟌ã¿ãå€éšãžã®ã€ãã³ãçºè¡ãšãã£ãå¯äœçšã¯ãããã§èµ·ãããŸããCondition / Rule åŽã¯å¯äœçšãæããªãèšèšãªã®ã§ãå€éšã«äœçšããããžãã¯ã¯ãã®å±€ã«éçŽãããŸããæ°ãã Action çš®å¥ãå¿
èŠã«ãªã£ããšãã¯ã察å¿ãã Executor ãå®è£
ã㊠ActionType ã® enum ã«ç»é²ããŸããäžåºŠã«ã¿ãã°ã«å ããã°ã以éã®ãã£ã³ããŒã³å®çŸ©ã¯ CampaignRules.ActionType ãš ActionParams ãæå®ãã圢ã§ããã® Action ãæ±çšçã«åŒã³åºããŸãã 3 è»žãæ¯ããå
±éãã«ã㌠Executor ã®è²¬åã¯ãAction ããšã®å¯äœçšãã®ãã® (DB æžã蟌ã¿ãå€éš API åŒã³åºããPointStatus ã®é·ç§»ãªã©) ã§ããäžæ¹ã§ããã€ã³ãèšç®ãš Cap (äžé) é©çšãPointStatus / ProvisionStatus ã®ã©ã€ããµã€ã¯ã«ç®¡çãå€éšãã€ã¯ããµãŒãã¹ã«æž¡ãåªçããŒã®çæãèšå®å€ãã³ãã¬ãŒãã®å±éãšãã£ããAction çš®å¥ããŸããã§æ¯åå¿
èŠã«ãªã暪æçãªåŠçãã¯ã3 軞ãšã¯å¥ã¬ã€ã€ãŒã®å
±éãã«ããŒã«åãåºããŠããŸããå Executor ã¯ãèªåã® Action ã«å¿ããŠå¿
èŠãªãã«ããŒã ããå¿
èŠãªãšãã«åŒã³åºã圢ã«ããŠãããŸããå®è£
ãããã«ããŒã¯ããã€ããããŸããã代衚äŸã 2 ã€æããŸãã PointLifecycleManager (PointStatus / ProvisionStatus ã®ãªãŒã±ã¹ãã¬ãŒã·ã§ã³) ãã€ã³ãä»äžã«ãŸã€ããã©ã€ããµã€ã¯ã«ããŸãšããŠæ±ããã«ããŒã§ãã ã客ããŸãžã®ãã€ã³ãä»äžç¶æ
(PointStatus) ãšã äŒèšäžã®åŒåœç¶æ
(ProvisionStatus) ã¯ãããããç¬ç«ããã¹ããŒããã·ã³ãšããŠè¡šçŸããŠããŸãã äžã PointStatus ã§ã planned ã§å°åž³ã«äºå®ãç«ãŠãå€éšã®ä»äž API ãæåãããš confirmed ãåŸåŠçãŸã§çµãããš completed ã«é²ã¿ãŸãã planned çŽåŸã«ãã£ã³ã»ã«ãããå Žå㯠cancelled ãå€éšåŒã³åºãã倱æããå Žå㯠failed ã«åããããšããã®ãäž»ãªé·ç§»ã§ããäžã ProvisionStatus ã§ãåŒåœãç«ã£ãŠããªã not_linked ãããåŒåœãçŽã¥ãã linked ãçµãŠãæçµçã« revoked (åŒåœåŠçã確å®ããç¶æ
) ã«é·ç§»ããã®ã䞻軞ã§ãã æ§ã¡ã«ã«ãŒããã€ãã©ã€ã³ã§ã¯ãPointStatus ã®é·ç§»ãš ProvisionStatus ã®é·ç§»ããããããã€ã³ãä»äžåŠçåŽãšåŒåœåŠçåŽã«åæ£ããŠå®è£
ãããŠããŠãäž¡è
ãã©ãé£åããŠãããã®èŠéããæªããªã£ãŠããŸãããRulebase åºç€ã§ã¯ãäž¡æ¹ã®ã¹ããŒããã·ã³ã PointLifecycleManager é
äžã«åãåºãã CompletePoint / ReversePoint / CreateProvision / UpdateProvision / RevokeProvision ã®å Action ããå¿
èŠãªãšãã«åŒã³åºã圢ã«ããŠãããŸããããã«ãã£ãŠãè€æ°æã«ãŸãããåŒåœãå¿
èŠãªã¡ã«ã«ãŒãç³»ã®ãã£ã³ããŒã³ããåŒåœãäžèŠãªã·ã³ãã«ãªãã£ã³ããŒã³ããåãéšåã®çµã¿åããã§ã©ã€ããµã€ã¯ã«ã衚çŸã§ããŸãã TemplateExpander (èšå®å€ãã³ãã¬ãŒãã®å±é) æ§ã·ã¹ãã ã«ã¯æ±çšçãªæååãã³ãã¬ãŒãã®ä»çµã¿ããªããããšãã°äŒèšã³ãŒããæ±ºæžçš®å¥ããšã«åããŠç©ããããªèŠä»¶ãåºãŠãããšãäŒèšã³ãŒãã®ãã¿ãŒã³æ°ã ããã£ã³ããŒã³ã¬ã³ãŒããå¥ã«åããããããŸããã§ãããæ¬æ¥ 1 ã€ã®ãã£ã³ããŒã³ãšããŠæ±ããããã®ããã¿ãŒã³æ°ã ãéè€ç»é²ããå¿
èŠããããéçšè² è·ã®åå ãšããŠç©ã¿äžãã£ãŠããéšåã§ãã ãããæ±çšåããããã«çšæããã®ã TemplateExpander ã§ãããã£ã³ããŒã³å®çŸ©ã®ãªãã« {user_id} / {campaign_id} / {payment_count} ãšãã£ããã¬ãŒã¹ãã«ããŒãæžããŠãããšãå®è¡æã« EvaluationData ããåãåºããå®å€ã«çœ®ãæããŸããäŒèšã³ãŒã (ããšãã° merpay_xxx_campaign-{campaign_id}-{user_status} ) ããããã·ã¥ã®ã·ãŒãæåå ( {user_id}:{campaign_id}:{payment_count} ) ãªã©ããã®å©çšäŸã§ããæ°ãããã¿ãŒã³ãå¿
èŠã«ãªã£ããšãããèšå®ãã¹ã¿åŽã®ãã³ãã¬ãŒãæååãå·®ãæ¿ããã°ãã³ãŒã倿Žã远å ã¬ã³ãŒããªãã«åäžãã£ã³ããŒã³ã®äžã§æ±ããŸãã æåã®å®è£
äºäŸ: ã³ãŒã決æžã®åæ°é£åãã£ã³ããŒã³ ãããŸã§ã«äœã£ãæ±çšåºç€ã®ãå
¥ãç©ãã䜿ã£ãæåã®ç§»è¡ã§ãããæèŠçã«ã¯ããªã¹ã¯ãäœããéçšè² è·ã®é«ããšããã ããå§ããããªããŸããæ°ããã§èç©ããŒã¿ã®å°ãªããã®ã»ã©ç§»è¡ãªã¹ã¯ãäžãããéçšè² è·ãé«ãã»ã©ç§»è¡ã®å¹æãåºãããããã§ããåœåã¯ã¡ã«ã«ãªã¢ãã€ã«åããã£ã³ããŒã³ãæåã®ç§»è¡å¯Ÿè±¡ã«æ®ããäºå®ã§ãããå
ã
ãããã¢ãŒããã¯ãã£å·æ°ã®ãã£ããã«ããæ¡ãæãã£ãŠããŸãããã皌åéå§ããæ¥ãæµ
ãèç©ããŒã¿ãå°ãªãäžæ¹ã§ 12 ãã¿ãŒã³ã®æ¯æéçšã§éçšè² è·ãé«ãããšãããŸãã«ã¹ã€ãŒãã¹ãããã®æ¡ä»¶ã«åœãŠã¯ãŸã£ãŠããããã§ãã ãã ãã¡ããã©ãã®ã¿ã€ãã³ã°ã§ãæ°èŠäŒç»ãšããŠãã³ãŒã決æžã®åæ°é£åãã£ã³ããŒã³ã ã®è©±ãç«ã¡äžãããŸããæ°èŠäŒç»ã§ããã°ãåžžæçšŒåããŠããæ¢åãã€ãã©ã€ã³ãæ¢ããã«èŒãæ¿ããããšããã³ã¹ããæããã«ãæå°æ§æã§ãèšå®å€ããŒã¹ã§ãã£ã³ããŒã³ãçµã¿ç«ãŠãã ããšã®æ€èšŒãã§ããŸããçµæãšããŠãæåã®äºäŸã¯ç§»è¡ã§ã¯ãªããŒãããã®ç«ã¡äžãã«æ¯ãçŽããæ¬äŒç»ã®ãã£ã³ããŒã³ã Rulebase äžã§çŽæ¥ç«ã¡äžãã圢ã§é²ããŸãããæ¢åã®ã¡ã«ã«ãªã¢ãã€ã«ãªã©ã®ç§»è¡ã¯ãå
ã®ãã§ãŒãºã«æã¡è¶ããŠããŸãã ãã®æ°èŠäŒç»ã¯ãN åå©çšããããšã«ä»äžãçºç«ããã·ã³ãã«ãªä»çµã¿ã§ãã客ããŸããèŠããšã䜿ãç¶ããã»ã©ã確å®ã«å€åŒããè¿ã£ãŠãããäœéšã«ãªããŸãã ãããRulebaseäžã§çµãã«ããã£ãŠå¿
èŠã ã£ãã®ã¯ 环èšã«ãŠã³ããšåšæå ±é
¬ãæ±ã ActionType ïŒ COUNT_AND_REWARD ïŒã 1 ã€ã ã远å ããããšã ãã§ãããããšã¯ æ¢åã® ConditionType (æé / ã客ããŸå±æ§ / 決æžå±æ§) ã®çµã¿åããã§å®è£
ã§ããç¹ã§ããRulebase äžã§ãã«ãŒã«è©äŸ¡ãšã¢ã¯ã·ã§ã³å®è¡ãæå€§éåå©çšãããªãã¹ãèšå®å€ã ãã§çµã¿ç«ãŠãã圢ããæåã«æ€èšŒã§ããã±ãŒã¹ã«ãªããŸããã ä»çµã¿èªäœã¯ã·ã³ãã«ã§ããã客ããŸã®ãšã³ããªç¶æ³ããã客ããŸå±æ§æ¡ä»¶ãã§èŠãŠã察象決æžããæ±ºæžå±æ§æ¡ä»¶ãã§çµã蟌ãã ããã§ã COUNT_AND_REWARD Executor ãã«ãŠã³ã¿ãã€ã³ã¯ãªã¡ã³ãããŸããã«ãŠã³ã¿ãèŠå®åæ°ã«éãããšãã€ã³ããä»äžããŠã«ãŠã³ã¿ããªã»ããããããããã£ã³ããŒã³æéäžãã£ãšç¹°ãè¿ãããšããæµãã§ããããŒã¿ãšããŠã¯ãCampaigns 1 è¡ãCampaignRules 1 è¡ãRuleConditions æ°è¡ããšããã·ã³ãã«ãªæ§é ã§è¡šçŸã§ããŸã (ç°¡ç¥åããã€ã¡ãŒãž)ã // Campaigns { "campaign_id": "...", "campaign_type": 9, // InfinitePayment "start_at": "2026-04-01", "end_at": "2026-09-30", "metadata": { ... } } // CampaignRules (1 ä»¶) { "trigger_type": "PaymentCharge", "action_type": "COUNT_AND_REWARD", "action_params": { "trigger_count": 3, "reward_currency_points": 100 } } // RuleConditions (3 ä»¶: æé / ãšã³ããªç¶æ³ / 決æžçš®å¥) { "condition_type": "period", "params": { ... } } { "condition_type": "user_attribute", "params": { "attribute": "entry_status", "promotion_key": "..." } } { "condition_type": "payment_attribute", "params": { "attribute": "transaction_type", "value": "code_payment" } } å®è£
äžã®æ°èŠè¿œå 㯠COUNT_AND_REWARD Executor ãšãã«ãŠã³ã¿ãä¿æãã 2 ã€ã®ããŒãã« (çŸåšã®ã«ãŠã³ããšãã°) ãããã§ããä»ã¯åºç€ã®æ±çšéšåããã®ãŸãŸçµã¿åãããŠå®çµããŸããã è£è¶³ãšããŠããã®åæ°é£åãã£ã³ããŒã³ã®æçŸ©ã¯ãåçŽãªãã£ã³ããŒã³æŽŸçãããããããªã£ããããšã§ã¯ãããŸãããSQL INSERT ã§äŒŒããã£ã³ããŒã³ãå¢ããããšèªäœã¯ãåŸæ¥ã®å°çšãã€ãã©ã€ã³æä»£ã§ããããªãã«ã§ããŠããŸãããRulebase åºç€ã§æ°ããå¯èœã«ãªã£ãã®ã¯ãCampaignType ããŸããã Ruleã»Action ã®èšå®ããŒã¹åå©çšã§ããäžåºŠå®è£
ãã Condition ã Action ã¯ãå¥ã® CampaignType ã®ãã£ã³ããŒã³ãããèšå®å€ã®çµã¿åããã§åŒã³åºããŸããåæ°é£åãã£ã³ããŒã³ã§äœ¿ã£ã COUNT_AND_REWARD ããä»ã®ãã£ã³ããŒã³ãã环ç©åæ°ã§çºç«ãããèŠä»¶ãæãŠã°ãã³ãŒããæžãè¶³ããã«èšå®ã ãã§äœ¿ãåããŸãã åãä»çµã¿ã¯ãåçãªæ¡ä»¶åå²ã 1 ã€ã®ãã£ã³ããŒã³èšå®ã§è¡šçŸããããšã«ã転çšã§ããŸããããšãã°ã¡ã«ã«ãªã¢ãã€ã«åããã£ã³ããŒã³ã§ã¯ã3 ã¹ããŒã¿ã¹ à 4 ããŒã¿ãã©ã³ãã 12 åã®ç¬ç«ãã£ã³ããŒã³å®çŸ©ãšããŠæ¯ææºåããŠããŸããããRulebase ãªã屿§æ¡ä»¶ã»ç¹°ãè¿ãæ¡ä»¶ã»äžéæ¡ä»¶ãçµã¿åãã㊠1 ã€ã®ãã£ã³ããŒã³èšå®ã®äžã§è¡šçŸã§ããŸãããN åããšã«çºç«ãã®ãããªåšæçãªæ¯ãèããã COUNT_AND_REWARD ã Executor åŽã«æã€ããšã§æ±çšããŒããšããŠæ±ããŸããä»åŸã®æ°äŒç»ã§ã¯ãæ¢åã®ã«ãŒã«ã»ã¢ã¯ã·ã§ã³ã®çµã¿åããã§è¡šçŸã§ããç¯å²ãåºãã£ãŠãããããããŒãããã®å®è£
ã§ã¯ãªããèšå®å€ã ãã§äœã£ãŠè©Šãããšããããå
¥ããããšããã®ãæ°åºç€ã®æå€§ã®ã¡ãªããã§ãã äœè«: ã©ã³ãã ãªã®ã«ãäœåºŠåŒããŠãåãéé¡ ä»æ§ãšããŠã¯ ãèŠå®åæ°ã«å°éããããè€æ°ã®åè£éé¡ããéã¿ä»ãã©ã³ãã ã§ 1 ã€ãåŒãåœãŠãã ãšããèŠä»¶ããããŸããçŽ çŽã« math/rand ã§æœéžããŠããŸããšãPub/Sub ã® at-least-once é
ä¿¡äžã§ã¯åã PaymentCharge ãåé
ä¿¡ããããšãã« 1 åç®ãš 2 åç®ã§å¥ã®éé¡ãéžã°ããŠããŸãããšããããŸããPointID ããŒã¹ã®åªçæ§ãã§ãã¯ã¯éã£ãŠããã®ã«ã2 åç®ã®è©Šè¡ããèŠããéé¡ãååä»äžé¡ãšãããããšããã±ãŒã¹ãèµ·ãããæ§é ã§ãã ããã§æœéžã¯ä¹±æ°ã§ã¯ãªã決å®è«çããã·ã¥ã§è¡ããŸããã user_id ã»ãã£ã³ããŒã³èå¥åã» payment_count ãçµã¿åãããæååãã·ãŒãã«ãSHA-256 ã§ããã·ã¥åãããã®ããéã¿ä»ãã§åè£ã 1 ã€éžã³ãŸããã¢ã«ãŽãªãºã ã®æŠç¥ã¯æ¬¡ã®ãšããã§ã (ç°¡ç¥åããã€ã¡ãŒãž)ã // seed ã®äŸ: "12345:campaign-abc:3" (user_id : campaign_id : payment_count) seed, _ := expander.Expand(params.DeterministicReward.SeedFormat) h := sha256.Sum256([]byte(seed)) v := binary.BigEndian.Uint64(h[0:8]) // å
é 8 ãã€ãã uint64 ãšããŠåãåºã var totalWeight uint64 for _, rv := range variations { totalWeight += rv.Weight } target := v % totalWeight // éã¿ã®åèšã§å²ã£ãäœã (ãããåè£éžæçšã®å€) var cumulative uint64 for i, rv := range variations { cumulative += rv.Weight if target < cumulative { return rv, i // 环ç©éã¿ã§åœãã£ãåè£ãéžæ } } ã客ããŸããèŠãã䜿ããã³ã«éãéé¡ãè¿ã£ãŠãããäœéšã¯ãã®ãŸãŸã«ãåã (user_id, campaign_id, payment_count) ã®çµã¿åããã«å¯ŸããŠã¯äœåºŠ retry ãèµ°ã£ãŠããå¥ããã»ã¹ããèªãŸããŠããåãéé¡ãäžæã«ç¢ºå®ããŸãã ãããŠãã·ãŒãããæãã°æœéžçµæã¯ç¢ºå®å€ãªã®ã§ãPub/Sub ã®ã€ãã³ãåŠçå®äºãåŸ
ããã«ãä»åä»äžãããéé¡ããèšç®ã§ããŸããæ±ºæžæåçŽåŸã® API ã¬ã¹ãã³ã¹ãããã³ããšã³ãåŽã§ãä»å㯠â ãã€ã³ãã§ãããšç¢ºå®è¡šç€ºãè¿ãããšãã§ããåŸæ®µã§ UserPoints ãæžãããããšã«éé¡ãå€ãã£ãŠèŠããããšãã£ãäžæŽåã®å¿é
ããããŸãããat-least-once ãš weighted random ãäž¡ç«ãããããã®ä»çµã¿ããã客ããŸãžã®æ©ã衚瀺ã«ããã®ãŸãŸäœ¿ãã圢ã«ãªã£ãŠããŸãã QA ç°å¢ã®æ¹åã«å©ãããã話 ä»åã® QAã§ã¯ããã€ãã®ç°å¢ãã¿ãŒã³ãåãæ¿ããŠå®æœããå¿
èŠããããå·¥æ°ããªã¥ãŒã ã«äžå®ãæããŠããŸãããã¡ããã©è¯ãã¿ã€ãã³ã°ã§ä»ãŸã§ Santa ãµãŒãã¹ã§ã¯å®çŸã§ããŠããªãã£ããã€ãã³ãé§åéšåå°çšã® QA è€è£œç°å¢ããããŒã ã¡ã³ããŒãäœããã£ãŠãããããšã§ã䞊è¡ã㊠QA ã宿œã§ããããã«ãªãã倧å€å©ãããŸããããã®è©³çŽ°ã¯æ¬é£èŒ 8 æ¥ç®ã® @mikupo ã®èšäº ã§è©³ãã解説ãããŠããŸãã ãããã« ä»åã®ãªãã¡ã¯ã¿ãªã³ã°ã§ã¯ãããã£ã³ããŒã³å®çŸ©ãã³ãŒãããããŒã¿ãžã ãšããæ¹éã®ããšã3 ããŒãã« + è©äŸ¡ãšã³ãžã³ã«åæ§æããŸãããããŒã³ã責任ãšã®äž¡ç«ã§å幎å¯ãããŠãããªãã¡ã¯ã¿ãªã³ã°ã®æ©äŒã諊ããã«æŽãã§ãå
¥ãç©ããäœãåã£ãŠæ¬çªã§ãã£ã³ããŒã³ãã²ãšã€çšŒåãããããšã§ãã·ã¹ãã ã«ä»åŸã®æ°èŠä»¶ã«ã€ããŠã®åãç¿ãäœãããšãã§ããŸããã ãã ããåæ°é£åãã£ã³ããŒã³èªäœã¯æ¬èšäºå·çæç¹ã§ã¯ããŒã³ãããã°ããã§ããŸã 掟çãã£ã³ããŒã³ã®å®äŸã¯ãããŸãããèšå®ã ãã§æŽŸçãç«ã¡äžããäžçã®æ¬æ Œæ€èšŒã¯ãããããã®æ°äŒç»ãéããŠè¡ã£ãŠãããã§ãŒãºã§ããå ããŠãã¡ã«ã«ãŒãåžžæéå
ãªã©ã®æ¢åã®ãã€ãã©ã€ã³ããŸã 皌åããŠãããTemporary ããããæ¬çªã«æ®ã£ããŸãŸã§ããåžžæçšŒåãããã£ã³ããŒã³ã·ã¹ãã ã§ã¯ãå
¥ãç©ãäœãé£ããããããæ¢ããã«èŒãæ¿ããã¿ã€ãã³ã°ãšæé ã®èšèšããããããããå
ã®æ¬é¡ã«ãªããŸãã ä»åã®èšäºã¯ä»¥äžã«ãªããŸãããªã«ãåèã«ãªãããšãããã°å¹žãã§ãã æ¬¡ã®èšäºã¯ orfeon ããã®ãTiDB / AlloyDB ã®å€§èŠæš¡ããŒãã«ãé«éã«BigQueryniåæããããã®å·¥å€«ãã§ããåŒãç¶ããæ¥œãã¿ãã ããã
åç»
該åœããã³ã³ãã³ããèŠã€ãããŸããã§ãã







