AIæä»£ã«ããæãããããœãããŠã§ã¢ã¢ãŒããã¯ãã£ãããäœç³»çã«æŽçããŠã¿ã
æè¿ãçæAIã®ãããã§ã³ãŒããæžãããšèªäœã¯æ¬åœã«æ¥œã«ãªã£ããªããšæããŸãã
ã§ããAIã«äžžæãããåã«ããããããã³ãŒããã©ãåãåããã©ãã«çœ®ãããã¯äººéãæ±ºããªãããããªããªããšæããŠããŸãã
ãã®å
šäœçãªå€æãæ±ãã®ãããœãããŠã§ã¢ã¢ãŒããã¯ãã£ãšããäœçœ®ä»ããªã®ããªãšæããããå€ããªããŸããã
èšèšæ¹éãææ§ãªãŸãŸã ãšãå®è£
ãéããªãåãèšèšãã°ãã£ã°ãã£ã«ãªãã¹ããŒããäžãã£ãŠããŸããŸããããããã®AIæä»£ã«æ¬åœã«å¿
èŠãªã®ã¯ããã¹ãŠã®ã³ãŒããèªåã§æžãåã§ã¯ãªãããAIãå®å
šã«ã³ãŒããæžãæããããå¢çãããããã«åŒãåã ãšæã£ãŠããŸãã
ãã ãã¢ãŒããã¯ãã£ã®åé¡ãå¢çç·ã¯ããšã³ãžãã¢å士ã§ãç¹ã«ãããããããŒãã§ãã
ãããããã®åé¡ã¯ã¡ãã£ãšéãããããªãïŒããšæãããéšåããããããããŸãããããŸãã¯å
šäœåããã£ããæŽãããã®ãäžã€ã®èŠç¹ããšããŠãæ°è»œã«èªã¿é²ããŠãããããå¬ããã§ãð
ãã®èšäºãèªããšãããããš
ã¢ãŒããã¯ãã£ãæŽçããããã®5ã€ã®åé¡è»ž
ã¢ããªã¹ãã¢ãžã¥ã©ãŒã¢ããªã¹ããã€ã¯ããµãŒãã¹ã®éã
ã¬ã€ã€ãŒããšã¯ãªãŒã³ã¢ãŒããã¯ãã£ç³»çµ±ã®éã
ãããµãŽãã«ããªããªã³ãã¯ãªãŒã³ã®é¢ä¿
Vertical Sliceããã€ã¯ãã«ãŒãã«ã®äœçœ®ã¥ã
ã€ãã³ãé§åãCQRSãSagaãªã©ã解決ããåé¡
è€æ°ã®ã¢ãŒããã¯ãã£ãçµã¿åãããèãæ¹
ååŠè ã«ãããããããåŠç¿é åº
ä»åã¯ã·ãªãŒãºå šäœã®ãå°å³ããæŽçãã
æ¬ã·ãªãŒãºã§ã¯ãAIæä»£ã«åŠã³çŽããããœãããŠã§ã¢ã¢ãŒããã¯ãã£ããåºç€ããé çªã«æŽçããŠãããŸãã
ä»åã®å šäœæŠèŠç·šã§ã¯ãåå¥ã®å®è£ æ¹æ³ãžå ¥ãåã«ããŸãå šäœåã確èªããŸãã
ã¢ããªã¹ããã€ã¯ããµãŒãã¹ãã¯ãªãŒã³ã¢ãŒããã¯ãã£ãã€ãã³ãé§åãCQRSãªã©ã¯ããã¹ãŠåãåºæºã§æ¯èŒã§ãããã®ã§ã¯ãããŸããã
ã¢ããªã¹ãšãã€ã¯ããµãŒãã¹ã¯ãã·ã¹ãã ã®åå²ããããã€åäœãæ±ããŸãã
ã¬ã€ã€ãŒããã¯ãªãŒã³ã¢ãŒããã¯ãã£ã¯ãã¢ããªã±ãŒã·ã§ã³å éšã®è²¬åãšäŸåé¢ä¿ã«é¢ããèãæ¹ã§ãã
CQRSãSagaã¯ãç¹å®ã®ããŒã¿ç®¡çäžã®åé¡ã解決ããèšèšãã¿ãŒã³ã«åœãããŸããSPAãšSSRã¯ãäž»ã«Webã¢ããªã±ãŒã·ã§ã³ã®ç»é¢æ§æãæç»æ¹æ³ã衚ããã®ã§ãã
Microsoftã®Azure Architecture Centerã§ããN-tierããã€ã¯ããµãŒãã¹ãã€ãã³ãé§åãWeb-Queue-Workerãªã©ã¯ã¢ãŒããã¯ãã£ã¹ã¿ã€ã«ãšããŠæŽçãããCQRSãSagaãBFFãªã©ã¯èšèšãã¿ãŒã³ãšããŠå¥ã«æ²èŒãããŠããŸãã
ã€ãŸããå³å¯ã«ã¯åãçš®é¡ã®çšèªã§ã¯ãããŸããã
æ¬èšäºã§ã¯ãåçšèªããäœã決ããããã®ãã®ãªã®ãããçè§£ãããããããããåŠç¿çšã«5ã€ã®èŠç¹ãžæŽçããŸãã
ãœãããŠã§ã¢ã¢ãŒããã¯ãã£ã®å šäœå
ãœãããŠã§ã¢ã¢ãŒããã¯ãã£
â
ââ ã·ã¹ãã ã®åå²ã»ãããã€
â ââ ã¢ããªã¹
â ââ ã¢ãžã¥ã©ãŒã¢ããªã¹
â ââ SOA
â ââ ãã€ã¯ããµãŒãã¹
â ââ ãµãŒããŒã¬ã¹
â
ââ ã¢ããªã±ãŒã·ã§ã³å
éš
â ââ ã¬ã€ã€ãŒã
â ââ ãããµãŽãã«
â ââ ãªããªã³
â ââ ã¯ãªãŒã³
â ââ Vertical Slice
â ââ ãã€ã¯ãã«ãŒãã«
â
ââ éä¿¡ã»åŠçæ¹åŒ
â ââ ãªã¯ãšã¹ãã»ã¬ã¹ãã³ã¹
â ââ ã€ãã³ãé§å
â ââ Web-Queue-Worker
â ââ ãªãŒã±ã¹ãã¬ãŒã·ã§ã³
â ââ ã³ã¬ãªã°ã©ãã£
â
ââ ããŒã¿ç®¡ç
â ââ å
±æããŒã¿ããŒã¹
â ââ Database per Service
â ââ CQRS
â ââ Event Sourcing
â ââ Saga
â
ââ ããã³ããšã³ã
ââ MVC
ââ MVVM
ââ SPA
ââ SSR
ââ BFF
ââ ãã€ã¯ãããã³ããšã³ã
ããããã®åé¡ãçãã質åã¯ã次ã®ããã«ç°ãªããŸãã
åé¡äž»ã«èããããšã·ã¹ãã ã®åå²ã»ãããã€ã©ã®åäœã§åãããªãªãŒã¹ãããã¢ããªã±ãŒã·ã§ã³å éšè²¬åãšäŸåé¢ä¿ãã©ãæŽçãããéä¿¡ã»åŠçæ¹åŒã³ã³ããŒãã³ãå士ãã©ã飿ºããããããŒã¿ç®¡çããŒã¿ãèª°ãææããã©ãæŽåããããããã³ããšã³ãç»é¢ãç¶æ ãããã¯ãšã³ããã©ãåæ ããã
ããããã¯ããã®é çªã«æ²¿ã£ãŠä»£è¡šçãªæ§æã確èªããŸãã
1ïŒã·ã¹ãã ã®åå²ã»ãããã€ã«é¢ããã¢ãŒããã¯ãã£
æåã®åé¡ã¯ãã·ã¹ãã ãã©ã®åäœã«åããã©ã®åäœã§ãããã€ããããšããèŠç¹ã§ãã
ã¢ããªã¹

ã¢ããªã¹ã¯ãã¢ããªã±ãŒã·ã§ã³å šäœãäžã€ã®åäœãšããŠãããã€ããæ§æã§ãã
ç»é¢ãAPIãæ¥åããžãã¯ãããŒã¿ã¢ã¯ã»ã¹ãªã©ããäžã€ã®ã¢ããªã±ãŒã·ã§ã³ã«å«ãŸããŸãã
æ§æãæ¯èŒçåçŽã§ãããŒã«ã«éçºããã¹ãããããã°ããããã€ã®æµããçè§£ããããç¹ãç¹åŸŽã§ããå°èŠæš¡ããŒã ãæ°èŠãµãŒãã¹ã§ã¯ãååã«åççãªéžæã«ãªããŸãã
ã¢ããªã¹ã§ããããšãšãã³ãŒããæŽçãããŠããªãããšã¯å¥åé¡ã§ãã
Microsoftã®ã¬ã€ãã§ããã¢ããªã·ãã¯ãšã¯ãåäžã®åäœãšããŠãããã€ãããããšããæããŠãããå éšãè€æ°ã®ã¬ã€ã€ãŒã«æŽçããæ§æã玹ä»ãããŠããŸãã
ã¢ãžã¥ã©ãŒã¢ããªã¹

ã¢ãžã¥ã©ãŒã¢ããªã¹ã¯ããããã€åäœãäžã€ã«ä¿ã¡ãªãããå éšã泚æãåšåº«ãäŒå¡ãªã©ã®æ¥åã¢ãžã¥ãŒã«ãžåããæ§æã§ãã
åã«ãã£ã¬ã¯ããªãåå²ããã ãã§ã¯ãããŸããã
åã¢ãžã¥ãŒã«ã®è²¬åãå ¬éã€ã³ã¿ãŒãã§ãŒã¹ãäŸåæ¹åãããŒã¿æææš©ãæç¢ºã«ããŸãã
ã¢ããªã¹ã®éçšäžã®åçŽããç¶æããªãããæ©èœéã®çµåãæããããç¹ãç¹åŸŽã§ããå°æ¥çã«äžéšã®ã¢ãžã¥ãŒã«ããµãŒãã¹ãšããŠåãåºãå Žåã«ããå¢çãæ€èšãããããªããŸãã
ãã ãããå°æ¥ã¯ãã€ã¯ããµãŒãã¹ã«ãããããããªãããšããçç±ã ãã§ãæåããéåºŠãªæœè±¡åãæã¡èŸŒãå¿ èŠã¯ãããŸããã
ãŸãã¯çŸåšã®æ¥åå¢çãæç¢ºã«ããããšãå ã§ãã
SOA

