ã¿ãªãããããã«ã¡ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒæ¡çšæ
åœã®å¹³æšã§ãã ã¡ãã¬ãŒã§ã¯ iOS éçºã³ãã¥ããã£ã«åŸ®åãªããéå
ããããšã2017 幎ãã iOSDC ã«åè³ããããŠããã ããŠãããŸãããä»å¹Žã ã·ã«ããŒã¹ãã³ãµãŒ ãšããŠåè³ãããŠããã ãããšã«ãªããŸããã éå»ã®åå ã¬ããŒã entry/2018/09/13/175702 entry/2017/09/27/120000 iOSDC åã®ãªã³ã©ã€ã³éå¬ ä»å¹Žã® iOSDC ã¯åã®ãªã³ã©ã€ã³éå¬ãšããããšã§ãäŸå¹Žãšã¯ãŸãéã£ã楜ãã¿æ¹ãã§ãããã§ãã å
¬åŒã¹ã¿ããããã°ã«èšèŒãããŠããŸãããä»å¹Žã¯ããã«ãã£ã°ããºã é
é ããããšã®ããšã§ãæ¢ã«å±ããŠããæ¹ãããã£ãããããã§ããåŒç€Ÿã®ãã³ãã¬ãããåå°ãããŠããã ããŠãŸãã ä»å¹Žã® ã¿ã€ã ããŒãã« ã倧å€è峿·±ãå
容ãå€ããä»ããèŠèŽã楜ãã¿ã§ãã(ã¹ãã³ãµãŒãã±ãããé ããŠã¯ããŸãããçè
ãèªè
¹ã§ãã±ãã賌å
¥ããŠããŸã) ãã³ãã³çæŸéã§ã®èŠèŽ ãšããããšã§ãäŸå¹Žãšã¯éããã³ã¡ã³ããªã©ã§çãäžãããããã®ã§ã¯ãªãããšã倧倿åŸ
ããŠããŸãã Ask the Speaker ã§ã¯ Discord ã䜿çšãããšããããšã§ã察é¢ãšã¯ãŸãéã£ãã³ãã¥ãã±ãŒã·ã§ã³ãåãããã§ããåè URL ãå³ãªã©ãããã«åºããŠããããããªã©ãããã«åŠã³ãæ·±ããªãã®ã§ã¯ãªãããšæã£ãŠããŸãã æåŸã« ä»åã¯çŽæ¥äŒå Žã§ã¿ãªãããšã®äº€æµã¯ã§ããŸããããåŒç€Ÿã®ãšã³ãžãã¢ãåå äºå®ã§ãã®ã§ãäžç·ã«æ¥œããã§ãããããšæããŸããåŸæ¥ã€ãã³ãã¬ããŒãããã¡ãã§å
¬éããããšèããŠããŸãã ãŸããã¡ãã¬ãŒã§ã¯ããããã€ãã³ãã«ãèå³ããæã¡ã® iOS ãšã³ãžãã¢ãçµ¶è³åéäžã§ãããæ°è»œã«äžèšãããé£çµ¡ããã ããã°ãã«ãžã¥ã¢ã«ã«ã話ããããã§ã! åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ã¿ãªãããããã«ã¡ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒæ¡çšæ
åœã®å¹³æšã§ãã ã¡ãã¬ãŒã§ã¯ iOS éçºã³ãã¥ããã£ã«åŸ®åãªããéå
ããããšã2017 幎ãã iOSDC ã«åè³ããããŠããã ããŠãããŸãããä»å¹Žã ã·ã«ããŒã¹ãã³ãµãŒ ãšããŠåè³ãããŠããã ãããšã«ãªããŸããã éå»ã®åå ã¬ããŒã entry/2018/09/13/175702 entry/2017/09/27/120000 iOSDC åã®ãªã³ã©ã€ã³éå¬ ä»å¹Žã® iOSDC ã¯åã®ãªã³ã©ã€ã³éå¬ãšããããšã§ãäŸå¹Žãšã¯ãŸãéã£ã楜ãã¿æ¹ãã§ãããã§ãã å
¬åŒã¹ã¿ããããã°ã«èšèŒãããŠããŸãããä»å¹Žã¯ããã«ãã£ã°ããºã é
é ããããšã®ããšã§ãæ¢ã«å±ããŠããæ¹ãããã£ãããããã§ããåŒç€Ÿã®ãã³ãã¬ãããåå°ãããŠããã ããŠãŸãã ä»å¹Žã® ã¿ã€ã ããŒãã« ã倧å€è峿·±ãå
容ãå€ããä»ããèŠèŽã楜ãã¿ã§ãã(ã¹ãã³ãµãŒãã±ãããé ããŠã¯ããŸãããçè
ãèªè
¹ã§ãã±ãã賌å
¥ããŠããŸã) ãã³ãã³çæŸéã§ã®èŠèŽ ãšããããšã§ãäŸå¹Žãšã¯éããã³ã¡ã³ããªã©ã§çãäžãããããã®ã§ã¯ãªãããšã倧倿åŸ
ããŠããŸãã Ask the Speaker ã§ã¯ Discord ã䜿çšãããšããããšã§ã察é¢ãšã¯ãŸãéã£ãã³ãã¥ãã±ãŒã·ã§ã³ãåãããã§ããåè URL ãå³ãªã©ãããã«åºããŠããããããªã©ãããã«åŠã³ãæ·±ããªãã®ã§ã¯ãªãããšæã£ãŠããŸãã æåŸã« ä»åã¯çŽæ¥äŒå Žã§ã¿ãªãããšã®äº€æµã¯ã§ããŸããããåŒç€Ÿã®ãšã³ãžãã¢ãåå äºå®ã§ãã®ã§ãäžç·ã«æ¥œããã§ãããããšæããŸããåŸæ¥ã€ãã³ãã¬ããŒãããã¡ãã§å
¬éããããšèããŠããŸãã ãŸããã¡ãã¬ãŒã§ã¯ããããã€ãã³ãã«ãèå³ããæã¡ã® iOS ãšã³ãžãã¢ãçµ¶è³åéäžã§ãããæ°è»œã«äžèšãããé£çµ¡ããã ããã°ãã«ãžã¥ã¢ã«ã«ã話ããããã§ã! åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ã¿ãªãããããã«ã¡ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒæ¡çšæ
åœã®å¹³æšã§ãã ã¡ãã¬ãŒã§ã¯ iOS éçºã³ãã¥ããã£ã«åŸ®åãªããéå
ããããšã2017 幎ãã iOSDC ã«åè³ããããŠããã ããŠãããŸãããä»å¹Žã ã·ã«ããŒã¹ãã³ãµãŒ ãšããŠåè³ãããŠããã ãããšã«ãªããŸããã éå»ã®åå ã¬ããŒã entry/2018/09/13/175702 entry/2017/09/27/120000 iOSDC åã®ãªã³ã©ã€ã³éå¬ ä»å¹Žã® iOSDC ã¯åã®ãªã³ã©ã€ã³éå¬ãšããããšã§ãäŸå¹Žãšã¯ãŸãéã£ã楜ãã¿æ¹ãã§ãããã§ãã å
¬åŒã¹ã¿ããããã°ã«èšèŒãããŠããŸãããä»å¹Žã¯ããã«ãã£ã°ããºã é
é ããããšã®ããšã§ãæ¢ã«å±ããŠããæ¹ãããã£ãããããã§ããåŒç€Ÿã®ãã³ãã¬ãããåå°ãããŠããã ããŠãŸãã ä»å¹Žã® ã¿ã€ã ããŒãã« ã倧å€è峿·±ãå
容ãå€ããä»ããèŠèŽã楜ãã¿ã§ãã(ã¹ãã³ãµãŒãã±ãããé ããŠã¯ããŸãããçè
ãèªè
¹ã§ãã±ãã賌å
¥ããŠããŸã) ãã³ãã³çæŸéã§ã®èŠèŽ ãšããããšã§ãäŸå¹Žãšã¯éããã³ã¡ã³ããªã©ã§çãäžãããããã®ã§ã¯ãªãããšã倧倿åŸ
ããŠããŸãã Ask the Speaker ã§ã¯ Discord ã䜿çšãããšããããšã§ã察é¢ãšã¯ãŸãéã£ãã³ãã¥ãã±ãŒã·ã§ã³ãåãããã§ããåè URL ãå³ãªã©ãããã«åºããŠããããããªã©ãããã«åŠã³ãæ·±ããªãã®ã§ã¯ãªãããšæã£ãŠããŸãã æåŸã« ä»åã¯çŽæ¥äŒå Žã§ã¿ãªãããšã®äº€æµã¯ã§ããŸããããåŒç€Ÿã®ãšã³ãžãã¢ãåå äºå®ã§ãã®ã§ãäžç·ã«æ¥œããã§ãããããšæããŸããåŸæ¥ã€ãã³ãã¬ããŒãããã¡ãã§å
¬éããããšèããŠããŸãã ãŸããã¡ãã¬ãŒã§ã¯ããããã€ãã³ãã«ãèå³ããæã¡ã® iOS ãšã³ãžãã¢ãçµ¶è³åéäžã§ãããæ°è»œã«äžèšãããé£çµ¡ããã ããã°ãã«ãžã¥ã¢ã«ã«ã話ããããã§ã! https://www.medley.jp/jobs/
ããã«ã¡ã¯ãã€ã³ãã¥ããŒã·ã§ã³æ¬éšãšã³ãžãã¢ã®å è€ã§ãã 䞻㫠CLINICS ã¢ã㪠ã®éçºãæ
åœããŠããŸãã ã¯ããã« CLINICS ã¢ããªã®éçºã§ã¯ OpenAPI ã gRPC ãå©çšããŠããŸãã OpenAPI ãš gRPC ã®éã«ã¯äœã®é¢ä¿ããªãã®ã§ãããã©ã¡ãã API ã®ä»æ§ãã¹ããŒãèšèªã§èšè¿°ãããšããç¹ã§ã¯å
±éããŠããŸãã ä»åã¯ãã® API ã¹ããŒããéçºã«ããããã¡ãªããã«ã€ããŠç޹ä»ããŠããããšæããŸãã API ããã¥ã¡ã³ããšããŠã®ã¹ããŒãå®çŸ© æ¢åã®ã³ãŒãã«æ©èœã远å ããéãä¿®æ£ãå ããéã«æ°ã«ããããšã®å€ãéšå㯠API ã®ä»æ§ã§ã¯ãªãããšæããŸãã ããªã¯ãšã¹ããã¬ã¹ãã³ã¹ã¯ã©ã®ãããªããŒã¿ãªã®ããããã®å€ã¯å¿
é ãªã®ããä»»æãªã®ãããããŒã¿ã®åã¯æ°å€ãªã®ããæååãªã®ããããã©ãŒãããã¯æ±ºãŸã£ãŠããã®ãããªã©ãå€ãã®ããšãææ¡ããå¿
èŠããããŸãã ãããããããã£ã API 仿§ã®ããã¥ã¡ã³ããæŽåãããŠããªããšããããšãå€ãã®ã§ã¯ãªãã§ããããã ãŸããããã¥ã¡ã³ãã¯ããããã©ãªã¯ãšã¹ããšã¬ã¹ãã³ã¹ã®ãµã³ãã« JSON ã貌ã£ãŠããã ãã ã£ãããæéãçµã€ãã¡ã«å®è£
ãšããã¥ã¡ã³ããä¹é¢ããŠããŸãã¢ãã«ãªããªããªã£ãŠããŸã£ãŠããå ŽåããããŸãã åèã«ã§ããããã¥ã¡ã³ãããªãå Žåã¯ãçŽæ¥ããã¯ãšã³ãã®å®è£
ãèŠã«è¡ãããšãããã®ã§ãããç®çã®ã³ãŒããæ¢ãåºããŠèªã¿è§£ãã®ã¯æå€ãšæéãããããŸãã ç¹ã«èªå以å€ã®ãšã³ãžãã¢ãå®è£
ããæ©èœã®å ŽåãAPI ã®ä»æ§ãå®è£
ããçŽè§£ãã®ã¯ããªã骚ãæããäœæ¥ã§ãã CLINICS ã¢ããªã®éçºã§ã¯ãããã£ãæéãæžããããã« OpenAPI ã gRPC ãå©çšããŠããŸãã REST API ã®ã¹ããŒã㯠OpenAPI ã䜿ã£ãŠèšè¿°ããŠããŸãã gRPC ãå©çšããŠããéšå㯠Protocol Buffers ã§ RPC ã®ã€ã³ã¿ãŒãã§ãŒã¹ãèšè¿°ããããããããã API ã®ã¹ããŒãã«ãªã£ãŠããŸãã OpenAPI ã Protocol Buffers ã®å®çŸ©ãåç
§ããããšã§ API ã®ä»æ§ã容æã«ææ¡ã§ãããããéåžžã«äŸ¿å©ã§ãã OpenAPI ã Protocol Buffers ãªã©ã®ã¹ããŒãèšèªã®è¯ãç¹ã¯ã宣èšç㪠DSL ã§ã¹ããŒããå®çŸ©ã§ããç¹ã§ãã å®è£
èšèªã«äŸåããªã圢ã§ã®èšè¿°ãã§ããèªç¶èšèªã®ãããªææ§ãããªãããããæ£ç¢ºã« API 仿§ãèšè¿°ããããšãã§ããŸãã ãããã㯠OpenAPI ã Protocol Buffers ã®å®éã«èšè¿°äŸãæããªãããã©ããã£ã圢ã§ã¹ããŒããèšè¿°ããŠããã®ãç°¡åã«èŠãŠãããããšæããŸãã OpenAPI OpenAPI 㯠REST API ã®ã€ã³ã¿ãŒãã§ãŒã¹ãèšè¿°ãã仿§ã§ãã ãšã³ããã€ã³ãã®ãªã¯ãšã¹ããã©ã¡ãŒã¿ãã¬ã¹ãã³ã¹ã®æ§é ãªã©ã JSON ã YAML ã§èšè¿°ããŠããããšãã§ããŸãã ãã€ãŠã¯ Swagger ãšããåç§°ã ã£ãããããã¡ãã®ååã§ç¥ã£ãŠãããšããæ¹ãããã£ããããããããŸããã å®éã® OpenAPI ã®å®çŸ©ã¯ä»¥äžã®ãããªåœ¢ã«ãªããŸãã openapi : 3.0.2 info : { title : OpenAPI Sample , version : 1.0.0 } paths : "/users/{user_id}" : get : parameters : - name : user_id in : path required : true schema : { type : string } responses : "200" : description : OK content : application/json : schema : type : object properties : id : { type : string } name : { type : string } age : { type : integer , nullable : true } required : [ id , name , age ] "404" : description : Not Found "500" : description : Internal Server Error äŸãšããŠãŠãŒã¶ãŒ ID ãããŠãŒã¶ãŒã®ããŒã¿ãååŸãã API ãèšè¿°ããŠã¿ãŸããã äžèšã®å®çŸ©ãèŠããšã GET: /users/{user_id} ãšãããšã³ããã€ã³ãããã ãŠãŒã¶ãŒã® ID ( user_id ) ã string ã§ãã©ã¡ãŒã¿ãšããŠãã¹ã®äžã«åã蟌ã ã¬ã¹ãã³ã¹ã¯ 200, 404, 500 ãè¿ã£ãŠããå¯èœæ§ããã ãšãã£ãããšãèªã¿åããããšæããŸãã ãŸããã¬ã¹ãã³ã¹ã¯ä»¥äžã®ãã㪠JSON ãè¿ã£ãŠããããšãã¹ããŒãããèªã¿åãããšãã§ããŸãã { "id" : "12345678-1234-1234-1234-123456789abc" , "name" : "user name" , "age" : 25 } ããã§ã¯ OpenAPI ã®èšè¿°ã®ä»æ¹ã«ã€ããŠããŸãæ·±ãè§ŠããŸãããããã®ä»ã«ãããŒã¿ã®ãã©ãŒããããçç¥ãããå Žåã®ããã©ã«ãå€ãªã©ã®èšè¿°ãªã©ãå¯èœã§ãã ãã詳ãã㯠ãã¡ã ãåèã«ããŠã¿ãŠãã ããã ããããããŸã䜿ãããšã§ããæ£ç¢ºã« API ã®ä»æ§ãèšè¿°ããããšãã§ããŸãã Protocol Buffers Protocol Buffers ã¯äž»ã« gRPC ã§çšããããããŒã¿ã®ã·ãªã¢ã©ã€ãŒãŒã·ã§ã³åœ¢åŒã§ãã å°çšã®ã¹ããŒãèšèªãçšããŠããŒã¿ã®æ§é ã RPC ã®ã¡ãœããã®å®çŸ©ã .proto ãã¡ã€ã«ã«èšè¿°ããŠãããŸãã å®éã® .proto ãã¡ã€ã«ã¯ä»¥äžã®ãããªåœ¢ã«ãªããŸãã syntax = "proto3" ; package example.protobuf ; service UserService { rpc GetUser ( GetUserRequest ) returns ( GetUserResponse ); } message GetUserRequest { string id = 1 ; } message GetUserResponse { User user = 1 ; } message User { string id = 1 ; string name = 2 ; int32 age = 3 ; } å°ãç¬ç¹ãªèŠãç®ãããŠããŸããã message ãšããŠæ§é äœã®ãããªããŒã¿æ§é ãå®çŸ©ãããŠããããšãèŠãŠåãããšæããŸãã åã¡ãã»ãŒãžã«ã¯ãã£ãŒã«ããå®çŸ©ãããŠãããåãšãã£ãŒã«ãåã宣èšãããŠããŸãã ã¹ããŒãèšèªã䜿ãã¡ãªãã ã¹ããŒãã¯ããã¥ã¡ã³ãã®ä»£ãããšããŠäœ¿ããã ãã§ãªããä»ã«ãããã€ã䜿ãéãããã®ã§ç޹ä»ããŠããããšæããŸãã ã¹ããŒããããœãŒã¹ã³ãŒããèªåçæã§ãã ã¹ããŒãèšèªã«ããèšè¿°ã¯äººéã«ãšã£ãŠèªã¿ãããã ãã§ãªãæ©æ¢°çã«åŠçã§ãã圢åŒã§ãããã®ã§ãã¹ããŒããããœãŒã¹ã³ãŒããèªåçæããããšãå¯èœã§ãã ããã°ã©ãã³ã°èšèªã䜿ã£ãŠãããã¬ãŒã ã¯ãŒã¯ã«ãããããµãŒããŒåŽã§ã¯ãªã¯ãšã¹ãã®ããªããŒã·ã§ã³ãããŸãã¯ã©ã€ã¢ã³ãåŽã§ã¯ã¬ã¹ãã³ã¹ã® JSON ãã¯ã©ã¹ãæ§é äœã«è©°ãããããªåŠçãæžãããšãå€ãã®ã§ã¯ãªãã§ããããã äºåã«ã¹ããŒãå®çŸ©ãæžããŠããå Žåã¯ã¹ããŒããèŠãªãããããã£ãã³ãŒããæžãèµ·ãããŠããããšã«ãªãã®ã§ããããã£ãã machine-readable ãªåœ¢ã®ã¹ããŒããããã®ã ããèªåã§ã³ãŒããçæããããªãã®ãèªç¶ãªèãã§ãããã èªåã§çæããŠããŸãã°å®åã®ã³ãŒããæžãæéãæžãããã ãã§ãªããææžããããšã©ãããŠãèµ·ãããã¡ãª JSON ã®ããŒåãééãããšãã£ããã¹ãé²ãããšãã§ããŸãã ãŸããWeb, iOS, Android ãªã©ã®è€æ°ãã©ãããã©ãŒã ã§ãµãŒãã¹ãå±éããŠããå Žåã§ããããããã®å®è£
ãä¹é¢ããªãããã«ç®¡çããŠããããšã容æã§ãã gRPC ã®å Žå㯠Protocol Buffers ãããœãŒã¹ã³ãŒããçæããã®ãã»ãŒåæãšãªã£ãŠããŸãã protoc ã³ãã³ããå©çšãããš .proto ãã¡ã€ã«ããåèšèªã®ãµãŒããŒã»ã¯ã©ã€ã¢ã³ãã³ãŒããçæããããšãã§ããŸãã OpenAPI ã®å Žåã openapi-generator ã swagger-codegen ãªã©ã®ããŒã«ãå©çšããããšã§åçš®èšèªã®ã³ãŒããèªåçæãå¯èœã§ãã openapi-generator ã swagger-codegen ã«ã¯å€ãã®èšèªãšãã¬ãŒã ã¯ãŒã¯ã®ãµãŒããŒã¹ã¿ããš API ã¯ã©ã€ã¢ã³ãã®ãžã§ãã¬ãŒã¿ãçšæãããŠããŸãã æ¢åã®ãžã§ãã¬ãŒã¿ã䜿ãã ãã§ãååã«åŒ·åãªã®ã§ãããããã«èªåã§ã³ãŒããžã§ãã¬ãŒã¿ãæžãã°ãããžã§ã¯ãåºæã®ã«ãŒã«ã§ã³ãŒããçæãããšãã£ãããšãå¯èœã§ãã OpenAPI ã®ããã¥ã¡ã³ãèªäœã¯ãã ã® YAML/JSON ãªã®ã§ãããŒã¹ããŠã¹ããŒãå®çŸ©ãååž°çã«èªãã§ããã°ã³ãŒãçæã«å¿
èŠãªæ
å ±ãéããããšãã§ããŸãã Protocol Buffers ããã³ãŒããçæããå Žå㯠protoc ã®ãã©ã°ã€ã³ãæžã ã®ãç°¡åã§ãªã¹ã¹ã¡ã§ãã ã¢ãã¯ãµãŒããŒã䜿ã£ãŠã¯ã©ã€ã¢ã³ãéçºãé²ãããã ã³ãŒãã®èªåçæã®ä»ã«ãã¹ããŒãããã¢ãã¯ãµãŒããç«ã¡äžãããšãã£ãæŽ»çšæ¹æ³ããããŸãã Prism ã®ãããªã¹ããŒãå®çŸ©ããåºå®ã®ããŒã¿ãè¿ãã¢ãã¯ãµãŒããç«ã¡äžããããŒã«ãå©çšããã°ãã¯ã©ã€ã¢ã³ãåŽã®éçºããããããªããŸãã ç¹ã«ããã³ããšã³ããšããã¯ãšã³ãã§æ
åœãåãããŠãããããªå Žåã¯ãéçºåæã¯ã¢ãã¯ãµãŒããŒã䜿ã£ãŠéçºãå§ããããã¯ãšã³ãã®å®è£
ãã§ããŠããé ã«çµåãããšããæµããèžãããšã§ãããã³ããšã³ããããæ©ãã¿ã€ãã³ã°ããéçºã«çæããããšãã§ããããã«ãªããŸãã å®éã« Prism ã䜿ã£ãŠã¢ãã¯ãµãŒããŒãç«ã¡äžãããšãããªæãã«ãªããŸãã ã¹ããŒããã¡ãŒã¹ãéçº ãã®ãããªéçºã¹ã¿ã€ã«ã¯ã¹ããŒããã¡ãŒã¹ãéçºã»ã¹ããŒãé§åéçºãªã©ãšåŒã°ããŠããŸãã æç¢ºãªå®çŸ©ãåºå
žãããããã§ã¯ãªãã®ã§ãããã¹ããŒããã¡ãŒã¹ããªéçºã¯ä»¥äžã®ãããªéçºã¹ã¿ã€ã«å
šè¬ãæããŠããŸãã ã¹ããŒãã¯å®è£
èšèªã«ãããªã machine-readable ãªåœ¢ã§èšè¿°ãã ããã¥ã¡ã³ããã¹ããŒãããèªåçæãã ã¯ã©ã€ã¢ã³ã/ãµãŒããŒã®ã³ãŒããã¹ããŒãããèªåçæãã å®éã«ã¹ããŒããã¡ãŒã¹ããªéçºãå®è·µããããã«ã¯ã¹ããŒããã¡ã³ããã³ã¹ããã¢ãããŒã·ã§ã³ãé«ãä¿ã€å¿
èŠããããŸãã ã³ãŒããæžããäžã§ã¹ããŒããæžããªããããªããšãªããšããããã¹ããŒããæŽæ°ãããªããªã£ãŠããã®ã§ãå¯èœãªéãã¹ããŒãããã³ãŒããçæããåªåãå¿
èŠã«ãªããŸãã äžæ¹ãããŸãå®è·µããã°ã¹ããŒããšãã圢㧠100% ä¿¡é Œã§ãã API ããã¥ã¡ã³ããæã«å
¥ããã¯ã©ã€ã¢ã³ã/ãµãŒããŒéã§ã®éœéœ¬ãæžãããã®ã§ãå®è·µããŠã¿ã䟡å€ã¯ããã®ã§ã¯ãªãããšæããŸãã ãŸãšã ä»å㯠CLINICS ã¢ããªã®éçºã§ã®ã¹ããŒãèšèªã®æŽ»çšäŸã«ã€ããŠç޹ä»ããŸããã å®éã«éçºã®äžã§ã¹ããŒãèšèªã䜿ãããšã§ API 仿§ã«ã€ããŠææ¡ããåŽåãæžãããšã³ãžãã¢éã®ã³ãã¥ãã±ãŒã·ã§ã³ãåãããããªã£ããšæããŠããŸãã ãŸããäžéšã®ã¯ã©ã€ã¢ã³ãã³ãŒã㯠OpenAPI ã Protocol Buffers ããèªåçæããŠããã®ã§ãããããªãæéãçãããšåæã«äººéã®æã§æžããšèµ·ãããã¡ãªãã¹ãé²ãããšãã§ããŠããŸãã OpenAPI ã§ããã°æ¢åã® REST API ã®ä»æ§ãæžãèµ·ãããšãããã䜿ãå§ããããã®ã§ãèå³ã®ããæ¹ã¯ãã²äžåºŠäœ¿ã£ãŠã¿ãŠã¯ãããã§ããããã æåŸã« ã€ã³ãã¥ããŒã·ã§ã³æ¬éš ã§ã¯ãå»çãã«ã¹ã±ã¢ã®æªæ¥ããã€ããæ°èŠäºæ¥ã®ç«ã¡äžãã«ææŠããŠããŸãããããªç§ãã¡ãšäžç·ã«åããŠã¿ãããšæã£ãæ¹ã¯ããã²ä»¥äžã®æ¡çšæ
å ±ããã§ãã¯ããŠã¿ãŠãã ããã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ããã«ã¡ã¯ãã€ã³ãã¥ããŒã·ã§ã³æ¬éšãšã³ãžãã¢ã®å è€ã§ãã 䞻㫠CLINICS ã¢ã㪠ã®éçºãæ
åœããŠããŸãã ã¯ããã« CLINICS ã¢ããªã®éçºã§ã¯ OpenAPI ã gRPC ãå©çšããŠããŸãã OpenAPI ãš gRPC ã®éã«ã¯äœã®é¢ä¿ããªãã®ã§ãããã©ã¡ãã API ã®ä»æ§ãã¹ããŒãèšèªã§èšè¿°ãããšããç¹ã§ã¯å
±éããŠããŸãã ä»åã¯ãã® API ã¹ããŒããéçºã«ããããã¡ãªããã«ã€ããŠç޹ä»ããŠããããšæããŸãã API ããã¥ã¡ã³ããšããŠã®ã¹ããŒãå®çŸ© æ¢åã®ã³ãŒãã«æ©èœã远å ããéãä¿®æ£ãå ããéã«æ°ã«ããããšã®å€ãéšå㯠API ã®ä»æ§ã§ã¯ãªãããšæããŸãã ããªã¯ãšã¹ããã¬ã¹ãã³ã¹ã¯ã©ã®ãããªããŒã¿ãªã®ããããã®å€ã¯å¿
é ãªã®ããä»»æãªã®ãããããŒã¿ã®åã¯æ°å€ãªã®ããæååãªã®ããããã©ãŒãããã¯æ±ºãŸã£ãŠããã®ãããªã©ãå€ãã®ããšãææ¡ããå¿
èŠããããŸãã ãããããããã£ã API 仿§ã®ããã¥ã¡ã³ããæŽåãããŠããªããšããããšãå€ãã®ã§ã¯ãªãã§ããããã ãŸããããã¥ã¡ã³ãã¯ããããã©ãªã¯ãšã¹ããšã¬ã¹ãã³ã¹ã®ãµã³ãã« JSON ã貌ã£ãŠããã ãã ã£ãããæéãçµã€ãã¡ã«å®è£
ãšããã¥ã¡ã³ããä¹é¢ããŠããŸãã¢ãã«ãªããªããªã£ãŠããŸã£ãŠããå ŽåããããŸãã åèã«ã§ããããã¥ã¡ã³ãããªãå Žåã¯ãçŽæ¥ããã¯ãšã³ãã®å®è£
ãèŠã«è¡ãããšãããã®ã§ãããç®çã®ã³ãŒããæ¢ãåºããŠèªã¿è§£ãã®ã¯æå€ãšæéãããããŸãã ç¹ã«èªå以å€ã®ãšã³ãžãã¢ãå®è£
ããæ©èœã®å ŽåãAPI ã®ä»æ§ãå®è£
ããçŽè§£ãã®ã¯ããªã骚ãæããäœæ¥ã§ãã CLINICS ã¢ããªã®éçºã§ã¯ãããã£ãæéãæžããããã« OpenAPI ã gRPC ãå©çšããŠããŸãã REST API ã®ã¹ããŒã㯠OpenAPI ã䜿ã£ãŠèšè¿°ããŠããŸãã gRPC ãå©çšããŠããéšå㯠Protocol Buffers ã§ RPC ã®ã€ã³ã¿ãŒãã§ãŒã¹ãèšè¿°ããããããããã API ã®ã¹ããŒãã«ãªã£ãŠããŸãã OpenAPI ã Protocol Buffers ã®å®çŸ©ãåç
§ããããšã§ API ã®ä»æ§ã容æã«ææ¡ã§ãããããéåžžã«äŸ¿å©ã§ãã OpenAPI ã Protocol Buffers ãªã©ã®ã¹ããŒãèšèªã®è¯ãç¹ã¯ã宣èšç㪠DSL ã§ã¹ããŒããå®çŸ©ã§ããç¹ã§ãã å®è£
èšèªã«äŸåããªã圢ã§ã®èšè¿°ãã§ããèªç¶èšèªã®ãããªææ§ãããªãããããæ£ç¢ºã« API 仿§ãèšè¿°ããããšãã§ããŸãã ãããã㯠OpenAPI ã Protocol Buffers ã®å®éã«èšè¿°äŸãæããªãããã©ããã£ã圢ã§ã¹ããŒããèšè¿°ããŠããã®ãç°¡åã«èŠãŠãããããšæããŸãã OpenAPI OpenAPI 㯠REST API ã®ã€ã³ã¿ãŒãã§ãŒã¹ãèšè¿°ãã仿§ã§ãã ãšã³ããã€ã³ãã®ãªã¯ãšã¹ããã©ã¡ãŒã¿ãã¬ã¹ãã³ã¹ã®æ§é ãªã©ã JSON ã YAML ã§èšè¿°ããŠããããšãã§ããŸãã ãã€ãŠã¯ Swagger ãšããåç§°ã ã£ãããããã¡ãã®ååã§ç¥ã£ãŠãããšããæ¹ãããã£ããããããããŸããã å®éã® OpenAPI ã®å®çŸ©ã¯ä»¥äžã®ãããªåœ¢ã«ãªããŸãã openapi : 3.0.2 info : { title : OpenAPI Sample , version : 1.0.0 } paths : "/users/{user_id}" : get : parameters : - name : user_id in : path required : true schema : { type : string } responses : "200" : description : OK content : application/json : schema : type : object properties : id : { type : string } name : { type : string } age : { type : integer , nullable : true } required : [ id , name , age ] "404" : description : Not Found "500" : description : Internal Server Error äŸãšããŠãŠãŒã¶ãŒ ID ãããŠãŒã¶ãŒã®ããŒã¿ãååŸãã API ãèšè¿°ããŠã¿ãŸããã äžèšã®å®çŸ©ãèŠããšã GET: /users/{user_id} ãšãããšã³ããã€ã³ãããã ãŠãŒã¶ãŒã® ID ( user_id ) ã string ã§ãã©ã¡ãŒã¿ãšããŠãã¹ã®äžã«åã蟌ã ã¬ã¹ãã³ã¹ã¯ 200, 404, 500 ãè¿ã£ãŠããå¯èœæ§ããã ãšãã£ãããšãèªã¿åããããšæããŸãã ãŸããã¬ã¹ãã³ã¹ã¯ä»¥äžã®ãã㪠JSON ãè¿ã£ãŠããããšãã¹ããŒãããèªã¿åãããšãã§ããŸãã { "id" : "12345678-1234-1234-1234-123456789abc" , "name" : "user name" , "age" : 25 } ããã§ã¯ OpenAPI ã®èšè¿°ã®ä»æ¹ã«ã€ããŠããŸãæ·±ãè§ŠããŸãããããã®ä»ã«ãããŒã¿ã®ãã©ãŒããããçç¥ãããå Žåã®ããã©ã«ãå€ãªã©ã®èšè¿°ãªã©ãå¯èœã§ãã ãã詳ãã㯠ãã¡ã ãåèã«ããŠã¿ãŠãã ããã ããããããŸã䜿ãããšã§ããæ£ç¢ºã« API ã®ä»æ§ãèšè¿°ããããšãã§ããŸãã Protocol Buffers Protocol Buffers ã¯äž»ã« gRPC ã§çšããããããŒã¿ã®ã·ãªã¢ã©ã€ãŒãŒã·ã§ã³åœ¢åŒã§ãã å°çšã®ã¹ããŒãèšèªãçšããŠããŒã¿ã®æ§é ã RPC ã®ã¡ãœããã®å®çŸ©ã .proto ãã¡ã€ã«ã«èšè¿°ããŠãããŸãã å®éã® .proto ãã¡ã€ã«ã¯ä»¥äžã®ãããªåœ¢ã«ãªããŸãã syntax = "proto3" ; package example.protobuf ; service UserService { rpc GetUser ( GetUserRequest ) returns ( GetUserResponse ); } message GetUserRequest { string id = 1 ; } message GetUserResponse { User user = 1 ; } message User { string id = 1 ; string name = 2 ; int32 age = 3 ; } å°ãç¬ç¹ãªèŠãç®ãããŠããŸããã message ãšããŠæ§é äœã®ãããªããŒã¿æ§é ãå®çŸ©ãããŠããããšãèŠãŠåãããšæããŸãã åã¡ãã»ãŒãžã«ã¯ãã£ãŒã«ããå®çŸ©ãããŠãããåãšãã£ãŒã«ãåã宣èšãããŠããŸãã ã¹ããŒãèšèªã䜿ãã¡ãªãã ã¹ããŒãã¯ããã¥ã¡ã³ãã®ä»£ãããšããŠäœ¿ããã ãã§ãªããä»ã«ãããã€ã䜿ãéãããã®ã§ç޹ä»ããŠããããšæããŸãã ã¹ããŒããããœãŒã¹ã³ãŒããèªåçæã§ãã ã¹ããŒãèšèªã«ããèšè¿°ã¯äººéã«ãšã£ãŠèªã¿ãããã ãã§ãªãæ©æ¢°çã«åŠçã§ãã圢åŒã§ãããã®ã§ãã¹ããŒããããœãŒã¹ã³ãŒããèªåçæããããšãå¯èœã§ãã ããã°ã©ãã³ã°èšèªã䜿ã£ãŠãããã¬ãŒã ã¯ãŒã¯ã«ãããããµãŒããŒåŽã§ã¯ãªã¯ãšã¹ãã®ããªããŒã·ã§ã³ãããŸãã¯ã©ã€ã¢ã³ãåŽã§ã¯ã¬ã¹ãã³ã¹ã® JSON ãã¯ã©ã¹ãæ§é äœã«è©°ãããããªåŠçãæžãããšãå€ãã®ã§ã¯ãªãã§ããããã äºåã«ã¹ããŒãå®çŸ©ãæžããŠããå Žåã¯ã¹ããŒããèŠãªãããããã£ãã³ãŒããæžãèµ·ãããŠããããšã«ãªãã®ã§ããããã£ãã machine-readable ãªåœ¢ã®ã¹ããŒããããã®ã ããèªåã§ã³ãŒããçæããããªãã®ãèªç¶ãªèãã§ãããã èªåã§çæããŠããŸãã°å®åã®ã³ãŒããæžãæéãæžãããã ãã§ãªããææžããããšã©ãããŠãèµ·ãããã¡ãª JSON ã®ããŒåãééãããšãã£ããã¹ãé²ãããšãã§ããŸãã ãŸããWeb, iOS, Android ãªã©ã®è€æ°ãã©ãããã©ãŒã ã§ãµãŒãã¹ãå±éããŠããå Žåã§ããããããã®å®è£
ãä¹é¢ããªãããã«ç®¡çããŠããããšã容æã§ãã gRPC ã®å Žå㯠Protocol Buffers ãããœãŒã¹ã³ãŒããçæããã®ãã»ãŒåæãšãªã£ãŠããŸãã protoc ã³ãã³ããå©çšãããš .proto ãã¡ã€ã«ããåèšèªã®ãµãŒããŒã»ã¯ã©ã€ã¢ã³ãã³ãŒããçæããããšãã§ããŸãã OpenAPI ã®å Žåã openapi-generator ã swagger-codegen ãªã©ã®ããŒã«ãå©çšããããšã§åçš®èšèªã®ã³ãŒããèªåçæãå¯èœã§ãã openapi-generator ã swagger-codegen ã«ã¯å€ãã®èšèªãšãã¬ãŒã ã¯ãŒã¯ã®ãµãŒããŒã¹ã¿ããš API ã¯ã©ã€ã¢ã³ãã®ãžã§ãã¬ãŒã¿ãçšæãããŠããŸãã æ¢åã®ãžã§ãã¬ãŒã¿ã䜿ãã ãã§ãååã«åŒ·åãªã®ã§ãããããã«èªåã§ã³ãŒããžã§ãã¬ãŒã¿ãæžãã°ãããžã§ã¯ãåºæã®ã«ãŒã«ã§ã³ãŒããçæãããšãã£ãããšãå¯èœã§ãã OpenAPI ã®ããã¥ã¡ã³ãèªäœã¯ãã ã® YAML/JSON ãªã®ã§ãããŒã¹ããŠã¹ããŒãå®çŸ©ãååž°çã«èªãã§ããã°ã³ãŒãçæã«å¿
èŠãªæ
å ±ãéããããšãã§ããŸãã Protocol Buffers ããã³ãŒããçæããå Žå㯠protoc ã®ãã©ã°ã€ã³ãæžã ã®ãç°¡åã§ãªã¹ã¹ã¡ã§ãã ã¢ãã¯ãµãŒããŒã䜿ã£ãŠã¯ã©ã€ã¢ã³ãéçºãé²ãããã ã³ãŒãã®èªåçæã®ä»ã«ãã¹ããŒãããã¢ãã¯ãµãŒããç«ã¡äžãããšãã£ãæŽ»çšæ¹æ³ããããŸãã Prism ã®ãããªã¹ããŒãå®çŸ©ããåºå®ã®ããŒã¿ãè¿ãã¢ãã¯ãµãŒããç«ã¡äžããããŒã«ãå©çšããã°ãã¯ã©ã€ã¢ã³ãåŽã®éçºããããããªããŸãã ç¹ã«ããã³ããšã³ããšããã¯ãšã³ãã§æ
åœãåãããŠãããããªå Žåã¯ãéçºåæã¯ã¢ãã¯ãµãŒããŒã䜿ã£ãŠéçºãå§ããããã¯ãšã³ãã®å®è£
ãã§ããŠããé ã«çµåãããšããæµããèžãããšã§ãããã³ããšã³ããããæ©ãã¿ã€ãã³ã°ããéçºã«çæããããšãã§ããããã«ãªããŸãã å®éã« Prism ã䜿ã£ãŠã¢ãã¯ãµãŒããŒãç«ã¡äžãããšãããªæãã«ãªããŸãã ã¹ããŒããã¡ãŒã¹ãéçº ãã®ãããªéçºã¹ã¿ã€ã«ã¯ã¹ããŒããã¡ãŒã¹ãéçºã»ã¹ããŒãé§åéçºãªã©ãšåŒã°ããŠããŸãã æç¢ºãªå®çŸ©ãåºå
žãããããã§ã¯ãªãã®ã§ãããã¹ããŒããã¡ãŒã¹ããªéçºã¯ä»¥äžã®ãããªéçºã¹ã¿ã€ã«å
šè¬ãæããŠããŸãã ã¹ããŒãã¯å®è£
èšèªã«ãããªã machine-readable ãªåœ¢ã§èšè¿°ãã ããã¥ã¡ã³ããã¹ããŒãããèªåçæãã ã¯ã©ã€ã¢ã³ã/ãµãŒããŒã®ã³ãŒããã¹ããŒãããèªåçæãã å®éã«ã¹ããŒããã¡ãŒã¹ããªéçºãå®è·µããããã«ã¯ã¹ããŒããã¡ã³ããã³ã¹ããã¢ãããŒã·ã§ã³ãé«ãä¿ã€å¿
èŠããããŸãã ã³ãŒããæžããäžã§ã¹ããŒããæžããªããããªããšãªããšããããã¹ããŒããæŽæ°ãããªããªã£ãŠããã®ã§ãå¯èœãªéãã¹ããŒãããã³ãŒããçæããåªåãå¿
èŠã«ãªããŸãã äžæ¹ãããŸãå®è·µããã°ã¹ããŒããšãã圢㧠100% ä¿¡é Œã§ãã API ããã¥ã¡ã³ããæã«å
¥ããã¯ã©ã€ã¢ã³ã/ãµãŒããŒéã§ã®éœéœ¬ãæžãããã®ã§ãå®è·µããŠã¿ã䟡å€ã¯ããã®ã§ã¯ãªãããšæããŸãã ãŸãšã ä»å㯠CLINICS ã¢ããªã®éçºã§ã®ã¹ããŒãèšèªã®æŽ»çšäŸã«ã€ããŠç޹ä»ããŸããã å®éã«éçºã®äžã§ã¹ããŒãèšèªã䜿ãããšã§ API 仿§ã«ã€ããŠææ¡ããåŽåãæžãããšã³ãžãã¢éã®ã³ãã¥ãã±ãŒã·ã§ã³ãåãããããªã£ããšæããŠããŸãã ãŸããäžéšã®ã¯ã©ã€ã¢ã³ãã³ãŒã㯠OpenAPI ã Protocol Buffers ããèªåçæããŠããã®ã§ãããããªãæéãçãããšåæã«äººéã®æã§æžããšèµ·ãããã¡ãªãã¹ãé²ãããšãã§ããŠããŸãã OpenAPI ã§ããã°æ¢åã® REST API ã®ä»æ§ãæžãèµ·ãããšãããã䜿ãå§ããããã®ã§ãèå³ã®ããæ¹ã¯ãã²äžåºŠäœ¿ã£ãŠã¿ãŠã¯ãããã§ããããã æåŸã« ã€ã³ãã¥ããŒã·ã§ã³æ¬éš ã§ã¯ãå»çãã«ã¹ã±ã¢ã®æªæ¥ããã€ããæ°èŠäºæ¥ã®ç«ã¡äžãã«ææŠããŠããŸãããããªç§ãã¡ãšäžç·ã«åããŠã¿ãããšæã£ãæ¹ã¯ããã²ä»¥äžã®æ¡çšæ
å ±ããã§ãã¯ããŠã¿ãŠãã ããã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ããã«ã¡ã¯ãã€ã³ãã¥ããŒã·ã§ã³æ¬éšãšã³ãžãã¢ã®å è€ã§ãã 䞻㫠CLINICS ã¢ã㪠ã®éçºãæ
åœããŠããŸãã ã¯ããã« CLINICS ã¢ããªã®éçºã§ã¯ OpenAPI ã gRPC ãå©çšããŠããŸãã OpenAPI ãš gRPC ã®éã«ã¯äœã®é¢ä¿ããªãã®ã§ãããã©ã¡ãã API ã®ä»æ§ãã¹ããŒãèšèªã§èšè¿°ãããšããç¹ã§ã¯å
±éããŠããŸãã ä»åã¯ãã® API ã¹ããŒããéçºã«ããããã¡ãªããã«ã€ããŠç޹ä»ããŠããããšæããŸãã API ããã¥ã¡ã³ããšããŠã®ã¹ããŒãå®çŸ© æ¢åã®ã³ãŒãã«æ©èœã远å ããéãä¿®æ£ãå ããéã«æ°ã«ããããšã®å€ãéšå㯠API ã®ä»æ§ã§ã¯ãªãããšæããŸãã ããªã¯ãšã¹ããã¬ã¹ãã³ã¹ã¯ã©ã®ãããªããŒã¿ãªã®ããããã®å€ã¯å¿
é ãªã®ããä»»æãªã®ãããããŒã¿ã®åã¯æ°å€ãªã®ããæååãªã®ããããã©ãŒãããã¯æ±ºãŸã£ãŠããã®ãããªã©ãå€ãã®ããšãææ¡ããå¿
èŠããããŸãã ãããããããã£ã API 仿§ã®ããã¥ã¡ã³ããæŽåãããŠããªããšããããšãå€ãã®ã§ã¯ãªãã§ããããã ãŸããããã¥ã¡ã³ãã¯ããããã©ãªã¯ãšã¹ããšã¬ã¹ãã³ã¹ã®ãµã³ãã« JSON ã貌ã£ãŠããã ãã ã£ãããæéãçµã€ãã¡ã«å®è£
ãšããã¥ã¡ã³ããä¹é¢ããŠããŸãã¢ãã«ãªããªããªã£ãŠããŸã£ãŠããå ŽåããããŸãã åèã«ã§ããããã¥ã¡ã³ãããªãå Žåã¯ãçŽæ¥ããã¯ãšã³ãã®å®è£
ãèŠã«è¡ãããšãããã®ã§ãããç®çã®ã³ãŒããæ¢ãåºããŠèªã¿è§£ãã®ã¯æå€ãšæéãããããŸãã ç¹ã«èªå以å€ã®ãšã³ãžãã¢ãå®è£
ããæ©èœã®å ŽåãAPI ã®ä»æ§ãå®è£
ããçŽè§£ãã®ã¯ããªã骚ãæããäœæ¥ã§ãã CLINICS ã¢ããªã®éçºã§ã¯ãããã£ãæéãæžããããã« OpenAPI ã gRPC ãå©çšããŠããŸãã REST API ã®ã¹ããŒã㯠OpenAPI ã䜿ã£ãŠèšè¿°ããŠããŸãã gRPC ãå©çšããŠããéšå㯠Protocol Buffers ã§ RPC ã®ã€ã³ã¿ãŒãã§ãŒã¹ãèšè¿°ããããããããã API ã®ã¹ããŒãã«ãªã£ãŠããŸãã OpenAPI ã Protocol Buffers ã®å®çŸ©ãåç
§ããããšã§ API ã®ä»æ§ã容æã«ææ¡ã§ãããããéåžžã«äŸ¿å©ã§ãã OpenAPI ã Protocol Buffers ãªã©ã®ã¹ããŒãèšèªã®è¯ãç¹ã¯ã宣èšç㪠DSL ã§ã¹ããŒããå®çŸ©ã§ããç¹ã§ãã å®è£
èšèªã«äŸåããªã圢ã§ã®èšè¿°ãã§ããèªç¶èšèªã®ãããªææ§ãããªãããããæ£ç¢ºã« API 仿§ãèšè¿°ããããšãã§ããŸãã ãããã㯠OpenAPI ã Protocol Buffers ã®å®éã«èšè¿°äŸãæããªãããã©ããã£ã圢ã§ã¹ããŒããèšè¿°ããŠããã®ãç°¡åã«èŠãŠãããããšæããŸãã OpenAPI OpenAPI 㯠REST API ã®ã€ã³ã¿ãŒãã§ãŒã¹ãèšè¿°ãã仿§ã§ãã ãšã³ããã€ã³ãã®ãªã¯ãšã¹ããã©ã¡ãŒã¿ãã¬ã¹ãã³ã¹ã®æ§é ãªã©ã JSON ã YAML ã§èšè¿°ããŠããããšãã§ããŸãã ãã€ãŠã¯ Swagger ãšããåç§°ã ã£ãããããã¡ãã®ååã§ç¥ã£ãŠãããšããæ¹ãããã£ããããããããŸããã å®éã® OpenAPI ã®å®çŸ©ã¯ä»¥äžã®ãããªåœ¢ã«ãªããŸãã openapi : 3.0.2 info : { title : OpenAPI Sample , version : 1.0.0 } paths : "/users/{user_id}" : get : parameters : - name : user_id in : path required : true schema : { type : string } responses : "200" : description : OK content : application/json : schema : type : object properties : id : { type : string } name : { type : string } age : { type : integer , nullable : true } required : [ id , name , age ] "404" : description : Not Found "500" : description : Internal Server Error äŸãšããŠãŠãŒã¶ãŒ ID ãããŠãŒã¶ãŒã®ããŒã¿ãååŸãã API ãèšè¿°ããŠã¿ãŸããã äžèšã®å®çŸ©ãèŠããšã GET: /users/{user_id} ãšãããšã³ããã€ã³ãããã ãŠãŒã¶ãŒã® ID ( user_id ) ã string ã§ãã©ã¡ãŒã¿ãšããŠãã¹ã®äžã«åã蟌ã ã¬ã¹ãã³ã¹ã¯ 200, 404, 500 ãè¿ã£ãŠããå¯èœæ§ããã ãšãã£ãããšãèªã¿åããããšæããŸãã ãŸããã¬ã¹ãã³ã¹ã¯ä»¥äžã®ãã㪠JSON ãè¿ã£ãŠããããšãã¹ããŒãããèªã¿åãããšãã§ããŸãã { "id" : "12345678-1234-1234-1234-123456789abc" , "name" : "user name" , "age" : 25 } ããã§ã¯ OpenAPI ã®èšè¿°ã®ä»æ¹ã«ã€ããŠããŸãæ·±ãè§ŠããŸãããããã®ä»ã«ãããŒã¿ã®ãã©ãŒããããçç¥ãããå Žåã®ããã©ã«ãå€ãªã©ã®èšè¿°ãªã©ãå¯èœã§ãã ãã詳ãã㯠ãã¡ã ãåèã«ããŠã¿ãŠãã ããã ããããããŸã䜿ãããšã§ããæ£ç¢ºã« API ã®ä»æ§ãèšè¿°ããããšãã§ããŸãã Protocol Buffers Protocol Buffers ã¯äž»ã« gRPC ã§çšããããããŒã¿ã®ã·ãªã¢ã©ã€ãŒãŒã·ã§ã³åœ¢åŒã§ãã å°çšã®ã¹ããŒãèšèªãçšããŠããŒã¿ã®æ§é ã RPC ã®ã¡ãœããã®å®çŸ©ã .proto ãã¡ã€ã«ã«èšè¿°ããŠãããŸãã å®éã® .proto ãã¡ã€ã«ã¯ä»¥äžã®ãããªåœ¢ã«ãªããŸãã syntax = "proto3" ; package example.protobuf ; service UserService { rpc GetUser ( GetUserRequest ) returns ( GetUserResponse ); } message GetUserRequest { string id = 1 ; } message GetUserResponse { User user = 1 ; } message User { string id = 1 ; string name = 2 ; int32 age = 3 ; } å°ãç¬ç¹ãªèŠãç®ãããŠããŸããã message ãšããŠæ§é äœã®ãããªããŒã¿æ§é ãå®çŸ©ãããŠããããšãèŠãŠåãããšæããŸãã åã¡ãã»ãŒãžã«ã¯ãã£ãŒã«ããå®çŸ©ãããŠãããåãšãã£ãŒã«ãåã宣èšãããŠããŸãã ã¹ããŒãèšèªã䜿ãã¡ãªãã ã¹ããŒãã¯ããã¥ã¡ã³ãã®ä»£ãããšããŠäœ¿ããã ãã§ãªããä»ã«ãããã€ã䜿ãéãããã®ã§ç޹ä»ããŠããããšæããŸãã ã¹ããŒããããœãŒã¹ã³ãŒããèªåçæã§ãã ã¹ããŒãèšèªã«ããèšè¿°ã¯äººéã«ãšã£ãŠèªã¿ãããã ãã§ãªãæ©æ¢°çã«åŠçã§ãã圢åŒã§ãããã®ã§ãã¹ããŒããããœãŒã¹ã³ãŒããèªåçæããããšãå¯èœã§ãã ããã°ã©ãã³ã°èšèªã䜿ã£ãŠãããã¬ãŒã ã¯ãŒã¯ã«ãããããµãŒããŒåŽã§ã¯ãªã¯ãšã¹ãã®ããªããŒã·ã§ã³ãããŸãã¯ã©ã€ã¢ã³ãåŽã§ã¯ã¬ã¹ãã³ã¹ã® JSON ãã¯ã©ã¹ãæ§é äœã«è©°ãããããªåŠçãæžãããšãå€ãã®ã§ã¯ãªãã§ããããã äºåã«ã¹ããŒãå®çŸ©ãæžããŠããå Žåã¯ã¹ããŒããèŠãªãããããã£ãã³ãŒããæžãèµ·ãããŠããããšã«ãªãã®ã§ããããã£ãã machine-readable ãªåœ¢ã®ã¹ããŒããããã®ã ããèªåã§ã³ãŒããçæããããªãã®ãèªç¶ãªèãã§ãããã èªåã§çæããŠããŸãã°å®åã®ã³ãŒããæžãæéãæžãããã ãã§ãªããææžããããšã©ãããŠãèµ·ãããã¡ãª JSON ã®ããŒåãééãããšãã£ããã¹ãé²ãããšãã§ããŸãã ãŸããWeb, iOS, Android ãªã©ã®è€æ°ãã©ãããã©ãŒã ã§ãµãŒãã¹ãå±éããŠããå Žåã§ããããããã®å®è£
ãä¹é¢ããªãããã«ç®¡çããŠããããšã容æã§ãã gRPC ã®å Žå㯠Protocol Buffers ãããœãŒã¹ã³ãŒããçæããã®ãã»ãŒåæãšãªã£ãŠããŸãã protoc ã³ãã³ããå©çšãããš .proto ãã¡ã€ã«ããåèšèªã®ãµãŒããŒã»ã¯ã©ã€ã¢ã³ãã³ãŒããçæããããšãã§ããŸãã OpenAPI ã®å Žåã openapi-generator ã swagger-codegen ãªã©ã®ããŒã«ãå©çšããããšã§åçš®èšèªã®ã³ãŒããèªåçæãå¯èœã§ãã openapi-generator ã swagger-codegen ã«ã¯å€ãã®èšèªãšãã¬ãŒã ã¯ãŒã¯ã®ãµãŒããŒã¹ã¿ããš API ã¯ã©ã€ã¢ã³ãã®ãžã§ãã¬ãŒã¿ãçšæãããŠããŸãã æ¢åã®ãžã§ãã¬ãŒã¿ã䜿ãã ãã§ãååã«åŒ·åãªã®ã§ãããããã«èªåã§ã³ãŒããžã§ãã¬ãŒã¿ãæžãã°ãããžã§ã¯ãåºæã®ã«ãŒã«ã§ã³ãŒããçæãããšãã£ãããšãå¯èœã§ãã OpenAPI ã®ããã¥ã¡ã³ãèªäœã¯ãã ã® YAML/JSON ãªã®ã§ãããŒã¹ããŠã¹ããŒãå®çŸ©ãååž°çã«èªãã§ããã°ã³ãŒãçæã«å¿
èŠãªæ
å ±ãéããããšãã§ããŸãã Protocol Buffers ããã³ãŒããçæããå Žå㯠protoc ã®ãã©ã°ã€ã³ãæžã ã®ãç°¡åã§ãªã¹ã¹ã¡ã§ãã ã¢ãã¯ãµãŒããŒã䜿ã£ãŠã¯ã©ã€ã¢ã³ãéçºãé²ãããã ã³ãŒãã®èªåçæã®ä»ã«ãã¹ããŒãããã¢ãã¯ãµãŒããç«ã¡äžãããšãã£ãæŽ»çšæ¹æ³ããããŸãã Prism ã®ãããªã¹ããŒãå®çŸ©ããåºå®ã®ããŒã¿ãè¿ãã¢ãã¯ãµãŒããç«ã¡äžããããŒã«ãå©çšããã°ãã¯ã©ã€ã¢ã³ãåŽã®éçºããããããªããŸãã ç¹ã«ããã³ããšã³ããšããã¯ãšã³ãã§æ
åœãåãããŠãããããªå Žåã¯ãéçºåæã¯ã¢ãã¯ãµãŒããŒã䜿ã£ãŠéçºãå§ããããã¯ãšã³ãã®å®è£
ãã§ããŠããé ã«çµåãããšããæµããèžãããšã§ãããã³ããšã³ããããæ©ãã¿ã€ãã³ã°ããéçºã«çæããããšãã§ããããã«ãªããŸãã å®éã« Prism ã䜿ã£ãŠã¢ãã¯ãµãŒããŒãç«ã¡äžãããšãããªæãã«ãªããŸãã ã¹ããŒããã¡ãŒã¹ãéçº ãã®ãããªéçºã¹ã¿ã€ã«ã¯ã¹ããŒããã¡ãŒã¹ãéçºã»ã¹ããŒãé§åéçºãªã©ãšåŒã°ããŠããŸãã æç¢ºãªå®çŸ©ãåºå
žãããããã§ã¯ãªãã®ã§ãããã¹ããŒããã¡ãŒã¹ããªéçºã¯ä»¥äžã®ãããªéçºã¹ã¿ã€ã«å
šè¬ãæããŠããŸãã ã¹ããŒãã¯å®è£
èšèªã«ãããªã machine-readable ãªåœ¢ã§èšè¿°ãã ããã¥ã¡ã³ããã¹ããŒãããèªåçæãã ã¯ã©ã€ã¢ã³ã/ãµãŒããŒã®ã³ãŒããã¹ããŒãããèªåçæãã å®éã«ã¹ããŒããã¡ãŒã¹ããªéçºãå®è·µããããã«ã¯ã¹ããŒããã¡ã³ããã³ã¹ããã¢ãããŒã·ã§ã³ãé«ãä¿ã€å¿
èŠããããŸãã ã³ãŒããæžããäžã§ã¹ããŒããæžããªããããªããšãªããšããããã¹ããŒããæŽæ°ãããªããªã£ãŠããã®ã§ãå¯èœãªéãã¹ããŒãããã³ãŒããçæããåªåãå¿
èŠã«ãªããŸãã äžæ¹ãããŸãå®è·µããã°ã¹ããŒããšãã圢㧠100% ä¿¡é Œã§ãã API ããã¥ã¡ã³ããæã«å
¥ããã¯ã©ã€ã¢ã³ã/ãµãŒããŒéã§ã®éœéœ¬ãæžãããã®ã§ãå®è·µããŠã¿ã䟡å€ã¯ããã®ã§ã¯ãªãããšæããŸãã ãŸãšã ä»å㯠CLINICS ã¢ããªã®éçºã§ã®ã¹ããŒãèšèªã®æŽ»çšäŸã«ã€ããŠç޹ä»ããŸããã å®éã«éçºã®äžã§ã¹ããŒãèšèªã䜿ãããšã§ API 仿§ã«ã€ããŠææ¡ããåŽåãæžãããšã³ãžãã¢éã®ã³ãã¥ãã±ãŒã·ã§ã³ãåãããããªã£ããšæããŠããŸãã ãŸããäžéšã®ã¯ã©ã€ã¢ã³ãã³ãŒã㯠OpenAPI ã Protocol Buffers ããèªåçæããŠããã®ã§ãããããªãæéãçãããšåæã«äººéã®æã§æžããšèµ·ãããã¡ãªãã¹ãé²ãããšãã§ããŠããŸãã OpenAPI ã§ããã°æ¢åã® REST API ã®ä»æ§ãæžãèµ·ãããšãããã䜿ãå§ããããã®ã§ãèå³ã®ããæ¹ã¯ãã²äžåºŠäœ¿ã£ãŠã¿ãŠã¯ãããã§ããããã æåŸã« ã€ã³ãã¥ããŒã·ã§ã³æ¬éš ã§ã¯ãå»çãã«ã¹ã±ã¢ã®æªæ¥ããã€ããæ°èŠäºæ¥ã®ç«ã¡äžãã«ææŠããŠããŸãããããªç§ãã¡ãšäžç·ã«åããŠã¿ãããšæã£ãæ¹ã¯ããã²ä»¥äžã®æ¡çšæ
å ±ããã§ãã¯ããŠã¿ãŠãã ããã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ããã«ã¡ã¯ãã€ã³ãã¥ããŒã·ã§ã³æ¬éšãšã³ãžãã¢ã®å è€ã§ãã 䞻㫠CLINICS ã¢ã㪠ã®éçºãæ
åœããŠããŸãã ã¯ããã« CLINICS ã¢ããªã®éçºã§ã¯ OpenAPI ã gRPC ãå©çšããŠããŸãã OpenAPI ãš gRPC ã®éã«ã¯äœã®é¢ä¿ããªãã®ã§ãããã©ã¡ãã API ã®ä»æ§ãã¹ããŒãèšèªã§èšè¿°ãããšããç¹ã§ã¯å
±éããŠããŸãã ä»åã¯ãã® API ã¹ããŒããéçºã«ããããã¡ãªããã«ã€ããŠç޹ä»ããŠããããšæããŸãã API ããã¥ã¡ã³ããšããŠã®ã¹ããŒãå®çŸ© æ¢åã®ã³ãŒãã«æ©èœã远å ããéãä¿®æ£ãå ããéã«æ°ã«ããããšã®å€ãéšå㯠API ã®ä»æ§ã§ã¯ãªãããšæããŸãã ããªã¯ãšã¹ããã¬ã¹ãã³ã¹ã¯ã©ã®ãããªããŒã¿ãªã®ããããã®å€ã¯å¿
é ãªã®ããä»»æãªã®ãããããŒã¿ã®åã¯æ°å€ãªã®ããæååãªã®ããããã©ãŒãããã¯æ±ºãŸã£ãŠããã®ãããªã©ãå€ãã®ããšãææ¡ããå¿
èŠããããŸãã ãããããããã£ã API 仿§ã®ããã¥ã¡ã³ããæŽåãããŠããªããšããããšãå€ãã®ã§ã¯ãªãã§ããããã ãŸããããã¥ã¡ã³ãã¯ããããã©ãªã¯ãšã¹ããšã¬ã¹ãã³ã¹ã®ãµã³ãã« JSON ã貌ã£ãŠããã ãã ã£ãããæéãçµã€ãã¡ã«å®è£
ãšããã¥ã¡ã³ããä¹é¢ããŠããŸãã¢ãã«ãªããªããªã£ãŠããŸã£ãŠããå ŽåããããŸãã åèã«ã§ããããã¥ã¡ã³ãããªãå Žåã¯ãçŽæ¥ããã¯ãšã³ãã®å®è£
ãèŠã«è¡ãããšãããã®ã§ãããç®çã®ã³ãŒããæ¢ãåºããŠèªã¿è§£ãã®ã¯æå€ãšæéãããããŸãã ç¹ã«èªå以å€ã®ãšã³ãžãã¢ãå®è£
ããæ©èœã®å ŽåãAPI ã®ä»æ§ãå®è£
ããçŽè§£ãã®ã¯ããªã骚ãæããäœæ¥ã§ãã CLINICS ã¢ããªã®éçºã§ã¯ãããã£ãæéãæžããããã« OpenAPI ã gRPC ãå©çšããŠããŸãã REST API ã®ã¹ããŒã㯠OpenAPI ã䜿ã£ãŠèšè¿°ããŠããŸãã gRPC ãå©çšããŠããéšå㯠Protocol Buffers ã§ RPC ã®ã€ã³ã¿ãŒãã§ãŒã¹ãèšè¿°ããããããããã API ã®ã¹ããŒãã«ãªã£ãŠããŸãã OpenAPI ã Protocol Buffers ã®å®çŸ©ãåç
§ããããšã§ API ã®ä»æ§ã容æã«ææ¡ã§ãããããéåžžã«äŸ¿å©ã§ãã OpenAPI ã Protocol Buffers ãªã©ã®ã¹ããŒãèšèªã®è¯ãç¹ã¯ã宣èšç㪠DSL ã§ã¹ããŒããå®çŸ©ã§ããç¹ã§ãã å®è£
èšèªã«äŸåããªã圢ã§ã®èšè¿°ãã§ããèªç¶èšèªã®ãããªææ§ãããªãããããæ£ç¢ºã« API 仿§ãèšè¿°ããããšãã§ããŸãã ãããã㯠OpenAPI ã Protocol Buffers ã®å®éã«èšè¿°äŸãæããªãããã©ããã£ã圢ã§ã¹ããŒããèšè¿°ããŠããã®ãç°¡åã«èŠãŠãããããšæããŸãã OpenAPI OpenAPI 㯠REST API ã®ã€ã³ã¿ãŒãã§ãŒã¹ãèšè¿°ãã仿§ã§ãã ãšã³ããã€ã³ãã®ãªã¯ãšã¹ããã©ã¡ãŒã¿ãã¬ã¹ãã³ã¹ã®æ§é ãªã©ã JSON ã YAML ã§èšè¿°ããŠããããšãã§ããŸãã ãã€ãŠã¯ Swagger ãšããåç§°ã ã£ãããããã¡ãã®ååã§ç¥ã£ãŠãããšããæ¹ãããã£ããããããããŸããã å®éã® OpenAPI ã®å®çŸ©ã¯ä»¥äžã®ãããªåœ¢ã«ãªããŸãã openapi : 3.0.2 info : { title : OpenAPI Sample , version : 1.0.0 } paths : "/users/{user_id}" : get : parameters : - name : user_id in : path required : true schema : { type : string } responses : "200" : description : OK content : application/json : schema : type : object properties : id : { type : string } name : { type : string } age : { type : integer , nullable : true } required : [ id , name , age ] "404" : description : Not Found "500" : description : Internal Server Error äŸãšããŠãŠãŒã¶ãŒ ID ãããŠãŒã¶ãŒã®ããŒã¿ãååŸãã API ãèšè¿°ããŠã¿ãŸããã äžèšã®å®çŸ©ãèŠããšã GET: /users/{user_id} ãšãããšã³ããã€ã³ãããã ãŠãŒã¶ãŒã® ID ( user_id ) ã string ã§ãã©ã¡ãŒã¿ãšããŠãã¹ã®äžã«åã蟌ã ã¬ã¹ãã³ã¹ã¯ 200, 404, 500 ãè¿ã£ãŠããå¯èœæ§ããã ãšãã£ãããšãèªã¿åããããšæããŸãã ãŸããã¬ã¹ãã³ã¹ã¯ä»¥äžã®ãã㪠JSON ãè¿ã£ãŠããããšãã¹ããŒãããèªã¿åãããšãã§ããŸãã { "id" : "12345678-1234-1234-1234-123456789abc" , "name" : "user name" , "age" : 25 } ããã§ã¯ OpenAPI ã®èšè¿°ã®ä»æ¹ã«ã€ããŠããŸãæ·±ãè§ŠããŸãããããã®ä»ã«ãããŒã¿ã®ãã©ãŒããããçç¥ãããå Žåã®ããã©ã«ãå€ãªã©ã®èšè¿°ãªã©ãå¯èœã§ãã ãã詳ãã㯠ãã¡ã ãåèã«ããŠã¿ãŠãã ããã ããããããŸã䜿ãããšã§ããæ£ç¢ºã« API ã®ä»æ§ãèšè¿°ããããšãã§ããŸãã Protocol Buffers Protocol Buffers ã¯äž»ã« gRPC ã§çšããããããŒã¿ã®ã·ãªã¢ã©ã€ãŒãŒã·ã§ã³åœ¢åŒã§ãã å°çšã®ã¹ããŒãèšèªãçšããŠããŒã¿ã®æ§é ã RPC ã®ã¡ãœããã®å®çŸ©ã .proto ãã¡ã€ã«ã«èšè¿°ããŠãããŸãã å®éã® .proto ãã¡ã€ã«ã¯ä»¥äžã®ãããªåœ¢ã«ãªããŸãã syntax = "proto3" ; package example.protobuf ; service UserService { rpc GetUser ( GetUserRequest ) returns ( GetUserResponse ); } message GetUserRequest { string id = 1 ; } message GetUserResponse { User user = 1 ; } message User { string id = 1 ; string name = 2 ; int32 age = 3 ; } å°ãç¬ç¹ãªèŠãç®ãããŠããŸããã message ãšããŠæ§é äœã®ãããªããŒã¿æ§é ãå®çŸ©ãããŠããããšãèŠãŠåãããšæããŸãã åã¡ãã»ãŒãžã«ã¯ãã£ãŒã«ããå®çŸ©ãããŠãããåãšãã£ãŒã«ãåã宣èšãããŠããŸãã ã¹ããŒãèšèªã䜿ãã¡ãªãã ã¹ããŒãã¯ããã¥ã¡ã³ãã®ä»£ãããšããŠäœ¿ããã ãã§ãªããä»ã«ãããã€ã䜿ãéãããã®ã§ç޹ä»ããŠããããšæããŸãã ã¹ããŒããããœãŒã¹ã³ãŒããèªåçæã§ãã ã¹ããŒãèšèªã«ããèšè¿°ã¯äººéã«ãšã£ãŠèªã¿ãããã ãã§ãªãæ©æ¢°çã«åŠçã§ãã圢åŒã§ãããã®ã§ãã¹ããŒããããœãŒã¹ã³ãŒããèªåçæããããšãå¯èœã§ãã ããã°ã©ãã³ã°èšèªã䜿ã£ãŠãããã¬ãŒã ã¯ãŒã¯ã«ãããããµãŒããŒåŽã§ã¯ãªã¯ãšã¹ãã®ããªããŒã·ã§ã³ãããŸãã¯ã©ã€ã¢ã³ãåŽã§ã¯ã¬ã¹ãã³ã¹ã® JSON ãã¯ã©ã¹ãæ§é äœã«è©°ãããããªåŠçãæžãããšãå€ãã®ã§ã¯ãªãã§ããããã äºåã«ã¹ããŒãå®çŸ©ãæžããŠããå Žåã¯ã¹ããŒããèŠãªãããããã£ãã³ãŒããæžãèµ·ãããŠããããšã«ãªãã®ã§ããããã£ãã machine-readable ãªåœ¢ã®ã¹ããŒããããã®ã ããèªåã§ã³ãŒããçæããããªãã®ãèªç¶ãªèãã§ãããã èªåã§çæããŠããŸãã°å®åã®ã³ãŒããæžãæéãæžãããã ãã§ãªããææžããããšã©ãããŠãèµ·ãããã¡ãª JSON ã®ããŒåãééãããšãã£ããã¹ãé²ãããšãã§ããŸãã ãŸããWeb, iOS, Android ãªã©ã®è€æ°ãã©ãããã©ãŒã ã§ãµãŒãã¹ãå±éããŠããå Žåã§ããããããã®å®è£
ãä¹é¢ããªãããã«ç®¡çããŠããããšã容æã§ãã gRPC ã®å Žå㯠Protocol Buffers ãããœãŒã¹ã³ãŒããçæããã®ãã»ãŒåæãšãªã£ãŠããŸãã protoc ã³ãã³ããå©çšãããš .proto ãã¡ã€ã«ããåèšèªã®ãµãŒããŒã»ã¯ã©ã€ã¢ã³ãã³ãŒããçæããããšãã§ããŸãã OpenAPI ã®å Žåã openapi-generator ã swagger-codegen ãªã©ã®ããŒã«ãå©çšããããšã§åçš®èšèªã®ã³ãŒããèªåçæãå¯èœã§ãã openapi-generator ã swagger-codegen ã«ã¯å€ãã®èšèªãšãã¬ãŒã ã¯ãŒã¯ã®ãµãŒããŒã¹ã¿ããš API ã¯ã©ã€ã¢ã³ãã®ãžã§ãã¬ãŒã¿ãçšæãããŠããŸãã æ¢åã®ãžã§ãã¬ãŒã¿ã䜿ãã ãã§ãååã«åŒ·åãªã®ã§ãããããã«èªåã§ã³ãŒããžã§ãã¬ãŒã¿ãæžãã°ãããžã§ã¯ãåºæã®ã«ãŒã«ã§ã³ãŒããçæãããšãã£ãããšãå¯èœã§ãã OpenAPI ã®ããã¥ã¡ã³ãèªäœã¯ãã ã® YAML/JSON ãªã®ã§ãããŒã¹ããŠã¹ããŒãå®çŸ©ãååž°çã«èªãã§ããã°ã³ãŒãçæã«å¿
èŠãªæ
å ±ãéããããšãã§ããŸãã Protocol Buffers ããã³ãŒããçæããå Žå㯠protoc ã®ãã©ã°ã€ã³ãæžã ã®ãç°¡åã§ãªã¹ã¹ã¡ã§ãã ã¢ãã¯ãµãŒããŒã䜿ã£ãŠã¯ã©ã€ã¢ã³ãéçºãé²ãããã ã³ãŒãã®èªåçæã®ä»ã«ãã¹ããŒãããã¢ãã¯ãµãŒããç«ã¡äžãããšãã£ãæŽ»çšæ¹æ³ããããŸãã Prism ã®ãããªã¹ããŒãå®çŸ©ããåºå®ã®ããŒã¿ãè¿ãã¢ãã¯ãµãŒããç«ã¡äžããããŒã«ãå©çšããã°ãã¯ã©ã€ã¢ã³ãåŽã®éçºããããããªããŸãã ç¹ã«ããã³ããšã³ããšããã¯ãšã³ãã§æ
åœãåãããŠãããããªå Žåã¯ãéçºåæã¯ã¢ãã¯ãµãŒããŒã䜿ã£ãŠéçºãå§ããããã¯ãšã³ãã®å®è£
ãã§ããŠããé ã«çµåãããšããæµããèžãããšã§ãããã³ããšã³ããããæ©ãã¿ã€ãã³ã°ããéçºã«çæããããšãã§ããããã«ãªããŸãã å®éã« Prism ã䜿ã£ãŠã¢ãã¯ãµãŒããŒãç«ã¡äžãããšãããªæãã«ãªããŸãã ã¹ããŒããã¡ãŒã¹ãéçº ãã®ãããªéçºã¹ã¿ã€ã«ã¯ã¹ããŒããã¡ãŒã¹ãéçºã»ã¹ããŒãé§åéçºãªã©ãšåŒã°ããŠããŸãã æç¢ºãªå®çŸ©ãåºå
žãããããã§ã¯ãªãã®ã§ãããã¹ããŒããã¡ãŒã¹ããªéçºã¯ä»¥äžã®ãããªéçºã¹ã¿ã€ã«å
šè¬ãæããŠããŸãã ã¹ããŒãã¯å®è£
èšèªã«ãããªã machine-readable ãªåœ¢ã§èšè¿°ãã ããã¥ã¡ã³ããã¹ããŒãããèªåçæãã ã¯ã©ã€ã¢ã³ã/ãµãŒããŒã®ã³ãŒããã¹ããŒãããèªåçæãã å®éã«ã¹ããŒããã¡ãŒã¹ããªéçºãå®è·µããããã«ã¯ã¹ããŒããã¡ã³ããã³ã¹ããã¢ãããŒã·ã§ã³ãé«ãä¿ã€å¿
èŠããããŸãã ã³ãŒããæžããäžã§ã¹ããŒããæžããªããããªããšãªããšããããã¹ããŒããæŽæ°ãããªããªã£ãŠããã®ã§ãå¯èœãªéãã¹ããŒãããã³ãŒããçæããåªåãå¿
èŠã«ãªããŸãã äžæ¹ãããŸãå®è·µããã°ã¹ããŒããšãã圢㧠100% ä¿¡é Œã§ãã API ããã¥ã¡ã³ããæã«å
¥ããã¯ã©ã€ã¢ã³ã/ãµãŒããŒéã§ã®éœéœ¬ãæžãããã®ã§ãå®è·µããŠã¿ã䟡å€ã¯ããã®ã§ã¯ãªãããšæããŸãã ãŸãšã ä»å㯠CLINICS ã¢ããªã®éçºã§ã®ã¹ããŒãèšèªã®æŽ»çšäŸã«ã€ããŠç޹ä»ããŸããã å®éã«éçºã®äžã§ã¹ããŒãèšèªã䜿ãããšã§ API 仿§ã«ã€ããŠææ¡ããåŽåãæžãããšã³ãžãã¢éã®ã³ãã¥ãã±ãŒã·ã§ã³ãåãããããªã£ããšæããŠããŸãã ãŸããäžéšã®ã¯ã©ã€ã¢ã³ãã³ãŒã㯠OpenAPI ã Protocol Buffers ããèªåçæããŠããã®ã§ãããããªãæéãçãããšåæã«äººéã®æã§æžããšèµ·ãããã¡ãªãã¹ãé²ãããšãã§ããŠããŸãã OpenAPI ã§ããã°æ¢åã® REST API ã®ä»æ§ãæžãèµ·ãããšãããã䜿ãå§ããããã®ã§ãèå³ã®ããæ¹ã¯ãã²äžåºŠäœ¿ã£ãŠã¿ãŠã¯ãããã§ããããã æåŸã« ã€ã³ãã¥ããŒã·ã§ã³æ¬éš ã§ã¯ãå»çãã«ã¹ã±ã¢ã®æªæ¥ããã€ããæ°èŠäºæ¥ã®ç«ã¡äžãã«ææŠããŠããŸãããããªç§ãã¡ãšäžç·ã«åããŠã¿ãããšæã£ãæ¹ã¯ããã²ä»¥äžã®æ¡çšæ
å ±ããã§ãã¯ããŠã¿ãŠãã ããã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ããã«ã¡ã¯ãã€ã³ãã¥ããŒã·ã§ã³æ¬éšãšã³ãžãã¢ã®å è€ã§ãã 䞻㫠CLINICS ã¢ã㪠ã®éçºãæ
åœããŠããŸãã ã¯ããã« CLINICS ã¢ããªã®éçºã§ã¯ OpenAPI ã gRPC ãå©çšããŠããŸãã OpenAPI ãš gRPC ã®éã«ã¯äœã®é¢ä¿ããªãã®ã§ãããã©ã¡ãã API ã®ä»æ§ãã¹ããŒãèšèªã§èšè¿°ãããšããç¹ã§ã¯å
±éããŠããŸãã ä»åã¯ãã® API ã¹ããŒããéçºã«ããããã¡ãªããã«ã€ããŠç޹ä»ããŠããããšæããŸãã API ããã¥ã¡ã³ããšããŠã®ã¹ããŒãå®çŸ© æ¢åã®ã³ãŒãã«æ©èœã远å ããéãä¿®æ£ãå ããéã«æ°ã«ããããšã®å€ãéšå㯠API ã®ä»æ§ã§ã¯ãªãããšæããŸãã ããªã¯ãšã¹ããã¬ã¹ãã³ã¹ã¯ã©ã®ãããªããŒã¿ãªã®ããããã®å€ã¯å¿
é ãªã®ããä»»æãªã®ãããããŒã¿ã®åã¯æ°å€ãªã®ããæååãªã®ããããã©ãŒãããã¯æ±ºãŸã£ãŠããã®ãããªã©ãå€ãã®ããšãææ¡ããå¿
èŠããããŸãã ãããããããã£ã API 仿§ã®ããã¥ã¡ã³ããæŽåãããŠããªããšããããšãå€ãã®ã§ã¯ãªãã§ããããã ãŸããããã¥ã¡ã³ãã¯ããããã©ãªã¯ãšã¹ããšã¬ã¹ãã³ã¹ã®ãµã³ãã« JSON ã貌ã£ãŠããã ãã ã£ãããæéãçµã€ãã¡ã«å®è£
ãšããã¥ã¡ã³ããä¹é¢ããŠããŸãã¢ãã«ãªããªããªã£ãŠããŸã£ãŠããå ŽåããããŸãã åèã«ã§ããããã¥ã¡ã³ãããªãå Žåã¯ãçŽæ¥ããã¯ãšã³ãã®å®è£
ãèŠã«è¡ãããšãããã®ã§ãããç®çã®ã³ãŒããæ¢ãåºããŠèªã¿è§£ãã®ã¯æå€ãšæéãããããŸãã ç¹ã«èªå以å€ã®ãšã³ãžãã¢ãå®è£
ããæ©èœã®å ŽåãAPI ã®ä»æ§ãå®è£
ããçŽè§£ãã®ã¯ããªã骚ãæããäœæ¥ã§ãã CLINICS ã¢ããªã®éçºã§ã¯ãããã£ãæéãæžããããã« OpenAPI ã gRPC ãå©çšããŠããŸãã REST API ã®ã¹ããŒã㯠OpenAPI ã䜿ã£ãŠèšè¿°ããŠããŸãã gRPC ãå©çšããŠããéšå㯠Protocol Buffers ã§ RPC ã®ã€ã³ã¿ãŒãã§ãŒã¹ãèšè¿°ããããããããã API ã®ã¹ããŒãã«ãªã£ãŠããŸãã OpenAPI ã Protocol Buffers ã®å®çŸ©ãåç
§ããããšã§ API ã®ä»æ§ã容æã«ææ¡ã§ãããããéåžžã«äŸ¿å©ã§ãã OpenAPI ã Protocol Buffers ãªã©ã®ã¹ããŒãèšèªã®è¯ãç¹ã¯ã宣èšç㪠DSL ã§ã¹ããŒããå®çŸ©ã§ããç¹ã§ãã å®è£
èšèªã«äŸåããªã圢ã§ã®èšè¿°ãã§ããèªç¶èšèªã®ãããªææ§ãããªãããããæ£ç¢ºã« API 仿§ãèšè¿°ããããšãã§ããŸãã ãããã㯠OpenAPI ã Protocol Buffers ã®å®éã«èšè¿°äŸãæããªãããã©ããã£ã圢ã§ã¹ããŒããèšè¿°ããŠããã®ãç°¡åã«èŠãŠãããããšæããŸãã OpenAPI OpenAPI 㯠REST API ã®ã€ã³ã¿ãŒãã§ãŒã¹ãèšè¿°ãã仿§ã§ãã ãšã³ããã€ã³ãã®ãªã¯ãšã¹ããã©ã¡ãŒã¿ãã¬ã¹ãã³ã¹ã®æ§é ãªã©ã JSON ã YAML ã§èšè¿°ããŠããããšãã§ããŸãã ãã€ãŠã¯ Swagger ãšããåç§°ã ã£ãããããã¡ãã®ååã§ç¥ã£ãŠãããšããæ¹ãããã£ããããããããŸããã å®éã® OpenAPI ã®å®çŸ©ã¯ä»¥äžã®ãããªåœ¢ã«ãªããŸãã openapi : 3.0.2 info : { title : OpenAPI Sample , version : 1.0.0 } paths : "/users/{user_id}" : get : parameters : - name : user_id in : path required : true schema : { type : string } responses : "200" : description : OK content : application/json : schema : type : object properties : id : { type : string } name : { type : string } age : { type : integer , nullable : true } required : [ id , name , age ] "404" : description : Not Found "500" : description : Internal Server Error äŸãšããŠãŠãŒã¶ãŒ ID ãããŠãŒã¶ãŒã®ããŒã¿ãååŸãã API ãèšè¿°ããŠã¿ãŸããã äžèšã®å®çŸ©ãèŠããšã GET: /users/{user_id} ãšãããšã³ããã€ã³ãããã ãŠãŒã¶ãŒã® ID ( user_id ) ã string ã§ãã©ã¡ãŒã¿ãšããŠãã¹ã®äžã«åã蟌ã ã¬ã¹ãã³ã¹ã¯ 200, 404, 500 ãè¿ã£ãŠããå¯èœæ§ããã ãšãã£ãããšãèªã¿åããããšæããŸãã ãŸããã¬ã¹ãã³ã¹ã¯ä»¥äžã®ãã㪠JSON ãè¿ã£ãŠããããšãã¹ããŒãããèªã¿åãããšãã§ããŸãã { "id" : "12345678-1234-1234-1234-123456789abc" , "name" : "user name" , "age" : 25 } ããã§ã¯ OpenAPI ã®èšè¿°ã®ä»æ¹ã«ã€ããŠããŸãæ·±ãè§ŠããŸãããããã®ä»ã«ãããŒã¿ã®ãã©ãŒããããçç¥ãããå Žåã®ããã©ã«ãå€ãªã©ã®èšè¿°ãªã©ãå¯èœã§ãã ãã詳ãã㯠ãã¡ã ãåèã«ããŠã¿ãŠãã ããã ããããããŸã䜿ãããšã§ããæ£ç¢ºã« API ã®ä»æ§ãèšè¿°ããããšãã§ããŸãã Protocol Buffers Protocol Buffers ã¯äž»ã« gRPC ã§çšããããããŒã¿ã®ã·ãªã¢ã©ã€ãŒãŒã·ã§ã³åœ¢åŒã§ãã å°çšã®ã¹ããŒãèšèªãçšããŠããŒã¿ã®æ§é ã RPC ã®ã¡ãœããã®å®çŸ©ã .proto ãã¡ã€ã«ã«èšè¿°ããŠãããŸãã å®éã® .proto ãã¡ã€ã«ã¯ä»¥äžã®ãããªåœ¢ã«ãªããŸãã syntax = "proto3" ; package example.protobuf ; service UserService { rpc GetUser ( GetUserRequest ) returns ( GetUserResponse ); } message GetUserRequest { string id = 1 ; } message GetUserResponse { User user = 1 ; } message User { string id = 1 ; string name = 2 ; int32 age = 3 ; } å°ãç¬ç¹ãªèŠãç®ãããŠããŸããã message ãšããŠæ§é äœã®ãããªããŒã¿æ§é ãå®çŸ©ãããŠããããšãèŠãŠåãããšæããŸãã åã¡ãã»ãŒãžã«ã¯ãã£ãŒã«ããå®çŸ©ãããŠãããåãšãã£ãŒã«ãåã宣èšãããŠããŸãã ã¹ããŒãèšèªã䜿ãã¡ãªãã ã¹ããŒãã¯ããã¥ã¡ã³ãã®ä»£ãããšããŠäœ¿ããã ãã§ãªããä»ã«ãããã€ã䜿ãéãããã®ã§ç޹ä»ããŠããããšæããŸãã ã¹ããŒããããœãŒã¹ã³ãŒããèªåçæã§ãã ã¹ããŒãèšèªã«ããèšè¿°ã¯äººéã«ãšã£ãŠèªã¿ãããã ãã§ãªãæ©æ¢°çã«åŠçã§ãã圢åŒã§ãããã®ã§ãã¹ããŒããããœãŒã¹ã³ãŒããèªåçæããããšãå¯èœã§ãã ããã°ã©ãã³ã°èšèªã䜿ã£ãŠãããã¬ãŒã ã¯ãŒã¯ã«ãããããµãŒããŒåŽã§ã¯ãªã¯ãšã¹ãã®ããªããŒã·ã§ã³ãããŸãã¯ã©ã€ã¢ã³ãåŽã§ã¯ã¬ã¹ãã³ã¹ã® JSON ãã¯ã©ã¹ãæ§é äœã«è©°ãããããªåŠçãæžãããšãå€ãã®ã§ã¯ãªãã§ããããã äºåã«ã¹ããŒãå®çŸ©ãæžããŠããå Žåã¯ã¹ããŒããèŠãªãããããã£ãã³ãŒããæžãèµ·ãããŠããããšã«ãªãã®ã§ããããã£ãã machine-readable ãªåœ¢ã®ã¹ããŒããããã®ã ããèªåã§ã³ãŒããçæããããªãã®ãèªç¶ãªèãã§ãããã èªåã§çæããŠããŸãã°å®åã®ã³ãŒããæžãæéãæžãããã ãã§ãªããææžããããšã©ãããŠãèµ·ãããã¡ãª JSON ã®ããŒåãééãããšãã£ããã¹ãé²ãããšãã§ããŸãã ãŸããWeb, iOS, Android ãªã©ã®è€æ°ãã©ãããã©ãŒã ã§ãµãŒãã¹ãå±éããŠããå Žåã§ããããããã®å®è£
ãä¹é¢ããªãããã«ç®¡çããŠããããšã容æã§ãã gRPC ã®å Žå㯠Protocol Buffers ãããœãŒã¹ã³ãŒããçæããã®ãã»ãŒåæãšãªã£ãŠããŸãã protoc ã³ãã³ããå©çšãããš .proto ãã¡ã€ã«ããåèšèªã®ãµãŒããŒã»ã¯ã©ã€ã¢ã³ãã³ãŒããçæããããšãã§ããŸãã OpenAPI ã®å Žåã openapi-generator ã swagger-codegen ãªã©ã®ããŒã«ãå©çšããããšã§åçš®èšèªã®ã³ãŒããèªåçæãå¯èœã§ãã openapi-generator ã swagger-codegen ã«ã¯å€ãã®èšèªãšãã¬ãŒã ã¯ãŒã¯ã®ãµãŒããŒã¹ã¿ããš API ã¯ã©ã€ã¢ã³ãã®ãžã§ãã¬ãŒã¿ãçšæãããŠããŸãã æ¢åã®ãžã§ãã¬ãŒã¿ã䜿ãã ãã§ãååã«åŒ·åãªã®ã§ãããããã«èªåã§ã³ãŒããžã§ãã¬ãŒã¿ãæžãã°ãããžã§ã¯ãåºæã®ã«ãŒã«ã§ã³ãŒããçæãããšãã£ãããšãå¯èœã§ãã OpenAPI ã®ããã¥ã¡ã³ãèªäœã¯ãã ã® YAML/JSON ãªã®ã§ãããŒã¹ããŠã¹ããŒãå®çŸ©ãååž°çã«èªãã§ããã°ã³ãŒãçæã«å¿
èŠãªæ
å ±ãéããããšãã§ããŸãã Protocol Buffers ããã³ãŒããçæããå Žå㯠protoc ã®ãã©ã°ã€ã³ãæžã ã®ãç°¡åã§ãªã¹ã¹ã¡ã§ãã ã¢ãã¯ãµãŒããŒã䜿ã£ãŠã¯ã©ã€ã¢ã³ãéçºãé²ãããã ã³ãŒãã®èªåçæã®ä»ã«ãã¹ããŒãããã¢ãã¯ãµãŒããç«ã¡äžãããšãã£ãæŽ»çšæ¹æ³ããããŸãã Prism ã®ãããªã¹ããŒãå®çŸ©ããåºå®ã®ããŒã¿ãè¿ãã¢ãã¯ãµãŒããç«ã¡äžããããŒã«ãå©çšããã°ãã¯ã©ã€ã¢ã³ãåŽã®éçºããããããªããŸãã ç¹ã«ããã³ããšã³ããšããã¯ãšã³ãã§æ
åœãåãããŠãããããªå Žåã¯ãéçºåæã¯ã¢ãã¯ãµãŒããŒã䜿ã£ãŠéçºãå§ããããã¯ãšã³ãã®å®è£
ãã§ããŠããé ã«çµåãããšããæµããèžãããšã§ãããã³ããšã³ããããæ©ãã¿ã€ãã³ã°ããéçºã«çæããããšãã§ããããã«ãªããŸãã å®éã« Prism ã䜿ã£ãŠã¢ãã¯ãµãŒããŒãç«ã¡äžãããšãããªæãã«ãªããŸãã ã¹ããŒããã¡ãŒã¹ãéçº ãã®ãããªéçºã¹ã¿ã€ã«ã¯ã¹ããŒããã¡ãŒã¹ãéçºã»ã¹ããŒãé§åéçºãªã©ãšåŒã°ããŠããŸãã æç¢ºãªå®çŸ©ãåºå
žãããããã§ã¯ãªãã®ã§ãããã¹ããŒããã¡ãŒã¹ããªéçºã¯ä»¥äžã®ãããªéçºã¹ã¿ã€ã«å
šè¬ãæããŠããŸãã ã¹ããŒãã¯å®è£
èšèªã«ãããªã machine-readable ãªåœ¢ã§èšè¿°ãã ããã¥ã¡ã³ããã¹ããŒãããèªåçæãã ã¯ã©ã€ã¢ã³ã/ãµãŒããŒã®ã³ãŒããã¹ããŒãããèªåçæãã å®éã«ã¹ããŒããã¡ãŒã¹ããªéçºãå®è·µããããã«ã¯ã¹ããŒããã¡ã³ããã³ã¹ããã¢ãããŒã·ã§ã³ãé«ãä¿ã€å¿
èŠããããŸãã ã³ãŒããæžããäžã§ã¹ããŒããæžããªããããªããšãªããšããããã¹ããŒããæŽæ°ãããªããªã£ãŠããã®ã§ãå¯èœãªéãã¹ããŒãããã³ãŒããçæããåªåãå¿
èŠã«ãªããŸãã äžæ¹ãããŸãå®è·µããã°ã¹ããŒããšãã圢㧠100% ä¿¡é Œã§ãã API ããã¥ã¡ã³ããæã«å
¥ããã¯ã©ã€ã¢ã³ã/ãµãŒããŒéã§ã®éœéœ¬ãæžãããã®ã§ãå®è·µããŠã¿ã䟡å€ã¯ããã®ã§ã¯ãªãããšæããŸãã ãŸãšã ä»å㯠CLINICS ã¢ããªã®éçºã§ã®ã¹ããŒãèšèªã®æŽ»çšäŸã«ã€ããŠç޹ä»ããŸããã å®éã«éçºã®äžã§ã¹ããŒãèšèªã䜿ãããšã§ API 仿§ã«ã€ããŠææ¡ããåŽåãæžãããšã³ãžãã¢éã®ã³ãã¥ãã±ãŒã·ã§ã³ãåãããããªã£ããšæããŠããŸãã ãŸããäžéšã®ã¯ã©ã€ã¢ã³ãã³ãŒã㯠OpenAPI ã Protocol Buffers ããèªåçæããŠããã®ã§ãããããªãæéãçãããšåæã«äººéã®æã§æžããšèµ·ãããã¡ãªãã¹ãé²ãããšãã§ããŠããŸãã OpenAPI ã§ããã°æ¢åã® REST API ã®ä»æ§ãæžãèµ·ãããšãããã䜿ãå§ããããã®ã§ãèå³ã®ããæ¹ã¯ãã²äžåºŠäœ¿ã£ãŠã¿ãŠã¯ãããã§ããããã æåŸã« ã€ã³ãã¥ããŒã·ã§ã³æ¬éš ã§ã¯ãå»çãã«ã¹ã±ã¢ã®æªæ¥ããã€ããæ°èŠäºæ¥ã®ç«ã¡äžãã«ææŠããŠããŸãããããªç§ãã¡ãšäžç·ã«åããŠã¿ãããšæã£ãæ¹ã¯ããã²ä»¥äžã®æ¡çšæ
å ±ããã§ãã¯ããŠã¿ãŠãã ããã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ããã«ã¡ã¯ãã€ã³ãã¥ããŒã·ã§ã³æ¬éšãšã³ãžãã¢ã®å è€ã§ãã 䞻㫠CLINICS ã¢ã㪠ã®éçºãæ
åœããŠããŸãã ã¯ããã« CLINICS ã¢ããªã®éçºã§ã¯ OpenAPI ã gRPC ãå©çšããŠããŸãã OpenAPI ãš gRPC ã®éã«ã¯äœã®é¢ä¿ããªãã®ã§ãããã©ã¡ãã API ã®ä»æ§ãã¹ããŒãèšèªã§èšè¿°ãããšããç¹ã§ã¯å
±éããŠããŸãã ä»åã¯ãã® API ã¹ããŒããéçºã«ããããã¡ãªããã«ã€ããŠç޹ä»ããŠããããšæããŸãã API ããã¥ã¡ã³ããšããŠã®ã¹ããŒãå®çŸ© æ¢åã®ã³ãŒãã«æ©èœã远å ããéãä¿®æ£ãå ããéã«æ°ã«ããããšã®å€ãéšå㯠API ã®ä»æ§ã§ã¯ãªãããšæããŸãã ããªã¯ãšã¹ããã¬ã¹ãã³ã¹ã¯ã©ã®ãããªããŒã¿ãªã®ããããã®å€ã¯å¿
é ãªã®ããä»»æãªã®ãããããŒã¿ã®åã¯æ°å€ãªã®ããæååãªã®ããããã©ãŒãããã¯æ±ºãŸã£ãŠããã®ãããªã©ãå€ãã®ããšãææ¡ããå¿
èŠããããŸãã ãããããããã£ã API 仿§ã®ããã¥ã¡ã³ããæŽåãããŠããªããšããããšãå€ãã®ã§ã¯ãªãã§ããããã ãŸããããã¥ã¡ã³ãã¯ããããã©ãªã¯ãšã¹ããšã¬ã¹ãã³ã¹ã®ãµã³ãã« JSON ã貌ã£ãŠããã ãã ã£ãããæéãçµã€ãã¡ã«å®è£
ãšããã¥ã¡ã³ããä¹é¢ããŠããŸãã¢ãã«ãªããªããªã£ãŠããŸã£ãŠããå ŽåããããŸãã åèã«ã§ããããã¥ã¡ã³ãããªãå Žåã¯ãçŽæ¥ããã¯ãšã³ãã®å®è£
ãèŠã«è¡ãããšãããã®ã§ãããç®çã®ã³ãŒããæ¢ãåºããŠèªã¿è§£ãã®ã¯æå€ãšæéãããããŸãã ç¹ã«èªå以å€ã®ãšã³ãžãã¢ãå®è£
ããæ©èœã®å ŽåãAPI ã®ä»æ§ãå®è£
ããçŽè§£ãã®ã¯ããªã骚ãæããäœæ¥ã§ãã CLINICS ã¢ããªã®éçºã§ã¯ãããã£ãæéãæžããããã« OpenAPI ã gRPC ãå©çšããŠããŸãã REST API ã®ã¹ããŒã㯠OpenAPI ã䜿ã£ãŠèšè¿°ããŠããŸãã gRPC ãå©çšããŠããéšå㯠Protocol Buffers ã§ RPC ã®ã€ã³ã¿ãŒãã§ãŒã¹ãèšè¿°ããããããããã API ã®ã¹ããŒãã«ãªã£ãŠããŸãã OpenAPI ã Protocol Buffers ã®å®çŸ©ãåç
§ããããšã§ API ã®ä»æ§ã容æã«ææ¡ã§ãããããéåžžã«äŸ¿å©ã§ãã OpenAPI ã Protocol Buffers ãªã©ã®ã¹ããŒãèšèªã®è¯ãç¹ã¯ã宣èšç㪠DSL ã§ã¹ããŒããå®çŸ©ã§ããç¹ã§ãã å®è£
èšèªã«äŸåããªã圢ã§ã®èšè¿°ãã§ããèªç¶èšèªã®ãããªææ§ãããªãããããæ£ç¢ºã« API 仿§ãèšè¿°ããããšãã§ããŸãã ãããã㯠OpenAPI ã Protocol Buffers ã®å®éã«èšè¿°äŸãæããªãããã©ããã£ã圢ã§ã¹ããŒããèšè¿°ããŠããã®ãç°¡åã«èŠãŠãããããšæããŸãã OpenAPI OpenAPI 㯠REST API ã®ã€ã³ã¿ãŒãã§ãŒã¹ãèšè¿°ãã仿§ã§ãã ãšã³ããã€ã³ãã®ãªã¯ãšã¹ããã©ã¡ãŒã¿ãã¬ã¹ãã³ã¹ã®æ§é ãªã©ã JSON ã YAML ã§èšè¿°ããŠããããšãã§ããŸãã ãã€ãŠã¯ Swagger ãšããåç§°ã ã£ãããããã¡ãã®ååã§ç¥ã£ãŠãããšããæ¹ãããã£ããããããããŸããã å®éã® OpenAPI ã®å®çŸ©ã¯ä»¥äžã®ãããªåœ¢ã«ãªããŸãã openapi : 3.0.2 info : { title : OpenAPI Sample , version : 1.0.0 } paths : "/users/{user_id}" : get : parameters : - name : user_id in : path required : true schema : { type : string } responses : "200" : description : OK content : application/json : schema : type : object properties : id : { type : string } name : { type : string } age : { type : integer , nullable : true } required : [ id , name , age ] "404" : description : Not Found "500" : description : Internal Server Error äŸãšããŠãŠãŒã¶ãŒ ID ãããŠãŒã¶ãŒã®ããŒã¿ãååŸãã API ãèšè¿°ããŠã¿ãŸããã äžèšã®å®çŸ©ãèŠããšã GET: /users/{user_id} ãšãããšã³ããã€ã³ãããã ãŠãŒã¶ãŒã® ID ( user_id ) ã string ã§ãã©ã¡ãŒã¿ãšããŠãã¹ã®äžã«åã蟌ã ã¬ã¹ãã³ã¹ã¯ 200, 404, 500 ãè¿ã£ãŠããå¯èœæ§ããã ãšãã£ãããšãèªã¿åããããšæããŸãã ãŸããã¬ã¹ãã³ã¹ã¯ä»¥äžã®ãã㪠JSON ãè¿ã£ãŠããããšãã¹ããŒãããèªã¿åãããšãã§ããŸãã { "id" : "12345678-1234-1234-1234-123456789abc" , "name" : "user name" , "age" : 25 } ããã§ã¯ OpenAPI ã®èšè¿°ã®ä»æ¹ã«ã€ããŠããŸãæ·±ãè§ŠããŸãããããã®ä»ã«ãããŒã¿ã®ãã©ãŒããããçç¥ãããå Žåã®ããã©ã«ãå€ãªã©ã®èšè¿°ãªã©ãå¯èœã§ãã ãã詳ãã㯠ãã¡ã ãåèã«ããŠã¿ãŠãã ããã ããããããŸã䜿ãããšã§ããæ£ç¢ºã« API ã®ä»æ§ãèšè¿°ããããšãã§ããŸãã Protocol Buffers Protocol Buffers ã¯äž»ã« gRPC ã§çšããããããŒã¿ã®ã·ãªã¢ã©ã€ãŒãŒã·ã§ã³åœ¢åŒã§ãã å°çšã®ã¹ããŒãèšèªãçšããŠããŒã¿ã®æ§é ã RPC ã®ã¡ãœããã®å®çŸ©ã .proto ãã¡ã€ã«ã«èšè¿°ããŠãããŸãã å®éã® .proto ãã¡ã€ã«ã¯ä»¥äžã®ãããªåœ¢ã«ãªããŸãã syntax = "proto3" ; package example.protobuf ; service UserService { rpc GetUser ( GetUserRequest ) returns ( GetUserResponse ); } message GetUserRequest { string id = 1 ; } message GetUserResponse { User user = 1 ; } message User { string id = 1 ; string name = 2 ; int32 age = 3 ; } å°ãç¬ç¹ãªèŠãç®ãããŠããŸããã message ãšããŠæ§é äœã®ãããªããŒã¿æ§é ãå®çŸ©ãããŠããããšãèŠãŠåãããšæããŸãã åã¡ãã»ãŒãžã«ã¯ãã£ãŒã«ããå®çŸ©ãããŠãããåãšãã£ãŒã«ãåã宣èšãããŠããŸãã ã¹ããŒãèšèªã䜿ãã¡ãªãã ã¹ããŒãã¯ããã¥ã¡ã³ãã®ä»£ãããšããŠäœ¿ããã ãã§ãªããä»ã«ãããã€ã䜿ãéãããã®ã§ç޹ä»ããŠããããšæããŸãã ã¹ããŒããããœãŒã¹ã³ãŒããèªåçæã§ãã ã¹ããŒãèšèªã«ããèšè¿°ã¯äººéã«ãšã£ãŠèªã¿ãããã ãã§ãªãæ©æ¢°çã«åŠçã§ãã圢åŒã§ãããã®ã§ãã¹ããŒããããœãŒã¹ã³ãŒããèªåçæããããšãå¯èœã§ãã ããã°ã©ãã³ã°èšèªã䜿ã£ãŠãããã¬ãŒã ã¯ãŒã¯ã«ãããããµãŒããŒåŽã§ã¯ãªã¯ãšã¹ãã®ããªããŒã·ã§ã³ãããŸãã¯ã©ã€ã¢ã³ãåŽã§ã¯ã¬ã¹ãã³ã¹ã® JSON ãã¯ã©ã¹ãæ§é äœã«è©°ãããããªåŠçãæžãããšãå€ãã®ã§ã¯ãªãã§ããããã äºåã«ã¹ããŒãå®çŸ©ãæžããŠããå Žåã¯ã¹ããŒããèŠãªãããããã£ãã³ãŒããæžãèµ·ãããŠããããšã«ãªãã®ã§ããããã£ãã machine-readable ãªåœ¢ã®ã¹ããŒããããã®ã ããèªåã§ã³ãŒããçæããããªãã®ãèªç¶ãªèãã§ãããã èªåã§çæããŠããŸãã°å®åã®ã³ãŒããæžãæéãæžãããã ãã§ãªããææžããããšã©ãããŠãèµ·ãããã¡ãª JSON ã®ããŒåãééãããšãã£ããã¹ãé²ãããšãã§ããŸãã ãŸããWeb, iOS, Android ãªã©ã®è€æ°ãã©ãããã©ãŒã ã§ãµãŒãã¹ãå±éããŠããå Žåã§ããããããã®å®è£
ãä¹é¢ããªãããã«ç®¡çããŠããããšã容æã§ãã gRPC ã®å Žå㯠Protocol Buffers ãããœãŒã¹ã³ãŒããçæããã®ãã»ãŒåæãšãªã£ãŠããŸãã protoc ã³ãã³ããå©çšãããš .proto ãã¡ã€ã«ããåèšèªã®ãµãŒããŒã»ã¯ã©ã€ã¢ã³ãã³ãŒããçæããããšãã§ããŸãã OpenAPI ã®å Žåã openapi-generator ã swagger-codegen ãªã©ã®ããŒã«ãå©çšããããšã§åçš®èšèªã®ã³ãŒããèªåçæãå¯èœã§ãã openapi-generator ã swagger-codegen ã«ã¯å€ãã®èšèªãšãã¬ãŒã ã¯ãŒã¯ã®ãµãŒããŒã¹ã¿ããš API ã¯ã©ã€ã¢ã³ãã®ãžã§ãã¬ãŒã¿ãçšæãããŠããŸãã æ¢åã®ãžã§ãã¬ãŒã¿ã䜿ãã ãã§ãååã«åŒ·åãªã®ã§ãããããã«èªåã§ã³ãŒããžã§ãã¬ãŒã¿ãæžãã°ãããžã§ã¯ãåºæã®ã«ãŒã«ã§ã³ãŒããçæãããšãã£ãããšãå¯èœã§ãã OpenAPI ã®ããã¥ã¡ã³ãèªäœã¯ãã ã® YAML/JSON ãªã®ã§ãããŒã¹ããŠã¹ããŒãå®çŸ©ãååž°çã«èªãã§ããã°ã³ãŒãçæã«å¿
èŠãªæ
å ±ãéããããšãã§ããŸãã Protocol Buffers ããã³ãŒããçæããå Žå㯠protoc ã®ãã©ã°ã€ã³ãæžã ã®ãç°¡åã§ãªã¹ã¹ã¡ã§ãã ã¢ãã¯ãµãŒããŒã䜿ã£ãŠã¯ã©ã€ã¢ã³ãéçºãé²ãããã ã³ãŒãã®èªåçæã®ä»ã«ãã¹ããŒãããã¢ãã¯ãµãŒããç«ã¡äžãããšãã£ãæŽ»çšæ¹æ³ããããŸãã Prism ã®ãããªã¹ããŒãå®çŸ©ããåºå®ã®ããŒã¿ãè¿ãã¢ãã¯ãµãŒããç«ã¡äžããããŒã«ãå©çšããã°ãã¯ã©ã€ã¢ã³ãåŽã®éçºããããããªããŸãã ç¹ã«ããã³ããšã³ããšããã¯ãšã³ãã§æ
åœãåãããŠãããããªå Žåã¯ãéçºåæã¯ã¢ãã¯ãµãŒããŒã䜿ã£ãŠéçºãå§ããããã¯ãšã³ãã®å®è£
ãã§ããŠããé ã«çµåãããšããæµããèžãããšã§ãããã³ããšã³ããããæ©ãã¿ã€ãã³ã°ããéçºã«çæããããšãã§ããããã«ãªããŸãã å®éã« Prism ã䜿ã£ãŠã¢ãã¯ãµãŒããŒãç«ã¡äžãããšãããªæãã«ãªããŸãã ã¹ããŒããã¡ãŒã¹ãéçº ãã®ãããªéçºã¹ã¿ã€ã«ã¯ã¹ããŒããã¡ãŒã¹ãéçºã»ã¹ããŒãé§åéçºãªã©ãšåŒã°ããŠããŸãã æç¢ºãªå®çŸ©ãåºå
žãããããã§ã¯ãªãã®ã§ãããã¹ããŒããã¡ãŒã¹ããªéçºã¯ä»¥äžã®ãããªéçºã¹ã¿ã€ã«å
šè¬ãæããŠããŸãã ã¹ããŒãã¯å®è£
èšèªã«ãããªã machine-readable ãªåœ¢ã§èšè¿°ãã ããã¥ã¡ã³ããã¹ããŒãããèªåçæãã ã¯ã©ã€ã¢ã³ã/ãµãŒããŒã®ã³ãŒããã¹ããŒãããèªåçæãã å®éã«ã¹ããŒããã¡ãŒã¹ããªéçºãå®è·µããããã«ã¯ã¹ããŒããã¡ã³ããã³ã¹ããã¢ãããŒã·ã§ã³ãé«ãä¿ã€å¿
èŠããããŸãã ã³ãŒããæžããäžã§ã¹ããŒããæžããªããããªããšãªããšããããã¹ããŒããæŽæ°ãããªããªã£ãŠããã®ã§ãå¯èœãªéãã¹ããŒãããã³ãŒããçæããåªåãå¿
èŠã«ãªããŸãã äžæ¹ãããŸãå®è·µããã°ã¹ããŒããšãã圢㧠100% ä¿¡é Œã§ãã API ããã¥ã¡ã³ããæã«å
¥ããã¯ã©ã€ã¢ã³ã/ãµãŒããŒéã§ã®éœéœ¬ãæžãããã®ã§ãå®è·µããŠã¿ã䟡å€ã¯ããã®ã§ã¯ãªãããšæããŸãã ãŸãšã ä»å㯠CLINICS ã¢ããªã®éçºã§ã®ã¹ããŒãèšèªã®æŽ»çšäŸã«ã€ããŠç޹ä»ããŸããã å®éã«éçºã®äžã§ã¹ããŒãèšèªã䜿ãããšã§ API 仿§ã«ã€ããŠææ¡ããåŽåãæžãããšã³ãžãã¢éã®ã³ãã¥ãã±ãŒã·ã§ã³ãåãããããªã£ããšæããŠããŸãã ãŸããäžéšã®ã¯ã©ã€ã¢ã³ãã³ãŒã㯠OpenAPI ã Protocol Buffers ããèªåçæããŠããã®ã§ãããããªãæéãçãããšåæã«äººéã®æã§æžããšèµ·ãããã¡ãªãã¹ãé²ãããšãã§ããŠããŸãã OpenAPI ã§ããã°æ¢åã® REST API ã®ä»æ§ãæžãèµ·ãããšãããã䜿ãå§ããããã®ã§ãèå³ã®ããæ¹ã¯ãã²äžåºŠäœ¿ã£ãŠã¿ãŠã¯ãããã§ããããã æåŸã« ã€ã³ãã¥ããŒã·ã§ã³æ¬éš ã§ã¯ãå»çãã«ã¹ã±ã¢ã®æªæ¥ããã€ããæ°èŠäºæ¥ã®ç«ã¡äžãã«ææŠããŠããŸãããããªç§ãã¡ãšäžç·ã«åããŠã¿ãããšæã£ãæ¹ã¯ããã²ä»¥äžã®æ¡çšæ
å ±ããã§ãã¯ããŠã¿ãŠãã ããã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ããã«ã¡ã¯ãã€ã³ãã¥ããŒã·ã§ã³æ¬éšãšã³ãžãã¢ã®å è€ã§ãã 䞻㫠CLINICS ã¢ã㪠ã®éçºãæ
åœããŠããŸãã ã¯ããã« CLINICS ã¢ããªã®éçºã§ã¯ OpenAPI ã gRPC ãå©çšããŠããŸãã OpenAPI ãš gRPC ã®éã«ã¯äœã®é¢ä¿ããªãã®ã§ãããã©ã¡ãã API ã®ä»æ§ãã¹ããŒãèšèªã§èšè¿°ãããšããç¹ã§ã¯å
±éããŠããŸãã ä»åã¯ãã® API ã¹ããŒããéçºã«ããããã¡ãªããã«ã€ããŠç޹ä»ããŠããããšæããŸãã API ããã¥ã¡ã³ããšããŠã®ã¹ããŒãå®çŸ© æ¢åã®ã³ãŒãã«æ©èœã远å ããéãä¿®æ£ãå ããéã«æ°ã«ããããšã®å€ãéšå㯠API ã®ä»æ§ã§ã¯ãªãããšæããŸãã ããªã¯ãšã¹ããã¬ã¹ãã³ã¹ã¯ã©ã®ãããªããŒã¿ãªã®ããããã®å€ã¯å¿
é ãªã®ããä»»æãªã®ãããããŒã¿ã®åã¯æ°å€ãªã®ããæååãªã®ããããã©ãŒãããã¯æ±ºãŸã£ãŠããã®ãããªã©ãå€ãã®ããšãææ¡ããå¿
èŠããããŸãã ãããããããã£ã API 仿§ã®ããã¥ã¡ã³ããæŽåãããŠããªããšããããšãå€ãã®ã§ã¯ãªãã§ããããã ãŸããããã¥ã¡ã³ãã¯ããããã©ãªã¯ãšã¹ããšã¬ã¹ãã³ã¹ã®ãµã³ãã« JSON ã貌ã£ãŠããã ãã ã£ãããæéãçµã€ãã¡ã«å®è£
ãšããã¥ã¡ã³ããä¹é¢ããŠããŸãã¢ãã«ãªããªããªã£ãŠããŸã£ãŠããå ŽåããããŸãã åèã«ã§ããããã¥ã¡ã³ãããªãå Žåã¯ãçŽæ¥ããã¯ãšã³ãã®å®è£
ãèŠã«è¡ãããšãããã®ã§ãããç®çã®ã³ãŒããæ¢ãåºããŠèªã¿è§£ãã®ã¯æå€ãšæéãããããŸãã ç¹ã«èªå以å€ã®ãšã³ãžãã¢ãå®è£
ããæ©èœã®å ŽåãAPI ã®ä»æ§ãå®è£
ããçŽè§£ãã®ã¯ããªã骚ãæããäœæ¥ã§ãã CLINICS ã¢ããªã®éçºã§ã¯ãããã£ãæéãæžããããã« OpenAPI ã gRPC ãå©çšããŠããŸãã REST API ã®ã¹ããŒã㯠OpenAPI ã䜿ã£ãŠèšè¿°ããŠããŸãã gRPC ãå©çšããŠããéšå㯠Protocol Buffers ã§ RPC ã®ã€ã³ã¿ãŒãã§ãŒã¹ãèšè¿°ããããããããã API ã®ã¹ããŒãã«ãªã£ãŠããŸãã OpenAPI ã Protocol Buffers ã®å®çŸ©ãåç
§ããããšã§ API ã®ä»æ§ã容æã«ææ¡ã§ãããããéåžžã«äŸ¿å©ã§ãã OpenAPI ã Protocol Buffers ãªã©ã®ã¹ããŒãèšèªã®è¯ãç¹ã¯ã宣èšç㪠DSL ã§ã¹ããŒããå®çŸ©ã§ããç¹ã§ãã å®è£
èšèªã«äŸåããªã圢ã§ã®èšè¿°ãã§ããèªç¶èšèªã®ãããªææ§ãããªãããããæ£ç¢ºã« API 仿§ãèšè¿°ããããšãã§ããŸãã ãããã㯠OpenAPI ã Protocol Buffers ã®å®éã«èšè¿°äŸãæããªãããã©ããã£ã圢ã§ã¹ããŒããèšè¿°ããŠããã®ãç°¡åã«èŠãŠãããããšæããŸãã OpenAPI OpenAPI 㯠REST API ã®ã€ã³ã¿ãŒãã§ãŒã¹ãèšè¿°ãã仿§ã§ãã ãšã³ããã€ã³ãã®ãªã¯ãšã¹ããã©ã¡ãŒã¿ãã¬ã¹ãã³ã¹ã®æ§é ãªã©ã JSON ã YAML ã§èšè¿°ããŠããããšãã§ããŸãã ãã€ãŠã¯ Swagger ãšããåç§°ã ã£ãããããã¡ãã®ååã§ç¥ã£ãŠãããšããæ¹ãããã£ããããããããŸããã å®éã® OpenAPI ã®å®çŸ©ã¯ä»¥äžã®ãããªåœ¢ã«ãªããŸãã openapi : 3.0.2 info : { title : OpenAPI Sample , version : 1.0.0 } paths : "/users/{user_id}" : get : parameters : - name : user_id in : path required : true schema : { type : string } responses : "200" : description : OK content : application/json : schema : type : object properties : id : { type : string } name : { type : string } age : { type : integer , nullable : true } required : [ id , name , age ] "404" : description : Not Found "500" : description : Internal Server Error äŸãšããŠãŠãŒã¶ãŒ ID ãããŠãŒã¶ãŒã®ããŒã¿ãååŸãã API ãèšè¿°ããŠã¿ãŸããã äžèšã®å®çŸ©ãèŠããšã GET: /users/{user_id} ãšãããšã³ããã€ã³ãããã ãŠãŒã¶ãŒã® ID ( user_id ) ã string ã§ãã©ã¡ãŒã¿ãšããŠãã¹ã®äžã«åã蟌ã ã¬ã¹ãã³ã¹ã¯ 200, 404, 500 ãè¿ã£ãŠããå¯èœæ§ããã ãšãã£ãããšãèªã¿åããããšæããŸãã ãŸããã¬ã¹ãã³ã¹ã¯ä»¥äžã®ãã㪠JSON ãè¿ã£ãŠããããšãã¹ããŒãããèªã¿åãããšãã§ããŸãã { "id" : "12345678-1234-1234-1234-123456789abc" , "name" : "user name" , "age" : 25 } ããã§ã¯ OpenAPI ã®èšè¿°ã®ä»æ¹ã«ã€ããŠããŸãæ·±ãè§ŠããŸãããããã®ä»ã«ãããŒã¿ã®ãã©ãŒããããçç¥ãããå Žåã®ããã©ã«ãå€ãªã©ã®èšè¿°ãªã©ãå¯èœã§ãã ãã詳ãã㯠ãã¡ã ãåèã«ããŠã¿ãŠãã ããã ããããããŸã䜿ãããšã§ããæ£ç¢ºã« API ã®ä»æ§ãèšè¿°ããããšãã§ããŸãã Protocol Buffers Protocol Buffers ã¯äž»ã« gRPC ã§çšããããããŒã¿ã®ã·ãªã¢ã©ã€ãŒãŒã·ã§ã³åœ¢åŒã§ãã å°çšã®ã¹ããŒãèšèªãçšããŠããŒã¿ã®æ§é ã RPC ã®ã¡ãœããã®å®çŸ©ã .proto ãã¡ã€ã«ã«èšè¿°ããŠãããŸãã å®éã® .proto ãã¡ã€ã«ã¯ä»¥äžã®ãããªåœ¢ã«ãªããŸãã syntax = "proto3" ; package example.protobuf ; service UserService { rpc GetUser ( GetUserRequest ) returns ( GetUserResponse ); } message GetUserRequest { string id = 1 ; } message GetUserResponse { User user = 1 ; } message User { string id = 1 ; string name = 2 ; int32 age = 3 ; } å°ãç¬ç¹ãªèŠãç®ãããŠããŸããã message ãšããŠæ§é äœã®ãããªããŒã¿æ§é ãå®çŸ©ãããŠããããšãèŠãŠåãããšæããŸãã åã¡ãã»ãŒãžã«ã¯ãã£ãŒã«ããå®çŸ©ãããŠãããåãšãã£ãŒã«ãåã宣èšãããŠããŸãã ã¹ããŒãèšèªã䜿ãã¡ãªãã ã¹ããŒãã¯ããã¥ã¡ã³ãã®ä»£ãããšããŠäœ¿ããã ãã§ãªããä»ã«ãããã€ã䜿ãéãããã®ã§ç޹ä»ããŠããããšæããŸãã ã¹ããŒããããœãŒã¹ã³ãŒããèªåçæã§ãã ã¹ããŒãèšèªã«ããèšè¿°ã¯äººéã«ãšã£ãŠèªã¿ãããã ãã§ãªãæ©æ¢°çã«åŠçã§ãã圢åŒã§ãããã®ã§ãã¹ããŒããããœãŒã¹ã³ãŒããèªåçæããããšãå¯èœã§ãã ããã°ã©ãã³ã°èšèªã䜿ã£ãŠãããã¬ãŒã ã¯ãŒã¯ã«ãããããµãŒããŒåŽã§ã¯ãªã¯ãšã¹ãã®ããªããŒã·ã§ã³ãããŸãã¯ã©ã€ã¢ã³ãåŽã§ã¯ã¬ã¹ãã³ã¹ã® JSON ãã¯ã©ã¹ãæ§é äœã«è©°ãããããªåŠçãæžãããšãå€ãã®ã§ã¯ãªãã§ããããã äºåã«ã¹ããŒãå®çŸ©ãæžããŠããå Žåã¯ã¹ããŒããèŠãªãããããã£ãã³ãŒããæžãèµ·ãããŠããããšã«ãªãã®ã§ããããã£ãã machine-readable ãªåœ¢ã®ã¹ããŒããããã®ã ããèªåã§ã³ãŒããçæããããªãã®ãèªç¶ãªèãã§ãããã èªåã§çæããŠããŸãã°å®åã®ã³ãŒããæžãæéãæžãããã ãã§ãªããææžããããšã©ãããŠãèµ·ãããã¡ãª JSON ã®ããŒåãééãããšãã£ããã¹ãé²ãããšãã§ããŸãã ãŸããWeb, iOS, Android ãªã©ã®è€æ°ãã©ãããã©ãŒã ã§ãµãŒãã¹ãå±éããŠããå Žåã§ããããããã®å®è£
ãä¹é¢ããªãããã«ç®¡çããŠããããšã容æã§ãã gRPC ã®å Žå㯠Protocol Buffers ãããœãŒã¹ã³ãŒããçæããã®ãã»ãŒåæãšãªã£ãŠããŸãã protoc ã³ãã³ããå©çšãããš .proto ãã¡ã€ã«ããåèšèªã®ãµãŒããŒã»ã¯ã©ã€ã¢ã³ãã³ãŒããçæããããšãã§ããŸãã OpenAPI ã®å Žåã openapi-generator ã swagger-codegen ãªã©ã®ããŒã«ãå©çšããããšã§åçš®èšèªã®ã³ãŒããèªåçæãå¯èœã§ãã openapi-generator ã swagger-codegen ã«ã¯å€ãã®èšèªãšãã¬ãŒã ã¯ãŒã¯ã®ãµãŒããŒã¹ã¿ããš API ã¯ã©ã€ã¢ã³ãã®ãžã§ãã¬ãŒã¿ãçšæãããŠããŸãã æ¢åã®ãžã§ãã¬ãŒã¿ã䜿ãã ãã§ãååã«åŒ·åãªã®ã§ãããããã«èªåã§ã³ãŒããžã§ãã¬ãŒã¿ãæžãã°ãããžã§ã¯ãåºæã®ã«ãŒã«ã§ã³ãŒããçæãããšãã£ãããšãå¯èœã§ãã OpenAPI ã®ããã¥ã¡ã³ãèªäœã¯ãã ã® YAML/JSON ãªã®ã§ãããŒã¹ããŠã¹ããŒãå®çŸ©ãååž°çã«èªãã§ããã°ã³ãŒãçæã«å¿
èŠãªæ
å ±ãéããããšãã§ããŸãã Protocol Buffers ããã³ãŒããçæããå Žå㯠protoc ã®ãã©ã°ã€ã³ãæžã ã®ãç°¡åã§ãªã¹ã¹ã¡ã§ãã ã¢ãã¯ãµãŒããŒã䜿ã£ãŠã¯ã©ã€ã¢ã³ãéçºãé²ãããã ã³ãŒãã®èªåçæã®ä»ã«ãã¹ããŒãããã¢ãã¯ãµãŒããç«ã¡äžãããšãã£ãæŽ»çšæ¹æ³ããããŸãã Prism ã®ãããªã¹ããŒãå®çŸ©ããåºå®ã®ããŒã¿ãè¿ãã¢ãã¯ãµãŒããç«ã¡äžããããŒã«ãå©çšããã°ãã¯ã©ã€ã¢ã³ãåŽã®éçºããããããªããŸãã ç¹ã«ããã³ããšã³ããšããã¯ãšã³ãã§æ
åœãåãããŠãããããªå Žåã¯ãéçºåæã¯ã¢ãã¯ãµãŒããŒã䜿ã£ãŠéçºãå§ããããã¯ãšã³ãã®å®è£
ãã§ããŠããé ã«çµåãããšããæµããèžãããšã§ãããã³ããšã³ããããæ©ãã¿ã€ãã³ã°ããéçºã«çæããããšãã§ããããã«ãªããŸãã å®éã« Prism ã䜿ã£ãŠã¢ãã¯ãµãŒããŒãç«ã¡äžãããšãããªæãã«ãªããŸãã ã¹ããŒããã¡ãŒã¹ãéçº ãã®ãããªéçºã¹ã¿ã€ã«ã¯ã¹ããŒããã¡ãŒã¹ãéçºã»ã¹ããŒãé§åéçºãªã©ãšåŒã°ããŠããŸãã æç¢ºãªå®çŸ©ãåºå
žãããããã§ã¯ãªãã®ã§ãããã¹ããŒããã¡ãŒã¹ããªéçºã¯ä»¥äžã®ãããªéçºã¹ã¿ã€ã«å
šè¬ãæããŠããŸãã ã¹ããŒãã¯å®è£
èšèªã«ãããªã machine-readable ãªåœ¢ã§èšè¿°ãã ããã¥ã¡ã³ããã¹ããŒãããèªåçæãã ã¯ã©ã€ã¢ã³ã/ãµãŒããŒã®ã³ãŒããã¹ããŒãããèªåçæãã å®éã«ã¹ããŒããã¡ãŒã¹ããªéçºãå®è·µããããã«ã¯ã¹ããŒããã¡ã³ããã³ã¹ããã¢ãããŒã·ã§ã³ãé«ãä¿ã€å¿
èŠããããŸãã ã³ãŒããæžããäžã§ã¹ããŒããæžããªããããªããšãªããšããããã¹ããŒããæŽæ°ãããªããªã£ãŠããã®ã§ãå¯èœãªéãã¹ããŒãããã³ãŒããçæããåªåãå¿
èŠã«ãªããŸãã äžæ¹ãããŸãå®è·µããã°ã¹ããŒããšãã圢㧠100% ä¿¡é Œã§ãã API ããã¥ã¡ã³ããæã«å
¥ããã¯ã©ã€ã¢ã³ã/ãµãŒããŒéã§ã®éœéœ¬ãæžãããã®ã§ãå®è·µããŠã¿ã䟡å€ã¯ããã®ã§ã¯ãªãããšæããŸãã ãŸãšã ä»å㯠CLINICS ã¢ããªã®éçºã§ã®ã¹ããŒãèšèªã®æŽ»çšäŸã«ã€ããŠç޹ä»ããŸããã å®éã«éçºã®äžã§ã¹ããŒãèšèªã䜿ãããšã§ API 仿§ã«ã€ããŠææ¡ããåŽåãæžãããšã³ãžãã¢éã®ã³ãã¥ãã±ãŒã·ã§ã³ãåãããããªã£ããšæããŠããŸãã ãŸããäžéšã®ã¯ã©ã€ã¢ã³ãã³ãŒã㯠OpenAPI ã Protocol Buffers ããèªåçæããŠããã®ã§ãããããªãæéãçãããšåæã«äººéã®æã§æžããšèµ·ãããã¡ãªãã¹ãé²ãããšãã§ããŠããŸãã OpenAPI ã§ããã°æ¢åã® REST API ã®ä»æ§ãæžãèµ·ãããšãããã䜿ãå§ããããã®ã§ãèå³ã®ããæ¹ã¯ãã²äžåºŠäœ¿ã£ãŠã¿ãŠã¯ãããã§ããããã æåŸã« ã€ã³ãã¥ããŒã·ã§ã³æ¬éš ã§ã¯ãå»çãã«ã¹ã±ã¢ã®æªæ¥ããã€ããæ°èŠäºæ¥ã®ç«ã¡äžãã«ææŠããŠããŸãããããªç§ãã¡ãšäžç·ã«åããŠã¿ãããšæã£ãæ¹ã¯ããã²ä»¥äžã®æ¡çšæ
å ±ããã§ãã¯ããŠã¿ãŠãã ããã https://www.medley.jp/jobs/
ããã«ã¡ã¯ãã€ã³ãã¥ããŒã·ã§ã³æ¬éšãšã³ãžãã¢ã®å è€ã§ãã 䞻㫠CLINICS ã¢ã㪠ã®éçºãæ
åœããŠããŸãã ã¯ããã« CLINICS ã¢ããªã®éçºã§ã¯ OpenAPI ã gRPC ãå©çšããŠããŸãã OpenAPI ãš gRPC ã®éã«ã¯äœã®é¢ä¿ããªãã®ã§ãããã©ã¡ãã API ã®ä»æ§ãã¹ããŒãèšèªã§èšè¿°ãããšããç¹ã§ã¯å
±éããŠããŸãã ä»åã¯ãã® API ã¹ããŒããéçºã«ããããã¡ãªããã«ã€ããŠç޹ä»ããŠããããšæããŸãã API ããã¥ã¡ã³ããšããŠã®ã¹ããŒãå®çŸ© æ¢åã®ã³ãŒãã«æ©èœã远å ããéãä¿®æ£ãå ããéã«æ°ã«ããããšã®å€ãéšå㯠API ã®ä»æ§ã§ã¯ãªãããšæããŸãã ããªã¯ãšã¹ããã¬ã¹ãã³ã¹ã¯ã©ã®ãããªããŒã¿ãªã®ããããã®å€ã¯å¿
é ãªã®ããä»»æãªã®ãããããŒã¿ã®åã¯æ°å€ãªã®ããæååãªã®ããããã©ãŒãããã¯æ±ºãŸã£ãŠããã®ãããªã©ãå€ãã®ããšãææ¡ããå¿
èŠããããŸãã ãããããããã£ã API 仿§ã®ããã¥ã¡ã³ããæŽåãããŠããªããšããããšãå€ãã®ã§ã¯ãªãã§ããããã ãŸããããã¥ã¡ã³ãã¯ããããã©ãªã¯ãšã¹ããšã¬ã¹ãã³ã¹ã®ãµã³ãã« JSON ã貌ã£ãŠããã ãã ã£ãããæéãçµã€ãã¡ã«å®è£
ãšããã¥ã¡ã³ããä¹é¢ããŠããŸãã¢ãã«ãªããªããªã£ãŠããŸã£ãŠããå ŽåããããŸãã åèã«ã§ããããã¥ã¡ã³ãããªãå Žåã¯ãçŽæ¥ããã¯ãšã³ãã®å®è£
ãèŠã«è¡ãããšãããã®ã§ãããç®çã®ã³ãŒããæ¢ãåºããŠèªã¿è§£ãã®ã¯æå€ãšæéãããããŸãã ç¹ã«èªå以å€ã®ãšã³ãžãã¢ãå®è£
ããæ©èœã®å ŽåãAPI ã®ä»æ§ãå®è£
ããçŽè§£ãã®ã¯ããªã骚ãæããäœæ¥ã§ãã CLINICS ã¢ããªã®éçºã§ã¯ãããã£ãæéãæžããããã« OpenAPI ã gRPC ãå©çšããŠããŸãã REST API ã®ã¹ããŒã㯠OpenAPI ã䜿ã£ãŠèšè¿°ããŠããŸãã gRPC ãå©çšããŠããéšå㯠Protocol Buffers ã§ RPC ã®ã€ã³ã¿ãŒãã§ãŒã¹ãèšè¿°ããããããããã API ã®ã¹ããŒãã«ãªã£ãŠããŸãã OpenAPI ã Protocol Buffers ã®å®çŸ©ãåç
§ããããšã§ API ã®ä»æ§ã容æã«ææ¡ã§ãããããéåžžã«äŸ¿å©ã§ãã OpenAPI ã Protocol Buffers ãªã©ã®ã¹ããŒãèšèªã®è¯ãç¹ã¯ã宣èšç㪠DSL ã§ã¹ããŒããå®çŸ©ã§ããç¹ã§ãã å®è£
èšèªã«äŸåããªã圢ã§ã®èšè¿°ãã§ããèªç¶èšèªã®ãããªææ§ãããªãããããæ£ç¢ºã« API 仿§ãèšè¿°ããããšãã§ããŸãã ãããã㯠OpenAPI ã Protocol Buffers ã®å®éã«èšè¿°äŸãæããªãããã©ããã£ã圢ã§ã¹ããŒããèšè¿°ããŠããã®ãç°¡åã«èŠãŠãããããšæããŸãã OpenAPI OpenAPI 㯠REST API ã®ã€ã³ã¿ãŒãã§ãŒã¹ãèšè¿°ãã仿§ã§ãã ãšã³ããã€ã³ãã®ãªã¯ãšã¹ããã©ã¡ãŒã¿ãã¬ã¹ãã³ã¹ã®æ§é ãªã©ã JSON ã YAML ã§èšè¿°ããŠããããšãã§ããŸãã ãã€ãŠã¯ Swagger ãšããåç§°ã ã£ãããããã¡ãã®ååã§ç¥ã£ãŠãããšããæ¹ãããã£ããããããããŸããã å®éã® OpenAPI ã®å®çŸ©ã¯ä»¥äžã®ãããªåœ¢ã«ãªããŸãã openapi : 3.0.2 info : { title : OpenAPI Sample , version : 1.0.0 } paths : "/users/{user_id}" : get : parameters : - name : user_id in : path required : true schema : { type : string } responses : "200" : description : OK content : application/json : schema : type : object properties : id : { type : string } name : { type : string } age : { type : integer , nullable : true } required : [ id , name , age ] "404" : description : Not Found "500" : description : Internal Server Error äŸãšããŠãŠãŒã¶ãŒ ID ãããŠãŒã¶ãŒã®ããŒã¿ãååŸãã API ãèšè¿°ããŠã¿ãŸããã äžèšã®å®çŸ©ãèŠããšã GET: /users/{user_id} ãšãããšã³ããã€ã³ãããã ãŠãŒã¶ãŒã® ID ( user_id ) ã string ã§ãã©ã¡ãŒã¿ãšããŠãã¹ã®äžã«åã蟌ã ã¬ã¹ãã³ã¹ã¯ 200, 404, 500 ãè¿ã£ãŠããå¯èœæ§ããã ãšãã£ãããšãèªã¿åããããšæããŸãã ãŸããã¬ã¹ãã³ã¹ã¯ä»¥äžã®ãã㪠JSON ãè¿ã£ãŠããããšãã¹ããŒãããèªã¿åãããšãã§ããŸãã { "id" : "12345678-1234-1234-1234-123456789abc" , "name" : "user name" , "age" : 25 } ããã§ã¯ OpenAPI ã®èšè¿°ã®ä»æ¹ã«ã€ããŠããŸãæ·±ãè§ŠããŸãããããã®ä»ã«ãããŒã¿ã®ãã©ãŒããããçç¥ãããå Žåã®ããã©ã«ãå€ãªã©ã®èšè¿°ãªã©ãå¯èœã§ãã ãã詳ãã㯠ãã¡ã ãåèã«ããŠã¿ãŠãã ããã ããããããŸã䜿ãããšã§ããæ£ç¢ºã« API ã®ä»æ§ãèšè¿°ããããšãã§ããŸãã Protocol Buffers Protocol Buffers ã¯äž»ã« gRPC ã§çšããããããŒã¿ã®ã·ãªã¢ã©ã€ãŒãŒã·ã§ã³åœ¢åŒã§ãã å°çšã®ã¹ããŒãèšèªãçšããŠããŒã¿ã®æ§é ã RPC ã®ã¡ãœããã®å®çŸ©ã .proto ãã¡ã€ã«ã«èšè¿°ããŠãããŸãã å®éã® .proto ãã¡ã€ã«ã¯ä»¥äžã®ãããªåœ¢ã«ãªããŸãã syntax = "proto3" ; package example.protobuf ; service UserService { rpc GetUser ( GetUserRequest ) returns ( GetUserResponse ); } message GetUserRequest { string id = 1 ; } message GetUserResponse { User user = 1 ; } message User { string id = 1 ; string name = 2 ; int32 age = 3 ; } å°ãç¬ç¹ãªèŠãç®ãããŠããŸããã message ãšããŠæ§é äœã®ãããªããŒã¿æ§é ãå®çŸ©ãããŠããããšãèŠãŠåãããšæããŸãã åã¡ãã»ãŒãžã«ã¯ãã£ãŒã«ããå®çŸ©ãããŠãããåãšãã£ãŒã«ãåã宣èšãããŠããŸãã ã¹ããŒãèšèªã䜿ãã¡ãªãã ã¹ããŒãã¯ããã¥ã¡ã³ãã®ä»£ãããšããŠäœ¿ããã ãã§ãªããä»ã«ãããã€ã䜿ãéãããã®ã§ç޹ä»ããŠããããšæããŸãã ã¹ããŒããããœãŒã¹ã³ãŒããèªåçæã§ãã ã¹ããŒãèšèªã«ããèšè¿°ã¯äººéã«ãšã£ãŠèªã¿ãããã ãã§ãªãæ©æ¢°çã«åŠçã§ãã圢åŒã§ãããã®ã§ãã¹ããŒããããœãŒã¹ã³ãŒããèªåçæããããšãå¯èœã§ãã ããã°ã©ãã³ã°èšèªã䜿ã£ãŠãããã¬ãŒã ã¯ãŒã¯ã«ãããããµãŒããŒåŽã§ã¯ãªã¯ãšã¹ãã®ããªããŒã·ã§ã³ãããŸãã¯ã©ã€ã¢ã³ãåŽã§ã¯ã¬ã¹ãã³ã¹ã® JSON ãã¯ã©ã¹ãæ§é äœã«è©°ãããããªåŠçãæžãããšãå€ãã®ã§ã¯ãªãã§ããããã äºåã«ã¹ããŒãå®çŸ©ãæžããŠããå Žåã¯ã¹ããŒããèŠãªãããããã£ãã³ãŒããæžãèµ·ãããŠããããšã«ãªãã®ã§ããããã£ãã machine-readable ãªåœ¢ã®ã¹ããŒããããã®ã ããèªåã§ã³ãŒããçæããããªãã®ãèªç¶ãªèãã§ãããã èªåã§çæããŠããŸãã°å®åã®ã³ãŒããæžãæéãæžãããã ãã§ãªããææžããããšã©ãããŠãèµ·ãããã¡ãª JSON ã®ããŒåãééãããšãã£ããã¹ãé²ãããšãã§ããŸãã ãŸããWeb, iOS, Android ãªã©ã®è€æ°ãã©ãããã©ãŒã ã§ãµãŒãã¹ãå±éããŠããå Žåã§ããããããã®å®è£
ãä¹é¢ããªãããã«ç®¡çããŠããããšã容æã§ãã gRPC ã®å Žå㯠Protocol Buffers ãããœãŒã¹ã³ãŒããçæããã®ãã»ãŒåæãšãªã£ãŠããŸãã protoc ã³ãã³ããå©çšãããš .proto ãã¡ã€ã«ããåèšèªã®ãµãŒããŒã»ã¯ã©ã€ã¢ã³ãã³ãŒããçæããããšãã§ããŸãã OpenAPI ã®å Žåã openapi-generator ã swagger-codegen ãªã©ã®ããŒã«ãå©çšããããšã§åçš®èšèªã®ã³ãŒããèªåçæãå¯èœã§ãã openapi-generator ã swagger-codegen ã«ã¯å€ãã®èšèªãšãã¬ãŒã ã¯ãŒã¯ã®ãµãŒããŒã¹ã¿ããš API ã¯ã©ã€ã¢ã³ãã®ãžã§ãã¬ãŒã¿ãçšæãããŠããŸãã æ¢åã®ãžã§ãã¬ãŒã¿ã䜿ãã ãã§ãååã«åŒ·åãªã®ã§ãããããã«èªåã§ã³ãŒããžã§ãã¬ãŒã¿ãæžãã°ãããžã§ã¯ãåºæã®ã«ãŒã«ã§ã³ãŒããçæãããšãã£ãããšãå¯èœã§ãã OpenAPI ã®ããã¥ã¡ã³ãèªäœã¯ãã ã® YAML/JSON ãªã®ã§ãããŒã¹ããŠã¹ããŒãå®çŸ©ãååž°çã«èªãã§ããã°ã³ãŒãçæã«å¿
èŠãªæ
å ±ãéããããšãã§ããŸãã Protocol Buffers ããã³ãŒããçæããå Žå㯠protoc ã®ãã©ã°ã€ã³ãæžã ã®ãç°¡åã§ãªã¹ã¹ã¡ã§ãã ã¢ãã¯ãµãŒããŒã䜿ã£ãŠã¯ã©ã€ã¢ã³ãéçºãé²ãããã ã³ãŒãã®èªåçæã®ä»ã«ãã¹ããŒãããã¢ãã¯ãµãŒããç«ã¡äžãããšãã£ãæŽ»çšæ¹æ³ããããŸãã Prism ã®ãããªã¹ããŒãå®çŸ©ããåºå®ã®ããŒã¿ãè¿ãã¢ãã¯ãµãŒããç«ã¡äžããããŒã«ãå©çšããã°ãã¯ã©ã€ã¢ã³ãåŽã®éçºããããããªããŸãã ç¹ã«ããã³ããšã³ããšããã¯ãšã³ãã§æ
åœãåãããŠãããããªå Žåã¯ãéçºåæã¯ã¢ãã¯ãµãŒããŒã䜿ã£ãŠéçºãå§ããããã¯ãšã³ãã®å®è£
ãã§ããŠããé ã«çµåãããšããæµããèžãããšã§ãããã³ããšã³ããããæ©ãã¿ã€ãã³ã°ããéçºã«çæããããšãã§ããããã«ãªããŸãã å®éã« Prism ã䜿ã£ãŠã¢ãã¯ãµãŒããŒãç«ã¡äžãããšãããªæãã«ãªããŸãã ã¹ããŒããã¡ãŒã¹ãéçº ãã®ãããªéçºã¹ã¿ã€ã«ã¯ã¹ããŒããã¡ãŒã¹ãéçºã»ã¹ããŒãé§åéçºãªã©ãšåŒã°ããŠããŸãã æç¢ºãªå®çŸ©ãåºå
žãããããã§ã¯ãªãã®ã§ãããã¹ããŒããã¡ãŒã¹ããªéçºã¯ä»¥äžã®ãããªéçºã¹ã¿ã€ã«å
šè¬ãæããŠããŸãã ã¹ããŒãã¯å®è£
èšèªã«ãããªã machine-readable ãªåœ¢ã§èšè¿°ãã ããã¥ã¡ã³ããã¹ããŒãããèªåçæãã ã¯ã©ã€ã¢ã³ã/ãµãŒããŒã®ã³ãŒããã¹ããŒãããèªåçæãã å®éã«ã¹ããŒããã¡ãŒã¹ããªéçºãå®è·µããããã«ã¯ã¹ããŒããã¡ã³ããã³ã¹ããã¢ãããŒã·ã§ã³ãé«ãä¿ã€å¿
èŠããããŸãã ã³ãŒããæžããäžã§ã¹ããŒããæžããªããããªããšãªããšããããã¹ããŒããæŽæ°ãããªããªã£ãŠããã®ã§ãå¯èœãªéãã¹ããŒãããã³ãŒããçæããåªåãå¿
èŠã«ãªããŸãã äžæ¹ãããŸãå®è·µããã°ã¹ããŒããšãã圢㧠100% ä¿¡é Œã§ãã API ããã¥ã¡ã³ããæã«å
¥ããã¯ã©ã€ã¢ã³ã/ãµãŒããŒéã§ã®éœéœ¬ãæžãããã®ã§ãå®è·µããŠã¿ã䟡å€ã¯ããã®ã§ã¯ãªãããšæããŸãã ãŸãšã ä»å㯠CLINICS ã¢ããªã®éçºã§ã®ã¹ããŒãèšèªã®æŽ»çšäŸã«ã€ããŠç޹ä»ããŸããã å®éã«éçºã®äžã§ã¹ããŒãèšèªã䜿ãããšã§ API 仿§ã«ã€ããŠææ¡ããåŽåãæžãããšã³ãžãã¢éã®ã³ãã¥ãã±ãŒã·ã§ã³ãåãããããªã£ããšæããŠããŸãã ãŸããäžéšã®ã¯ã©ã€ã¢ã³ãã³ãŒã㯠OpenAPI ã Protocol Buffers ããèªåçæããŠããã®ã§ãããããªãæéãçãããšåæã«äººéã®æã§æžããšèµ·ãããã¡ãªãã¹ãé²ãããšãã§ããŠããŸãã OpenAPI ã§ããã°æ¢åã® REST API ã®ä»æ§ãæžãèµ·ãããšãããã䜿ãå§ããããã®ã§ãèå³ã®ããæ¹ã¯ãã²äžåºŠäœ¿ã£ãŠã¿ãŠã¯ãããã§ããããã æåŸã« ã€ã³ãã¥ããŒã·ã§ã³æ¬éš ã§ã¯ãå»çãã«ã¹ã±ã¢ã®æªæ¥ããã€ããæ°èŠäºæ¥ã®ç«ã¡äžãã«ææŠããŠããŸãããããªç§ãã¡ãšäžç·ã«åããŠã¿ãããšæã£ãæ¹ã¯ããã²ä»¥äžã®æ¡çšæ
å ±ããã§ãã¯ããŠã¿ãŠãã ããã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ããã«ã¡ã¯ã19 æ°åã®æ¡¶è°·ã§ããçŸåšã¯ CLINICS ã§æ€æ»åšãã®éçºãæ
åœããŠããŸãã æè¿ã¯ãç§èªèº«ãåºç€çŸæ£æã¡ãšããããšããããç€ŸäŒæ
å¢ãèæ
®ããŠãã«ãªã¢ãŒãã§æ¥åã«å€ããã§ããŸãããªã³ã©ã€ã³ã³ãã¥ãã±ãŒã·ã§ã³ã¯å¯Ÿé¢ãšæ¯ã¹ãæèããªããã°ãªããªãç¹ãå€ããæ
£ããå¿
èŠã§ãããšæ¥ã
æããŠããŸããå°ãã§ã察é¢ã«è¿ãç°å¢ãå®çŸããããã«ãäžçŒã¬ãã«ã¡ã©ã Web ã«ã¡ã©ãšããŠä»£çšãããããã€ãããã¯ãã€ã¯ã䜿çšããŠã¯ãªã¢ãªé³å£°ãå±ããããããã«äœæ¥ç°å¢ã®æ¹åã«åãçµãã§ããŸãã ä»å㯠CLINICS éçºããŒã ã§èª²é¡ãšãªã£ãŠããããªã³ããŒãã£ã³ã°ããã£ããã¢ããã«æéããããåé¡ãã解決ããããã«è¡ã£ããæšªè»žã®åãçµã¿ã«ã€ããŠç޹ä»ããŸãã ã¯ããã« CLINICS éçºããŒã ã§ã¯ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã ã CLINICS ãã®æ©èœãšããŠäž»ã«é»åã«ã«ãããªã³ã©ã€ã³èšºçãäºçŽã·ã¹ãã ãªã©ã®æ©èœã®éçºãè¡ã£ãŠããŸããå»çã·ã¹ãã ã®éçºã«ãããŠå»çæ¥åç¥èã¯å¿
èŠäžå¯æ¬ ã§ãããäŸãã°ãäŒèšãããæ€æ»ããšãã£ãå»çæ©é¢ã§è¡ãããæ¥åã«é¢ããçè§£ãèŠæ±ãããŸãããã®ãããåã
ãæ¥ã
ãã£ããã¢ããã«å€ããã§ããäžæ¹ãã²ãšã€ã²ãšã€ã®æ¥åãè€éã§ããããã«ãè€æ°ã®æ©èœã暪æãããããã¯ãçè§£ãå
šäœææ¡ãé£ãã課é¡ããããŸãããããã§ããã®åé¡ã解決ããã¹ããæšªè»žå匷äŒããšé¡ããŠãCLINICS ã®ãã¡ã€ã³ç¥èå
±æäŒãè¡ãããšã«ããŸããã ãã¡ã€ã³ç¥èå
±æäŒã®æŠèŠ ãã¡ã€ã³ç¥èå
±æäŒã¯åã
ãæºãã£ãäžã§èç©ããŠããæ¥åç¥èãéçºã®èæ¯ãå
±æããäŒã§ããæ¬äŒã¯æ¯é± 1 æéãããã¯ã«æ²¿ã£ãŠãªã³ã©ã€ã³(Google Meet)ã§å®æœããŸããããããããããã¯ãçºè¡šè
ããã¡ã·ãªããŒã¿ãŒãæå®ããçºè¡šè
ã«ã¯ç°¡åãªè³æãçšæããŠããããŸããå ããŠåå è
ã«ã¯ä»¥äžã®ããšãæèããŠããããŸããã çºè¡šè
ã¯å¯Ÿè©±åã®çºè¡šãæèããã©ãããªé°å²æ°ãã€ãã åå è
ã¯ãã£ãããçšããŠæã£ãããšãã€ã¶ãã åãããã¯ã¯å»çã·ã¹ãã ãéçºããäžã§å¿
èŠãªãã¡ã€ã³ç¥èãåãå£ãšããŠãæè¡å¯ãã®å
容ãšãªã£ãŠããŸããçºè¡šè
ã«ãã£ãŠã¯å匷äŒåŸã®å®¿é¡ãçšæãããããããããã®æ¬ç޹ä»ããã£ãããšå€çš®å€æ§ã§ããçºè¡šåœ¢åŒããããŠå®ããªãããšã§ãååããšã«çºè¡šè
ã®åæ§ãåºããšããã®ãé¢çœã¿ã®äžã€ã ãšæããŸããç¹ã«å®¿é¡ããã£ãåã§ã¯ãåŸæ¥ã«ãã£ãŒãããã¯äŒãèšãããç¥èã®å®çã«ç¹ãããŸããã å®éã«è¡ã£ãããã㯠å®éã®æ§å ãã¡ã€ã³ç¥èå
±æäŒãçµã㊠ä»åãã¡ã€ã³ç¥èå
±æäŒãéããŠãæ©èœã®å®è£
èæ¯ãæŠèŠãå¹
åºãç¥ãããšãã§ããŸããããäŒèšæ¥åã®è€éããããåä»ãã蚺å¯ãŸã§ã®åç·èšèšããªã©ã®ãããŸã§ã¯å
±æããæ©äŒããªãã£ãåã
ãæã£ãŠããç¥èã»ç¥èŠãåŠã¶ããšãã§ããããŒã å
šäœã§ãã¡ã€ã³ç¥èã«é¢ããèªèåãããããè¯ãæ©äŒãšãªããŸããã æåŸã«å匷äŒã®æ¯ãè¿ããè¡ã£ããšããã以äžã®ãããªæèŠããããŸããã ãã¡ã€ã³ç¥èå
±æäŒãéããŠããŒã åãäžãã£ãŠããŠãã åéãããŠããç¥èãèšæ£ã§ãã çžäºçè§£ãæ·±ãŸãããŒã å
šäœãšããŠã³ãã¥ãã±ãŒã·ã§ã³ã®ããŒãã«ãäžããããšãã§ãã åå°éé åã«é¢ããããã¥ã¡ã³ããäžç®æã«ãŸãšããããšãã§ãã ããžãã£ããªæèŠãå€ããåãçµã¿ã®çµæãšããŠããŒã ã®åºç€ååäžã«ãç¹ãã£ããšæããŠããŸããå ããŠããã¡ã€ã³ç¥èå
±æäŒçšã«äœæããè³æã¯ããã¥ã¡ã³ããšããŠæ®ãããããªã³ããŒãã£ã³ã°è³æãªã©ã«æŽ»çšãã§ãããã§ããããããªããã以äžã®ãããªåé¡ããããŸãã çºè¡šè
ã®æºåã³ã¹ããé«ã æŠèŠèª¬æã§çµãã£ãŠããŸã峿¥æ¥åã§äœ¿çšã§ããå
容ã§ã¯ãªã åŠãã ããšãæ·±å ãã§ããŠããªãããç¥èã®å®çã«ç¹ãããªã äžèšã«ã€ããŠã¯ãäŸãã°çºè¡šè
ã 2 人ãã¢ã«ããŠæºåã³ã¹ãã忣ããããã宿é¡ãåºããŠæ¬¡åã«ãã£ãŒãããã¯ãããéçºããŒã 以å€ãæ°è»œã«åå ãã§ããããã«ã©ã€ããªãããã¯ã远å ãããªã©ãä»åŸã®ãã¡ã€ã³ç¥èå
±æäŒã®ãªãã§æ¹åããŠãããããšæããŸãã ãããã« ä»å㯠CLINICS éçºããŒã ã§è¡ã£ã暪軞ã®åãçµã¿ã«ã€ããŠç޹ä»ãããŠããã ããŸããã æšªè»žã§ãäºãããã©ããŒããããããªãæ
å ±å
±æã®å Žããäœãããšã§ãããè¯ãçµç¹ã«ãªã£ãŠãããšæããŠããŸããä»åŸãããã«ãããã¯ãã®æ©èœãå¢ãããšãšãã«äºæ¥éšå
šäœãšããŠãé¢ããã¡ã³ããŒãå¢ãããããæšªè»žã§ã®ç¥èå
±æã®ä»çµã¿ã¯äºæ¥éšãå«ããŠå¿
èŠã§ãããšèããŠããŸããéçºããŒã ã«éããã«ããããã¯ãã«é¢ããã¡ã³ããŒãå·»ã蟌ã¿ãçµç¹ã³ãã¥ãã±ãŒã·ã§ã³ã®æ¹åãç¶ããŠããããã§ãã æåŸãŸã§ãèªã¿ããã ãããããšãããããŸããã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ããã«ã¡ã¯ã19 æ°åã®æ¡¶è°·ã§ããçŸåšã¯ CLINICS ã§æ€æ»åšãã®éçºãæ
åœããŠããŸãã æè¿ã¯ãç§èªèº«ãåºç€çŸæ£æã¡ãšããããšããããç€ŸäŒæ
å¢ãèæ
®ããŠãã«ãªã¢ãŒãã§æ¥åã«å€ããã§ããŸãããªã³ã©ã€ã³ã³ãã¥ãã±ãŒã·ã§ã³ã¯å¯Ÿé¢ãšæ¯ã¹ãæèããªããã°ãªããªãç¹ãå€ããæ
£ããå¿
èŠã§ãããšæ¥ã
æããŠããŸããå°ãã§ã察é¢ã«è¿ãç°å¢ãå®çŸããããã«ãäžçŒã¬ãã«ã¡ã©ã Web ã«ã¡ã©ãšããŠä»£çšãããããã€ãããã¯ãã€ã¯ã䜿çšããŠã¯ãªã¢ãªé³å£°ãå±ããããããã«äœæ¥ç°å¢ã®æ¹åã«åãçµãã§ããŸãã ä»å㯠CLINICS éçºããŒã ã§èª²é¡ãšãªã£ãŠããããªã³ããŒãã£ã³ã°ããã£ããã¢ããã«æéããããåé¡ãã解決ããããã«è¡ã£ããæšªè»žã®åãçµã¿ã«ã€ããŠç޹ä»ããŸãã ã¯ããã« CLINICS éçºããŒã ã§ã¯ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã ã CLINICS ãã®æ©èœãšããŠäž»ã«é»åã«ã«ãããªã³ã©ã€ã³èšºçãäºçŽã·ã¹ãã ãªã©ã®æ©èœã®éçºãè¡ã£ãŠããŸããå»çã·ã¹ãã ã®éçºã«ãããŠå»çæ¥åç¥èã¯å¿
èŠäžå¯æ¬ ã§ãããäŸãã°ãäŒèšãããæ€æ»ããšãã£ãå»çæ©é¢ã§è¡ãããæ¥åã«é¢ããçè§£ãèŠæ±ãããŸãããã®ãããåã
ãæ¥ã
ãã£ããã¢ããã«å€ããã§ããäžæ¹ãã²ãšã€ã²ãšã€ã®æ¥åãè€éã§ããããã«ãè€æ°ã®æ©èœã暪æãããããã¯ãçè§£ãå
šäœææ¡ãé£ãã課é¡ããããŸãããããã§ããã®åé¡ã解決ããã¹ããæšªè»žå匷äŒããšé¡ããŠãCLINICS ã®ãã¡ã€ã³ç¥èå
±æäŒãè¡ãããšã«ããŸããã ãã¡ã€ã³ç¥èå
±æäŒã®æŠèŠ ãã¡ã€ã³ç¥èå
±æäŒã¯åã
ãæºãã£ãäžã§èç©ããŠããæ¥åç¥èãéçºã®èæ¯ãå
±æããäŒã§ããæ¬äŒã¯æ¯é± 1 æéãããã¯ã«æ²¿ã£ãŠãªã³ã©ã€ã³(Google Meet)ã§å®æœããŸããããããããããã¯ãçºè¡šè
ããã¡ã·ãªããŒã¿ãŒãæå®ããçºè¡šè
ã«ã¯ç°¡åãªè³æãçšæããŠããããŸããå ããŠåå è
ã«ã¯ä»¥äžã®ããšãæèããŠããããŸããã çºè¡šè
ã¯å¯Ÿè©±åã®çºè¡šãæèããã©ãããªé°å²æ°ãã€ãã åå è
ã¯ãã£ãããçšããŠæã£ãããšãã€ã¶ãã åãããã¯ã¯å»çã·ã¹ãã ãéçºããäžã§å¿
èŠãªãã¡ã€ã³ç¥èãåãå£ãšããŠãæè¡å¯ãã®å
容ãšãªã£ãŠããŸããçºè¡šè
ã«ãã£ãŠã¯å匷äŒåŸã®å®¿é¡ãçšæãããããããããã®æ¬ç޹ä»ããã£ãããšå€çš®å€æ§ã§ããçºè¡šåœ¢åŒããããŠå®ããªãããšã§ãååããšã«çºè¡šè
ã®åæ§ãåºããšããã®ãé¢çœã¿ã®äžã€ã ãšæããŸããç¹ã«å®¿é¡ããã£ãåã§ã¯ãåŸæ¥ã«ãã£ãŒãããã¯äŒãèšãããç¥èã®å®çã«ç¹ãããŸããã å®éã«è¡ã£ãããã㯠å®éã®æ§å ãã¡ã€ã³ç¥èå
±æäŒãçµã㊠ä»åãã¡ã€ã³ç¥èå
±æäŒãéããŠãæ©èœã®å®è£
èæ¯ãæŠèŠãå¹
åºãç¥ãããšãã§ããŸããããäŒèšæ¥åã®è€éããããåä»ãã蚺å¯ãŸã§ã®åç·èšèšããªã©ã®ãããŸã§ã¯å
±æããæ©äŒããªãã£ãåã
ãæã£ãŠããç¥èã»ç¥èŠãåŠã¶ããšãã§ããããŒã å
šäœã§ãã¡ã€ã³ç¥èã«é¢ããèªèåãããããè¯ãæ©äŒãšãªããŸããã æåŸã«å匷äŒã®æ¯ãè¿ããè¡ã£ããšããã以äžã®ãããªæèŠããããŸããã ãã¡ã€ã³ç¥èå
±æäŒãéããŠããŒã åãäžãã£ãŠããŠãã åéãããŠããç¥èãèšæ£ã§ãã çžäºçè§£ãæ·±ãŸãããŒã å
šäœãšããŠã³ãã¥ãã±ãŒã·ã§ã³ã®ããŒãã«ãäžããããšãã§ãã åå°éé åã«é¢ããããã¥ã¡ã³ããäžç®æã«ãŸãšããããšãã§ãã ããžãã£ããªæèŠãå€ããåãçµã¿ã®çµæãšããŠããŒã ã®åºç€ååäžã«ãç¹ãã£ããšæããŠããŸããå ããŠããã¡ã€ã³ç¥èå
±æäŒçšã«äœæããè³æã¯ããã¥ã¡ã³ããšããŠæ®ãããããªã³ããŒãã£ã³ã°è³æãªã©ã«æŽ»çšãã§ãããã§ããããããªããã以äžã®ãããªåé¡ããããŸãã çºè¡šè
ã®æºåã³ã¹ããé«ã æŠèŠèª¬æã§çµãã£ãŠããŸã峿¥æ¥åã§äœ¿çšã§ããå
容ã§ã¯ãªã åŠãã ããšãæ·±å ãã§ããŠããªãããç¥èã®å®çã«ç¹ãããªã äžèšã«ã€ããŠã¯ãäŸãã°çºè¡šè
ã 2 人ãã¢ã«ããŠæºåã³ã¹ãã忣ããããã宿é¡ãåºããŠæ¬¡åã«ãã£ãŒãããã¯ãããéçºããŒã 以å€ãæ°è»œã«åå ãã§ããããã«ã©ã€ããªãããã¯ã远å ãããªã©ãä»åŸã®ãã¡ã€ã³ç¥èå
±æäŒã®ãªãã§æ¹åããŠãããããšæããŸãã ãããã« ä»å㯠CLINICS éçºããŒã ã§è¡ã£ã暪軞ã®åãçµã¿ã«ã€ããŠç޹ä»ãããŠããã ããŸããã æšªè»žã§ãäºãããã©ããŒããããããªãæ
å ±å
±æã®å Žããäœãããšã§ãããè¯ãçµç¹ã«ãªã£ãŠãããšæããŠããŸããä»åŸãããã«ãããã¯ãã®æ©èœãå¢ãããšãšãã«äºæ¥éšå
šäœãšããŠãé¢ããã¡ã³ããŒãå¢ãããããæšªè»žã§ã®ç¥èå
±æã®ä»çµã¿ã¯äºæ¥éšãå«ããŠå¿
èŠã§ãããšèããŠããŸããéçºããŒã ã«éããã«ããããã¯ãã«é¢ããã¡ã³ããŒãå·»ã蟌ã¿ãçµç¹ã³ãã¥ãã±ãŒã·ã§ã³ã®æ¹åãç¶ããŠããããã§ãã æåŸãŸã§ãèªã¿ããã ãããããšãããããŸããã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ããã«ã¡ã¯ã19 æ°åã®æ¡¶è°·ã§ããçŸåšã¯ CLINICS ã§æ€æ»åšãã®éçºãæ
åœããŠããŸãã æè¿ã¯ãç§èªèº«ãåºç€çŸæ£æã¡ãšããããšããããç€ŸäŒæ
å¢ãèæ
®ããŠãã«ãªã¢ãŒãã§æ¥åã«å€ããã§ããŸãããªã³ã©ã€ã³ã³ãã¥ãã±ãŒã·ã§ã³ã¯å¯Ÿé¢ãšæ¯ã¹ãæèããªããã°ãªããªãç¹ãå€ããæ
£ããå¿
èŠã§ãããšæ¥ã
æããŠããŸããå°ãã§ã察é¢ã«è¿ãç°å¢ãå®çŸããããã«ãäžçŒã¬ãã«ã¡ã©ã Web ã«ã¡ã©ãšããŠä»£çšãããããã€ãããã¯ãã€ã¯ã䜿çšããŠã¯ãªã¢ãªé³å£°ãå±ããããããã«äœæ¥ç°å¢ã®æ¹åã«åãçµãã§ããŸãã ä»å㯠CLINICS éçºããŒã ã§èª²é¡ãšãªã£ãŠããããªã³ããŒãã£ã³ã°ããã£ããã¢ããã«æéããããåé¡ãã解決ããããã«è¡ã£ããæšªè»žã®åãçµã¿ã«ã€ããŠç޹ä»ããŸãã ã¯ããã« CLINICS éçºããŒã ã§ã¯ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã ã CLINICS ãã®æ©èœãšããŠäž»ã«é»åã«ã«ãããªã³ã©ã€ã³èšºçãäºçŽã·ã¹ãã ãªã©ã®æ©èœã®éçºãè¡ã£ãŠããŸããå»çã·ã¹ãã ã®éçºã«ãããŠå»çæ¥åç¥èã¯å¿
èŠäžå¯æ¬ ã§ãããäŸãã°ãäŒèšãããæ€æ»ããšãã£ãå»çæ©é¢ã§è¡ãããæ¥åã«é¢ããçè§£ãèŠæ±ãããŸãããã®ãããåã
ãæ¥ã
ãã£ããã¢ããã«å€ããã§ããäžæ¹ãã²ãšã€ã²ãšã€ã®æ¥åãè€éã§ããããã«ãè€æ°ã®æ©èœã暪æãããããã¯ãçè§£ãå
šäœææ¡ãé£ãã課é¡ããããŸãããããã§ããã®åé¡ã解決ããã¹ããæšªè»žå匷äŒããšé¡ããŠãCLINICS ã®ãã¡ã€ã³ç¥èå
±æäŒãè¡ãããšã«ããŸããã ãã¡ã€ã³ç¥èå
±æäŒã®æŠèŠ ãã¡ã€ã³ç¥èå
±æäŒã¯åã
ãæºãã£ãäžã§èç©ããŠããæ¥åç¥èãéçºã®èæ¯ãå
±æããäŒã§ããæ¬äŒã¯æ¯é± 1 æéãããã¯ã«æ²¿ã£ãŠãªã³ã©ã€ã³(Google Meet)ã§å®æœããŸããããããããããã¯ãçºè¡šè
ããã¡ã·ãªããŒã¿ãŒãæå®ããçºè¡šè
ã«ã¯ç°¡åãªè³æãçšæããŠããããŸããå ããŠåå è
ã«ã¯ä»¥äžã®ããšãæèããŠããããŸããã çºè¡šè
ã¯å¯Ÿè©±åã®çºè¡šãæèããã©ãããªé°å²æ°ãã€ãã åå è
ã¯ãã£ãããçšããŠæã£ãããšãã€ã¶ãã åãããã¯ã¯å»çã·ã¹ãã ãéçºããäžã§å¿
èŠãªãã¡ã€ã³ç¥èãåãå£ãšããŠãæè¡å¯ãã®å
容ãšãªã£ãŠããŸããçºè¡šè
ã«ãã£ãŠã¯å匷äŒåŸã®å®¿é¡ãçšæãããããããããã®æ¬ç޹ä»ããã£ãããšå€çš®å€æ§ã§ããçºè¡šåœ¢åŒããããŠå®ããªãããšã§ãååããšã«çºè¡šè
ã®åæ§ãåºããšããã®ãé¢çœã¿ã®äžã€ã ãšæããŸããç¹ã«å®¿é¡ããã£ãåã§ã¯ãåŸæ¥ã«ãã£ãŒãããã¯äŒãèšãããç¥èã®å®çã«ç¹ãããŸããã å®éã«è¡ã£ãããã㯠å®éã®æ§å ãã¡ã€ã³ç¥èå
±æäŒãçµã㊠ä»åãã¡ã€ã³ç¥èå
±æäŒãéããŠãæ©èœã®å®è£
èæ¯ãæŠèŠãå¹
åºãç¥ãããšãã§ããŸããããäŒèšæ¥åã®è€éããããåä»ãã蚺å¯ãŸã§ã®åç·èšèšããªã©ã®ãããŸã§ã¯å
±æããæ©äŒããªãã£ãåã
ãæã£ãŠããç¥èã»ç¥èŠãåŠã¶ããšãã§ããããŒã å
šäœã§ãã¡ã€ã³ç¥èã«é¢ããèªèåãããããè¯ãæ©äŒãšãªããŸããã æåŸã«å匷äŒã®æ¯ãè¿ããè¡ã£ããšããã以äžã®ãããªæèŠããããŸããã ãã¡ã€ã³ç¥èå
±æäŒãéããŠããŒã åãäžãã£ãŠããŠãã åéãããŠããç¥èãèšæ£ã§ãã çžäºçè§£ãæ·±ãŸãããŒã å
šäœãšããŠã³ãã¥ãã±ãŒã·ã§ã³ã®ããŒãã«ãäžããããšãã§ãã åå°éé åã«é¢ããããã¥ã¡ã³ããäžç®æã«ãŸãšããããšãã§ãã ããžãã£ããªæèŠãå€ããåãçµã¿ã®çµæãšããŠããŒã ã®åºç€ååäžã«ãç¹ãã£ããšæããŠããŸããå ããŠããã¡ã€ã³ç¥èå
±æäŒçšã«äœæããè³æã¯ããã¥ã¡ã³ããšããŠæ®ãããããªã³ããŒãã£ã³ã°è³æãªã©ã«æŽ»çšãã§ãããã§ããããããªããã以äžã®ãããªåé¡ããããŸãã çºè¡šè
ã®æºåã³ã¹ããé«ã æŠèŠèª¬æã§çµãã£ãŠããŸã峿¥æ¥åã§äœ¿çšã§ããå
容ã§ã¯ãªã åŠãã ããšãæ·±å ãã§ããŠããªãããç¥èã®å®çã«ç¹ãããªã äžèšã«ã€ããŠã¯ãäŸãã°çºè¡šè
ã 2 人ãã¢ã«ããŠæºåã³ã¹ãã忣ããããã宿é¡ãåºããŠæ¬¡åã«ãã£ãŒãããã¯ãããéçºããŒã 以å€ãæ°è»œã«åå ãã§ããããã«ã©ã€ããªãããã¯ã远å ãããªã©ãä»åŸã®ãã¡ã€ã³ç¥èå
±æäŒã®ãªãã§æ¹åããŠãããããšæããŸãã ãããã« ä»å㯠CLINICS éçºããŒã ã§è¡ã£ã暪軞ã®åãçµã¿ã«ã€ããŠç޹ä»ãããŠããã ããŸããã æšªè»žã§ãäºãããã©ããŒããããããªãæ
å ±å
±æã®å Žããäœãããšã§ãããè¯ãçµç¹ã«ãªã£ãŠãããšæããŠããŸããä»åŸãããã«ãããã¯ãã®æ©èœãå¢ãããšãšãã«äºæ¥éšå
šäœãšããŠãé¢ããã¡ã³ããŒãå¢ãããããæšªè»žã§ã®ç¥èå
±æã®ä»çµã¿ã¯äºæ¥éšãå«ããŠå¿
èŠã§ãããšèããŠããŸããéçºããŒã ã«éããã«ããããã¯ãã«é¢ããã¡ã³ããŒãå·»ã蟌ã¿ãçµç¹ã³ãã¥ãã±ãŒã·ã§ã³ã®æ¹åãç¶ããŠããããã§ãã æåŸãŸã§ãèªã¿ããã ãããããšãããããŸããã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ããã«ã¡ã¯ã19 æ°åã®æ¡¶è°·ã§ããçŸåšã¯ CLINICS ã§æ€æ»åšãã®éçºãæ
åœããŠããŸãã æè¿ã¯ãç§èªèº«ãåºç€çŸæ£æã¡ãšããããšããããç€ŸäŒæ
å¢ãèæ
®ããŠãã«ãªã¢ãŒãã§æ¥åã«å€ããã§ããŸãããªã³ã©ã€ã³ã³ãã¥ãã±ãŒã·ã§ã³ã¯å¯Ÿé¢ãšæ¯ã¹ãæèããªããã°ãªããªãç¹ãå€ããæ
£ããå¿
èŠã§ãããšæ¥ã
æããŠããŸããå°ãã§ã察é¢ã«è¿ãç°å¢ãå®çŸããããã«ãäžçŒã¬ãã«ã¡ã©ã Web ã«ã¡ã©ãšããŠä»£çšãããããã€ãããã¯ãã€ã¯ã䜿çšããŠã¯ãªã¢ãªé³å£°ãå±ããããããã«äœæ¥ç°å¢ã®æ¹åã«åãçµãã§ããŸãã ä»å㯠CLINICS éçºããŒã ã§èª²é¡ãšãªã£ãŠããããªã³ããŒãã£ã³ã°ããã£ããã¢ããã«æéããããåé¡ãã解決ããããã«è¡ã£ããæšªè»žã®åãçµã¿ã«ã€ããŠç޹ä»ããŸãã ã¯ããã« CLINICS éçºããŒã ã§ã¯ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã ã CLINICS ãã®æ©èœãšããŠäž»ã«é»åã«ã«ãããªã³ã©ã€ã³èšºçãäºçŽã·ã¹ãã ãªã©ã®æ©èœã®éçºãè¡ã£ãŠããŸããå»çã·ã¹ãã ã®éçºã«ãããŠå»çæ¥åç¥èã¯å¿
èŠäžå¯æ¬ ã§ãããäŸãã°ãäŒèšãããæ€æ»ããšãã£ãå»çæ©é¢ã§è¡ãããæ¥åã«é¢ããçè§£ãèŠæ±ãããŸãããã®ãããåã
ãæ¥ã
ãã£ããã¢ããã«å€ããã§ããäžæ¹ãã²ãšã€ã²ãšã€ã®æ¥åãè€éã§ããããã«ãè€æ°ã®æ©èœã暪æãããããã¯ãçè§£ãå
šäœææ¡ãé£ãã課é¡ããããŸãããããã§ããã®åé¡ã解決ããã¹ããæšªè»žå匷äŒããšé¡ããŠãCLINICS ã®ãã¡ã€ã³ç¥èå
±æäŒãè¡ãããšã«ããŸããã ãã¡ã€ã³ç¥èå
±æäŒã®æŠèŠ ãã¡ã€ã³ç¥èå
±æäŒã¯åã
ãæºãã£ãäžã§èç©ããŠããæ¥åç¥èãéçºã®èæ¯ãå
±æããäŒã§ããæ¬äŒã¯æ¯é± 1 æéãããã¯ã«æ²¿ã£ãŠãªã³ã©ã€ã³(Google Meet)ã§å®æœããŸããããããããããã¯ãçºè¡šè
ããã¡ã·ãªããŒã¿ãŒãæå®ããçºè¡šè
ã«ã¯ç°¡åãªè³æãçšæããŠããããŸããå ããŠåå è
ã«ã¯ä»¥äžã®ããšãæèããŠããããŸããã çºè¡šè
ã¯å¯Ÿè©±åã®çºè¡šãæèããã©ãããªé°å²æ°ãã€ãã åå è
ã¯ãã£ãããçšããŠæã£ãããšãã€ã¶ãã åãããã¯ã¯å»çã·ã¹ãã ãéçºããäžã§å¿
èŠãªãã¡ã€ã³ç¥èãåãå£ãšããŠãæè¡å¯ãã®å
容ãšãªã£ãŠããŸããçºè¡šè
ã«ãã£ãŠã¯å匷äŒåŸã®å®¿é¡ãçšæãããããããããã®æ¬ç޹ä»ããã£ãããšå€çš®å€æ§ã§ããçºè¡šåœ¢åŒããããŠå®ããªãããšã§ãååããšã«çºè¡šè
ã®åæ§ãåºããšããã®ãé¢çœã¿ã®äžã€ã ãšæããŸããç¹ã«å®¿é¡ããã£ãåã§ã¯ãåŸæ¥ã«ãã£ãŒãããã¯äŒãèšãããç¥èã®å®çã«ç¹ãããŸããã å®éã«è¡ã£ãããã㯠å®éã®æ§å ãã¡ã€ã³ç¥èå
±æäŒãçµã㊠ä»åãã¡ã€ã³ç¥èå
±æäŒãéããŠãæ©èœã®å®è£
èæ¯ãæŠèŠãå¹
åºãç¥ãããšãã§ããŸããããäŒèšæ¥åã®è€éããããåä»ãã蚺å¯ãŸã§ã®åç·èšèšããªã©ã®ãããŸã§ã¯å
±æããæ©äŒããªãã£ãåã
ãæã£ãŠããç¥èã»ç¥èŠãåŠã¶ããšãã§ããããŒã å
šäœã§ãã¡ã€ã³ç¥èã«é¢ããèªèåãããããè¯ãæ©äŒãšãªããŸããã æåŸã«å匷äŒã®æ¯ãè¿ããè¡ã£ããšããã以äžã®ãããªæèŠããããŸããã ãã¡ã€ã³ç¥èå
±æäŒãéããŠããŒã åãäžãã£ãŠããŠãã åéãããŠããç¥èãèšæ£ã§ãã çžäºçè§£ãæ·±ãŸãããŒã å
šäœãšããŠã³ãã¥ãã±ãŒã·ã§ã³ã®ããŒãã«ãäžããããšãã§ãã åå°éé åã«é¢ããããã¥ã¡ã³ããäžç®æã«ãŸãšããããšãã§ãã ããžãã£ããªæèŠãå€ããåãçµã¿ã®çµæãšããŠããŒã ã®åºç€ååäžã«ãç¹ãã£ããšæããŠããŸããå ããŠããã¡ã€ã³ç¥èå
±æäŒçšã«äœæããè³æã¯ããã¥ã¡ã³ããšããŠæ®ãããããªã³ããŒãã£ã³ã°è³æãªã©ã«æŽ»çšãã§ãããã§ããããããªããã以äžã®ãããªåé¡ããããŸãã çºè¡šè
ã®æºåã³ã¹ããé«ã æŠèŠèª¬æã§çµãã£ãŠããŸã峿¥æ¥åã§äœ¿çšã§ããå
容ã§ã¯ãªã åŠãã ããšãæ·±å ãã§ããŠããªãããç¥èã®å®çã«ç¹ãããªã äžèšã«ã€ããŠã¯ãäŸãã°çºè¡šè
ã 2 人ãã¢ã«ããŠæºåã³ã¹ãã忣ããããã宿é¡ãåºããŠæ¬¡åã«ãã£ãŒãããã¯ãããéçºããŒã 以å€ãæ°è»œã«åå ãã§ããããã«ã©ã€ããªãããã¯ã远å ãããªã©ãä»åŸã®ãã¡ã€ã³ç¥èå
±æäŒã®ãªãã§æ¹åããŠãããããšæããŸãã ãããã« ä»å㯠CLINICS éçºããŒã ã§è¡ã£ã暪軞ã®åãçµã¿ã«ã€ããŠç޹ä»ãããŠããã ããŸããã æšªè»žã§ãäºãããã©ããŒããããããªãæ
å ±å
±æã®å Žããäœãããšã§ãããè¯ãçµç¹ã«ãªã£ãŠãããšæããŠããŸããä»åŸãããã«ãããã¯ãã®æ©èœãå¢ãããšãšãã«äºæ¥éšå
šäœãšããŠãé¢ããã¡ã³ããŒãå¢ãããããæšªè»žã§ã®ç¥èå
±æã®ä»çµã¿ã¯äºæ¥éšãå«ããŠå¿
èŠã§ãããšèããŠããŸããéçºããŒã ã«éããã«ããããã¯ãã«é¢ããã¡ã³ããŒãå·»ã蟌ã¿ãçµç¹ã³ãã¥ãã±ãŒã·ã§ã³ã®æ¹åãç¶ããŠããããã§ãã æåŸãŸã§ãèªã¿ããã ãããããšãããããŸããã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ããã«ã¡ã¯ã19 æ°åã®æ¡¶è°·ã§ããçŸåšã¯ CLINICS ã§æ€æ»åšãã®éçºãæ
åœããŠããŸãã æè¿ã¯ãç§èªèº«ãåºç€çŸæ£æã¡ãšããããšããããç€ŸäŒæ
å¢ãèæ
®ããŠãã«ãªã¢ãŒãã§æ¥åã«å€ããã§ããŸãããªã³ã©ã€ã³ã³ãã¥ãã±ãŒã·ã§ã³ã¯å¯Ÿé¢ãšæ¯ã¹ãæèããªããã°ãªããªãç¹ãå€ããæ
£ããå¿
èŠã§ãããšæ¥ã
æããŠããŸããå°ãã§ã察é¢ã«è¿ãç°å¢ãå®çŸããããã«ãäžçŒã¬ãã«ã¡ã©ã Web ã«ã¡ã©ãšããŠä»£çšãããããã€ãããã¯ãã€ã¯ã䜿çšããŠã¯ãªã¢ãªé³å£°ãå±ããããããã«äœæ¥ç°å¢ã®æ¹åã«åãçµãã§ããŸãã ä»å㯠CLINICS éçºããŒã ã§èª²é¡ãšãªã£ãŠããããªã³ããŒãã£ã³ã°ããã£ããã¢ããã«æéããããåé¡ãã解決ããããã«è¡ã£ããæšªè»žã®åãçµã¿ã«ã€ããŠç޹ä»ããŸãã ã¯ããã« CLINICS éçºããŒã ã§ã¯ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã ã CLINICS ãã®æ©èœãšããŠäž»ã«é»åã«ã«ãããªã³ã©ã€ã³èšºçãäºçŽã·ã¹ãã ãªã©ã®æ©èœã®éçºãè¡ã£ãŠããŸããå»çã·ã¹ãã ã®éçºã«ãããŠå»çæ¥åç¥èã¯å¿
èŠäžå¯æ¬ ã§ãããäŸãã°ãäŒèšãããæ€æ»ããšãã£ãå»çæ©é¢ã§è¡ãããæ¥åã«é¢ããçè§£ãèŠæ±ãããŸãããã®ãããåã
ãæ¥ã
ãã£ããã¢ããã«å€ããã§ããäžæ¹ãã²ãšã€ã²ãšã€ã®æ¥åãè€éã§ããããã«ãè€æ°ã®æ©èœã暪æãããããã¯ãçè§£ãå
šäœææ¡ãé£ãã課é¡ããããŸãããããã§ããã®åé¡ã解決ããã¹ããæšªè»žå匷äŒããšé¡ããŠãCLINICS ã®ãã¡ã€ã³ç¥èå
±æäŒãè¡ãããšã«ããŸããã ãã¡ã€ã³ç¥èå
±æäŒã®æŠèŠ ãã¡ã€ã³ç¥èå
±æäŒã¯åã
ãæºãã£ãäžã§èç©ããŠããæ¥åç¥èãéçºã®èæ¯ãå
±æããäŒã§ããæ¬äŒã¯æ¯é± 1 æéãããã¯ã«æ²¿ã£ãŠãªã³ã©ã€ã³(Google Meet)ã§å®æœããŸããããããããããã¯ãçºè¡šè
ããã¡ã·ãªããŒã¿ãŒãæå®ããçºè¡šè
ã«ã¯ç°¡åãªè³æãçšæããŠããããŸããå ããŠåå è
ã«ã¯ä»¥äžã®ããšãæèããŠããããŸããã çºè¡šè
ã¯å¯Ÿè©±åã®çºè¡šãæèããã©ãããªé°å²æ°ãã€ãã åå è
ã¯ãã£ãããçšããŠæã£ãããšãã€ã¶ãã åãããã¯ã¯å»çã·ã¹ãã ãéçºããäžã§å¿
èŠãªãã¡ã€ã³ç¥èãåãå£ãšããŠãæè¡å¯ãã®å
容ãšãªã£ãŠããŸããçºè¡šè
ã«ãã£ãŠã¯å匷äŒåŸã®å®¿é¡ãçšæãããããããããã®æ¬ç޹ä»ããã£ãããšå€çš®å€æ§ã§ããçºè¡šåœ¢åŒããããŠå®ããªãããšã§ãååããšã«çºè¡šè
ã®åæ§ãåºããšããã®ãé¢çœã¿ã®äžã€ã ãšæããŸããç¹ã«å®¿é¡ããã£ãåã§ã¯ãåŸæ¥ã«ãã£ãŒãããã¯äŒãèšãããç¥èã®å®çã«ç¹ãããŸããã å®éã«è¡ã£ãããã㯠å®éã®æ§å ãã¡ã€ã³ç¥èå
±æäŒãçµã㊠ä»åãã¡ã€ã³ç¥èå
±æäŒãéããŠãæ©èœã®å®è£
èæ¯ãæŠèŠãå¹
åºãç¥ãããšãã§ããŸããããäŒèšæ¥åã®è€éããããåä»ãã蚺å¯ãŸã§ã®åç·èšèšããªã©ã®ãããŸã§ã¯å
±æããæ©äŒããªãã£ãåã
ãæã£ãŠããç¥èã»ç¥èŠãåŠã¶ããšãã§ããããŒã å
šäœã§ãã¡ã€ã³ç¥èã«é¢ããèªèåãããããè¯ãæ©äŒãšãªããŸããã æåŸã«å匷äŒã®æ¯ãè¿ããè¡ã£ããšããã以äžã®ãããªæèŠããããŸããã ãã¡ã€ã³ç¥èå
±æäŒãéããŠããŒã åãäžãã£ãŠããŠãã åéãããŠããç¥èãèšæ£ã§ãã çžäºçè§£ãæ·±ãŸãããŒã å
šäœãšããŠã³ãã¥ãã±ãŒã·ã§ã³ã®ããŒãã«ãäžããããšãã§ãã åå°éé åã«é¢ããããã¥ã¡ã³ããäžç®æã«ãŸãšããããšãã§ãã ããžãã£ããªæèŠãå€ããåãçµã¿ã®çµæãšããŠããŒã ã®åºç€ååäžã«ãç¹ãã£ããšæããŠããŸããå ããŠããã¡ã€ã³ç¥èå
±æäŒçšã«äœæããè³æã¯ããã¥ã¡ã³ããšããŠæ®ãããããªã³ããŒãã£ã³ã°è³æãªã©ã«æŽ»çšãã§ãããã§ããããããªããã以äžã®ãããªåé¡ããããŸãã çºè¡šè
ã®æºåã³ã¹ããé«ã æŠèŠèª¬æã§çµãã£ãŠããŸã峿¥æ¥åã§äœ¿çšã§ããå
容ã§ã¯ãªã åŠãã ããšãæ·±å ãã§ããŠããªãããç¥èã®å®çã«ç¹ãããªã äžèšã«ã€ããŠã¯ãäŸãã°çºè¡šè
ã 2 人ãã¢ã«ããŠæºåã³ã¹ãã忣ããããã宿é¡ãåºããŠæ¬¡åã«ãã£ãŒãããã¯ãããéçºããŒã 以å€ãæ°è»œã«åå ãã§ããããã«ã©ã€ããªãããã¯ã远å ãããªã©ãä»åŸã®ãã¡ã€ã³ç¥èå
±æäŒã®ãªãã§æ¹åããŠãããããšæããŸãã ãããã« ä»å㯠CLINICS éçºããŒã ã§è¡ã£ã暪軞ã®åãçµã¿ã«ã€ããŠç޹ä»ãããŠããã ããŸããã æšªè»žã§ãäºãããã©ããŒããããããªãæ
å ±å
±æã®å Žããäœãããšã§ãããè¯ãçµç¹ã«ãªã£ãŠãããšæããŠããŸããä»åŸãããã«ãããã¯ãã®æ©èœãå¢ãããšãšãã«äºæ¥éšå
šäœãšããŠãé¢ããã¡ã³ããŒãå¢ãããããæšªè»žã§ã®ç¥èå
±æã®ä»çµã¿ã¯äºæ¥éšãå«ããŠå¿
èŠã§ãããšèããŠããŸããéçºããŒã ã«éããã«ããããã¯ãã«é¢ããã¡ã³ããŒãå·»ã蟌ã¿ãçµç¹ã³ãã¥ãã±ãŒã·ã§ã³ã®æ¹åãç¶ããŠããããã§ãã æåŸãŸã§ãèªã¿ããã ãããããšãããããŸããã https://www.medley.jp/jobs/
ããã«ã¡ã¯ã19 æ°åã®æ¡¶è°·ã§ããçŸåšã¯ CLINICS ã§æ€æ»åšãã®éçºãæ
åœããŠããŸãã æè¿ã¯ãç§èªèº«ãåºç€çŸæ£æã¡ãšããããšããããç€ŸäŒæ
å¢ãèæ
®ããŠãã«ãªã¢ãŒãã§æ¥åã«å€ããã§ããŸãããªã³ã©ã€ã³ã³ãã¥ãã±ãŒã·ã§ã³ã¯å¯Ÿé¢ãšæ¯ã¹ãæèããªããã°ãªããªãç¹ãå€ããæ
£ããå¿
èŠã§ãããšæ¥ã
æããŠããŸããå°ãã§ã察é¢ã«è¿ãç°å¢ãå®çŸããããã«ãäžçŒã¬ãã«ã¡ã©ã Web ã«ã¡ã©ãšããŠä»£çšãããããã€ãããã¯ãã€ã¯ã䜿çšããŠã¯ãªã¢ãªé³å£°ãå±ããããããã«äœæ¥ç°å¢ã®æ¹åã«åãçµãã§ããŸãã ä»å㯠CLINICS éçºããŒã ã§èª²é¡ãšãªã£ãŠããããªã³ããŒãã£ã³ã°ããã£ããã¢ããã«æéããããåé¡ãã解決ããããã«è¡ã£ããæšªè»žã®åãçµã¿ã«ã€ããŠç޹ä»ããŸãã ã¯ããã« CLINICS éçºããŒã ã§ã¯ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã ã CLINICS ãã®æ©èœãšããŠäž»ã«é»åã«ã«ãããªã³ã©ã€ã³èšºçãäºçŽã·ã¹ãã ãªã©ã®æ©èœã®éçºãè¡ã£ãŠããŸããå»çã·ã¹ãã ã®éçºã«ãããŠå»çæ¥åç¥èã¯å¿
èŠäžå¯æ¬ ã§ãããäŸãã°ãäŒèšãããæ€æ»ããšãã£ãå»çæ©é¢ã§è¡ãããæ¥åã«é¢ããçè§£ãèŠæ±ãããŸãããã®ãããåã
ãæ¥ã
ãã£ããã¢ããã«å€ããã§ããäžæ¹ãã²ãšã€ã²ãšã€ã®æ¥åãè€éã§ããããã«ãè€æ°ã®æ©èœã暪æãããããã¯ãçè§£ãå
šäœææ¡ãé£ãã課é¡ããããŸãããããã§ããã®åé¡ã解決ããã¹ããæšªè»žå匷äŒããšé¡ããŠãCLINICS ã®ãã¡ã€ã³ç¥èå
±æäŒãè¡ãããšã«ããŸããã ãã¡ã€ã³ç¥èå
±æäŒã®æŠèŠ ãã¡ã€ã³ç¥èå
±æäŒã¯åã
ãæºãã£ãäžã§èç©ããŠããæ¥åç¥èãéçºã®èæ¯ãå
±æããäŒã§ããæ¬äŒã¯æ¯é± 1 æéãããã¯ã«æ²¿ã£ãŠãªã³ã©ã€ã³(Google Meet)ã§å®æœããŸããããããããããã¯ãçºè¡šè
ããã¡ã·ãªããŒã¿ãŒãæå®ããçºè¡šè
ã«ã¯ç°¡åãªè³æãçšæããŠããããŸããå ããŠåå è
ã«ã¯ä»¥äžã®ããšãæèããŠããããŸããã çºè¡šè
ã¯å¯Ÿè©±åã®çºè¡šãæèããã©ãããªé°å²æ°ãã€ãã åå è
ã¯ãã£ãããçšããŠæã£ãããšãã€ã¶ãã åãããã¯ã¯å»çã·ã¹ãã ãéçºããäžã§å¿
èŠãªãã¡ã€ã³ç¥èãåãå£ãšããŠãæè¡å¯ãã®å
容ãšãªã£ãŠããŸããçºè¡šè
ã«ãã£ãŠã¯å匷äŒåŸã®å®¿é¡ãçšæãããããããããã®æ¬ç޹ä»ããã£ãããšå€çš®å€æ§ã§ããçºè¡šåœ¢åŒããããŠå®ããªãããšã§ãååããšã«çºè¡šè
ã®åæ§ãåºããšããã®ãé¢çœã¿ã®äžã€ã ãšæããŸããç¹ã«å®¿é¡ããã£ãåã§ã¯ãåŸæ¥ã«ãã£ãŒãããã¯äŒãèšãããç¥èã®å®çã«ç¹ãããŸããã å®éã«è¡ã£ãããã㯠å®éã®æ§å ãã¡ã€ã³ç¥èå
±æäŒãçµã㊠ä»åãã¡ã€ã³ç¥èå
±æäŒãéããŠãæ©èœã®å®è£
èæ¯ãæŠèŠãå¹
åºãç¥ãããšãã§ããŸããããäŒèšæ¥åã®è€éããããåä»ãã蚺å¯ãŸã§ã®åç·èšèšããªã©ã®ãããŸã§ã¯å
±æããæ©äŒããªãã£ãåã
ãæã£ãŠããç¥èã»ç¥èŠãåŠã¶ããšãã§ããããŒã å
šäœã§ãã¡ã€ã³ç¥èã«é¢ããèªèåãããããè¯ãæ©äŒãšãªããŸããã æåŸã«å匷äŒã®æ¯ãè¿ããè¡ã£ããšããã以äžã®ãããªæèŠããããŸããã ãã¡ã€ã³ç¥èå
±æäŒãéããŠããŒã åãäžãã£ãŠããŠãã åéãããŠããç¥èãèšæ£ã§ãã çžäºçè§£ãæ·±ãŸãããŒã å
šäœãšããŠã³ãã¥ãã±ãŒã·ã§ã³ã®ããŒãã«ãäžããããšãã§ãã åå°éé åã«é¢ããããã¥ã¡ã³ããäžç®æã«ãŸãšããããšãã§ãã ããžãã£ããªæèŠãå€ããåãçµã¿ã®çµæãšããŠããŒã ã®åºç€ååäžã«ãç¹ãã£ããšæããŠããŸããå ããŠããã¡ã€ã³ç¥èå
±æäŒçšã«äœæããè³æã¯ããã¥ã¡ã³ããšããŠæ®ãããããªã³ããŒãã£ã³ã°è³æãªã©ã«æŽ»çšãã§ãããã§ããããããªããã以äžã®ãããªåé¡ããããŸãã çºè¡šè
ã®æºåã³ã¹ããé«ã æŠèŠèª¬æã§çµãã£ãŠããŸã峿¥æ¥åã§äœ¿çšã§ããå
容ã§ã¯ãªã åŠãã ããšãæ·±å ãã§ããŠããªãããç¥èã®å®çã«ç¹ãããªã äžèšã«ã€ããŠã¯ãäŸãã°çºè¡šè
ã 2 人ãã¢ã«ããŠæºåã³ã¹ãã忣ããããã宿é¡ãåºããŠæ¬¡åã«ãã£ãŒãããã¯ãããéçºããŒã 以å€ãæ°è»œã«åå ãã§ããããã«ã©ã€ããªãããã¯ã远å ãããªã©ãä»åŸã®ãã¡ã€ã³ç¥èå
±æäŒã®ãªãã§æ¹åããŠãããããšæããŸãã ãããã« ä»å㯠CLINICS éçºããŒã ã§è¡ã£ã暪軞ã®åãçµã¿ã«ã€ããŠç޹ä»ãããŠããã ããŸããã æšªè»žã§ãäºãããã©ããŒããããããªãæ
å ±å
±æã®å Žããäœãããšã§ãããè¯ãçµç¹ã«ãªã£ãŠãããšæããŠããŸããä»åŸãããã«ãããã¯ãã®æ©èœãå¢ãããšãšãã«äºæ¥éšå
šäœãšããŠãé¢ããã¡ã³ããŒãå¢ãããããæšªè»žã§ã®ç¥èå
±æã®ä»çµã¿ã¯äºæ¥éšãå«ããŠå¿
èŠã§ãããšèããŠããŸããéçºããŒã ã«éããã«ããããã¯ãã«é¢ããã¡ã³ããŒãå·»ã蟌ã¿ãçµç¹ã³ãã¥ãã±ãŒã·ã§ã³ã®æ¹åãç¶ããŠããããã§ãã æåŸãŸã§ãèªã¿ããã ãããããšãããããŸããã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ããã«ã¡ã¯ã19 æ°åã®æ¡¶è°·ã§ããçŸåšã¯ CLINICS ã§æ€æ»åšãã®éçºãæ
åœããŠããŸãã æè¿ã¯ãç§èªèº«ãåºç€çŸæ£æã¡ãšããããšããããç€ŸäŒæ
å¢ãèæ
®ããŠãã«ãªã¢ãŒãã§æ¥åã«å€ããã§ããŸãããªã³ã©ã€ã³ã³ãã¥ãã±ãŒã·ã§ã³ã¯å¯Ÿé¢ãšæ¯ã¹ãæèããªããã°ãªããªãç¹ãå€ããæ
£ããå¿
èŠã§ãããšæ¥ã
æããŠããŸããå°ãã§ã察é¢ã«è¿ãç°å¢ãå®çŸããããã«ãäžçŒã¬ãã«ã¡ã©ã Web ã«ã¡ã©ãšããŠä»£çšãããããã€ãããã¯ãã€ã¯ã䜿çšããŠã¯ãªã¢ãªé³å£°ãå±ããããããã«äœæ¥ç°å¢ã®æ¹åã«åãçµãã§ããŸãã ä»å㯠CLINICS éçºããŒã ã§èª²é¡ãšãªã£ãŠããããªã³ããŒãã£ã³ã°ããã£ããã¢ããã«æéããããåé¡ãã解決ããããã«è¡ã£ããæšªè»žã®åãçµã¿ã«ã€ããŠç޹ä»ããŸãã ã¯ããã« CLINICS éçºããŒã ã§ã¯ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã ã CLINICS ãã®æ©èœãšããŠäž»ã«é»åã«ã«ãããªã³ã©ã€ã³èšºçãäºçŽã·ã¹ãã ãªã©ã®æ©èœã®éçºãè¡ã£ãŠããŸããå»çã·ã¹ãã ã®éçºã«ãããŠå»çæ¥åç¥èã¯å¿
èŠäžå¯æ¬ ã§ãããäŸãã°ãäŒèšãããæ€æ»ããšãã£ãå»çæ©é¢ã§è¡ãããæ¥åã«é¢ããçè§£ãèŠæ±ãããŸãããã®ãããåã
ãæ¥ã
ãã£ããã¢ããã«å€ããã§ããäžæ¹ãã²ãšã€ã²ãšã€ã®æ¥åãè€éã§ããããã«ãè€æ°ã®æ©èœã暪æãããããã¯ãçè§£ãå
šäœææ¡ãé£ãã課é¡ããããŸãããããã§ããã®åé¡ã解決ããã¹ããæšªè»žå匷äŒããšé¡ããŠãCLINICS ã®ãã¡ã€ã³ç¥èå
±æäŒãè¡ãããšã«ããŸããã ãã¡ã€ã³ç¥èå
±æäŒã®æŠèŠ ãã¡ã€ã³ç¥èå
±æäŒã¯åã
ãæºãã£ãäžã§èç©ããŠããæ¥åç¥èãéçºã®èæ¯ãå
±æããäŒã§ããæ¬äŒã¯æ¯é± 1 æéãããã¯ã«æ²¿ã£ãŠãªã³ã©ã€ã³(Google Meet)ã§å®æœããŸããããããããããã¯ãçºè¡šè
ããã¡ã·ãªããŒã¿ãŒãæå®ããçºè¡šè
ã«ã¯ç°¡åãªè³æãçšæããŠããããŸããå ããŠåå è
ã«ã¯ä»¥äžã®ããšãæèããŠããããŸããã çºè¡šè
ã¯å¯Ÿè©±åã®çºè¡šãæèããã©ãããªé°å²æ°ãã€ãã åå è
ã¯ãã£ãããçšããŠæã£ãããšãã€ã¶ãã åãããã¯ã¯å»çã·ã¹ãã ãéçºããäžã§å¿
èŠãªãã¡ã€ã³ç¥èãåãå£ãšããŠãæè¡å¯ãã®å
容ãšãªã£ãŠããŸããçºè¡šè
ã«ãã£ãŠã¯å匷äŒåŸã®å®¿é¡ãçšæãããããããããã®æ¬ç޹ä»ããã£ãããšå€çš®å€æ§ã§ããçºè¡šåœ¢åŒããããŠå®ããªãããšã§ãååããšã«çºè¡šè
ã®åæ§ãåºããšããã®ãé¢çœã¿ã®äžã€ã ãšæããŸããç¹ã«å®¿é¡ããã£ãåã§ã¯ãåŸæ¥ã«ãã£ãŒãããã¯äŒãèšãããç¥èã®å®çã«ç¹ãããŸããã å®éã«è¡ã£ãããã㯠å®éã®æ§å ãã¡ã€ã³ç¥èå
±æäŒãçµã㊠ä»åãã¡ã€ã³ç¥èå
±æäŒãéããŠãæ©èœã®å®è£
èæ¯ãæŠèŠãå¹
åºãç¥ãããšãã§ããŸããããäŒèšæ¥åã®è€éããããåä»ãã蚺å¯ãŸã§ã®åç·èšèšããªã©ã®ãããŸã§ã¯å
±æããæ©äŒããªãã£ãåã
ãæã£ãŠããç¥èã»ç¥èŠãåŠã¶ããšãã§ããããŒã å
šäœã§ãã¡ã€ã³ç¥èã«é¢ããèªèåãããããè¯ãæ©äŒãšãªããŸããã æåŸã«å匷äŒã®æ¯ãè¿ããè¡ã£ããšããã以äžã®ãããªæèŠããããŸããã ãã¡ã€ã³ç¥èå
±æäŒãéããŠããŒã åãäžãã£ãŠããŠãã åéãããŠããç¥èãèšæ£ã§ãã çžäºçè§£ãæ·±ãŸãããŒã å
šäœãšããŠã³ãã¥ãã±ãŒã·ã§ã³ã®ããŒãã«ãäžããããšãã§ãã åå°éé åã«é¢ããããã¥ã¡ã³ããäžç®æã«ãŸãšããããšãã§ãã ããžãã£ããªæèŠãå€ããåãçµã¿ã®çµæãšããŠããŒã ã®åºç€ååäžã«ãç¹ãã£ããšæããŠããŸããå ããŠããã¡ã€ã³ç¥èå
±æäŒçšã«äœæããè³æã¯ããã¥ã¡ã³ããšããŠæ®ãããããªã³ããŒãã£ã³ã°è³æãªã©ã«æŽ»çšãã§ãããã§ããããããªããã以äžã®ãããªåé¡ããããŸãã çºè¡šè
ã®æºåã³ã¹ããé«ã æŠèŠèª¬æã§çµãã£ãŠããŸã峿¥æ¥åã§äœ¿çšã§ããå
容ã§ã¯ãªã åŠãã ããšãæ·±å ãã§ããŠããªãããç¥èã®å®çã«ç¹ãããªã äžèšã«ã€ããŠã¯ãäŸãã°çºè¡šè
ã 2 人ãã¢ã«ããŠæºåã³ã¹ãã忣ããããã宿é¡ãåºããŠæ¬¡åã«ãã£ãŒãããã¯ãããéçºããŒã 以å€ãæ°è»œã«åå ãã§ããããã«ã©ã€ããªãããã¯ã远å ãããªã©ãä»åŸã®ãã¡ã€ã³ç¥èå
±æäŒã®ãªãã§æ¹åããŠãããããšæããŸãã ãããã« ä»å㯠CLINICS éçºããŒã ã§è¡ã£ã暪軞ã®åãçµã¿ã«ã€ããŠç޹ä»ãããŠããã ããŸããã æšªè»žã§ãäºãããã©ããŒããããããªãæ
å ±å
±æã®å Žããäœãããšã§ãããè¯ãçµç¹ã«ãªã£ãŠãããšæããŠããŸããä»åŸãããã«ãããã¯ãã®æ©èœãå¢ãããšãšãã«äºæ¥éšå
šäœãšããŠãé¢ããã¡ã³ããŒãå¢ãããããæšªè»žã§ã®ç¥èå
±æã®ä»çµã¿ã¯äºæ¥éšãå«ããŠå¿
èŠã§ãããšèããŠããŸããéçºããŒã ã«éããã«ããããã¯ãã«é¢ããã¡ã³ããŒãå·»ã蟌ã¿ãçµç¹ã³ãã¥ãã±ãŒã·ã§ã³ã®æ¹åãç¶ããŠããããã§ãã æåŸãŸã§ãèªã¿ããã ãããããšãããããŸããã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ããã«ã¡ã¯ã19 æ°åã®æ¡¶è°·ã§ããçŸåšã¯ CLINICS ã§æ€æ»åšãã®éçºãæ
åœããŠããŸãã æè¿ã¯ãç§èªèº«ãåºç€çŸæ£æã¡ãšããããšããããç€ŸäŒæ
å¢ãèæ
®ããŠãã«ãªã¢ãŒãã§æ¥åã«å€ããã§ããŸãããªã³ã©ã€ã³ã³ãã¥ãã±ãŒã·ã§ã³ã¯å¯Ÿé¢ãšæ¯ã¹ãæèããªããã°ãªããªãç¹ãå€ããæ
£ããå¿
èŠã§ãããšæ¥ã
æããŠããŸããå°ãã§ã察é¢ã«è¿ãç°å¢ãå®çŸããããã«ãäžçŒã¬ãã«ã¡ã©ã Web ã«ã¡ã©ãšããŠä»£çšãããããã€ãããã¯ãã€ã¯ã䜿çšããŠã¯ãªã¢ãªé³å£°ãå±ããããããã«äœæ¥ç°å¢ã®æ¹åã«åãçµãã§ããŸãã ä»å㯠CLINICS éçºããŒã ã§èª²é¡ãšãªã£ãŠããããªã³ããŒãã£ã³ã°ããã£ããã¢ããã«æéããããåé¡ãã解決ããããã«è¡ã£ããæšªè»žã®åãçµã¿ã«ã€ããŠç޹ä»ããŸãã ã¯ããã« CLINICS éçºããŒã ã§ã¯ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã ã CLINICS ãã®æ©èœãšããŠäž»ã«é»åã«ã«ãããªã³ã©ã€ã³èšºçãäºçŽã·ã¹ãã ãªã©ã®æ©èœã®éçºãè¡ã£ãŠããŸããå»çã·ã¹ãã ã®éçºã«ãããŠå»çæ¥åç¥èã¯å¿
èŠäžå¯æ¬ ã§ãããäŸãã°ãäŒèšãããæ€æ»ããšãã£ãå»çæ©é¢ã§è¡ãããæ¥åã«é¢ããçè§£ãèŠæ±ãããŸãããã®ãããåã
ãæ¥ã
ãã£ããã¢ããã«å€ããã§ããäžæ¹ãã²ãšã€ã²ãšã€ã®æ¥åãè€éã§ããããã«ãè€æ°ã®æ©èœã暪æãããããã¯ãçè§£ãå
šäœææ¡ãé£ãã課é¡ããããŸãããããã§ããã®åé¡ã解決ããã¹ããæšªè»žå匷äŒããšé¡ããŠãCLINICS ã®ãã¡ã€ã³ç¥èå
±æäŒãè¡ãããšã«ããŸããã ãã¡ã€ã³ç¥èå
±æäŒã®æŠèŠ ãã¡ã€ã³ç¥èå
±æäŒã¯åã
ãæºãã£ãäžã§èç©ããŠããæ¥åç¥èãéçºã®èæ¯ãå
±æããäŒã§ããæ¬äŒã¯æ¯é± 1 æéãããã¯ã«æ²¿ã£ãŠãªã³ã©ã€ã³(Google Meet)ã§å®æœããŸããããããããããã¯ãçºè¡šè
ããã¡ã·ãªããŒã¿ãŒãæå®ããçºè¡šè
ã«ã¯ç°¡åãªè³æãçšæããŠããããŸããå ããŠåå è
ã«ã¯ä»¥äžã®ããšãæèããŠããããŸããã çºè¡šè
ã¯å¯Ÿè©±åã®çºè¡šãæèããã©ãããªé°å²æ°ãã€ãã åå è
ã¯ãã£ãããçšããŠæã£ãããšãã€ã¶ãã åãããã¯ã¯å»çã·ã¹ãã ãéçºããäžã§å¿
èŠãªãã¡ã€ã³ç¥èãåãå£ãšããŠãæè¡å¯ãã®å
容ãšãªã£ãŠããŸããçºè¡šè
ã«ãã£ãŠã¯å匷äŒåŸã®å®¿é¡ãçšæãããããããããã®æ¬ç޹ä»ããã£ãããšå€çš®å€æ§ã§ããçºè¡šåœ¢åŒããããŠå®ããªãããšã§ãååããšã«çºè¡šè
ã®åæ§ãåºããšããã®ãé¢çœã¿ã®äžã€ã ãšæããŸããç¹ã«å®¿é¡ããã£ãåã§ã¯ãåŸæ¥ã«ãã£ãŒãããã¯äŒãèšãããç¥èã®å®çã«ç¹ãããŸããã å®éã«è¡ã£ãããã㯠å®éã®æ§å ãã¡ã€ã³ç¥èå
±æäŒãçµã㊠ä»åãã¡ã€ã³ç¥èå
±æäŒãéããŠãæ©èœã®å®è£
èæ¯ãæŠèŠãå¹
åºãç¥ãããšãã§ããŸããããäŒèšæ¥åã®è€éããããåä»ãã蚺å¯ãŸã§ã®åç·èšèšããªã©ã®ãããŸã§ã¯å
±æããæ©äŒããªãã£ãåã
ãæã£ãŠããç¥èã»ç¥èŠãåŠã¶ããšãã§ããããŒã å
šäœã§ãã¡ã€ã³ç¥èã«é¢ããèªèåãããããè¯ãæ©äŒãšãªããŸããã æåŸã«å匷äŒã®æ¯ãè¿ããè¡ã£ããšããã以äžã®ãããªæèŠããããŸããã ãã¡ã€ã³ç¥èå
±æäŒãéããŠããŒã åãäžãã£ãŠããŠãã åéãããŠããç¥èãèšæ£ã§ãã çžäºçè§£ãæ·±ãŸãããŒã å
šäœãšããŠã³ãã¥ãã±ãŒã·ã§ã³ã®ããŒãã«ãäžããããšãã§ãã åå°éé åã«é¢ããããã¥ã¡ã³ããäžç®æã«ãŸãšããããšãã§ãã ããžãã£ããªæèŠãå€ããåãçµã¿ã®çµæãšããŠããŒã ã®åºç€ååäžã«ãç¹ãã£ããšæããŠããŸããå ããŠããã¡ã€ã³ç¥èå
±æäŒçšã«äœæããè³æã¯ããã¥ã¡ã³ããšããŠæ®ãããããªã³ããŒãã£ã³ã°è³æãªã©ã«æŽ»çšãã§ãããã§ããããããªããã以äžã®ãããªåé¡ããããŸãã çºè¡šè
ã®æºåã³ã¹ããé«ã æŠèŠèª¬æã§çµãã£ãŠããŸã峿¥æ¥åã§äœ¿çšã§ããå
容ã§ã¯ãªã åŠãã ããšãæ·±å ãã§ããŠããªãããç¥èã®å®çã«ç¹ãããªã äžèšã«ã€ããŠã¯ãäŸãã°çºè¡šè
ã 2 人ãã¢ã«ããŠæºåã³ã¹ãã忣ããããã宿é¡ãåºããŠæ¬¡åã«ãã£ãŒãããã¯ãããéçºããŒã 以å€ãæ°è»œã«åå ãã§ããããã«ã©ã€ããªãããã¯ã远å ãããªã©ãä»åŸã®ãã¡ã€ã³ç¥èå
±æäŒã®ãªãã§æ¹åããŠãããããšæããŸãã ãããã« ä»å㯠CLINICS éçºããŒã ã§è¡ã£ã暪軞ã®åãçµã¿ã«ã€ããŠç޹ä»ãããŠããã ããŸããã æšªè»žã§ãäºãããã©ããŒããããããªãæ
å ±å
±æã®å Žããäœãããšã§ãããè¯ãçµç¹ã«ãªã£ãŠãããšæããŠããŸããä»åŸãããã«ãããã¯ãã®æ©èœãå¢ãããšãšãã«äºæ¥éšå
šäœãšããŠãé¢ããã¡ã³ããŒãå¢ãããããæšªè»žã§ã®ç¥èå
±æã®ä»çµã¿ã¯äºæ¥éšãå«ããŠå¿
èŠã§ãããšèããŠããŸããéçºããŒã ã«éããã«ããããã¯ãã«é¢ããã¡ã³ããŒãå·»ã蟌ã¿ãçµç¹ã³ãã¥ãã±ãŒã·ã§ã³ã®æ¹åãç¶ããŠããããã§ãã æåŸãŸã§ãèªã¿ããã ãããããšãããããŸããã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
æ ªåŒäŒç€Ÿã¡ãã¬ãŒã®ãšã³ãžãã¢ã®ç¬¹å¡ã§ãã äž»ã«ãžã§ãã¡ãã¬ãŒã®ã€ã³ãã©ãæ
åœããŠããŸãã çŽè¿ã§ã¯ãã³ã³ããåãããŠããªãã£ãç°å¢ã®ç§»è¡ãªã©ãããŠããŸããã äŒæ¥ã¯äž»ã«ã²ãŒã ããã£ãŠããŸããä»ã¯ãæ¥æ¬èªçããªãªãŒã¹ãããã°ããã®ãã¬ã ãã³ãïŒããã ã»ãžã»ã¢ãã·ã¥ãã«å€¢äžã§ãã ä»å㯠Terraform ã®ãã¹ãç°å¢ãã Terraform Workspaces ã䜿çšããŠæ§ç¯ããäºäŸã玹ä»ããŸãã èæ¯ ãžã§ãã¡ãã¬ãŒã«ã¯ããã€ãã®ãµãŒãã¹ããããTerraform ã«ããã³ãŒãåãé²ãã§ãããµãŒãã¹ãšãAnsibleã itamae ãªã©ã§éšåçã«ã³ãŒãåã¯ãããŠãããã®ã®ãTerraform ã®äœ¿çšãé
ããŠãããµãŒãã¹ãæ··åšããŠããããããã®ãµãŒãã¹ã«ã€ããŠã Terraform ãžã®ç§»è¡ãé²ããŠããŸãã Terraform ãžã®ç§»è¡ãšããããŠãã¡ã³ããã³ã¹ãæ
åœããã¡ã³ããŒãå¢ããå¿
èŠãããã®ã§ãã ãäœæ¥æ
åœã Terraform ã®ã³ãŒããããå®éã«çšŒåãããç°å¢ãäœãã®ã¯æ
£ããŠããŠãé£ããã ãã¬ãã¥ã¯ãŒã Terraform ã®ã³ãŒãã®å·®åã ãã§ãå
容ãããã«ææ¡ããã®ã¯é£ããã ãªã©ã®çç±ãããäœæ¥æ
åœãã¬ãã¥ã¯ãŒãšãã«ããŒãã«ãäœããšã¯èšãããTerraform ã«ããã€ã³ãã©ã®å€æŽå
容ãäºåã«ç¢ºèªã§ããç°å¢æ§ç¯ãå¿
èŠã ãšæããããã«ãªããŸããã æ€èšå
容 äºåã«ç¢ºèªã§ããç°å¢ãäœãã«ãããããŸãæåã«æ€èšããã®ã¯ãåã¹ããŒãžã®ã³ãŒããå
±éåããããšã§ããã ãžã§ãã¡ãã¬ãŒã®é¢é£ãµãŒãã¹ã§ã¯ã倧ãããã㊠3 ã€ã®ã¹ããŒãžã§æ§æããŠããŸãã Sandbox(åäººã®æ€èšŒçš) â QA(ãªãªãŒã¹åã®æ€èšŒçš) â Production ãã®åã¹ããŒãžã®ã³ãŒããå
±éåã§ããã°ãProduction ã«ã¯ QA ç°å¢ãŸã§ã§ç¢ºèªæžã¿ã®ã³ãŒãã apply ããããšãã§ããŸãã ã§ãããSandbox ç°å¢ãQA ç°å¢ãProduction ç°å¢ã¯ãããã䌌ãŠã¯ãããã®ã®ãå
šãŠãåãæ§æã§ã¯ãããŸããã Terraform ã® HCL ã§ã¯ if æ§æããªã( resource ã®äœæã count ã§å¶åŸ¡ããããšã¯ã§ãã) module åäœã§ã®ãªãœãŒã¹äœæã®å¶åŸ¡ãã§ããªã(Terraform 0.13 ãã module ã§ã count ã for_each ãå¯èœã«ãªã ããã§ã) ãªã©ã®å¶éããããæ§é ã®å·®åãã³ãŒãã§åžåãã«ãããå
±éåã§ãããšããŠãã¡ã³ããã³ã¹æ§ãäžããå¯èœæ§ãé«ãã§ãã ãŸãããã§ã« Terraform ã§ã³ãŒãåãããŠããç¶æ
ããã®ç§»è¡äœæ¥ã楜ã§ã¯ãªãã§ãããã ããã§ãã¹ããŒãžããšã®ã³ãŒããå
±éåããã®ã§ã¯ãªãã AWS Organizations ã§å¥ã¢ã«ãŠã³ããäœããåã¹ããŒãžã®ã³ãŒãã詊ããç°å¢ãäœãããšã«ããŸããã <ç®æšãšãã> Terraform ã®ã³ãŒãããããã¯ã·ã§ã³ã¢ã«ãŠã³ãã§å®è¡ããåã«ããã¹ãã¢ã«ãŠã³ãã§å®è¡ããèšå®ããå
容ã AWS ãããžã¡ã³ãã³ã³ãœãŒã« ã AWS CLI ã§ç¢ºèªããããšã§ããã ãã¹ãã¢ã«ãŠã³ãäžã§èšå®ã確èªããåŸããããã¯ã·ã§ã³ã¢ã«ãŠã³ãã«åãã³ãŒãã apply ããããšãã§ããã ã³ã¹ããæããããããã¹ãã¢ã«ãŠã³ãäžã®ãªãœãŒã¹ã¯ã確èªãçµäºããã destory ããããšãã§ããã <ç®æšãšããªã> ãã¹ãã¢ã«ãŠã³ãäžã§ãµãŒãã¹ã皌åããããšã¯ç®æšãšããªãã å¿
èŠãªããŒã¿ã»ããã®äœæãªã©çšæãããã®ãå¢ããã®ã§ãç®æšã«ã¯å«ããŸããã§ããã èšå®äœæ¥ å¿
èŠãªäœæ¥ã¯å€§ãããã㊠2 ã€ã§ãã Terraform Workspaces ã®èšå® ã¢ã«ãŠã³ãããšã«å¿
èŠãªã³ãŒãã®è¿œå ãä¿®æ£ Terraform Workspaces ã®èšå® Terraform ãš AWS provider ã®èšå®ã倿Žããããšã§ãworkspace ãåãæ¿ããããšãã§ããŸãã 以äžãäœæ¥ã€ã¡ãŒãžã§ãã workspace ã®è¿œå $ terraform workspace new production $ terraform workspace list default * production Terraform ã®ç°å¢å€æŽ terraform { required_version = "= 0.12.28" backend "s3" { bucket = "example-state" workspace_key_prefix = "workspace" dynamodb_table = "terraform-state-lock" key = "example.tfstate" region = "ap-northeast-1" profile = "production" } } provider "aws" { region = "ap-northeast-1" version = "= 2.70.0" profile = var. workspace_profile [ terraform . workspace ] } variable "workspace_profile" { type = map ( string ) default = { default = "test" production = "production" } } ãã®äŸã§ã¯ãdefault workspace ã¯ãã¹ãç°å¢ãProduction ãå®éã«ãµãŒãã¹ã皌åããç°å¢ã®ã¢ã«ãŠã³ãã«ãªãããã«èšå®ããŠããŸãã ãããã default ã¯ãaws config ã® test profileãProduction 㯠production profile ãåç
§ããŠããŸãã s3://example-state/example.tfstate ããã¹ãç°å¢ã s3://example-state/workspace/production/example.tfstate ãããããã¯ã·ã§ã³ç°å¢ã® state ãã¡ã€ã«ã«ãªããŸãã Terraform ã®ã³ãŒãå
ããã¯ãçŸåšã® workspace åã terraform.workspace ã§åç
§ããããšãã§ããŸãã ãããŸã§ã®èšå®ã§ $ terraform workspace select [workspace å] ã§ workspace ãåãæ¿ããããšãã§ããããã«ãªããŸããã ããšã¯ãã¢ã«ãŠã³ãããšã«å¿
èŠãªå€æŽãããŠãããŸãã ã¢ã«ãŠã³ãããŸããã å
±éã®ãªãœãŒã¹ã®å®çŸ© å
šã¢ã«ãŠã³ãã§ãŠããŒã¯ã«ããå¿
èŠããããªãœãŒã¹(S3 bucketãDNS ãªã©)ã®å Žåã¯ãåç§°ã®åå²åŠçãå¿
èŠã§ãã ãã¹ãã¢ã«ãŠã³ãã§ã¯ããªãœãŒã¹åã« prefix ãã€ããŠäœæããããã«ããŸããã # å®çŸ© variable "example_bucket_name" { type = map ( string ) default = { default = "test-example-bucket" production = "example-bucket" } } # ãªãœãŒã¹ã§ã®åç
§æ resource "aws_s3_bucket" "example" { bucket = var. example_bucket_name [ terraform . workspace ] .. } ãã¹ãã¢ã«ãŠã³ãã§èµ·åããã€ã³ã¹ã¿ã³ã¹ã¿ã€ããå°æ°ã®å€æŽ ãã¹ãã¢ã«ãŠã³ãã§ã¯ EC2 ã®ã€ã³ã¹ã¿ã³ã¹ãèµ·åãããªããŠãè¯ãå Žåã«ã¯ãå°æ°ã倿Žããããã«ããŸããã resource "aws_autoscaling_group" "example_web" { name = "example-web" max_size = 12 min_size = 6 desired_capacity = terraform. workspace == "production" ? 6 : 0 ⊠} ã€ã³ã¹ã¿ã³ã¹ã®èµ·åãå¿
èŠãªå Žåããåæ§ã®åå²ã§ã€ã³ã¹ã¿ã³ã¹ã¿ã€ãã®å€æŽãè¡ã£ãŠããŸãã ã³ãŒãåãããªããªãœãŒã¹ã®æ±ã ãããã¯ã·ã§ã³ã¢ã«ãŠã³ãã§äžæŠã³ãŒãåãä¿çãããªãœãŒã¹ã«ã€ããŠã¯ data source ã§åç
§ããŸããããã¹ãã¢ã«ãŠã³ãã«ã¯ãªãœãŒã¹ãååšããªãããäœæããªããã°ãããŸããã ãã¹ãã¢ã«ãŠã³ãã®ãªãœãŒã¹ã¯ç¢ºèªãçµäºããæ®µéã§ destroy ãããã®ã§ ã¹ããŒãžçšã® Terraform ã³ãŒããšã¯å¥ã«ãå¿
èŠãªãªãœãŒã¹ãäœæããã³ãŒããçšæãã å¿
èŠãªãªãœãŒã¹çšã®ã³ãŒã â ã¹ããŒãžçšã®ã³ãŒãã®é ã« apply ãã ããã«ããŸããã data source ã§åç
§ã§ããã°è¯ãç¯å²ã§ã®ã³ãŒãåãªã®ã§ããã®è¿œå ã®ãªãœãŒã¹ãæå°éã®ã³ã¹ãã«ãªãããã«ããŠããŸãã 以äžã®èšå®ã§ãåã Terraform ã®ã³ãŒãã workspace ãåãæ¿ã㊠planãapply ãã§ããããã«ãªããŸããã éçšããŠã¿ãŠ ãããã¯ã·ã§ã³ã¢ã«ãŠã³ãã« apply ããåã«ããã¹ãã¢ã«ãŠã³ãã§äºåã« apply ããããšãã§ããããã«ãªã£ãã®ã§ãäœæ¥äžã®è©Šè¡é¯èª€ããããããªããŸããã ã¬ãã¥ã¯ãŒãããã¹ãã¢ã«ãŠã³ãäžã§å®éã« apply ãããçµæã確èªããããšãã§ããããã«ãªããapply ã®å·®åã ãã§ã¯ãããã«ããã£ã倿Žå
容ã確èªã§ããããã«ãªããŸããã ãããªãæ°ããæ
åœããã¡ã³ããŒã®äžå®ããå°ããããããŸãããè§£æ¶ã§ãããã§ãã ãŸãšã ä»å㯠Terraform ã®ãã¹ãç°å¢ããTerraform Workspaces ã䜿çšããŠæ§ç¯ããäºäŸã玹ä»ãããŠããã ããŸããã ãã¹ãã¢ã«ãŠã³ãäžã®ãªãœãŒã¹ã®èªå destroy ãã planãapply ã®èªååã«ã€ããŠã¯è§ŠããããŠããŸãããããŸãå¥ã®æ©äŒã«ç޹ä»ã§ããã°ãšæããŸãã é·ããéçšããŠãããµãŒãã¹ã§ã¯ããµãŒãã¹ã皌åããããŸãŸè§£æ±ºããªããã°ãããªã課é¡ãæ°å€ããããŸãã ãããã®èª²é¡ããäžã€ãã€çå®ã«è§£æ±ºããŠããããšã«æ¥œãããèŠãã ããæ¹ããã²ã¡ãã¬ãŒã§äžç·ã«åããŸãããïŒ åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp