ãã€ã¯ããµãŒãã¹ã¢ãŒããã¯ãã£å šäœã§APIã®äºææ§ã確ä¿ããããã®ãã³ã³ãã©ã¯ããã¹ãã®ååãå©ç¹ãå®è£ æŠç¥ãå®äŸãç¶²çŸ ããå æ¬çãªã¬ã€ãã
ã³ã³ãã©ã¯ããã¹ãïŒãã€ã¯ããµãŒãã¹ã®äžçã«ãããAPIäºææ§ã®ç¢ºä¿
çŸä»£ã®ãœãããŠã§ã¢æ¥çã§ã¯ããã€ã¯ããµãŒãã¹ã¢ãŒããã¯ãã£ããŸããŸãæ®åããã¹ã±ãŒã©ããªãã£ãç¬ç«ãããããã€ãæè¡ã®å€æ§æ§ãšãã£ãã¡ãªãããæäŸããŠããŸãããããããããã®åæ£ã·ã¹ãã ã¯ããµãŒãã¹éã®ã·ãŒã ã¬ã¹ãªéä¿¡ãšäºææ§ã確ä¿ããäžã§èª²é¡ããããããŸããäž»èŠãªèª²é¡ã®1ã€ã¯ãç¹ã«ç°ãªãããŒã ãçµç¹ãAPIã管çããŠããå Žåã«ãAPIéã®äºææ§ãç¶æããããšã§ããããã§ã³ã³ãã©ã¯ããã¹ãã圹ç«ã¡ãŸãããã®èšäºã§ã¯ãã³ã³ãã©ã¯ããã¹ãã®ååãå©ç¹ãå®è£ æŠç¥ãå®äŸãç¶²çŸ ããå æ¬çãªã¬ã€ããæäŸããŸãã
ã³ã³ãã©ã¯ããã¹ããšã¯ïŒ
ã³ã³ãã©ã¯ããã¹ãã¯ãAPIãããã€ããŒããã®ã³ã³ã·ã¥ãŒããŒïŒæ¶è²»è ïŒã®æåŸ ã«åŸã£ãŠããããšãæ€èšŒããææ³ã§ããå£ããããç¶æãå°é£ãªåŸæ¥ã®çµ±åãã¹ããšã¯ç°ãªããã³ã³ãã©ã¯ããã¹ãã¯ã³ã³ã·ã¥ãŒããŒãšãããã€ããŒéã®å¥çŽã«çŠç¹ãåœãŠãŸãããã®å¥çŽã¯ããªã¯ãšã¹ã圢åŒãã¬ã¹ãã³ã¹æ§é ãããŒã¿åãªã©ãæåŸ ãããã€ã³ã¿ã©ã¯ã·ã§ã³ãå®çŸ©ããŸãã
ãã®æ žå¿ã«ãããŠãã³ã³ãã©ã¯ããã¹ãã¯ããããã€ããŒãã³ã³ã·ã¥ãŒããŒããã®ãªã¯ãšã¹ããæºãããããšããããŠã³ã³ã·ã¥ãŒããŒããããã€ããŒããåãåã£ãã¬ã¹ãã³ã¹ãæ£ããåŠçã§ããããšãæ€èšŒããããšã§ããããã¯ãã³ã³ã·ã¥ãŒããŒãšãããã€ããŒã®ããŒã ãååããŠãããã®å¥çŽãå®çŸ©ãã匷å¶ãããã®ã§ãã
ã³ã³ãã©ã¯ããã¹ãã®äž»èŠæŠå¿µ
- ã³ã³ã·ã¥ãŒããŒïŒConsumerïŒ: ä»ã®ãµãŒãã¹ãæäŸããAPIã«äŸåããã¢ããªã±ãŒã·ã§ã³ãŸãã¯ãµãŒãã¹ã
- ãããã€ããŒïŒProviderïŒ: ä»ã®ãµãŒãã¹ã«ãã£ãŠæ¶è²»ãããAPIãå ¬éããã¢ããªã±ãŒã·ã§ã³ãŸãã¯ãµãŒãã¹ã
- å¥çŽïŒContractïŒ: ã³ã³ã·ã¥ãŒããŒãšãããã€ããŒéã®åæã§ãããæåŸ ãããã€ã³ã¿ã©ã¯ã·ã§ã³ãå®çŸ©ããŸããããã¯éåžžãäžé£ã®ãªã¯ãšã¹ããšã¬ã¹ãã³ã¹ãšããŠè¡šçŸãããŸãã
- æ€èšŒïŒVerificationïŒ: ãããã€ããŒãå¥çŽãéµå®ããŠããããšã確èªããããã»ã¹ãããã¯ããããã€ããŒã®å®éã®APIå®è£ ã«å¯ŸããŠã³ã³ãã©ã¯ããã¹ããå®è¡ããããšã«ãã£ãŠè¡ãããŸãã
ãªãã³ã³ãã©ã¯ããã¹ãã¯éèŠãªã®ãïŒ
ã³ã³ãã©ã¯ããã¹ãã¯ããã€ã¯ããµãŒãã¹ã¢ãŒããã¯ãã£ã«ãããããã€ãã®éèŠãªèª²é¡ã«å¯ŸåŠããŸãïŒ
1. çµ±åã®ç Žç¶»ãé²ã
ã³ã³ãã©ã¯ããã¹ãã®æã倧ããªå©ç¹ã®1ã€ã¯ãçµ±åã®ç Žç¶»ãé²ãã®ã«åœ¹ç«ã€ããšã§ãããããã€ããŒãå¥çŽãéµå®ããŠããããšãæ€èšŒããããšã§ãæœåšçãªäºææ§ã®åé¡ãéçºãµã€ã¯ã«ã®æ©ã段éã§ãæ¬çªç°å¢ã«å°éããåã«æããããšãã§ããŸããããã«ãããã©ã³ã¿ã€ã ãšã©ãŒããµãŒãã¹åæ¢ã®ãªã¹ã¯ãæžå°ããŸãã
äŸïŒ ãã€ãã®ã³ã³ã·ã¥ãŒããŒãµãŒãã¹ããé貚æç®ã®ããã«ç±³åœã®ãããã€ããŒãµãŒãã¹ã«äŸåããŠãããšæ³åããŠãã ããããããããã€ããŒãã³ã³ã·ã¥ãŒããŒã«éç¥ããã«APIã倿Žããç°ãªãé貚ã³ãŒã圢åŒã䜿çšããããã«ãªã£ãå ŽåïŒäŸïŒãEURãããEUãã«å€æŽïŒãã³ã³ã·ã¥ãŒããŒãµãŒãã¹ã¯å£ããå¯èœæ§ããããŸããã³ã³ãã©ã¯ããã¹ãã¯ããããã€ããŒãäŸç¶ãšããŠæåŸ ãããé貚ã³ãŒã圢åŒããµããŒãããŠããããšãæ€èšŒããããšã§ããããã€åã«ãã®å€æŽãæããŸãã
2. ç¬ç«ããéçºãšãããã€ãå¯èœã«ãã
ã³ã³ãã©ã¯ããã¹ãã«ãããã³ã³ã·ã¥ãŒããŒãšãããã€ããŒã®ããŒã ã¯ç¬ç«ããŠäœæ¥ããç°ãªãã¿ã€ãã³ã°ã§ãµãŒãã¹ããããã€ã§ããŸããå¥çŽãæåŸ å€ãå®çŸ©ããŠãããããããŒã ã¯ç·å¯ã«é£æºããããšãªãããµãŒãã¹ã®éçºãšãã¹ããè¡ãããšãã§ããŸããããã«ãããä¿ææ§ãšããéããªãªãŒã¹ãµã€ã¯ã«ãä¿é²ãããŸãã
äŸïŒ ã«ããã®eã³ããŒã¹ãã©ãããã©ãŒã ããã€ã³ãã«æ ç¹ã眮ããµãŒãããŒãã£ã®æ±ºæžã²ãŒããŠã§ã€ã䜿çšããŠãããšããŸããæ±ºæžã²ãŒããŠã§ã€ãåæãããå¥çŽãéµå®ããŠããéããeã³ããŒã¹ãã©ãããã©ãŒã ã¯æ±ºæžã²ãŒããŠã§ã€ãšã®çµ±åãç¬ç«ããŠéçºã»ãã¹ãã§ããŸããæ±ºæžã²ãŒããŠã§ã€ããŒã ããå¥çŽãå®ãç¶ããéãeã³ããŒã¹ãã©ãããã©ãŒã ãå£ãããšã¯ãªããšããã£ãŠããã®ã§ãèªç€ŸãµãŒãã¹ã®æŽæ°ãç¬ç«ããŠéçºã»ãããã€ã§ããŸãã
3. APIèšèšã®æ¹å
å¥çŽãå®çŸ©ããããã»ã¹ã¯ãããè¯ãAPIèšèšã«ã€ãªããå¯èœæ§ããããŸããã³ã³ã·ã¥ãŒããŒãšãããã€ããŒã®ããŒã ãå¥çŽã®å®çŸ©ã«ååãããšãã圌ãã¯ã³ã³ã·ã¥ãŒããŒã®ããŒãºãšãããã€ããŒã®èœåã«ã€ããŠæ éã«èããããšã匷ããããŸããããã«ãããããæç¢ºã«å®çŸ©ããããŠãŒã¶ãŒãã¬ã³ããªãŒã§å ç¢ãªAPIãçãŸããããšããããŸãã
äŸïŒ ã¢ãã€ã«ã¢ããªéçºè ïŒã³ã³ã·ã¥ãŒããŒïŒãããŠãŒã¶ãŒãã³ã³ãã³ããå ±æã§ããããã«ãœãŒã·ã£ã«ã¡ãã£ã¢ãã©ãããã©ãŒã ïŒãããã€ããŒïŒãšçµ±åããããšèããŠããŸããããŒã¿åœ¢åŒãèªèšŒæ¹æ³ããšã©ãŒåŠçæé ãç¹å®ããå¥çŽãå®çŸ©ããããšã«ãããã¢ãã€ã«ã¢ããªéçºè ã¯çµ±åãã·ãŒã ã¬ã¹ã§ä¿¡é Œæ§ã®é«ããã®ã§ããããšãä¿èšŒã§ããŸãããœãŒã·ã£ã«ã¡ãã£ã¢ãã©ãããã©ãŒã ããã¢ãã€ã«ã¢ããªéçºè ã®èŠä»¶ãæç¢ºã«çè§£ããããšã§ãå°æ¥ã®APIæ¹åã«åœ¹ç«ãŠãããšãã§ããŸãã
4. ãã¹ãã®ãªãŒããŒããããåæžãã
ã³ã³ãã©ã¯ããã¹ãã¯ããµãŒãã¹éã®ç¹å®ã®ã€ã³ã¿ã©ã¯ã·ã§ã³ã«çŠç¹ãåœãŠãããšã§ãå šäœçãªãã¹ãã®ãªãŒããŒããããåæžã§ããŸããèšå®ãšç¶æãè€éã§æéã®ããããšã³ãããŒãšã³ãã®çµ±åãã¹ããšæ¯èŒããŠãã³ã³ãã©ã¯ããã¹ãã¯ããçŠç¹ãçµãããŠãããå¹ççã§ããæœåšçãªåé¡ãè¿ éãã€å®¹æã«ç¹å®ããŸãã
äŸïŒ åšåº«ç®¡çãæ¯æãåŠçãé éãªã©è€æ°ã®ãµãŒãã¹ãé¢äžããæ³šæåŠçã·ã¹ãã å šäœã®å®å šãªãšã³ãããŒãšã³ããã¹ããå®è¡ãã代ããã«ãã³ã³ãã©ã¯ããã¹ãã¯æ³šæãµãŒãã¹ãšåšåº«ãµãŒãã¹ã®éã®ã€ã³ã¿ã©ã¯ã·ã§ã³ã«ç¹åããŠçŠç¹ãåœãŠãããšãã§ããŸããããã«ãããéçºè ã¯åé¡ãããè¿ éã«ç¹å®ãã解決ããããšãã§ããŸãã
5. ã³ã©ãã¬ãŒã·ã§ã³ã®åŒ·å
ã³ã³ãã©ã¯ããã¹ãã¯ãã³ã³ã·ã¥ãŒããŒãšãããã€ããŒã®ããŒã éã®ã³ã©ãã¬ãŒã·ã§ã³ãä¿é²ããŸããå¥çŽãå®çŸ©ããããã»ã¹ã«ã¯ã³ãã¥ãã±ãŒã·ã§ã³ãšåæãå¿ èŠã§ãããã·ã¹ãã ã®æ¯ãèãã«å¯Ÿããå ±éã®çè§£ãè²ã¿ãŸããããã¯ããã匷ãé¢ä¿ãšãã广çãªããŒã ã¯ãŒã¯ã«ã€ãªããå¯èœæ§ããããŸãã
äŸïŒ ãã©ãžã«ã§ãã©ã€ãäºçŽãµãŒãã¹ãéçºããŠããããŒã ããã°ããŒãã«ãªèªç©ºäŒç€ŸäºçŽã·ã¹ãã ãšçµ±åããå¿ èŠããããŸããã³ã³ãã©ã¯ããã¹ãã¯ããã©ã€ãäºçŽãµãŒãã¹ããŒã ãšèªç©ºäŒç€ŸäºçŽã·ã¹ãã ããŒã éã®æç¢ºãªã³ãã¥ãã±ãŒã·ã§ã³ãå¿ èŠãšããå¥çŽãå®çŸ©ããæåŸ ãããããŒã¿åœ¢åŒãçè§£ããæœåšçãªãšã©ãŒã·ããªãªãåŠçããŸãããã®ã³ã©ãã¬ãŒã·ã§ã³ã¯ãããå ç¢ã§ä¿¡é Œæ§ã®é«ãçµ±åã«ã€ãªãããŸãã
æ¶è²»è é§åå¥çŽãã¹ã
ã³ã³ãã©ã¯ããã¹ãã§æãäžè¬çãªã¢ãããŒãã¯æ¶è²»è é§åå¥çŽãã¹ãïŒConsumer-Driven Contract Testing, CDCTïŒã§ããCDCTã§ã¯ãã³ã³ã·ã¥ãŒããŒãèªèº«ã®ç¹å®ã®ããŒãºã«åºã¥ããŠå¥çŽãå®çŸ©ããŸãããã®åŸããããã€ããŒã¯ãã®å¥çŽãã³ã³ã·ã¥ãŒããŒã®æåŸ ãæºãããŠããããšãæ€èšŒããŸãããã®ã¢ãããŒãã«ããããããã€ããŒã¯ã³ã³ã·ã¥ãŒããŒãå®éã«å¿ èŠãšãããã®ã ããå®è£ ããããšãä¿èšŒãããéå°ãªèšèšãäžå¿ èŠãªè€éãã®ãªã¹ã¯ãæžãããŸãã
æ¶è²»è é§åå¥çŽãã¹ãã®ä»çµã¿ïŒ
- ã³ã³ã·ã¥ãŒããŒãå¥çŽãå®çŸ©ããïŒ ã³ã³ã·ã¥ãŒããŒããŒã ã¯ããããã€ããŒãšã®æåŸ ãããã€ã³ã¿ã©ã¯ã·ã§ã³ãå®çŸ©ããäžé£ã®ãã¹ããäœæããŸãããããã®ãã¹ãã¯ãã³ã³ã·ã¥ãŒããŒãè¡ããªã¯ãšã¹ããšãåãåãããšãæåŸ ããã¬ã¹ãã³ã¹ãç¹å®ããŸãã
- ã³ã³ã·ã¥ãŒããŒãå¥çŽãå ¬éããïŒ ã³ã³ã·ã¥ãŒããŒã¯å¥çŽãå ¬éããŸããéåžžã¯ãã¡ã€ã«ãŸãã¯äžé£ã®ãã¡ã€ã«ãšããŠå ¬éãããŸãããã®å¥çŽã¯ãæåŸ ãããã€ã³ã¿ã©ã¯ã·ã§ã³ã®å¯äžã®ä¿¡é Œã§ããæ å ±æºãšããŠæ©èœããŸãã
- ãããã€ããŒãå¥çŽãæ€èšŒããïŒ ãããã€ããŒããŒã ã¯å¥çŽãååŸããèªç€Ÿã®APIå®è£ ã«å¯ŸããŠå®è¡ããŸãããã®æ€èšŒããã»ã¹ã«ããããããã€ããŒãå¥çŽãéµå®ããŠããããšã確èªãããŸãã
- ãã£ãŒãããã¯ã«ãŒãïŒ æ€èšŒããã»ã¹ã®çµæã¯ãã³ã³ã·ã¥ãŒããŒãšãããã€ããŒã®äž¡ããŒã ã«å ±æãããŸãããããã€ããŒãå¥çŽãæºãããªãã£ãå ŽåãAPIãæŽæ°ããŠæºæ ãããå¿ èŠããããŸãã
ã³ã³ãã©ã¯ããã¹ãã®ããã®ããŒã«ãšãã¬ãŒã ã¯ãŒã¯
ã³ã³ãã©ã¯ããã¹ãããµããŒãããããã«ãããã€ãã®ããŒã«ãšãã¬ãŒã ã¯ãŒã¯ãå©çšå¯èœã§ãããããããã«é·æãšçæããããŸããæã人æ°ã®ãããªãã·ã§ã³ã«ã¯ä»¥äžã®ãããªãã®ããããŸãïŒ
- Pact: Pactã¯ãæ¶è²»è é§åå¥çŽãã¹ãå°çšã«èšèšããããåºã䜿çšãããŠãããªãŒãã³ãœãŒã¹ã®ãã¬ãŒã ã¯ãŒã¯ã§ããJava, Ruby, JavaScript, .NETãªã©è€æ°ã®èšèªããµããŒãããŠããŸããPactã¯ãå¥çŽãå®çŸ©ããããã®DSLïŒãã¡ã€ã³åºæèšèªïŒãšããããã€ããŒã®ã³ã³ãã©ã€ã¢ã³ã¹ãä¿èšŒããããã®æ€èšŒããã»ã¹ãæäŸããŸãã
- Spring Cloud Contract: Spring Cloud Contractã¯ãSpringãšã³ã·ã¹ãã ãšã·ãŒã ã¬ã¹ã«çµ±åããããã¬ãŒã ã¯ãŒã¯ã§ããGroovyãYAMLã䜿çšããŠå¥çŽãå®çŸ©ããã³ã³ã·ã¥ãŒããŒãšãããã€ããŒã®äž¡æ¹ã®ãã¹ããèªåçã«çæã§ããŸãã
- Swagger/OpenAPI: äž»ã«APIããã¥ã¡ã³ãäœæã«äœ¿çšãããŸãããSwagger/OpenAPIã¯ã³ã³ãã©ã¯ããã¹ãã«ã䜿çšã§ããŸããSwagger/OpenAPIã䜿çšããŠAPI仿§ãå®çŸ©ããDreddãAPI Fortressã®ãããªããŒã«ã䜿çšããŠAPIå®è£ ã仿§ã«æºæ ããŠããããšãæ€èšŒã§ããŸãã
- ã«ã¹ã¿ã ãœãªã¥ãŒã·ã§ã³: å Žåã«ãã£ãŠã¯ãæ¢åã®ãã¹ããã¬ãŒã ã¯ãŒã¯ãã©ã€ãã©ãªã䜿çšããŠç¬èªã®ã³ã³ãã©ã¯ããã¹ããœãªã¥ãŒã·ã§ã³ãæ§ç¯ããããšãéžæãããããããŸãããããã¯ãéåžžã«ç¹å®ã®èŠä»¶ãããå Žåããæ¢åã®CI/CDãã€ãã©ã€ã³ã«ç¹å®ã®æ¹æ³ã§ã³ã³ãã©ã¯ããã¹ããçµ±åãããå Žåã«è¯ãéžæè¢ãšãªããŸãã
ã³ã³ãã©ã¯ããã¹ãã®å®è£ ïŒã¹ããããã€ã¹ãããã¬ã€ã
ã³ã³ãã©ã¯ããã¹ãã®å®è£ ã«ã¯ããã€ãã®ã¹ããããå«ãŸããŸãã以äžã«ãéå§ããããã®äžè¬çãªã¬ã€ãã瀺ããŸãïŒ
1. ã³ã³ãã©ã¯ããã¹ããã¬ãŒã ã¯ãŒã¯ãéžæãã
æåã®ã¹ãããã¯ãããŒãºã«åã£ãã³ã³ãã©ã¯ããã¹ããã¬ãŒã ã¯ãŒã¯ãéžæããããšã§ããèšèªãµããŒãã䜿ãããããæ¢åã®ããŒã«ãšã®çµ±åãã³ãã¥ããã£ãµããŒããªã©ã®èŠçŽ ãèæ ®ããŠãã ãããPactã¯ããã®å€çšéæ§ãšå æ¬çãªæ©èœã§äººæ°ã®ããéžæè¢ã§ããSpringãšã³ã·ã¹ãã ãæ¢ã«äœ¿çšããŠããå Žåã¯ãSpring Cloud Contractãé©ããŠããŸãã
2. ã³ã³ã·ã¥ãŒããŒãšãããã€ããŒãç¹å®ãã
ã·ã¹ãã å ã®ã³ã³ã·ã¥ãŒããŒãšãããã€ããŒãç¹å®ããŸããã©ã®ãµãŒãã¹ãã©ã®APIã«äŸåããŠãããã倿ããŸããããã¯ãã³ã³ãã©ã¯ããã¹ãã®ç¯å²ãå®çŸ©ããããã«éèŠã§ããæåã¯æãéèŠãªã€ã³ã¿ã©ã¯ã·ã§ã³ã«çŠç¹ãåœãŠãŸãã
3. å¥çŽãå®çŸ©ãã
ã³ã³ã·ã¥ãŒããŒããŒã ãšååããŠãåAPIã®å¥çŽãå®çŸ©ããŸãããããã®å¥çŽã¯ãæåŸ ããããªã¯ãšã¹ããã¬ã¹ãã³ã¹ãããŒã¿åãç¹å®ããå¿ èŠããããŸããéžæãããã¬ãŒã ã¯ãŒã¯ã®DSLãŸãã¯æ§æã䜿çšããŠå¥çŽãå®çŸ©ããŸãã
äŸïŒPactã䜿çšïŒïŒ
consumer('OrderService')
.hasPactWith(provider('InventoryService'));
state('Inventory is available')
.uponReceiving('a request to check inventory')
.withRequest(GET, '/inventory/product123')
.willRespondWith(OK,
headers: {
'Content-Type': 'application/json'
},
body: {
'productId': 'product123',
'quantity': 10
}
);
ãã®Pactå¥çŽã¯ãOrderServiceïŒã³ã³ã·ã¥ãŒããŒïŒãInventoryServiceïŒãããã€ããŒïŒã«å¯Ÿã㊠`/inventory/product123` ãžã®GETãªã¯ãšã¹ããè¡ã£ãéã«ãproductIdãšquantityãå«ãJSONãªããžã§ã¯ãã§å¿çããããšãæåŸ ããŠãããšå®çŸ©ããŠããŸãã
4. å¥çŽãå ¬éãã
å¥çŽãäžå€®ãªããžããªã«å ¬éããŸãããã®ãªããžããªã¯ããã¡ã€ã«ã·ã¹ãã ãGitãªããžããªããŸãã¯å°çšã®å¥çŽã¬ãžã¹ããªã«ããããšãã§ããŸããPactã¯ãå¥çŽã管çã»å ±æããããã®å°çšãµãŒãã¹ã§ãããPact BrokerããæäŸããŠããŸãã
5. å¥çŽãæ€èšŒãã
ãããã€ããŒããŒã ã¯ãªããžããªããå¥çŽãååŸããèªç€Ÿã®APIå®è£ ã«å¯ŸããŠå®è¡ããŸãããã¬ãŒã ã¯ãŒã¯ã¯å¥çŽã«åºã¥ããŠãã¹ããèªåçã«çæãããããã€ããŒãæå®ãããã€ã³ã¿ã©ã¯ã·ã§ã³ãéµå®ããŠããããšãæ€èšŒããŸãã
äŸïŒPactã䜿çšïŒïŒ
@PactBroker(host = "localhost", port = "80")
public class InventoryServicePactVerification {
@TestTarget
public final Target target = new HttpTarget(8080);
@State("Inventory is available")
public void toGetInventoryIsAvailable() {
// Setup the provider state (e.g., mock data)
}
}
ãã®ã³ãŒãã¹ããããã¯ãPactã䜿çšããŠInventoryServiceã«å¯ŸããŠå¥çŽãæ€èšŒããæ¹æ³ã瀺ããŠããŸãã`@State`ã¢ãããŒã·ã§ã³ã¯ãã³ã³ã·ã¥ãŒããŒãæåŸ ãããããã€ããŒã®ç¶æ ãå®çŸ©ããŸãã`toGetInventoryIsAvailable`ã¡ãœããã¯ãæ€èšŒãã¹ããå®è¡ããåã«ãããã€ããŒã®ç¶æ ãèšå®ããŸãã
6. CI/CDãšçµ±åãã
ã³ã³ãã©ã¯ããã¹ããCI/CDãã€ãã©ã€ã³ã«çµ±åããŸããããã«ãããã³ã³ã·ã¥ãŒããŒãŸãã¯ãããã€ããŒã®ããããã«å€æŽãå ãããããã³ã«ãå¥çŽãèªåçã«æ€èšŒãããããã«ãªããŸãã倱æããã³ã³ãã©ã¯ããã¹ãã¯ãã©ã¡ããã®ãµãŒãã¹ã®ãããã€ããããã¯ããå¿ èŠããããŸãã
7. å¥çŽãç£èŠã»ç¶æãã
å¥çŽãç¶ç¶çã«ç£èŠããç¶æããŸããAPIãé²åããã«ã€ããŠã倿Žãåæ ããããã«å¥çŽãæŽæ°ããŸããå¥çŽããŸã é¢é£æ§ãããæ£ç¢ºã§ããããšã確èªããããã«ã宿çã«ã¬ãã¥ãŒããŸããäžèŠã«ãªã£ãå¥çŽã¯å»æ¢ããŸãã
ã³ã³ãã©ã¯ããã¹ãã®ãã¹ããã©ã¯ãã£ã¹
ã³ã³ãã©ã¯ããã¹ããæå€§éã«æŽ»çšããããã«ã以äžã®ãã¹ããã©ã¯ãã£ã¹ã«åŸã£ãŠãã ããïŒ
- å°ããå§ããïŒ ãµãŒãã¹éã®æãéèŠãªã€ã³ã¿ã©ã¯ã·ã§ã³ããå§ããåŸã ã«ã³ã³ãã©ã¯ããã¹ãã®ã«ãã¬ããžãæ¡å€§ããŸãã
- ããžãã¹äŸ¡å€ã«çŠç¹ãåœãŠãïŒ æãéèŠãªããžãã¹ãŠãŒã¹ã±ãŒã¹ãã«ããŒããå¥çŽãåªå ããŸãã
- å¥çŽãã·ã³ãã«ã«ä¿ã€ïŒ çè§£ãç¶æãé£ããè€éãªå¥çŽã¯é¿ããŸãã
- çŸå®çãªããŒã¿ã䜿çšããïŒ ãããã€ããŒãçŸå®äžçã®ã·ããªãªãåŠçã§ããããšãä¿èšŒããããã«ãå¥çŽã«çŸå®çãªããŒã¿ã䜿çšããŸããçŸå®çãªãã¹ãããŒã¿ãçæããããã«ããŒã¿ãžã§ãã¬ãŒã¿ãŒã®äœ¿çšãæ€èšããŠãã ããã
- å¥çŽãããŒãžã§ãã³ã°ããïŒ å€æŽã远跡ããäºææ§ã確ä¿ããããã«å¥çŽãããŒãžã§ãã³ã°ããŸãã
- 倿ŽãäŒããïŒ å¥çŽãžã®ãããªã倿Žããã³ã³ã·ã¥ãŒããŒãšãããã€ããŒã®äž¡ããŒã ã«æç¢ºã«äŒããŸãã
- ãã¹ãŠãèªååããïŒ å¥çŽã®å®çŸ©ããæ€èšŒãŸã§ãã³ã³ãã©ã¯ããã¹ãã®ããã»ã¹å šäœãèªååããŸãã
- å¥çŽã®å¥å šæ§ãç£èŠããïŒ æœåšçãªåé¡ãæ©æã«ç¹å®ããããã«ãå¥çŽã®å¥å šæ§ãç£èŠããŸãã
äžè¬çãªèª²é¡ãšè§£æ±ºç
ã³ã³ãã©ã¯ããã¹ãã¯å€ãã®å©ç¹ãæäŸããŸãããããã€ãã®èª²é¡ãæç€ºããŸãïŒ
- å¥çŽã®éè€ïŒ è€æ°ã®ã³ã³ã·ã¥ãŒããŒã䌌ãŠããããããã«ç°ãªãå¥çŽãæã€ããšããããŸãã解決çïŒ å¯èœãªéãå¥çŽãçµ±åããããã³ã³ã·ã¥ãŒããŒã«å¥šå±ããŸããå ±éã®å¥çŽèŠçŽ ãå ±æã³ã³ããŒãã³ãã«ãªãã¡ã¯ã¿ãªã³ã°ããŸãã
- ãããã€ããŒã®ç¶æ 管çïŒ æ€èšŒã®ããã«ãããã€ããŒã®ç¶æ ãèšå®ããã®ã¯è€éãªå ŽåããããŸãã解決çïŒ ã³ã³ãã©ã¯ããã¹ããã¬ãŒã ã¯ãŒã¯ãæäŸããç¶æ ç®¡çæ©èœã䜿çšããŸããã¢ããã³ã°ãã¹ã¿ãã䜿çšããŠç¶æ èšå®ãç°¡çŽ åããŸãã
- éåæã€ã³ã¿ã©ã¯ã·ã§ã³ã®åŠçïŒ éåæã€ã³ã¿ã©ã¯ã·ã§ã³ïŒäŸïŒã¡ãã»ãŒãžãã¥ãŒïŒã®ã³ã³ãã©ã¯ããã¹ãã¯é£ããå ŽåããããŸãã解決çïŒ éåæéä¿¡ãã¿ãŒã³ããµããŒãããå°çšã®ã³ã³ãã©ã¯ããã¹ãããŒã«ã䜿çšããŸããã¡ãã»ãŒãžã远跡ããããã«çžé¢IDã®äœ¿çšãæ€èšããŸãã
- é²åããAPIïŒ APIãé²åããã«ã€ããŠãå¥çŽãæŽæ°ããå¿ èŠããããŸãã解決çïŒ å¥çŽã®ããŒãžã§ãã³ã°æŠç¥ãå®è£ ããŸããå¯èœãªéãåŸæ¹äºææ§ã®ãã倿Žã䜿çšããŸãããã¹ãŠã®ã¹ããŒã¯ãã«ããŒã«å€æŽãæç¢ºã«äŒããŸãã
ã³ã³ãã©ã¯ããã¹ãã®å®äžçã§ã®äŸ
ã³ã³ãã©ã¯ããã¹ãã¯ãæ§ã ãªæ¥çã®ããããèŠæš¡ã®äŒæ¥ã§äœ¿çšãããŠããŸãã以äžã«ããã€ãã®å®äŸãæããŸãïŒ
- NetflixïŒ Netflixã¯ãäœçŸãã®ãã€ã¯ããµãŒãã¹éã®äºææ§ã確ä¿ããããã«ã³ã³ãã©ã¯ããã¹ããåºç¯å²ã«äœ¿çšããŠããŸãã圌ãã¯ç¹å®ã®ããŒãºãæºããããã«ç¬èªã®ã«ã¹ã¿ã ã³ã³ãã©ã¯ããã¹ãããŒã«ãæ§ç¯ããŸããã
- AtlassianïŒ Atlassianã¯ãJiraãConfluenceãªã©ã®æ§ã ãªè£œåéã®çµ±åããã¹ãããããã«Pactã䜿çšããŠããŸãã
- ThoughtWorksïŒ ThoughtWorksã¯ã忣ã·ã¹ãã å šäœã§ã®APIäºææ§ã確ä¿ããããã«ãã¯ã©ã€ã¢ã³ããããžã§ã¯ãã§ã³ã³ãã©ã¯ããã¹ããæå±ãã䜿çšããŠããŸãã
ã³ã³ãã©ã¯ããã¹ããšä»ã®ãã¹ãã¢ãããŒããšã®æ¯èŒ
ã³ã³ãã©ã¯ããã¹ããä»ã®ãã¹ãã¢ãããŒããšã©ã®ããã«é©åããããçè§£ããããšãéèŠã§ãã以äžã«æ¯èŒã瀺ããŸãïŒ
- åäœãã¹ãïŒ åäœãã¹ãã¯ãåã ã®ã³ãŒãåäœãåé¢ããŠãã¹ãããããšã«çŠç¹ãåœãŠãŸããã³ã³ãã©ã¯ããã¹ãã¯ããµãŒãã¹éã®ã€ã³ã¿ã©ã¯ã·ã§ã³ããã¹ãããããšã«çŠç¹ãåœãŠãŸãã
- çµ±åãã¹ãïŒ åŸæ¥ã®çµ±åãã¹ãã¯ããã¹ãç°å¢ã«2ã€ä»¥äžã®ãµãŒãã¹ããããã€ãããããã«å¯ŸããŠãã¹ããå®è¡ããããšã§çµ±åããã¹ãããŸããã³ã³ãã©ã¯ããã¹ãã¯ãAPIã®äºææ§ãæ€èšŒããããã®ããã察象ãçµã£ãå¹ççãªæ¹æ³ãæäŸããŸããçµ±åãã¹ãã¯å£ãããããç¶æãé£ããåŸåããããŸãã
- ãšã³ãããŒãšã³ããã¹ãïŒ ãšã³ãããŒãšã³ããã¹ãã¯ãè€æ°ã®ãµãŒãã¹ãšã³ã³ããŒãã³ããå«ããŠãŒã¶ãŒãããŒå šäœãã·ãã¥ã¬ãŒãããŸããã³ã³ãã©ã¯ããã¹ãã¯ã2ã€ã®ç¹å®ã®ãµãŒãã¹éã®å¥çŽã«çŠç¹ãåœãŠãããããã管çããããå¹ççã§ãããšã³ãããŒãšã³ããã¹ãã¯ã·ã¹ãã å šäœãæ£ããåäœããããšã確èªããããã«éèŠã§ãããå®è¡ã«æéããããé«äŸ¡ã«ãªãå¯èœæ§ããããŸãã
ã³ã³ãã©ã¯ããã¹ãã¯ããããã®ä»ã®ãã¹ãã¢ãããŒããè£å®ããŸããçµ±åã®ç Žç¶»ã«å¯Ÿãã貎éãªä¿è·å±€ãæäŸããããéãéçºãµã€ã¯ã«ãšããä¿¡é Œæ§ã®é«ãã·ã¹ãã ãå¯èœã«ããŸãã
ã³ã³ãã©ã¯ããã¹ãã®æªæ¥
ã³ã³ãã©ã¯ããã¹ãã¯æ¥éã«é²åããŠããåéã§ãããã€ã¯ããµãŒãã¹ã¢ãŒããã¯ãã£ãããæ®åããã«ã€ããŠãã³ã³ãã©ã¯ããã¹ãã®éèŠæ§ã¯å¢ãã°ããã§ããããã³ã³ãã©ã¯ããã¹ãã®å°æ¥ã®ãã¬ã³ãã«ã¯ä»¥äžã®ãããªãã®ããããŸãïŒ
- ããŒã«ã®æ¹åïŒ ããæŽç·ŽããããŠãŒã¶ãŒãã¬ã³ããªãŒãªã³ã³ãã©ã¯ããã¹ãããŒã«ãç»å ŽããããšãæåŸ ãããŸãã
- AIã«ããå¥çŽçæïŒ APIã®äœ¿çšãã¿ãŒã³ã«åºã¥ããŠå¥çŽãèªåçã«çæããããã«AIã䜿çšãããå¯èœæ§ããããŸãã
- å¥çŽã¬ããã³ã¹ã®åŒ·åïŒ çµç¹ã¯ãäžè²«æ§ãšå質ã確ä¿ããããã«å ç¢ãªå¥çŽã¬ããã³ã¹ããªã·ãŒãå®è£ ããå¿ èŠããããŸãã
- APIã²ãŒããŠã§ã€ãšã®çµ±åïŒ ã³ã³ãã©ã¯ããã¹ããAPIã²ãŒããŠã§ã€ã«çŽæ¥çµ±åããã©ã³ã¿ã€ã ã§å¥çŽã匷å¶ããããšãå¯èœã«ãªããããããŸããã
çµè«
ã³ã³ãã©ã¯ããã¹ãã¯ããã€ã¯ããµãŒãã¹ã¢ãŒããã¯ãã£ã«ãããAPIã®äºææ§ã確ä¿ããããã®äžå¯æ¬ ãªææ³ã§ããã³ã³ã·ã¥ãŒããŒãšãããã€ããŒéã®å¥çŽãå®çŸ©ãã匷å¶ããããšã§ãçµ±åã®ç Žç¶»ãé²ããç¬ç«ããéçºãšãããã€ãå¯èœã«ããAPIèšèšãæ¹åãããã¹ãã®ãªãŒããŒããããåæžããã³ã©ãã¬ãŒã·ã§ã³ã匷åããããšãã§ããŸããã³ã³ãã©ã¯ããã¹ãã®å®è£ ã«ã¯åªåãšèšç»ãå¿ èŠã§ããããã®å©ç¹ã¯ã³ã¹ããã¯ããã«äžåããŸãããã¹ããã©ã¯ãã£ã¹ã«åŸããé©åãªããŒã«ã䜿çšããããšã§ãããä¿¡é Œæ§ãé«ããã¹ã±ãŒã©ãã«ã§ãä¿å®å¯èœãªãã€ã¯ããµãŒãã¹ã·ã¹ãã ãæ§ç¯ã§ããŸããå°ããå§ããããžãã¹äŸ¡å€ã«çŠç¹ãåœãŠããã®åŒ·åãªææ³ã®å©ç¹ãæå€§éã«äº«åããããã«ã³ã³ãã©ã¯ããã¹ãããã»ã¹ãç¶ç¶çã«æ¹åããŠãã ãããAPIå¥çŽã®å ±éçè§£ãè²ãããã«ãããã»ã¹ã«ã³ã³ã·ã¥ãŒããŒãšãããã€ããŒã®äž¡ããŒã ãé¢äžãããããšãå¿ããªãã§ãã ããã