SOAã¯ãService-Oriented Architectureã®ç¥ã§ãã
顧客管çãæ±ºæžãåšåº«ç®¡çãªã©ã®æ¥åæ©èœããµãŒãã¹ãšããŠæäŸããäŒæ¥å ã®è€æ°ã·ã¹ãã ããåå©çšããŸãã
ãã€ã¯ããµãŒãã¹ãããµãŒãã¹ã®ç²åºŠã倧ãããåå¥ã®ã¢ããªã±ãŒã·ã§ã³ã现ããåå²ããããšããããäŒæ¥å šäœã®ã·ã¹ãã çµ±åãç®çãšããããšãå€ãæ§æã§ãã
AWSããSOAã®ãµãŒãã¹ã¯æ¯èŒç倧ããªæ¥åèœåãæ åœãããã€ã¯ããµãŒãã¹ã¯ããå°ããªæ©èœãžç¹åããåŸåããããšèª¬æããŠããŸãã
ãã€ã¯ããµãŒãã¹

ãã€ã¯ããµãŒãã¹ã§ã¯ãã·ã¹ãã ãè€æ°ã®å°ããªèªåŸãµãŒãã¹ãžåå²ããŸãã
åãµãŒãã¹ã¯ç¹å®ã®æ¥åèœåãæ åœããAPIãã¡ãã»ãŒãžãéããŠé£æºããŸããç¬ç«ããŠãããã€ã§ããååãšããŠèªèº«ã®ããŒã¿ã管çããããšãéèŠãªç¹åŸŽã§ãã
ãµãŒãã¹åäœã§ãªãªãŒã¹ãã¹ã±ãŒã«ãè¡ãããããè€æ°ããŒã ã«ããéçºãšçžæ§ããããŸãã
äžæ¹ã§ããããã¯ãŒã¯é害ãã¿ã€ã ã¢ãŠãããµãŒãã¹éèªèšŒãçµææŽåæ§ã忣ãã¬ãŒã·ã³ã°ãªã©ã忣ã·ã¹ãã ç¹æã®èª²é¡ãå¢ããŸãã
ãµãŒãã¹ãå°ããåããã°ãã·ã¹ãã å šäœãåçŽã«ãªãããã§ã¯ãããŸããã
ç¬ç«ããŠå€æŽã»ãããã€ããå¿ èŠãããã®ãããã®å©çãéçšã®è€éããäžåãã®ãã
ãã®å€æãå¿ èŠã§ãã
ãµãŒããŒã¬ã¹

ãµãŒããŒã¬ã¹ã¯ãã¯ã©ãŠãäºæ¥è ãã€ã³ãã©ã®ããããžã§ãã³ã°ãã¹ã±ãŒãªã³ã°ãä¿å®ãæ åœããå®è¡ã¢ãã«ã§ãã
ãµãŒããŒãååšããªããšããæå³ã§ã¯ãããŸãããéçºè ããµãŒããŒç®¡çãçŽæ¥è¡ãããã³ãŒããããŒã¿ãžéäžã§ããããã«ããèãæ¹ã§ãã
HTTPãªã¯ãšã¹ãããã¡ã€ã«ã®ã¢ããããŒããã¡ãã»ãŒãžåä¿¡ãªã©ãèµ·ç¹ãšããåŠçã«åããŠããŸãã
ãã ãããµãŒããŒã¬ã¹ã¯ã¢ããªã¹ããã€ã¯ããµãŒãã¹ãšå®å šã«åãåé¡ã§ã¯ãããŸããã
ã¢ããªã¹ã®äžéšåŠçã ãããµãŒããŒã¬ã¹é¢æ°ãžåãåºãæ§æãå¯èœã§ãã
2ïŒã¢ããªã±ãŒã·ã§ã³å éšãæŽçããã¢ãŒããã¯ãã£
ã·ã¹ãã å šäœã®å岿¹æ³ã確èªãããšããã§ã次ã¯äžã€ã®ã¢ããªã±ãŒã·ã§ã³ããµãŒãã¹ã®å éšãèããŸãã
ã¬ã€ã€ãŒãã¢ãŒããã¯ãã£

