ããã«ã¡ã¯ãæè¡é¨ã®åå·ã§ãã
æè¿ã§ã¯Microservicesã¨ããè¨èãããªã浸éãããã®ãã¯ããã¯ãä½ç³»åããã¤ã¤ããã¾ãã ä¸æ¹ã§Microservicesã«ã¤ãã¦ã®è©±ã¯æ¦è«ãæ½è±¡çãªè©±ãå¤ããå ·ä½åãè¦ããªãã¨ããæ¹ãããã£ãããã®ã§ã¯ãªãã§ããããã
å½ããã°ã§ã¯1å¹´åã»ã©åã«Microservicesã¸ã®ã¨ããã¿ã«ã¤ãã¦ãç´¹ä»ãã¾ããã å½æ社å ã©ã¤ãã©ãªã ã£ãGarageã¯ãã®å¾ãªã¼ãã³ã½ã¼ã¹ã¨ãã¦å ¬éãããã¾ã社å ã®ã·ã¹ãã ãå½æã¨æ¯ã¹é£èºçãªé²åãéãã¦ãã¾ãã
ãããã£ãã¯ãã¯ãããã«ãããæè¿ã®Microservicesäºä¾ãå æ¥Microservices Casual Talksã§ç´¹ä»ãã¾ããã
Microservicesã®æ½è±¡çãªè©±ã¯ä¸åå²æããå ·ä½çãªäºä¾ã«çµå§ããå 容ã¨ãªã£ã¦ãã¾ãã Microservicesã®åºæ¬ã¨ãªãèãæ¹ã¯ããã£ããã®ã®ãå®è·µæ¹æ³ã§æ©ãã§ããæ¹ã¸å°ãã§ãå©ãã«ãªãã°ã¨ãããã¨ã§å½ããã°ã§ãããããã¦ãç´¹ä»ãã¾ãã
ãµã¼ãã¹ã®ç²åº¦
åä¸ã®è²¬åããã£ãå°ããªãµã¼ãã¹ããªã©ã¨ããè¨ããã¾ãããåä¸ã®è²¬åã¨ã¯ã©ãã¾ã§ãæãã®ã§ããããï¼ ã¯ãã¯ãããã§ã®ãµã¼ãã¹ãåé¡ããã¨ä¸»ã«3ã¤ã®ã¿ã¤ãã«åé¡ã§ãã¾ãã
ã¦ã¼ã¶ã¼ãµã¼ãã¹
ãããã¯ãã«ãã©ã¼ã«ã¹ããã¿ã¤ãã®ãã®ã§ããMicroservicesã¯äºæ¥ãã¡ã¤ã³ã§åå²ãããã¨ã大ååãªã®ã§ããããåºæ¬å½¢ã¨ãªãã¾ãã ããããå¥åº·ãæçæ室ãæçåç»ãã¯ãã¯ãããããã°ãã¿ããªã®ã«ã㧠ãªã©ãªã©ãå¤ãã®ãµã¼ãã¹ãæä¾ãã¦ãã¾ãã
åã ã®ãµã¼ãã¹ã¯æ®éã®Railsã¢ããªã±ã¼ã·ã§ã³ãå¤ãï¼ã¢ãã¤ã«ã¢ããªã®ã¿ã¨ããã±ã¼ã¹ãããã¾ããï¼ãã®ã®ããã¼ã ã«ãã£ã¦åæ§ãåºã¦ãã¾ãã ä¾ãã°ES6ã§React.jsãªãã®ãããã°CoffeeScriptã®ãã®ãããã¾ãããRubocopãå ¥ãã¦ãããã®ã¨ããã§ãªããã®ãããã¾ãã
ãããã¯ããç°ãªãã°å¯¾è±¡ã¦ã¼ã¶ã¼ãéããããæè»ãªæè¡é¸å®ãã§ããã¹ãã§ããä¸æ¹ã§å¿ è¦ã«å¿ãã¦ä»ãã¡ã¤ã³ã®ã¢ãã«ãç°¡åã«å©ç¨ã§ããã°ç¸ä¹å¹æãæå¾ ã§ãã¾ãã è¨ãæããã¨ãã¦ã¼ã¶ã¼ã«å¯¾ãã¦ã¯ãµã¼ãã¹ãã¨ã«åå·®ä¸å¥ã®å¯¾å¿ãã§ãã¤ã¤ãã社å ã®ä»ãµã¼ãã¹ã«å¯¾ãã¦ã¯1ã¤ã®ã¢ãã«ã¨ãã¦åãããã«æ¯ãèããã¨ãå¿ è¦ã§ãã
ãã¥ã¼ãµã¼ãã¹
ãã¡ã¤ã³ã¢ãã«ã¯åãã§å¥ã®ãã¥ã¼ã¨ãã¦æ¯ãèãã¿ã¤ãã§ãã
å½¢ã¨ãã¦ã¯ããããBFF(Backend for frontends)ãã¿ã¼ã³ã«è¿ãã®ã§ããã ã¯ãã¯ãããã§ã¯æ§ã ãªããã¤ã¹ã«å¯¾å¿ããããã¨ããããã¯ãåããã¡ã¤ã³ã¢ãã«ãå¥ãã¼ã¸ã§ã³ã§æä¾ãããããªã±ã¼ã¹ã§ä½¿ããã¦ãã¾ãã OEMçããã®ä¾ã§ãæ ¹æ¬çã«ã¯åããã®ãæä¾ããããUIãå¥ãã¼ã¸ã§ã³ã ã£ããã¢ã«ã¦ã³ãä½ç³»ãç°ãªããã®ãæä¾ãã¾ãã
å ±éåºç¤ãµã¼ãã¹
æ§ã ãªãµã¼ãã¹ããå ±éãã¦å©ç¨ãããåºç¤æ©è½ç¾¤ã§ããä¾ãã°ä»¥ä¸ã®ãããªãã®ãããã¾ãã
- OAuthãããã¤ã
- 決æ¸
- Pushéç¥ï¼ã¡ã¼ã«é ä¿¡
- ã¢ã¯ãã£ããã£
- å種ãã°
- ã»ãã¥ã¢ãã¼ã¿ï¼å人æ å ±ï¼ã¹ãã¬ã¼ã¸
- åç»
ãµã¼ãã¹éã®é£æº
RESTful Hypermedia API
Microservicesã«ããã¦ãµã¼ãã¹éã®éä¿¡ãã©ã®ããã«å®ç¾ãããã¯ããè°è«ããããã¼ãã§ãã HTTPã§REST APIãå©ç¨ããã®ãä¸è¬çã ã¨æãã¾ãããProtocol BuffersãThriftãªã©ãå©ç¨ããRPCãé¸æããå ´åããããã¨æãã¾ãã
ã¯ãã¯ãããã§ã¯Garageã使ã£ãRESTful Hypermedia APIã«ãããµã¼ãã¹ééä¿¡ãè¡ã£ã¦ãã¾ãã Garageã«ã¤ãã¦ã¯ä»¥åã«ãç´¹ä»ãã¦ããããæ¬è¨äºã§ã¯å²æãã¾ãã æ¬è¨äºã§ã¯ãGarageã ãã§ã¯ã«ãã¼ã§ããªããã¤ã³ãã«ã¤ãã¦èª¬æãã¾ãã
並è¡å¦çã¨èé害æ§
ãµã¼ãã¹é£æºãå¢ããã¨åé¡ã«ãªããã®ã®ä¸ã¤ããªã¼ãã¼ãããã§ããã¢ããªã·ãã¯ãªã¢ããªã±ã¼ã·ã§ã³ã ã¨DBã«æ¥ç¶ãã¦ã¨ã£ã¦ããã ãã§ããããããåç´ã«REST APIã«ç½®ãæããã¨ãªã¼ãã¼ãããã¯å¤§ãããªãã¾ãã ã¹ã«ã¼ããããä¸ããããã®å·¥å¤«ãå¿ è¦ã¨ãªãããã§ãããMicroservicesã¢ã¼ããã¯ãã£ã®å ´åä»ãµã¼ãã¹ã¸ã®ãªã¯ã¨ã¹ãã¯å¼ã³åºãå ããããã¨ãã ã®IOå¾ ã¡ã¨è¦ãªããããã並è¡å¦çã¨ç¸æ§ãè¯ãã¨ããç¹å¾´ãããã¾ãã é©åãªç²åº¦ã«ãµã¼ãã¹ãåå²ããã¦ããã°ãåãµã¼ãã¹ã®è²¬åã¯ç¬ç«æ§ãé«ããªãããããã並è¡å¦çããããå½¢ã«ãªã£ã¦ããã¾ãã
äºã¤ç®ã®åé¡ã¯èé害æ§ã§ããã©ããã®ãµã¼ãã¹ãè©°ã¾ãã¨ãã®ã¿ã¤ã ã¢ã¦ãå¾ ã¡ãªã¯ã¨ã¹ããæ»çãã¦ã¯ã©ã¤ã¢ã³ãå´ãè©°ã¾ã£ã¦ãã¾ãã¨ããé害ã®é£éã¯ãããããã¿ã¼ã³ã§ãã ãã£ãããµã¼ãã¹ãåããã¦ããã®ã«ãé害ã«å¼ããããããã¯ããã¾ããã
ãªã¯ã¨ã¹ãã並è¡å¦çãããããããªã«ãªãã©ã¤ãããããããµã¼ãã¹ã§ä¸å®ä»¥ä¸ã®ã¨ã©ã¼ãçºçããããä¸å®æéãã®ãµã¼ãã¹ã¸ã®ãªã¯ã¨ã¹ããåæ¢ããã ãããã£ããã¨ããã£ã¦ãããã®ãExpeditorã§ãããããã®æ©è½ã§å¯ããæ¹ããããã¨æãã¾ãããNetflix/Hystrixã®Rubyçã§ãã ç¾ç¶ã¯ã¾ã æ¬å®¶ã»ã©ã®æ©è½ã¯ããã¾ããããä¾åé¢ä¿ã®ããAsynchronous ExecutionãFallback, Retry, Circuit Breakerã¨ãã£ãåºæ¬çãªæ©è½ã¯åãã¦ãã¾ãã
ãµã¼ãã¹éã®ãã¹ã
REST APIé£æºã§åé¡ã«ãªããã®ã®ä¸ã¤ããAPIã®äºææ§ã§ãã
é常CIã§æ ä¿ãããã¹ãã®ã¬ãã«ã§ã¯ãå¥ãµã¼ãã¹ã¸ã®ãªã¯ã¨ã¹ãã¯ã¹ã¿ããã¦ããããããã®ãµã¼ãã¹ã®ã¨ã³ããã¤ã³ãã«äºææ§ã®ç¡ãå¤æ´ãå ¥ã£ã¦ãæ°ä»ãã¾ããã Protocol Buffersã§RPCããã¦ããå ´åãªã©ã¯ãprotoãã¡ã¤ã«ãå ±æãã¦ããã°åé¡ã«ãªããªãããããã¾ããã ããREST APIé£æºã§ä¼¼ããããªãã¨ããããªããJSON Schemaãå©ç¨ããæãããã¾ããããããã¨ãã¨Ruby + HTTPã¨ããæåã§ãããããåã§ç®¡çããéçºã¹ã¿ã¤ã«ããããåããã¹ãã§ç®¡çããã¹ã¿ã¤ã«ã®æ¹ãéçºè ã«é¦´æãã§ãã¾ããã ãããRack::VCRãã§ããèæ¯ã§ããããããµã¼ãã¹ãã¨ã®CIã§æ ä¿ããæ¹å¼ã ã¨ããµã¼ãã¹éã§ãã«ãé »åº¦ã«å·®ãããå ´åãã¯ãã¯ãããã®ããã«é«é »åº¦ã§ãªãªã¼ã¹ãè¡ãçµç¹ã ã¨éäºæãæ¤ç¥ããåã«åæ ããã¦ãã¾ããã¨ãããã¾ãã ããã§Consumer-Driven Contract testingã«èµãåããç¾å¨ã§ã¯Pactã«ç§»è¡ãã¾ããã
ããã«ãããã¯ã©ã¤ã¢ã³ããå¿ è¦ãªAPIã®äºææ§ãå£ããå ´åããããã¤ãå´ã®CIã§æ¤ç¥ã§ããããã«ãªããéäºæãªå¤æ´ããªãªã¼ã¹ããããã¨ãé²ããã¨ãã§ããããã«ãªã£ã¦ãã¾ãã
ãµã¼ãã¹éã®ãã°ãç´ä»ãã
ãµã¼ãã¹ããããã¦ããã¨é£ãããªããã¨ã®ä¸ã¤ããã°ã®è¿½è·¡ã§ããç¹ã«ã¨ã©ã¼ãã°ã¯ããããµã¼ãã¹ã§ã¨ã©ã¼ãçºçããéã«ããã®å¼ã³åºãå ã§ã®ã¨ã©ã¼ãè¦ããéã«ãªã¯ã¨ã¹ãå ã§ã©ãããã¨ã©ã¼ãçºçãã¦ããã®ãã追跡ã§ããªãã¨ãåé¡ã®ç¹å®ãå°é£ã«ãªãã¾ãã ããã¯ãªã¯ã¨ã¹ãã«IDãæ¡çªãã¦ãåãµã¼ãã¹ã§ã©ã®ãªã¯ã¨ã¹ãèµ·å ãªã®ããç¹å®ããææ³ãä¸è¬çã§ããç¹ã«Railsã§ã¯ããã©ã«ãã§X-Request-Idãããã«å¯¾å¿ãã¦ãããIDããªããã°æ¡çªãããããã«ãªã£ã¦ãã¾ãã ã¾ãäºãã«GarageClientã使ã£ã¦é£æºãã¦ãããããGarageClientããªã¯ã¨ã¹ãæã«X-Request-Idãã»ãããããã¨ã§ãªã¯ã¨ã¹ãå ã«ä¼æãããã¨ãã§ãã¾ãã
社å ã§ã¯ã¨ã©ã¼ãã°ã®ç®¡çã«Sentryã使ã£ã¦ããããã®ãªã¯ã¨ã¹ãIDãã¿ã°ã¨ãã¦ã¨ã©ã¼ã«ã¤ãã¦ç®¡çããããã«ãã¦ãã¾ãã
ãµã¼ãã¹ã®å®è¡ç°å¢ï¼æ§æ管ç
ãµã¼ãã¹ã®ç¨®é¡ãå¢ãã¦ããã¨å¤§å¤ã«ãªãã®ã¯ã¤ã³ãã©ã§ããã¯ãã¯ãããã§ã¯ãã¨ãã¨Puppetãç¨ãã¦æ§æ管çããã¦ãã¾ããããæ§æããã¢ã¸ã¥ã¼ã«ãå¢ãã¦è¤éã«ãªã£ããã ã¾ãåãã¢ããªã±ã¼ã·ã§ã³ã§ãã£ã¦ãAPãµã¼ãã¼åãã®æ§æã¨ããããã¸ã§ãã¯ã¼ã«ã¼ç¨ã®æ§æãåãã¦ç®¡çãããã¨æ§ã ãªé¢ã§è¤éã«ãªã£ã¦ãã¾ããã
ç¾å¨ã¯ã以åãããã巨大ãªRailsã¢ããªã±ã¼ã·ã§ã³ãªã©ã¨ãã£ãä¸é¨ãé¤ããã»ã¨ãã©ã®ã¢ããªã±ã¼ã·ã§ã³ãDockerã§ç®¡çããã¦ãã¾ãããã¡ãããã¹ãç°å¢ã ãã§ã¯ãªãæ¬çªç°å¢ãDockerã§ãã
ãã«ããã¤ãã©ã¤ã³
åãµã¼ãã¹ã§ã®å¤æ´ããã¼ã¸ãããã¨ãåãµã¼ãã¹ã®CIãå®è¡ããããã¹ããéãã°Dockerã¤ã¡ã¼ã¸ãä½æããã¾ããä½æãããã¤ã¡ã¼ã¸ã¯ãã®ã¾ã¾èªåã§stagingã«ãããã¤ããã¾ãã ãã¡ããæ¬çªãåãã¤ã¡ã¼ã¸ã使ããã¾ãããã¾ããããã¸ã§ãããµã¼ãã¹å°ç¨ã®å®è¡ç°å¢ãå¿ è¦ã¨ãããDockerã¤ã¡ã¼ã¸ãã¨ã£ã¦ãã¦å®è¡ããã ãã§ãã ãã¡ãããã®ã¤ã¡ã¼ã¸ã¯éçºè ã®æå ã§åãããã¨ãã§ãã¾ããã¹ã±ã¼ã«ã¢ã¦ãããéãããããã¬ã¼ã·ã§ã³ãã¹ãã®ããã«ç¬ç«ããç°å¢ãä½ããããã¨ãã£ãå ´åã«ãããã«å¯¾å¿ã§ãã¾ãã
ãããã¤
Dockerã®ããã¯ã¨ã³ãã¯ECSãå©ç¨ãã¦ãã¾ãããå®éã®ãããã¤ã«ã¯ELBã¨ã³ã³ããã®ç´ä»ããè¨å®ããããç°å¢å¤æ°ã®æ³¨å ¥ã¨ãã£ãæ§ã ãªä½æ¥ãå¿ è¦ã¨ãªãã¾ãã ãããã£ããããã¤ã«é¢é£ããæ§ã ãªã¢ã¯ã·ã§ã³ããã©ã¬ãã«ã«è¨å®ã§ãããããã¤ãã¼ã«ãHakoã§ãã Hakoã®ãããã§ãååãããã¤æã«ELBãä½æããããRoute53ã使ã£ã¦èªåã§ãã¡ã¤ã³ãè¨å®ãããã¨ãã£ãã以åã§ããã°ã¤ã³ãã©ã¨ã³ã¸ãã¢ãåå¥ã«è¨å®ãã¦ãããããªä½æ¥ã¾ã§èªååããã¦ãã¾ãã ãããæ´»ç¨ãã¦ãæ¬çªç°å¢ã§ã¯1ã¤ã®ã¢ããªã±ã¼ã·ã§ã³ã1ã¤ã®ELBã«ç´ã¥ããããã¹ãç°å¢ã§ã¯1ã¤ã®ELBã«è¤æ°ã®ã¢ããªã±ã¼ã·ã§ã³ãç´ã¥ãã¨ãã£ãæè»ãªæ§æãã¨ããã¨ãã§ããããã«ãªã£ã¦ãã¾ãã
è¨å®ç®¡ç
åãã¤ã¡ã¼ã¸ã¨ãã£ã¦ããDBã®æ¥ç¶å æ å ±ããAPIã®ã¯ã¬ãã³ã·ã£ã«ãªã©ãç°å¢ä¾åã®é¨åãããã¾ãã Hakoãç°å¢å¤æ°ãæ³¨å ¥ãã¦ãããã®ã§ããç¨åº¦ã¯ããã§ç®¡çã§ããã®ã§ãããç§å¿ãã¹ãå¤ã¯etcenvãetcvaultã使ã£ã¦ç®¡çãã¦ãã¾ãã ããã¯ã¨ã³ãã¯etcdã§ããããã¨ãã¨ACLãç¡ãã£ãããæå·åãã¦ç®¡çããããã«ãããã®ã§ããetcenvã«ã¯etcwebã¨ããUIãã¼ã«ããããããã使ã£ã¦WebUIä¸ã§ç®¡çãã¦ãã¾ãã
çµç¹çãªãµãã¼ã
Microservicesã¢ã¼ããã¯ãã£ãæ¡ç¨ãã¦ããã¨ãããã¨ã¯ãå½ç¶ãªãããã¼ã ããµã¼ãã¹ã«å¿ãã¦åããã¦ãã¾ãã ãã®ãããã¼ã éã®é£æºæ¹æ³ããå ¨ä½ã®ææ決å®ãªã©ã®ä»æ¹ãå¾ã ã«å¤åãã¦ãã¾ããã
æè¡é å課é¡å ±æä¼
åãã¼ã ã®ç¬ç«æ§ãé«ã¾ãã¨ãäºãã«ã©ããããã¨ããã£ã¦ããã®ãææ¡ãã¥ãããªã£ã¦ãã¾ãããã®äºæ¥åºæã®æ©ã¿ãå¢ãã¦ããã¾ãã ãããªãã¨ãå®ã¯ã¿ããªå°ã£ã¦ããã®ã«èªåãã¡ã®ã¨ããã ãã ã¨æã£ã¦åé¡æèµ·ãããªãã£ãããé£ã®ãã¼ã ã§è§£æ±ºæ¸ã¿ãªã®ãç¥ããã«ãã£ã¨å°ã£ã¦ããã¨ãããã¨ã«ããªãããã¾ããã ããã§åãã¼ã ã®æè¡ãªã¼ãã¼ã¨ãåºç¤ï¼ã¤ã³ãã©ã®ã¨ã³ã¸ãã¢ãæã«ä¸åº¦éã¾ã£ã¦èª²é¡ã話ãåãå ´ãè¨ãã¦ãã¾ãã
ãã®ä¼ã§ã¯åãã¼ã ããä»å°ã£ã¦ãããã¨ãããã¦ããããæ¢ã«è§£æ±ºçãããå ´åã¯ãã®å ±æããç¡ãå ´åã¯é©åãªãã¼ã ã対å¿ã«åãã¾ãã ã¾ãå ¨ä½æé©ã¨ãããã¨ã§å ¨ä½ã«å½±é¿ã®ããä»æ§å¤æ´ãèãã¦ããã¨ãã«å ±æãããããã以åã«ãã¢ãªã³ã°ãããããªå ´ã«ããªã£ã¦ãã¾ãã ããã«ãã£ã¦ãåé¡ã¨æã£ã¦ãªãã£ãç¹ã«å®ã¯ã¿ããªå°ã£ã¦ããã¨ããéã«ã¿ããªä½¿ã£ã¦ããã¨æã£ã¦é å¼µã£ã¦éç¨ãã¦ãããå¥ã«èª°ã使ã£ã¦ããªãã£ãã¨ãããã¨ãè¦ã¤ãåºããããã«ãªã£ã¦ãã¾ããã
æè¡åºç¤æ å½
ãã¼ã ãå¤æ§ã«ãªãã¨ãä¸ã«ã¯åºç¤æ¹åãå¾æãªã¡ã³ãã¼ããããã¼ã ã¨ããªããã¼ã ããã£ãããæ°è¦éçºãå¤ããã¼ã ã¯èªç¶ã¨ææ°ã®ç¤¾å åºç¤ãç¥ã£ã¦ãã¾ããã ããã§ãªããã¼ã ã¯ä¾¿å©ãªç¤¾å åºç¤ãããã®ãç¥ããã«èªåã§é å¼µã£ããããã±ã¼ã¹ãããã¾ãããããã¯åºç¤æ¹åã«ã¾ããä½åãç¡ããã¼ã ããã£ãããã¾ãã
ããã§éçºåºç¤ã®ã¡ã³ãã¼ãåãµã¼ãã¹ã«æ å½è ã¨ãã¦ã¤ãããã«ãã¾ããã ä¸äººã§è¤æ°ã®ãµã¼ãã¹ã«ã¤ãã¦ããã常é§ããããã§ã¯ãªãã®ã§ãã¼ã å¤åºç¤æ å½ã¨ã§ãè¨ããã§ããããã æ å½ã¡ã³ãã¼ã¯åãã¼ã ã®ãã£ããã«ã¯ããããã«ãã¦ããã®ã§ãéã«ç¸è«ããããæã«ã¯ã¬ãããªã¯ãã£ã¦éçºç°å¢ã®æ´åãããããã¾ãã
ã¾ã¨ã
ã¯ãã¯ãããã«ãããæè¿ã®Microservicesäºä¾ã«ã¤ãã¦ãç´¹ä»ãã¾ããã Dockerãããããããã¼ã¿ããªãã£ã¯ç¤¾å ã®éçºã¹ã¿ã¤ã«ã大ããå¤ããMicroservicesåãå éããã¾ããã ããã«å¼å¿ãã¦Pactã®ãããªä»çµã¿ãçµç¹çãªãµãã¼ããªã©ãçºå±ããã¯ãã¯ãããã®éçºã¹ã¿ã¤ã«ã¯ãã®1å¹´ã§ãé£èºçãªé²æ©ãéãã¦ãã¾ãã
Microservicesåã«ãã£ã¦åãã¼ã ãããããã®ãããã¯ãã«ãã©ã¼ã«ã¹ãããã¨ãã§ããããã«ãªãã¾ãã ãããã¯ãã«ãã©ã¼ã«ã¹ããã¨ãããã¨ã¯ãã®ãããã¯ãã®ã¦ã¼ã¶ã¼ã«ãã©ã¼ã«ã¹ããã¨ãããã¨ã§ãã ãããã¯ããã¨ã«æé©ãªæè¡ãé¸æããããèªåãã¡ã§èªåãã¡ã®ãããã¯ãã«è²¬ä»»ã¨æ¨©éãæã£ã¦éçºãããã¨ãã§ãã¾ãã
ä»åã¯æ¦è¦ããç´¹ä»ãã¾ãããããã¤ãHakoãPactã¨ãã£ãåã ã®ä»çµã¿ã«ã¤ãã¦ããç´¹ä»ã§ããã°ã¨æã£ã¦ãã¾ãã