ããã«ã¡ã¯ãããã¯ãªã¼ãã®åéã§ããæè¿ãæ¥ã«å¯ããªã£ããã®ã§ãè¡£æ¿ãã追ãã¤ãã¦ãã¾ããã
ãã¦ã11/10ï¼éï¼ã«UMTP主å¬ã®Modeling Forum 2023ã¯ã¼ã¯ã·ã§ããããã¡ã¤ã³ã¢ããªã³ã°ã®å¼·åãªãã¼ã«: Event Stormingãä½é¨ããããã«åå ãã¦ããã®ã§ææ³ã¨ãã¡ã¢ã®æ´çãå
¼ãã¦ãã¹ããã¾ãã
ãã¡ã¤ã³ã¤ãã³ãã®ä¼æã«ããæ´åæ§æ
ä¿ããã®ä»çµã¿ã¯ContractS CLMã§é¨åçã«æ¡ç¨ãã¦ãã¾ããããã®é åã¯ãããããã§ããã¤ãã³ãã¹ãã¼ãã³ã°ã¨ããè¨èãã®ãã®ã¯ç¥ã£ã¦ãã¾ããããæ¥åã§ã¯æ¡ç¨ãã¦ããããçµé¨ãããã¾ãããä»åã®ã¯ã¼ã¯ã·ã§ãããéãã¦ãå¤ãã®å¦ã³ãããã¾ããã
ï¼2023/11/15 追è¨ï¼UMTPäºåå±ããmiroãã£ããã£å©ç¨è¨±å¯ãããã ããã®ã§ãç»åã追å ãã¾ããï¼
- ã¯ã¼ã¯ã·ã§ããæ¦è¦
- ã¤ãã³ãã¹ãã¼ãã³ã°ã¨ã¯
- é²ãæ¹
- ææ³
- çµããã«
ã¯ã¼ã¯ã·ã§ããæ¦è¦
ã¯ã¼ã¯ã·ã§ããã¯ãã¤ãã³ãã¹ãã¼ãã³ã°ãä½é¨ããæ
£ãããã¨ãç®çã¨ãã¦ãã¾ãã
1ãã¼ã 4~6人ã§æ§æããã¤ãã³ãã¹ãã¼ãã³ã°ã®ããã»ã¹ã«æ²¿ã£ã¦è°è«ããªããmiroä¸ã§ã¢ããªã³ã°ããã¾ããããã¼ãã¯å³æ¸é¤¨æ¥åã誰ããç¥ã£ã¦ããï¼å©ç¨ãããã¨ãããä¸æ¹ã§ããã®æ¥åã«ã¤ãã¦ãã¹ã¦ãç解ãã¦ãã人ã¯ããªããã¨ãçç±ã ããã§ããå³æ¸é¤¨å¸æ¸ã¨å©ç¨è
ã2ã¤ã®ã¢ã¯ã¿ã¼ããããã®æ¥åãåå è
å
¨å¡ï¼30人ï¼ï¼ã§åæ
ãã¦æ´çãã¾ããã
å
·ä½çã«ã¯ãæ¸ç±"Learning Domain Driven Designâï¼ä»¥ä¸ãLDDDï¼ã§ç´¹ä»ããã¦ããã¹ãããã«æ²¿ã£ã¦ï¼ä¸é¨çç¥ãã¦ï¼é²ãã¦ããå½¢å¼ã§ããã¹ããããã¤ã¹ãããã§é²ãã¦ããä¸ã§çã¾ããçåç¹ãä¸æç¹ãé½åº¦ãè¬å¸«ï¼Chatworkå è¤ããï¼GMOã¤ã³ã¿ã¼ãããæç¬ããï¼ã«èããã¨ããè´
æ²¢ãªæéã§ããã
ã¤ãã³ãã¹ãã¼ãã³ã°ã¨ã¯
ã¤ãã³ãã¹ãã¼ãã³ã°ã¯ãã¬ã¤ã³ã¹ãã¼ãã³ã°ã®ãã¡ã¤ã³ã¤ãã³ãçã§ããã¤ã¾ããã¤ãã³ããã¨ã«ããçºæ£ããã¦å¾ã
ã«åæããã¦ãããã¡ã¤ã³ã¢ããªã³ã°ã®ææ³ã§ãããã®ã¢ããã¼ãã¯ããã¡ã¤ã³ä¸ã®éè¦ãªé¢å¿ãã¨ã§ããã¤ãã³ã=åºæ¥äºï¼ã³ãï¼ã«çç®ãã¦ãã¾ãã
ã¤ãã³ãã«çç®ããçç±ã¨ãã¦ã以ä¸ãããã¾ãã
- ã¤ãã³ããåããã°ããã®ã¤ãã³ããçã¿åºãããµãã¾ããåãã
- ã¤ãã³ãã¯ãããã¢ãã¨å¿
ãé¢ä¿ããããã³ã³ããã¹ããããã®ã§åæããããã
- éã«ã¢ãããã¢ããã¼ãããã¨ãè¤æ°ã³ã³ããã¹ããããå ´åããããçºæ£ããããã
ã¤ãã³ãã¹ãã¼ãã³ã°ã¯ããã°ãã¯ãã£ã¼ãããã»ã¹ã¢ããªã³ã°ãã½ããã¦ã§ã¢ãã¶ã¤ã³ããæ§æããã¾ã*1ãåå è ã®ç¥è¦ãèªèãæããªãããæ¥åã®æµããæ´çãããã·ã¼ã³ã«ã¯ãã£ãããããã§ãã
é²ãæ¹
1. ã¤ãã³ããæ´çããï¼ããã°ãã¯ãã£ã¼ï¼
ã¯ã¼ã¯ã·ã§ããã§ã¯ãã¾ã以ä¸ã®æµãã§ã¤ãã³ããæ´çãã¾ããã
- ã¤ãã³ããæ¸ãåºã
- ã¤ãã³ãã¯åºæ¥äºãªã®ã§åè©ã®éå»åè©å½¢ã§è¡¨ç¾ãããã®æ®µéã§ã¯ä»è
ã¨ã®éè¤ã¯æ°ã«ããªãã
- ä¾ï¼
å©ç¨è ãç»é²ãã
ãèµæ¸ã貸ãåºãã
- ä¾ï¼
- ã¤ãã³ãã¯åºæ¥äºãªã®ã§åè©ã®éå»åè©å½¢ã§è¡¨ç¾ãããã®æ®µéã§ã¯ä»è
ã¨ã®éè¤ã¯æ°ã«ããªãã
- ã¤ãã³ããç²¾æ»ãã
- åããã®ã»ä¼¼ã¦ãããã®ãã¾ã¨ãã
- ç¹ã«ãç¨èªã®ãããã«æ³¨æãã¦ããã¿ã¹è¨èªã¨ãªãããã
- ã¤ãã³ãã¯ãã¡ã¤ã³ã®ç¶æ å¤åã表ãããã確èªãé²è¦§ã®ãããªç¶æ ãå¤åãããªããã®ã¯é¤å¤ãã
- åããã®ã»ä¼¼ã¦ãããã®ãã¾ã¨ãã
- ã¤ãã³ããå·¦ããå³ã¸æç³»åã«ä¸¦ã¹ã
- åæã«èµ·ããã¤ãã³ãã¯ç¸¦ã«ä¸¦ã¹ã
- æç³»åãé ã«èªã¿åããã¦çç¾ããªãã確èªããï¼ã¦ã©ã¼ã¯ã¹ã«ã¼ï¼
- ä¾ãã°ãç»é²ãã¦ããªãæ å ±ãçªç¶æ´æ°ãã¦ããªãã ãªã©
- 足ããªããã°ããã®æ®µéã§ã¤ãã³ãã追å ãã
â» LDDDã«è¨è¼ããã¦ãããã§ã¼ãº
ã«ã¤ãã¦ã¯ãã¯ã¼ã¯ã·ã§ããã§ã¯ã¹ããããã¾ããã
ã¤ãã³ãã¹ãã¼ãã³ã°ã§ã¯è°è«ãç½ç±ãããã横éã«å¤ãããããå ´åã¯ããããã¹ãããã¨ãã¦ã¡ã¢ãæ®ãã¦è°è«ãå ã¸é²ãã¾ããä¾ãã°ããçºæ³¨ããæ¬ã®æ¯æãæ¹æ³ã¯éè¡æ¯ãè¾¼ã¿ãã¯ã¬ã¸ããã«ã¼ãæãããã¨ããè«ç¹ã¯å³æ¸é¤¨æ¥åã®æ´çããè¦ãã°ããããã¹ãããã§ãã
2. ã¤ãã³ãããããã»ã¹ã®æµããè¦ã¤ããï¼ããã»ã¹ã¢ããªã³ã°ï¼
ã³ãã³ãã¨ã¢ã¯ã¿ã¼ï¼ããªã·ã¼ãã¤ãªãã
ã¤ãã³ããæã£ãã次ã¯ããã®ã¤ãã³ããçã¿åºããµãã¾ãã®æ´çã§ãã
- ã¤ãã³ãããã³ãã³ããä½ã
- ã³ãã³ãã¯ãªã¯ã¨ã¹ããªã®ã§åè©ã®ç¾å¨å½¢ï¼å½ä»¤å½¢ï¼ã¨ãã¦è¡¨ç¾ãããæ¥æ¬èªã®å ´åãä½è¨æ¢ãã¯åããã«ããã®ã§éæ¨å¥¨ã¨ã®ãã¨ã
èµæ¸ã貸ãåºãã
ï¼ã¤ãã³ãï¼âèµæ¸ã貸ãåºã
ï¼ã³ãã³ãï¼
- ã³ãã³ãããªã¯ã¨ã¹ãããã¢ã¯ã¿ã¼ãé ç½®ãã
- ã·ã¹ãã ãèªåçï¼é£éçã«ãªã¯ã¨ã¹ãããå ´åã¯ããªã·ã¼
- ããªã·ã¼ã¯æ¬¡ã®ã³ãã³ãããªã¯ã¨ã¹ãããããªã¬ã¼ã®ãããªãã®
- ããªã·ã¼ã®ä¾ï¼
æ¬ãå ¥è·ãã
ï¼ã¤ãã³ãï¼->管ççªå·æ¡çªã«ã¼ã«
ï¼ããªã·ã¼ï¼->管ççªå·ãæ¡çªãã
ï¼ã³ãã³ãï¼
ã³ãã³ããå®è¡ããããã®ãªã¼ãã¢ãã«ãå®ç¾©ãã
ã³ãã³ããå®è¡ããããã«ä½ãããæ å ±ãå¿ è¦ã§ããããã®æ å ±ããããªã¼ãã¢ãã«ã§ããã·ã¹ãã å¤ã®ãªã¼ãã¢ãã«ã表ç¾ãã¦ããã®ãèã§ãã
- ãªã¼ãã¢ãã«ã追å ãã
- è¤æ°ã®ãªã¼ãã¢ãã«ããã³ãã³ããå®è¡ããå ´åããã
- ä¾ãã°ã
èµæ¸ã貸ãåºã
ï¼ã³ãã³ãï¼ããã«ãèµæ¸
ï¼ãªã¼ãã¢ãã«ï¼ã¨è²¸åºç¶æ³
ï¼ãªã¼ãã¢ãã«ï¼ãå¿ è¦
- ä¾ãã°ã
- è¤æ°ã®ãªã¼ãã¢ãã«ããã³ãã³ããå®è¡ããå ´åããã
- ã©ã®ã¤ãã³ããããªã¼ãã¢ãã«ãä½ãããã®ããç´ã¥ãã
èµæ¸ã貸ãåºãã
ï¼ã¤ãã³ãï¼å¾ã«ã貸åºç¶æ³
ï¼ãªã¼ãã¢ãã«ï¼ãæ´æ°ããã
- ã·ã¹ãã å¤ã®ãªã¼ãã¢ãã«ã表ç¾ãã¦ãã
- å©ç¨è ç»é²æã®èº«å証ææ¸ ãªã©
å¤é¨ã·ã¹ãã ã追å ãã
ã¢ããªã³ã°å¯¾è±¡ã®æ¥åã¨ã¯ç´æ¥é¢ä¿ã®ãªãå¤é¨ã·ã¹ãã ãããå ´åã¯ãè°è«ã®çºæ£ãé¿ããããæ示ããã ãã«çãã¾ãã
3. ã³ãã³ãã¨ã¤ãã³ãããéç´ãè¦ã¤ããï¼ã½ããã¦ã§ã¢ãã¶ã¤ã³ï¼
æå¾ã«ä¸é£ã®æµãã俯ç°ãã¦ã¿ã¦ãã³ãã³ããåãåããå¦ççµæã¨ãã¦ã¤ãã³ããçã¿åºãéç´ãè¦ã¤ãã¾ãã
å½ããåã§ããããã®ã¹ãããã¯æ©æ¢°çã«ã¯åºæ¥ããã³ãã³ãã¨ã¤ãã³ãããã©ã®ãããªæ¦å¿µãããã®ãè°è«ãå¿
è¦ã§ããã¤ãã³ãã¹ãã¼ãã³ã°ãç¨ããªãããã¢ãªã³ã°ä¸å¿ã®ãã¡ã¤ã³ã¢ããªã³ã°ã§ãå¤ãããé£ããã¹ãããã§ããéç´ã¯åè©ã§è¡¨ç¾ããã®ãä¸è¬çãªã®ã§ããã®å½åã«ç¸å¿ãã責åãªã®ããåå²ï¼çµ±åãããªãã©ã¤ããµã¤ã¯ã«ã¯é©åãã¨ãã観ç¹ãéè¦ã§ãã
ææ³
çµæ¥è°è«ããç¶ãã¦ãç²å´æã¨å å®æã§æºããããã¯ã¼ã¯ã·ã§ããã§ãããã¤ãã³ãã¹ãã¼ãã³ã°åä½é¨ã§ããããè¯ãç¹ã¨æ³¨æç¹ãè¦ãã¦ãã¾ããã
è¯ãç¹
è°è«ãé²ãããã
ã¢ããªã³ã°ãããã¬ã¼ã ã¯ã¼ã¯ãªã®ã§å½ããåã¨è¨ãã°å½ããåã§ãããã¹ããããã¤ã¹ãããã§åå è ã®æèã»èå³ãéä¸ã§ããã®ã§ãè°è«ãé²ããããæãã¾ãããã¯ã¼ã¯ã·ã§ããã®åããã¼ã ã¡ã³ãã¼ã¨ã¯å対é¢ããã¤å³æ¸é¤¨æ¥åçµé¨è ï¼ãã¡ã¤ã³ã¨ãã¹ãã¼ãï¼ä¸å¨ã§ããããé©åº¦ãªçºæ£ã¨åæãç¹°ãè¿ããªãããã¡ã³ãã¼å ¨å¡ãç´å¾ããéç´ã®å®ç¾©ã¾ã§æéå ã«é²ãããã¨ãã§ãã¾ããã
éç´æ¤è¨æã«åæã®èªèãæãããã
ä¸ã¤ç®ã¨ä¼¼ããããªè¦³ç¹ã§ã¯ããã¾ãããã¤ãã³ãã«çç®ããæ¥åã®æµããåå è å ¨å¡ã§ä½ãä¸ãã¦ãããããããéç´ã®è°è«ãå§ãããã¨ããã¨ããã¾ã§ã®ç¥èãæã£ãç¶æ ã§å§ãããã¾ããå ´åã«ãããçºæ£ããããã±ã¼ã¹ãããããããã¾ãããããã¨åé¡é åãæããã«ãããã±ã¼ã¹ã«ããã¦ãåå è ã®èªèãæã£ãç¶æ ã§è°è«ãéå§ã§ããã®ã¯ã¨ã¦ãå¼·åã§ãã
è¦æ±ã®ææ§ããæé¤ã§ãã
ã¤ãã³ããæç³»åã«ä¸¦ã³ãã¦ã©ã¼ã¯ã¹ã«ã¼ã§æ´åæ§ãæ ä¿ã§ããã®ã§ãã¦ã¼ã¹ã±ã¼ã¹ã®ç¢ºãããããæ¤è¨¼ã§ãã¾ããContractSã§ã¯äºåè¨è¨ã¨ãã¦ããã¹ããã¹åæãä¸é¨é åã«æ¡ç¨ãã¦ãã¾ãããè¿ãããã®ãæãã¾ãããç¹°ãè¿ãå®æ½ãããã¨ã§ææ§ããæé¤ããä¸ç¢ºå®æ§ãæ¸ãããªãã価å¤æ¤è¨¼ããã¢ããã¼ãã«ãã£ãããããã§ãã
注æç¹
å¹æãæ大åããããã«ã¯ã¢ã¼ããã¯ãã£ã®å¶ç´ããã
注æãå¿
è¦ãªã®ã¯ãã¤ãã³ãã¹ãã¼ãã³ã°ã®å¹æãæ大åããããã«ã¯CQRS(Command-Query Responsibility Segregation)+ã¤ãã³ãã½ã¼ã·ã³ã°ã®æ§æãåæã¨ãªã£ã¦ããç¹ã§ãã
ãµãã¾ãã®çµæã¨ãã¦çã¿åºããããã¡ã¤ã³ã¤ãã³ããè¨é²ããããã®ã¤ãã³ããããªã¼ãã¢ãã«ãä½ãããåæã®ãããCQRSã®ããã«ã¢ãã«ã¬ãã«ã§åé¢ããæ§æãå¿
è¦ã§ãããä½ããã¤ãã³ããè¨é²ãã¦ããããã«ã¤ãã³ãã½ã¼ã·ã³ã°ãæ¡ç¨ãã¦ããªãã¨ãã¤ãã³ããã¤ãã³ãã®ã¾ã¾æ°¸ç¶åã§ãã¾ããã
ã¯ã¼ã¯ã·ã§ããã§ã¯æç¬ãããã¹ãã¼ãã½ã¼ã·ã³ã°ã«ããå®è£
æ¹å¼ãã©ã¤ãã³ã¼ãã£ã³ã°ãã¦ããã¾ããããã³ã¼ãããã¤ãã³ãã®ç¥èã¯æ¶ãã¦ããã®ã§ããããã¢ãã«ã¨ã³ã¼ãã«ä¹é¢ãçºçãã¦ã¢ã¸ãªãã£ã失ãæ¸å¿µãããã¾ãã
éã«è¨ãã°ãCQRS+ã¤ãã³ãã½ã¼ã·ã³ã°ã®æ§æã§ããã°ãããã»ã©å¼·åãªã¢ããªã³ã°ãã¬ã¼ã ã¯ã¼ã¯ã¯ãªãã¨ãæãã¾ãã
çµããã«
åä½é¨ã®ã¤ãã³ãã¹ãã¼ãã³ã°ã§ããããã¨ã¦ãèå³æ·±ããã®ã§ãããé©ç¨ããã«ã¯ã¢ã¼ããã¯ãã£è¦³ç¹ã§è¥å¹²ã®ãã¼ãã«ããããã®ã®ãã¨ã³ã¸ãã¢è·ä»¥å¤ã®ã¡ã³ãã¼ã¨å ±éè¨èªã§ä¼è©±ããæåã®ä¸æ©ã¨ãã¦å¹æãããããã§ãã幸ããJavaã«ã¯Axon Frameworkã¨ããã¤ãã³ãã½ã¼ã·ã³ã°ããµãã¼ããããã¬ã¼ã ã¯ã¼ã¯ããããããå°ããæ¤è¨¼ãããã¨ãã§ãããã§ãã試ããçµæã¯ã¾ãå¥è¨äºã§ã¾ã¨ãããã¨æãã¾ãã
*1:å¿ ããããããã®ããã»ã¹ãããªããã°ãªããªããã¨ããããã§ã¯ãªãããã§ãã