ã¬ã€ã€ãŒãã¢ãŒããã¯ãã£ã§ã¯ãã³ãŒããæè¡çãªè²¬åããšã®å±€ãžåããŸãã
ãã¬ãŒã³ããŒã·ã§ã³å±€
â
ã¢ããªã±ãŒã·ã§ã³å±€
â
ãã¡ã€ã³å±€
â
ã€ã³ãã©ã¹ãã©ã¯ãã£å±€
æ§æãçè§£ãããããå€ãã®æ¥åã·ã¹ãã ã§å©çšãããŠããŸãã
ãã ããå žåçãªã¬ã€ã€ãŒãæ§æã«ã¯ãæ§è³ªã®ç°ãªãäºã€ã®èª²é¡ããããŸãã
äžã€ç®ã¯ãäžã€ã®æ©èœã«é¢ä¿ããã³ãŒããè€æ°ã¬ã€ã€ãŒãžæ£ãã°ããããããšã§ãã
泚æäœææ©èœã倿Žããã ãã§ããControllerãServiceãRepositoryãªã©ã暪æããå ŽåããããŸãããã®åé¡ã«å¯Ÿããéžæè¢ããVertical Sliceã§ãã
äºã€ç®ã¯ãå®è£ æ¹æ³ã«ãã£ãŠãéèŠãªæ¥åããžãã¯ãããŒã¿ããŒã¹ããã¬ãŒã ã¯ãŒã¯ãªã©ã®æè¡è©³çްãžäŸåããããããšã
ãã®äŸåæ¹åãèŠçŽãåæ©ããããããµãŽãã«ããªããªã³ãã¯ãªãŒã³ãšãã£ãèãæ¹ãç»å ŽããŸãã
ãããµãŽãã«ã»ãªããªã³ã»ã¯ãªãŒã³ã¯è¿ã系統ã«ãã
ãããµãŽãã«ããªããªã³ãã¯ãªãŒã³ã¢ãŒããã¯ãã£ã¯ãå®å šã«åããã®ã§ã¯ãããŸããã
ããããäºãã«ç¡é¢ä¿ãªäžã€ã®éžæè¢ã§ããããŸããã
Robert C. Martinæ°ã¯ã¯ãªãŒã³ã¢ãŒããã¯ãã£ã®åå žã§ããããµãŽãã«ããªããªã³ãªã©ã¯çްéšããç°ãªããã®ã®ãé¢å¿ã®åé¢ãæ¥åã«ãŒã«ã®ç¬ç«ãšããå ±éç®çãæã€ãéåžžã«ãã䌌ãã¢ãŒããã¯ãã£ã ãšèª¬æããŠããŸãã
åŠç¿æã«ã¯ãäžã€ã®çްããªå³ã®éããæèšãããããæ¬¡ã®å ±éååãæŒãããæ¹ãéèŠã§ãã
æ¥åã«ãŒã«ãäžå¿ãžçœ®ã
UIãããŒã¿ããŒã¹ãå€åŽã®è©³çްãšããŠæ±ã
äŸåé¢ä¿ãå€åŽããå åŽãžåãã
å€éšæè¡ãšã®æ¥ç¶ç¹ãã€ã³ã¿ãŒãã§ãŒã¹ã§åé¢ãã
ãããµãŽãã«ã¢ãŒããã¯ãã£

ãããµãŽãã«ã¢ãŒããã¯ãã£ã¯ãPorts and AdaptersãšãåŒã°ããŸãã
ã¢ããªã±ãŒã·ã§ã³ãšå€éšäžçã®æ¥ç¶ç¹ãPortãšããŠå®çŸ©ããWeb APIãããŒã¿ããŒã¹ãå€éšãµãŒãã¹ãªã©ãAdapterãšããŠæ¥ç¶ããŸãã
ç¹å®ã®ããŒã¿ããŒã¹ãUIã亀æããŠããäžå¿ã®æ¥åããžãã¯ãžåœ±é¿ãåºããã«ããæ§æãç®æããŸãã
ãªããªã³ã¢ãŒããã¯ãã£

ãªããªã³ã¢ãŒããã¯ãã£ã¯ããã¡ã€ã³ã¢ãã«ãäžå¿ã«çœ®ãããã®å€åŽãã¢ããªã±ãŒã·ã§ã³ãã€ã³ãã©ãUIãªã©ãåãå²ãæ§æã§ãã
å€åŽã®å±€ã¯å åŽãžäŸåããŸãããå åŽã¯å€åŽã®å®è£ 詳现ãç¥ããŸããã
ã¯ãªãŒã³ã¢ãŒããã¯ãã£

