2017幎ãMatthias NobackïŒ Symfonyã§ã®1幎ã®èè ïŒã¯ãé·å¹Žã®å®è·µãéããŠåœ¢æãããçæ³çãªäŒæ¥ã¢ããªã±ãŒã·ã§ã³ã¢ãŒããã¯ãã£ã«é¢ãã圌ã®èŠè§£ã説æãã3ã€ã®èšäºã·ãªãŒãºãå ¬éããŸããã ã 2çªç®ã®ç¿»èš³ã¯ãã®èšäºã§ãã 3çªç®ã®ç¿»èš³çããŸããªãå©çšå¯èœã«ãªããŸãã
ç§ã«ãšã£ãŠããã¯ãªãŒã³ãã¢ãŒããã¯ãã£ã®å¿ é èŠä»¶ã®1ã€ã¯ãã¢ããªã±ãŒã·ã§ã³ã³ãŒããã¬ã€ã€ãŒã«é©åã«åé¢ããããšã§ãã ã¬ã€ã€ãŒèªäœã¯äœãããŸããããã¹ãŠã®ãœã«ãã¯ããã®äœ¿çšæ¹æ³ãšãããã«å±ããã³ã³ããŒãã³ãã«èª²ããããå¶éã«é¢ä¿ããŠããŸãã èå³æ·±ãå®çšçãªãã¯ããã¯ãæ€èšããåã«ãå°ãå²åŠããŸãããã
ã¬ã€ã€ãŒãå¿ èŠãªçç±
- ã¬ã€ã€ãŒã¯ããã®äžã«ãããã®ãé ã/ä¿è·ããã®ã«åœ¹ç«ã¡ãŸãã ã¬ã€ã€ãŒããã£ã«ã¿ãŒããªã¢ãšããŠèªèã§ããŸããã¬ã€ã€ãŒãä»ããŠéä¿¡ãããããŒã¿ã¯ã次ã®ã¬ã€ã€ãŒã«é²ãåã«æ€èšŒããå¿ èŠããããŸãã ãããã¯ãä»ã®ã¬ã€ã€ãŒãæ£ããæ©èœã§ãã圢åŒã«çž®å°ããå¿ èŠããããŸãã ãŸããã¬ã€ã€ãŒã¯ãããæ·±ãã¬ã€ã€ãŒã®ã©ã®ããŒã¿ãšé¢æ°ãå€éšã§äœ¿çšã§ãããã決å®ããŸãã
- ã¬ã€ã€ãŒã¯è²¬ä»»ãæ確ã«ç€ºãããããã£ãŠã³ãŒãå ã®ã¯ã©ã¹ã®å Žæãæ確ã«ããŸãã ã¢ããªã±ãŒã·ã§ã³å ã§ã©ã®ã¬ã€ã€ãŒã䜿çšãããåã¬ã€ã€ãŒãäœãæ åœãããã«ã€ããŠãããŒã å ã§å³å¯ãªåæãéæããå Žåãç®çãç¥ã£ãŠããã ãã§ãé©åãªã¯ã©ã¹ãèŠã€ããããæ°ããã¯ã©ã¹ãè¿œå ããå Žæãç°¡åã«æ±ºå®ãããã§ããŸãã
- ã¬ã€ã€ãŒã䜿çšããããšã«ãããã¢ããªã±ãŒã·ã§ã³éçºã®æ®µéã®åªå é äœãšé åºãèªç±ã«å€æŽã§ããŸãã ããžãã¹ããžãã¯ã®ã³ã¢ããå§ããŠããã®äžã«ã¬ã€ã€ãŒãéããŠããããžã§ã¯ããé çªã«éçºã§ããŸãã ãŸããããã»ã¹ãéã«ããŠããŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ã¬ã€ã€ãŒãéçºããããšããå§ããããšãã§ããŸãã ãã®ã¢ã€ãã ã¯ãORMãããŒã¿ããŒã¹ããã¬ãŒã ã¯ãŒã¯ãªã©ã決å®ããåã«ã»ãšãã©ã®ã¢ããªã±ãŒã·ã§ã³ãéçºã§ãããããç§ãã¡ã«ãšã£ãŠéåžžã«éèŠã§ãã
- å€æ°ã®å€ããœãããŠã§ã¢ã«ã¯ããã¹ãã²ããã£ãã³ãŒããšåŒã°ããã¬ã€ã€ãŒã«åå²ãããŠããªãã³ãŒããå«ãŸããŠããŸãããããžã§ã¯ãã®ã©ã®éšåã§ããå¿
èŠãªãã®ãã¡ãœãããæ§é ãåŒã³åºããŠäœ¿çšã§ããŸãã ã¬ã€ã€ãŒã·ã¹ãã ãïŒæ£ããæ¹æ³ã§ïŒäœ¿çšããããšã§ãæžå¿µäºé
ãé«åºŠã«åé¢ããããšãã§ããŸãã ãããã®ã«ãŒã«ãææžåããã¬ãã¥ãŒã³ãŒããšã®ã³ã³ãã©ã€ã¢ã³ã¹ãç£èŠãããšããããžã§ã¯ãã®ã©ã³ã¯ãžã®ããŒã«ããŠã³ã®é床ã倧å¹
ã«äœäžããŸãã
ã¬ãŽãã³ããæè¡çè² åµã ãã¡ããããã¹ããäœæããŸãã æèœãªèšèšãããã¬ã€ã€ãŒã·ã¹ãã ã«ããããã¹ããéåžžã«ç°¡çŽ åãããŸãã ããŸããŸãªã¿ã€ãã®ãã¹ãããããŸããŸãªã¬ã€ã€ãŒã®ã³ãŒãã«é©ããŠããŸãã åãã¹ãã®ç®çãããæ確ã«ãªããŸãã ãã¹ãã¹ã€ãŒãå šäœãããå®å®ããé«éã«ãªããŸãã
ãã ããTwitterã®èŠåè ãããŸãã
ã¹ãã²ããã£ã³ãŒãã®OOPããŒãžã§ã³ã¯ãè±å¯ãªã¬ã€ã€ãŒãåããã¯ã©ã€ãã³ã°ã³ãŒãã§ãã
å人çã«ã¯ãã³ãŒãã©ã¶ãã¢ã«åºäŒã£ãããšã¯ãããŸããããå€ãã®ããŒãã«ã³ãŒããèŠãŸããã 確ãã«ãæ·±å»ãªã¢ãŒããã¯ãã£ãšã©ãŒãåŒãèµ·ãããã¢ããªã±ãŒã·ã§ã³ã誀ã£ãŠã¬ã€ã€ãŒã«åå²ããã³ãŒããæžãããããããã€ãã®åé¡ãçºçããŸããã ãã®èšäºã§ã¯ãVaughn Vernonã®èæžãImplementing Domain-Driven DesignãïŒä»¥äžã®ãªã³ã¯ïŒã§èª¬æãããŠããã¬ã€ã€ãŒã®æé«ã®ã»ããã§ãããšæããã®ã«ã€ããŠèª¬æããŸãã ã¬ã€ã€ãŒã«ã¯DDDãžã®å³å¯ãªãã€ã³ãããããŸããããéçºè ãåžæããå Žåã¯ã¯ãªãŒã³ãªãã¡ã€ã³ã¢ãã«ãäœæã§ããŸãã
ãã£ã¬ã¯ããªãšåå空éã®æ§é
src/
å
ã«ã¯ãåã³ã³ããã¹ãïŒ Bounded Context ïŒã®ãã£ã¬ã¯ããªããããŸããããšãã°ãã¢ããªã±ãŒã·ã§ã³ã§åŒ·èª¿è¡šç€ºããŠããŸãã ãããã¯ããããããã®ã¯ã©ã¹ã®ã«ãŒãåå空éãšããŠãæ©èœããŸãã
åã³ã³ããã¹ãå ã§ãåã¬ã€ã€ãŒã®ãã£ã¬ã¯ããªãäœæããŸãã
- ãã¡ã€ã³
- ç³èŸŒã¿
- ã€ã³ãã©
src/ {BoundedContext}/ Domain/ Model/ Application/ Infrastructure/
ããããã«ã€ããŠç°¡åã«èª¬æããŸãã
ã¬ã€ã€ãŒ1-ãã¡ã€ã³ïŒã¢ãã«/ã³ã¢ïŒ
ãã¡ã€ã³å±€ã«ã¯ãæ¢ç¥ã®DDDã¿ã€ã/ãã¿ãŒã³ã®ã¯ã©ã¹ãå«ãŸããŠããŸãã
- ãšã³ãã£ãã£
- å€ãªããžã§ã¯ã
- ãã¡ã€ã³ã€ãã³ã
- ãªããžããª
- ãã¡ã€ã³ãµãŒãã¹
- å·¥å Ž
- ...
Domainãã©ã«ããŒå ã«ããµããã©ã«ããŒã¢ãã«ãäœæããŸãããã®äžã«ãåã¢ã°ãªã²ãŒãïŒã¢ã°ãªã²ãŒãã«ãŒãïŒã®ãã£ã¬ã¯ããªãäœæããŸãã éçŽãã©ã«ããŒã«ã¯ãããã«é¢é£ä»ãããããã¹ãŠã®éšåïŒå€ãªããžã§ã¯ãããã¡ã€ã³ã€ãã³ãããªããžããªã€ã³ã¿ãŒãã§ã€ã¹ãªã©ïŒãå«ãŸããŸãã
ãã¡ã€ã³å±€ããã®ã³ãŒãã¯çŸå®äžçãšæ¥è§Šããªãããšã«æ³šæããŠãã ããã ãããŠããã¹ãçšã§ãªãå Žåã誰ã圌ã®ãªããžã§ã¯ãã«çŽæ¥ã¢ã¯ã»ã¹ã§ããŸããã§ããïŒããã¯äžäœå±€ãéããŠè¡ãããŸãïŒã ãã¡ã€ã³ã¢ãã«ã®ãã¹ãã¯ãéåžžã«ã¢ãžã¥ãŒã«åãããŠããå¿ èŠããããŸãã ãã¡ã€ã³å±€ã¯ãã¡ã€ã«ã·ã¹ãã ããããã¯ãŒã¯ãããŒã¿ããŒã¹ãªã©ãšçŽæ¥å¯Ÿè©±ããªããããå®å®ããç¬ç«ããã¯ãªãŒã³ã§é«éãªãã¹ããååŸã§ããŸãã
ã¬ã€ã€ãŒ2-ïŒãã¡ã€ã³ã®ã©ãããŒïŒïŒã¢ããªã±ãŒã·ã§ã³ã¬ã€ã€ãŒ
ã¢ããªã±ãŒã·ã§ã³å±€ïŒã¢ããªã±ãŒã·ã§ã³å±€ïŒã«ã¯ã ã³ãã³ãã®ã¯ã©ã¹ãšãã®ãã³ãã©ãŒãå«ãŸããŠããŸã ã ãã®ã³ãã³ãã¯ãå®è¡ããå¿ èŠããããã®ã瀺ããã®ã§ãããããªããã£ãå€ã®ã¿ãå«ãéåžžã®DTOïŒããŒã¿è»¢éãªããžã§ã¯ãïŒã§ãã ç¹å®ã®ã³ãã³ãã®å®è¡æ¹æ³ãç¥ã£ãŠããã³ãã³ããã³ãã©ãŒãåžžã«ååšããå¿ èŠããããŸãã éåžžãã³ãã³ããã³ãã©ãŒïŒ ã¢ããªã±ãŒã·ã§ã³ãµãŒãã¹ãšãåŒã°ããŸã ïŒã¯ãå¿ èŠãªãã¹ãŠã®å¯Ÿè©±ãè¡ããŸã-ã³ãã³ãããã®ããŒã¿ã䜿çšããŠéèšãäœæïŒãŸãã¯ããŒã¿ããŒã¹ããååŸïŒãããã®äžã§ããã€ãã®æäœãå®è¡ãããã®åŸéèšãä¿åã§ããŸãã
ãã®å±€ã®ã³ãŒãã¯åäœãã¹ãã§ã«ããŒããããšãã§ããŸããããã®æ®µéã§ãèšè¿°ãšåãå ¥ããéå§ã§ããŸãã Konstantin Kudryashovã«ãã ããã®ãããã¯ã®äŸã«ããã¢ããªã³ã°ã«é¢ããåªããèšäºã次ã«ç€ºããŸãã
ã¬ã€ã€ãŒ3ïŒã¢ããªã±ãŒã·ã§ã³ã®ã©ãããŒïŒ-ã€ã³ãã©ã¹ãã©ã¯ãã£
åã®å±€ã§æžãããã³ãŒãã¯ããã¹ã以å€ãããåŒã³åºãããŸããã ãããŠãã€ã³ãã©ã¹ãã©ã¯ãã£å±€ãè¿œå ããåŸã«ã®ã¿ãã¢ããªã±ãŒã·ã§ã³ã¯å®å šã«äœ¿çšå¯èœã«ãªããŸãã
ã€ã³ãã©ã¹ãã©ã¯ãã£å±€ã«ã¯ãã¢ããªã±ãŒã·ã§ã³ãå®äžçïŒãŠãŒã¶ãŒããã³å€éšãµãŒãã¹ïŒãšå¯Ÿè©±ããããã«å¿ èŠãªã³ãŒããå«ãŸããŠããŸãã ããšãã°ãã¬ã€ã€ãŒã«ã¯æ¬¡ã®ã³ãŒããå«ãŸããå ŽåããããŸãã
- HTTPã¯åäœããŸã
- ããŒã¿ããŒã¹ãšã®éä¿¡
- ã¡ãŒã«éä¿¡
- æŒã
- æéãååŸãã
- ä¹±æ°çæ
- ãªã©ãªã©
ãã®å±€ã®ã³ãŒãã¯ãçµ±åãã¹ãã§ã«ããŒããå¿ èŠããããŸãïŒ Freemanããã³Pryceã®çšèªïŒã ããã§ã¯ãå®éã®ããŒã¹ãå®éã®ãã³ããŒã³ãŒããå®éã®å€éšãµãŒãã¹ãªã©ããã¹ãŠãå®éã«ãã¹ãããŸãã ããã«ããã管çäžã«ãªããã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšãããŠãããã®ã®ããã©ãŒãã³ã¹ãæ€èšŒã§ããŸãã
ãã¬ãŒã ã¯ãŒã¯ãšã©ã€ãã©ãª
å€ã®äžçïŒãã¡ã€ã«ã·ã¹ãã ããããã¯ãŒã¯ããŸãã¯ããŒã¿ããŒã¹ïŒãšããåããããã¹ãŠã®ãã¬ãŒã ã¯ãŒã¯ãšã©ã€ãã©ãªã¯ãã€ã³ãã©ã¹ãã©ã¯ãã£ã¬ã€ã€ãŒã§åŒã³åºãå¿ èŠããããŸãã ãã¡ããããã¡ã€ã³ããã³ã¢ããªã±ãŒã·ã§ã³å±€ã®ã³ãŒãã«ã¯ãå€ãã®å ŽåãORMãHTTPã¯ã©ã€ã¢ã³ããªã©ã®æ©èœãå¿ èŠã§ãã ãããã圌ã¯ããæœè±¡çãªäŸåé¢ä¿ãéããŠã®ã¿ããã䜿ãã¹ãã§ãã äŸåé¢ä¿ã®èŠåã§èŠæ±ããããšããã
äŸåé¢ä¿ã«ãŒã«
äŸåæ§ã«ãŒã«ïŒ The Clean Architectureã§Robert C. Martinãçå®ïŒã§ã¯ãåã¢ããªã±ãŒã·ã§ã³å±€ã§ã¯ãçŸåšã®å±€ãŸãã¯ããæ·±ãå±€ã®ã³ãŒãã®ã¿ã«äŸåããå¿ èŠããããšèŠå®ãããŠããŸãã ã€ãŸãããã¡ã€ã³ã³ãŒãã¯ããèªèº«ã«ã®ã¿äŸåããã¢ããªã±ãŒã·ã§ã³å±€ã®ã³ãŒãã¯ç¬èªã®ã³ãŒããŸãã¯ãã¡ã€ã³ã«äŸåããã€ã³ãã©ã¹ãã©ã¯ãã£å±€ã®ã³ãŒãã¯ãã¹ãŠã«äŸåããå¯èœæ§ããããŸãã ãã®èŠåã«åŸã£ãŠããã¡ã€ã³å±€ã®ã€ã³ãã©ã¹ãã©ã¯ãã£ããã³ãŒãã«äŸåããããšã¯ã§ããŸããã
ããããã«ãŒã«ã®ç²ç®çãªã«ãŒã«ã«åŸãããšã¯ããã®çã®æå³ãäœã§ããããç解ããã®ã§ã¯ãªããããªãæããªä»äºã§ãã ã§ã¯ããªãäŸåé¢ä¿ã«ãŒã«ã䜿çšããå¿ èŠãããã®ã§ããããïŒ ãã®ã«ãŒã«ã«åŸãããšã«ãããã¢ããªã±ãŒã·ã§ã³ã¬ã€ã€ãŒãšãã¡ã€ã³ã¬ã€ã€ãŒã®ã¯ãªãŒã³ã³ãŒãããããŒãã£ãã§äžå®å®ã§äºæž¬äžå¯èœãªã€ã³ãã©ã¹ãã©ã¯ãã£ã³ãŒãã«çµã³ä»ããããªãããšãä¿èšŒããŸãã ãŸããäŸåé¢ä¿ã«ãŒã«ãé©çšãããšãããæ·±ãã¬ã€ã€ãŒã®ã³ãŒãã«è§Šãããå€æŽãããããããšãªããã€ã³ãã©ã¹ãã©ã¯ãã£ã¬ã€ã€ãŒå ã®ãã¹ãŠã®ãã®ã眮ãæããããšãã§ããŸããããã«ãããã³ã³ããŒãã³ãã®ããŒããŒã·ã§ã³ãšç§»æ€æ§ã®è±å¯ãªæ©äŒãåŸãããŸãã
ã¢ãžã¥ãŒã«ã®æ¥ç¶æ§ãæžãããã®æ¹æ³ã¯ããããŒãã»ããŒãã£ã³ã«ãã£ãŠå®åŒåãããSOLIDã®æåãDãã§ããã äŸåæ§å転ã®åç ããšããŠé·ãéç¥ãããŠããŸãã ã»ãšãã©ã®OOPèšèªã§ã®å®çšçãªå®è£ ã¯ãäŸåã§ãããã¹ãŠã®ãã®ã«ãããªãã¯ã€ã³ã¿ãŒãã§ã€ã¹ãå²ãåœãŠïŒã€ã³ã¿ãŒãã§ã€ã¹ã¯æœè±¡åãããŸãïŒããã®ã€ã³ã¿ãŒãã§ã€ã¹ãå®è£ ããã¯ã©ã¹ãäœæããããšã§ãã ãã®ã¯ã©ã¹ã«ã¯ãã€ã³ã¿ãŒãã§ãŒã¹ã«ãšã£ãŠéèŠã§ã¯ãªã詳现ãå«ãŸããŸãããããã£ãŠããã®ã¯ã©ã¹ã¯ãå転ã®ååã§èšåãããŠããå®è£ ã«ãªããŸãã
ã¢ãŒããã¯ãã£ïŒé 延æè¡ãœãªã¥ãŒã·ã§ã³
ææ¡ãããäžé£ã®ã¬ã€ã€ãŒãšäŸåé¢ä¿ã«ãŒã«ãé©çšãããšãéçºæã«å€ãã®å©ç¹ãåŸãããšãã§ããŸãã
- ããšãã°ãã䜿çšæžã¿DBMSããªã©ã®éèŠãªæ±ºå®ãè¡ãåã«ãå€ãã®ããšãè©Šãããšãã§ããŸãã ãŸããåãã¢ãã«ã§äœæ¥ããäžç°ãšããŠãããŸããŸãªã±ãŒã¹ã§ããŸããŸãªããŒã¿ããŒã¹ãå®å šã«äœ¿çšã§ããŸãã
- 䜿çšãããã¬ãŒã ã¯ãŒã¯ã«é¢ãã決å®ã延æã§ããŸãã ããã«ãããéçºã®åæ段éã§ãSymfonyã¢ããªã±ãŒã·ã§ã³ããŸãã¯ãLaravelãããžã§ã¯ããã«ãªãããšã¯ã§ããŸããã
- ãã¬ãŒã ã¯ãŒã¯ãšã©ã€ãã©ãªã¯ãã¢ãã«ã³ãŒãããå®å šãªè·é¢ã«é 眮ãããŸãã ããã¯ããããã®ãã¬ãŒã ã¯ãŒã¯ãšã©ã€ãã©ãªã®ã¡ãžã£ãŒããŒãžã§ã³ãæŽæ°ãããšãã«éåžžã«åœ¹ç«ã¡ãŸãã ããšãã°ãZend Framework 1ã®ä»£ããã«Symfony 3ã䜿çšããå Žåãã³ãŒãã®å€æŽãšåŽåãæå°éã«æããã®ã«ã圹ç«ã¡ãŸãã
ããã¯ãã¹ãŠéåžžã«é åçã§ãïŒç§ã¯ã¢ããªã±ãŒã·ã§ã³ã³ã³ããŒãã³ããã·ãŒã ã¬ã¹ã«çœ®ãæããæ©èœã奜ãã§ã+ãããžã§ã¯ãã®éå§åïŒéå»ã®çµéšãšæšæž¬ã«åºã¥ããŠïŒã§ã¯ãªããã¢ããªã±ãŒã·ã§ã³ã®ããŸããŸãªéšåã䜿çšããå®éã®ã±ãŒã¹ãæããã«ãªããéèŠãªã¢ãŒããã¯ãã£äžã®æ±ºå®ãããã®ã奜ãã§ãæ¢åã®ããŒãºã«åºã¥ããŠé©åãªãœãªã¥ãŒã·ã§ã³ãéžæããæ©èœã
ãããã«
åè¿°ã®ããã«ããã®ã¢ããªã±ãŒã·ã§ã³ãã³ãã«ãªãã·ã§ã³ã¯ãã€ã³ãã©ã¹ãã©ã¯ãã£ã¬ã€ã€ãŒã§æ確ã«å®çŸ©ãããŠãããããã©ã®ãã¬ãŒã ã¯ãŒã¯ãšãããŸã調åããŸãã
äžéšã®äººã ã¯ãç§ã®ããŒãžã§ã³ã§ã¯ãã¬ã€ã€ãŒãå€ãããããšèããŠããŸãã 3ã€ã®ã¬ã€ã€ãŒã倧ãããããšèããããçç±ã¯ããããŸããããæ°ã«ãªãå Žåã¯é©çšãããã¬ã€ã€ãŒãåé€ã§ããŸãã åãå ¥ããã¹ããæžãèœåã倱ãïŒã·ã¹ãã ãã¹ããšå€å°äŒŒããã®ã«ãªããŸã-é ããŠå£ãããããªããŸãïŒãã³ãŒããè€è£œããã«Webã€ã³ã¿ãŒãã§ã€ã¹ãã³ã³ãœãŒã«ã³ãã³ããªã©ããåŒã³åºãããåãæ©èœããã¹ãããããšã¯ã§ããŸããã ãããã«ãããããžãã¹ããžãã¯ãšã€ã³ãã©ã¹ãã©ã¯ãã£ã®åé¢ã«ããããããžã§ã¯ãã®ã¢ãŒããã¯ãã£ãå€§å¹ ã«æ¹åãããŸãã
ã€ã³ãã©ã¹ãã©ã¯ãã£å±€ãããã«è©³çŽ°ã«æ€èšããå¿ èŠããããŸãã ããã§ãå è§åœ¢ã®ã¢ãŒããã¯ãã£ïŒããŒããšã¢ããã¿ãŒïŒã®ãããã¯ã«ã¹ã ãŒãºã«é²ã¿ãŸãã ãããããã®ãã¹ãŠã¯ã次ã®éšåã§ã
ããã«èªã
- Steve FreemanãšNat Pryce ã«ãããã¹ãã«å°ããããªããžã§ã¯ãæåãœãããŠã§ã¢ã®æé·
- ãããŒãC.ããŒãã£ã³ã«ããã¹ã¯ãªãŒãã³ã°ã¢ãŒããã¯ãã£
- ãããŒãC.ããŒãã£ã³ã«ããã¯ãªãŒã³ã¢ãŒããã¯ãã£
- ãã¡ã€ã³é§åèšèšã®å®è£ ã第4ç« ïŒãã¢ãŒããã¯ãã£ãããã³ç¬¬9ç« ïŒãã¢ãžã¥ãŒã«ããVaughn Vernonè
ãŸããã¬ã€ã€ãŒãšäŸåé¢ä¿ã䜿çšããããã®ã«ãŒã«ã«åŸãã®ã«åœ¹ç«ã€ããŒã«ã§ããDeptracã確èªã§ããŸãã