ã¯ãªãŒã³ã¢ãŒããã¯ãã£ããæ¥åã«ãŒã«ãå€éšæè¡ããåé¢ããèãæ¹ã§ãã
äžè¬çã«ã¯ãEntitiesãUse CasesãInterface AdaptersãFrameworks and Driversãªã©ã®é åã§èª¬æãããŸãã
éèŠãªã®ã¯ãã©ã«ãåãããããããšã§ã¯ãªããäŸåé¢ä¿ãå
åŽãžåããããšã§ãã
ð¡ã¬ã€ã€ãŒãã¢ãŒããã¯ãã£ãšã®éã
ã¬ã€ã€ãŒãã¢ãŒããã¯ãã£ã¯ãã³ãŒããæè¡çãªåœ¹å²ããšã®å±€ãžåããŸãã
å žåçã«ã¯ãç»é¢ãã¢ããªã±ãŒã·ã§ã³ããã¡ã€ã³ãã€ã³ãã©ã®é ã«åŠçãåŒã³åºããŸãã
ã¯ãªãŒã³ã¢ãŒããã¯ãã£ã¯ãæ¥åã«ãŒã«ãããŒã¿ããŒã¹ããã¬ãŒã ã¯ãŒã¯ãžäŸåããªãæ§é ãéèŠããŸãã
ããŒã¿ããŒã¹ã®å ·äœçãªå®è£ ã¯ãå åŽã§å®çŸ©ããã€ã³ã¿ãŒãã§ãŒã¹ãžäŸåããŸãã
ã¬ã€ã€ãŒãã§ãäŸåæ§é転ãå©çšã§ãããããäž¡è ãå®å šã«å¥ã®æ§æãšããããã§ã¯ãããŸããã
ð¡ãªããªã³ã¢ãŒããã¯ãã£ãšã®éã
ã©ã¡ãããæ¥åã«ãŒã«ãäžå¿ã«çœ®ããäŸåé¢ä¿ãå€åŽããå åŽãžåããŸãã
ãªããªã³ã¢ãŒããã¯ãã£ã¯ãç¹ã«ãã¡ã€ã³ã¢ãã«ãäžå¿ã«ããæ§é ãéèŠããŸãã
ã¯ãªãŒã³ã¢ãŒããã¯ãã£ã¯ãEntitiesã«å ããŠãUse Casesãå ¥åºåã®å¢çãæç¢ºã«åããŸãã
ãªããªã³ã¯ãã¡ã€ã³ãšã€ã³ãã©ã®åé¢ã説æããããæ§æã§ãã
ã¯ãªãŒã³ã¯ãå ¥åããUse Caseãéããåºåãžè³ãåŠçã®æµããŸã§æŽçããããç¹åŸŽããããŸãã
äž¡è ã¯éåžžã«è¿ãèãæ¹ã§ãããå®åã§ã¯çµã¿åãããæ§æã䜿ãããŸãã
Vertical Slice Architecture

Vertical Slice Architectureã§ã¯ãã³ãŒããæè¡ã¬ã€ã€ãŒã§ã¯ãªããæ©èœããŠãŒã¹ã±ãŒã¹åäœã§ãŸãšããŸãã
Features
ââ CreateOrder
â ââ Endpoint
â ââ Validation
â ââ Handler
â ââ DataAccess
ââ CancelOrder
ââ GetOrder
æå±è ã®Jimmy Bogardæ°ã¯ãäžã€ã®æ©èœå€æŽã§è€æ°ã¬ã€ã€ãŒã暪æããã®ã§ã¯ãªãã倿Žè»žã«æ²¿ã£ãŠé¢é£ã³ãŒããäžã€ã®SliceãžãŸãšããèãæ¹ãšããŠèª¬æããŠããŸãã
AIã³ãŒãã£ã³ã°ãšãŒãžã§ã³ãã«å¯ŸããŠãããCreateOrderã®ç¯å²ã ãã倿Žããããšæå®ãããããªããŸãã
ãªããVertical Sliceãšã¯ãªãŒã³ã¢ãŒããã¯ãã£ã¯å¿ ãããæä»çã§ã¯ãããŸããã
æ©èœåäœã§ã³ãŒãããŸãšãã€ã€ããã®æ©èœå ã®éèŠãªæ¥åã«ãŒã«ã ããå€éšæè¡ããåé¢ããèšèšãå¯èœã§ãã
ãã€ã¯ãã«ãŒãã«ã¢ãŒããã¯ãã£

ãã€ã¯ãã«ãŒãã«ã¢ãŒããã¯ãã£ã§ã¯ãæå°éã®ã³ã¢æ©èœãšã远å å¯èœãªãã©ã°ã€ã³ãžã·ã¹ãã ãåããŸãã
IDEãCMSããã©ãŠã¶ãæ¥åããã±ãŒãžãªã©ãå©çšè ãçšéã«å¿ããŠæ©èœãæ¡åŒµãããã·ã¹ãã ã§äœ¿ãããŸãã
ã¬ã€ã€ãŒããã¯ãªãŒã³ãšã¯ç°ãªããäž»ã«ãäŸåæ¹åãã§ã¯ãªããæ¡åŒµæ§ããæ±ãèãæ¹ã§ãã
3ïŒéä¿¡ã»åŠçæ¹åŒã«é¢ããã¢ãŒããã¯ãã£
å éšæ§é ãåããåŸã¯ãã³ã³ããŒãã³ãå士ãã©ã®ããã«ã€ãªãããèããŸãã
ãªã¯ãšã¹ãã»ã¬ã¹ãã³ã¹

åŒã³åºãå ãåŠçãäŸé Œããçµæãè¿ããŸã§åŸ ã€æ¹åŒã§ãã
REST APIãGraphQLãgRPCãªã©ã代衚äŸã«ãªããŸãã
åŠçã®æµãã远ããããäžæ¹ãåæåŒã³åºããäœæ®µãé£éãããšãäžã€ã®é å»¶ãé害ãåŸç¶åŠçãžåºããããããªããŸãã
ã€ãã³ãé§å

ã€ãã³ãé§åã§ã¯ãã·ã¹ãã å ã§çºçããåºæ¥äºãã€ãã³ããšããŠçºè¡ããå¿ èŠãªã³ã³ããŒãã³ããåãåããŸãã
åºæ¬çãªæ§æèŠçŽ ã¯ãã€ãã³ããçæããProducerãåãåãConsumerãäž¡è ãã€ãªãã€ãã³ããã£ãã«ã§ãã
çºè¡åŽãšåä¿¡åŽãççµåã«ããããåé¢ãéè€ãé åºãåéãã¹ããŒã倿Žãé害远跡ãªã©ãèšèšããå¿ èŠããããŸãã
Web-Queue-Worker

Web-Queue-Workerã¯ãHTTPãªã¯ãšã¹ããåãä»ããWebéšåãšãéãåŠçãæ åœããWorkerããã¥ãŒã§åé¢ããŸãã
åç»å€æãã¡ãŒã«éä¿¡ã垳祚çæãAIåŠçãªã©ãå®äºãŸã§æéã®ãããåŠçã«é©ããŠããŸãã
Webããã³ããšã³ããšWorkerã¯ãéåæã®ã¡ãã»ãŒãžãã¥ãŒãä»ããŠéä¿¡ããŸãã
ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ãšã³ã¬ãªã°ã©ãã£

ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ã§ã¯ãäžå€®ã®ãµãŒãã¹ãã¯ãŒã¯ãããŒãšã³ãžã³ãåŠçé åºãå¶åŸ¡ããŸãã
å šäœã®æµããææ¡ããããäžæ¹ãäžå€®ã³ã³ããŒãã³ããžè²¬åãéäžãããããªããŸãã
ã³ã¬ãªã°ã©ãã£ã§ã¯äžå€®ã®åžä»€å¡ã眮ãããåãµãŒãã¹ãã€ãã³ããžåå¿ããŠåŠçãé²ããŸãã

ççµåã«ããããåé¢ãæ¥åãããŒå šäœãèŠãã«ãããªãããšããããŸãã
ã©ã¡ããåžžã«åªããŠããããã§ã¯ãããŸããã
åŠçå šäœã®å¯èŠæ§ãšãåãµãŒãã¹ã®èªåŸæ§ã®ã©ã¡ããéèŠãããã§å€æããŸãã
4ïŒããŒã¿ç®¡çã«é¢ããã¢ãŒããã¯ãã£ãšãã¿ãŒã³
éä¿¡æ¹æ³ãŸã§æ±ºããŠããããŒã¿ã®ææè ãææ§ã§ã¯ãã·ã¹ãã ã®å¢çãä¿ãŠãŸããã
ããã§å¿ èŠã«ãªãã®ããããŒã¿ç®¡çã®èšèšã§ãã
å ±æããŒã¿ããŒã¹

è€æ°ã®ã¢ãžã¥ãŒã«ããµãŒãã¹ããåãããŒã¿ããŒã¹ãå©çšããæ§æã§ãã
JOINããã©ã³ã¶ã¯ã·ã§ã³ãæ±ããããåé¢ãä»ã®ã¢ãžã¥ãŒã«ãææããããŒãã«ãèªç±ã«æŽæ°ãããšãããŒã¿ããŒã¹ãéããŠåŒ·ãçµåããŸãã
äžã€ã®ããŒã¿ããŒã¹ã䜿ãå Žåã§ããã¢ãžã¥ãŒã«ããšã«ææããããŒãã«ãã¹ããŒããæ±ºããããšãéèŠã§ãã
Database per Service

åãµãŒãã¹ããèªåã®ããŒã¿ããŒã¹ãŸãã¯ããŒã¿é åãææããŸãã
ä»ã®ãµãŒãã¹ã¯ãAPIãã€ãã³ããéããŠå¿ èŠãªæ å ±ãååŸããŸãã
ãµãŒãã¹ã®ç¬ç«æ§ãé«ããããäžæ¹ãè€æ°ãµãŒãã¹ããŸããJOINãäžæ¬ãã©ã³ã¶ã¯ã·ã§ã³ã¯é£ãããªããŸãã
CQRS

CQRSã¯ãããŒã¿ã倿ŽããCommandãšãåç §ããQueryãåé¢ãããã¿ãŒã³ã§ãã
æŽæ°åŽã¯æ¥åã«ãŒã«ãæŽåæ§ãéèŠããåç §åŽã¯æ€çŽ¢ãç»é¢è¡šç€ºãžæé©åã§ããŸãã
ãã ããã¢ãã«ãåŠççµè·¯ãå¢ãããããåçŽãªCRUDã·ã¹ãã ãžäžåŸã«å°å ¥ãããã®ã§ã¯ãããŸããã
Event Sourcing

Event Sourcingã§ã¯ãçŸåšã®ç¶æ ã ãã§ãªããç¶æ ã倿Žããåºæ¥äºãã€ãã³ããšããŠä¿åããŸãã
ã€ãã³ããé çªã«åçããããšã§ãçŸåšãŸãã¯é廿ç¹ã®ç¶æ ãåæ§ç¯ã§ããŸãã
ç£æ»ãå±¥æŽã®åŸ©å ã«åŒ·ã¿ãããäžæ¹ãã€ãã³ãã®ããŒãžã§ã³ç®¡çãã¹ããŒãé²åãåçãæ€çŽ¢ãªã©ã®è€éããå¢ããŸãã
Microsoftããå€ãã®ã·ã¹ãã ã§ã¯åŸæ¥ã®ããŒã¿ç®¡çã§ååã§ãããå©ç¹ãè€éããæ£åœåããå Žåã«æ¡çšãã¹ãã ãšèª¬æããŠããŸãã
Saga

Sagaã¯ãè€æ°ãµãŒãã¹ã«ãŸãããæ¥ååŠçããå°ããªããŒã«ã«ãã©ã³ã¶ã¯ã·ã§ã³ã®é£éãšããŠç®¡çãããã¿ãŒã³ã§ãã
éäžã§å€±æããå Žåã¯ã決æžåæ¶ãåšåº«è§£æŸãªã©ã®è£ååŠçãè¡ããŸãã
åäžã®ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ãå©çšã§ããªã忣ã·ã¹ãã ã§ãããŒã¿æŽåæ§ã管çããããã®èãæ¹ã§ãã
5ïŒããã³ããšã³ãã«é¢ããã¢ãŒããã¯ãã£
æåŸã¯ãç»é¢ãè¡šç€ºç¶æ ãããã¯ãšã³ãéä¿¡ãã©ã®ããã«åæ ããããšããèŠç¹ã§ãã
ããã«ãç°ãªãçš®é¡ã®æŠå¿µãå«ãŸããŠããŸãã
MVCãMVVMã¯ç»é¢å éšã®è²¬ååå²
SPAãSSRã¯ç»é¢ã®é ä¿¡ã»æç»æ¹åŒ
BFFã¯ããã³ããšã³ãå°çšããã¯ãšã³ã
ãã€ã¯ãããã³ããšã³ãã¯éçºã»ãããã€åäœã®åå²
MVCãšMVVM
MVCã¯ãModelãViewãControllerãžè²¬åãåããæ§æã§ãã

MVVMã¯ãModelãViewãViewModelãžåããViewModelãç»é¢ã«å¿ èŠãªç¶æ ãæäœãæäŸããŸãã

ã©ã¡ãããç»é¢è¡šç€ºãšåŠçãäžã€ã®å Žæãžéäžãããªãããã®èãæ¹ã§ãã
SPAãšSSR
SPAã¯ãååã«ã¢ããªã±ãŒã·ã§ã³ãèªã¿èŸŒã¿ããã®åŸã®ç»é¢é·ç§»ãæŽæ°ãäž»ã«ãã©ãŠã¶åŽã§è¡ããŸãã

SSRã¯ããµãŒããŒåŽã§HTMLãçæããŠãããã©ãŠã¶ãžè¿ãæ¹åŒã§ãã

çŸåšã¯ã©ã¡ããäžæ¹ãžçµ±äžããã®ã§ã¯ãªããããŒãžãæ©èœã«å¿ããŠçµã¿åãããæ§æããããŸãã
BFF
BFFã¯ãBackend for Frontendã®ç¥ã§ãã

Webãã¢ãã€ã«ã管çç»é¢ãªã©ãããã³ããšã³ãããšã«å°çšã®ããã¯ãšã³ããé 眮ããŸãã
ã¯ã©ã€ã¢ã³ãåºæã®ããŒã¿å€æãéä¿¡ãéçŽã§ããäžæ¹ã䌌ãåŠçãè€æ°ã®BFFãžéè€ãããªã工倫ãå¿ èŠã§ãã
ãã€ã¯ãããã³ããšã³ã
ãã€ã¯ãããã³ããšã³ãã§ã¯ã倧ããªããã³ããšã³ããç¬ç«ããŠéçºã»ãããã€ã§ããåäœãžåå²ããŸãã

è€æ°ããŒã ãåé åãæ åœãããããªãåé¢ããã¶ã€ã³çµ±äžãèªèšŒç¶æ ã®å ±æãäŸåã©ã€ãã©ãªãç»é¢ééä¿¡ãªã©ã®èª²é¡ãå¢ããŸãã
ããã¯ãšã³ãããã€ã¯ããµãŒãã¹ã ãããšãã£ãŠãå¿ ããã€ã¯ãããã³ããšã³ãã«ããå¿ èŠã¯ãããŸããã
ã¢ãŒããã¯ãã£ã¯è€æ°ãçµã¿åãããŠäœ¿ã
ãããŸã§ç޹ä»ãããã®ãããäžã€ã ããéžã¶ããã§ã¯ãããŸããã
å®éã®ã·ã¹ãã ã§ã¯ãç°ãªãåé¡ã解決ããããã«è€æ°ã®æ§æãçµã¿åãããŸãã
ã·ã¹ãã ã®åå²ã»ãããã€
ïŒã¢ãžã¥ã©ãŒã¢ããªã¹
ã¢ããªã±ãŒã·ã§ã³å
éš
ïŒVertical Slice
ïŒè€éãªæ¥åé åã ãã¯ãªãŒã³ã¢ãŒããã¯ãã£ãé©çš
éä¿¡ã»åŠçæ¹åŒ
ïŒéåžžåŠçã¯ãªã¯ãšã¹ãã»ã¬ã¹ãã³ã¹
ïŒæéã®ãããåŠçã¯Web-Queue-Worker
ããŒã¿ç®¡ç
ïŒäžã€ã®ããŒã¿ããŒã¹
ïŒã¢ãžã¥ãŒã«ããšã«ææããŒãã«ãåé¢
ããã³ããšã³ã
ïŒVueãå©çšããSPA
ïŒå¿
èŠã«å¿ããŠBFFãé
眮
ããã¯ççŸããæ§æã§ã¯ãããŸããã
ã¢ãžã¥ã©ãŒã¢ããªã¹ã¯ãã·ã¹ãã å šäœã®åå²ãšãããã€åäœãæ±ããŸãã
Vertical Sliceã¯ãã³ãŒãã倿Žåäœã§ãŸãšããèãæ¹ã§ãã
ã¯ãªãŒã³ã¢ãŒããã¯ãã£ã¯ãéèŠãªæ¥åã«ãŒã«ãšæè¡è©³çްã®äŸåé¢ä¿ãæŽçããŸãã
ãããããå¥ã®åé¡ãžçããŠããŸãã
ååŠè ã«ããããã®åŠç¿é åº
ã¢ãŒããã¯ãã£çšèªãæåãããã¹ãŠæèšããå¿ èŠã¯ãããŸããã
次ã®é çªã§åŠã¶ãšãããããã®å¿ èŠæ§ãçè§£ãããããªããŸãã
æŽçãããã¢ããªã¹
â
ã¬ã€ã€ãŒã
â
ã¢ãžã¥ã©ãŒã¢ããªã¹
â
Vertical Slice
â
ãããµãŽãã«ïŒãªããªã³ïŒã¯ãªãŒã³
â
ãã¥ãŒïŒã€ãã³ãé§å
â
ãã€ã¯ããµãŒãã¹
â
CQRSïŒEvent SourcingïŒSaga
ãŸãã¯ãäžã€ã®ã¢ããªã±ãŒã·ã§ã³ãæåŸãŸã§äœãçµéšãå¿ èŠã§ãã
ãã®åŸã責åã®åé¢ãã¢ãžã¥ãŒã«å¢çãäŸåæ¹åãéåæåŠçãããŒã¿æææš©ãšããé ã«çè§£ãåºããŸãã
ãã€ã¯ããµãŒãã¹ã¯ãã¢ãŒããã¯ãã£åŠç¿ã®å ¥å£ã§ãªããŠãæ§ããŸããã
ã¢ããªã¹ã®äžã§é©åãªå¢çãäœããªããã°ããµãŒãã¹ãžåå²ããŠãå¢çã¯ææ§ãªãŸãŸã§ãã
ãŸãšãïŒçµå±ã倧åãªã®ã¯ãã¢ãŒããã¯ãã£ã®ååããããªããŠãç®ã®åã®åé¡ã
è²ããªçšèªãæŽçããŸããããç§ãäžçªæããŠããã®ã¯ãã©ãã䜿ããããããèªåã®äžã§æ¬¡ã®3ã€ã«çããåºãŠãããã倧äºã ãªããšããããšã§ãã
ãäœãã綺éºã«åããããŠããã®èšèšã«ããã®ãïŒ
ä»ãç®ã®åã«ãããã©ããªåé¡ãã解決ãããã®ãïŒ
ãã®ä»£ããã«ãã©ããªãé¢åãããïŒè€éãïŒããèè² ãèŠæããããïŒ
äžèœãªæ£è§£ã¯ãªãã®ã§ãå°ããå§ãããªãæ®éã®ã¢ããªã¹ãš1ã€ã®DBã§ååãå¿ èŠã«è¿«ããããããã®æã«å€ããã°ãããã§ãã
AIæä»£ã®èšèšããçšèªã®æèšãç®çã§ã¯ãªãã¯ãã ãèªåãšAIãåãã·ã³ãã«ãªæ¹éãå ±æã§ããŠã倿Žã®åœ±é¿ããµã¯ããšäºæž¬ã§ãããããçµå±ã¯ããã«å°œãããªããšå®æããŠããŸãã
ãã®èšäºããè¿·ã£ããšãã®ã¡ãã£ãšããéããã¹ã«ãªãã°å¬ããã§ãã
åèæç®
Microsoft LearnãArchitecture Stylesã
Microsoft LearnãCommon web application architecturesã
Microsoft LearnãMicroservices architecture styleã
Microsoft LearnãEvent-driven architecture styleã
Microsoft LearnãCQRS patternã
Microsoft LearnãEvent Sourcing patternã
Microsoft LearnãSaga design patternã
Alistair CockburnãHexagonal Architectureã
Robert C. MartinãThe Clean Architectureã
Jimmy BogardãVertical Slice Architectureã
AWSãSOA vs. Microservicesã
AWS Prescriptive GuidanceãUnderstanding and implementing micro-frontendsã
