ãŠãŒã¹ã±ãŒã¹ã«ãã£ãŠç°ãªããŸãããäžè¬çã«GraphQLã«ã¯ããã€ãã®éèŠãªæ©èœããããŸããäŸãã°ãGraphQLã䜿çšãããšã
ããŒã ããŒãžã§ã¯ãGraphQLã䜿çšããçç±ãããã«è©³ãã説æããŠããŸãã
ã¢ããªã±ãŒã·ã§ã³å šäœãæžãçŽããªããŠããGraphQLã詊ãããšãã§ããŸããäŸãã°ãæ¢åã®RESTåŒã³åºããã©ããããåäžã®HTTPãªã¯ãšã¹ãããå§ããããšãã§ããŸããGraphQLã¹ããŒããšããžãã¹ãã¡ã€ã³ã¢ãã«ã¯åŸã ã«æ¡åŒµã§ããŸããæåã¯1ã€ã®ãŠãŒã¹ã±ãŒã¹ã«çŠç¹ãåœãŠããã®ããã«å¿ èŠãªã¹ããŒãã®éšåã ããæ§ç¯ããããšããå§ãããŸãã
ããããå¿ ãããããã§ã¯ãããŸãããã©ã¡ããAPIãåŠçããããžãã¹ã®èгç¹ããåæ§ã®ç®çãæããããšãã§ããŸããGraphQLã¯RESTã®ä»£æ¿ææ®µãšããŠèããããããšããããããŸãããæ±ºå®çãªçœ®ãæãã§ã¯ãããŸããã
GraphQLãšRESTã¯ãå®éã«ã¯ã¹ã¿ãã¯å ã§å ±åã§ããŸããäŸãã°ãGraphQLãµãŒããŒã®èåŸã§REST APIãæœè±¡åããããšãã§ããŸããããã¯ãã«ãŒãã¬ãŸã«ããŒã䜿çšããŠRESTãšã³ããã€ã³ããGraphQLãšã³ããã€ã³ãã«é ãããšã§å®çŸã§ããŸãã
GraphQLãšRESTã®æ¯èŒã«é¢ããæèŠã«ã€ããŠã¯ãHow To GraphQLãã芧ãã ããã
ããããããã¯ãããã誀解ã§ãã
GraphQLã¯ãéåžžããªã¢ãŒãã¯ã©ã€ã¢ã³ããµãŒããŒéä¿¡ã«äœ¿çšããã仿§ã§ããSQLãšã¯ç°ãªããGraphQLã¯ããŒã¿ã®ååŸãšå€æŽã«äœ¿çšãããããŒã¿ãœãŒã¹ã«äŸåããŸãããããŒã¿ãžã®ã¢ã¯ã»ã¹ãšæäœã¯ãã¬ãŸã«ããŒãšåŒã°ããä»»æã®é¢æ°ã䜿çšããŠå®è¡ãããŸããGraphQLã¯ãããã®ã¬ãŸã«ããŒé¢æ°ããããŒã¿ã調æŽããã³éçŽããçµæãã¯ã©ã€ã¢ã³ãã«è¿ããŸããäžè¬çã«ããããã®ã¬ãŸã«ããŒé¢æ°ã¯ãããŸããŸãªåºç€ãšãªãããŒã¿ãœãŒã¹ãšã®éä¿¡ãæ åœããããžãã¹ããžãã¯ã¬ã€ã€ãŒã«å§ä»»ããå¿ èŠããããŸãããããã®ããŒã¿ãœãŒã¹ã¯ããªã¢ãŒãAPIãããŒã¿ããŒã¹ãããŒã«ã«ãã£ãã·ã¥ããã®ä»ããã°ã©ãã³ã°èšèªã§ã¢ã¯ã»ã¹ã§ããã»ãŒãã¹ãŠã®ãã®ã«ãªããŸãã
GraphQLãããŒã¿ããŒã¹ãšé£æºãããæ¹æ³ã®è©³çްã«ã€ããŠã¯ãã¬ãŸã«ããŒã«é¢ããããã¥ã¡ã³ããã芧ãã ããã
GraphQLã®åŠç¿ã«åœ¹ç«ã€å€ãã®ãªãœãŒã¹ãå©çšå¯èœã§ãããã®ãŠã§ããµã€ãããã®äžã€ã§ããããã¥ã¡ã³ãã«ã¯ãéèŠãªGraphQLã®æŠå¿µãšãã®ä»çµã¿ã説æããèšäºãæ²èŒãããŠããŸããã³ãã¥ããã£ããŒãžã«ã¯ãåç §ã§ãããªãœãŒã¹ãåå ã§ããã°ã«ãŒãããããããããŸãã
ããå®è·µçãªã¬ã€ãã«ã€ããŠã¯ãHow to GraphQLã®ãã«ã¹ã¿ãã¯ãã¥ãŒããªã¢ã«ãŠã§ããµã€ããã芧ãã ãããedXã§ã¯ç¡æã®ãªã³ã©ã€ã³ã³ãŒã¹Exploring GraphQL: A Query Language for APIsãæäŸããŠããŸãã
åŠç¿ãå§ããåã«ãAPIãšã¯äœããã¯ã©ã€ã¢ã³ããšãµãŒããŒéã®éä¿¡ãäžè¬çã«ã©ã®ããã«æ©èœããã®ããçè§£ããŠãããŸãããã
ããããããã§ã¯ãããŸãããGraphQLã¯ä»æ§ã§ãããããããèšèªã§å®è£ ã§ããŸããã³ãŒãããŒãžã«ã¯ãããŸããŸãªããã°ã©ãã³ã°èšèªã§å©çšã§ããã©ã€ãã©ãªã®é·ããªã¹ãããããŸãã
ããããããèããã®ãç¡çã¯ãããŸãããGraphQLã¯Reactã«ã³ãã¡ã¬ã³ã¹ã§çºè¡šãããGraphQL.jsã¯çŸåšæãåºã䜿çšãããŠããå®è£ ã®1ã€ã§ãããããæ··ä¹±ãæãå¯èœæ§ãããããšãçè§£ããŠããã®ã§ãããã¥ã¡ã³ãã®æ¹åãšãJavaScriptã§èšè¿°ãããŠããªãã³ãŒããµã³ãã«ã®è¿œå ã«åãçµãã§ããŸãã
äž¡æ¹ã§ããGraphQLã¯ãã¯ã©ã€ã¢ã³ããšãµãŒããŒéã§æ å ±ã亀æããæ¹æ³ãæå®ããŸããããã«ã¯ããµãŒããŒãå©çšå¯èœãªããŒã¿ãšæäœãç€ºãæ¹æ³ãã¯ã©ã€ã¢ã³ãããªã¯ãšã¹ãããã©ãŒãããããæ¹æ³ããµãŒããŒããããã®ã¯ãšãªãå®è¡ããæ¹æ³ãã¯ã©ã€ã¢ã³ããã¬ã¹ãã³ã¹ãšããŠåä¿¡ãããã®ãå«ãŸããŸãã
ã¯ããGraphQLã¯éåžžHTTPçµç±ã§æäŸãããŸããããã¯ãHTTPãããã³ã«ãæ¥çã§åºãæ®åããŠããããã§ããããããåäžã®HTTPãªã¯ãšã¹ããäœæããããšã§GraphQLã詊ãããšãã§ããããã圹ç«ã¡ãŸããHTTPçµç±ã§åäœããGraphQLãµãŒããŒã®èšå®ã«é¢ããã¬ã€ãã©ã€ã³ã¯ãHTTPçµç±ã§ã®æäŸããã¥ã¡ã³ãã«èšèŒãããŠããŸãã
HTTPã¯ã¯ã©ã€ã¢ã³ããµãŒããŒãããã³ã«ã®æãäžè¬çãªéžæè¢ã§ãããå¯äžã®éžæè¢ã§ã¯ãããŸãããGraphQLã¯ãã©ã³ã¹ããŒãã¬ã€ã€ãŒã«äŸåããŸããããã®ãããäŸãã°ããªã¢ã«ã¿ã€ã ããŒã¿ã䜿çšããããã«ãHTTPã§ã¯ãªãWebSocketsãGraphQLãµãã¹ã¯ãªãã·ã§ã³ã«äœ¿çšã§ããŸãã
äžè¬çãªGraphQLããã¯ãšã³ãã§ã¯ãååã®ãã¹ãŠã®ãã£ãŒã«ãã«ããã®å€ã解決ããããã®éäžåã§åäžç®çã®é¢æ°ãçšæãããŠããŸãããŸããã¯ã©ã€ã¢ã³ãã§ã®ããŒã¿ãããã³ã°åŠçã詊ã¿ã代ããã«ãGraphQLã¯ãã®ããžãã¯ããµãŒããŒã«ç§»åããŸãããã®çµæãããã€ãã®åºæã®ããã©ãŒãã³ã¹äžã®å©ç¹ããããŸãããªãŒããŒãã§ãããæå°éã«æãããµãŒããŒãžã®ã©ãŠã³ãããªãããæžããããšããã®2ã€ã§ãã
GraphQLã®å®è£ ãæ§ç¯ããéã«ã¯ããã®ä»ã®ããã©ãŒãã³ã¹èŠå ãèæ ®ããå¿ èŠããããŸããäŸãã°ãGraphQLãµãŒãã¹ãããã£ããã£ãã«ãªããããŒã¿ããŒã¹ããç¹°ãè¿ãããŒã¿ãèªã¿èŸŒãå¯èœæ§ããããŸããããã¯ãäžè¬çã«ãããã³ã°ãã¯ããã¯ãå®è£ ããããDataLoaderã®ãããªããŒã«ãå©çšããããšã§è§£æ±ºãããŸãã
GraphQLã¯ã©ã€ã¢ã³ãã¯ãã¯ãšãªããã¥ãŒããŒã·ã§ã³ãããã³ãµãã¹ã¯ãªãã·ã§ã³ãGraphQLãµãŒããŒã«åŠçããã®ã«åœ¹ç«ã¡ãŸããGraphQL APIã®åºç€ãšãªãæ§é ã䜿çšããŠãç¹å®ã®ããã»ã¹ãèªååããŸããããã«ã¯ããããåŠçãUIæŽæ°ããã«ãæã®ã¹ããŒãæ€èšŒãªã©ããããŸãã
ããŸããŸãªèšèªã®GraphQLã¯ã©ã€ã¢ã³ãã®ãªã¹ãã¯ãã³ãŒãããŒãžã«ãããŸãããããã®å©ç¹ã®è©³çްãªèª¬æã¯ãHow To GraphQLã«ãããŸãã
ãã ããGraphQLã䜿çšããããã«ç¹å®ã®ã¯ã©ã€ã¢ã³ãã¯å¿ èŠãããŸãããéåžžã®HTTPã¯ã©ã€ã¢ã³ãã§GraphQLã®çµæãçºè¡ããããšããå§ããããšãã§ããŸãããã®åŸãã¢ããªã±ãŒã·ã§ã³ã®è€éããå¢ãã«ã€ããŠãGraphQLã«æé©åãããã¯ã©ã€ã¢ã³ãã«åãæ¿ããããšãã§ããŸãã
ããããGraphQLã¯éåžžããªã¢ãŒãã¯ã©ã€ã¢ã³ããµãŒããŒéä¿¡ã«äœ¿çšããã仿§ã§ãã䜿çšãããããŒã¿ãœãŒã¹ã«äŸåããŸãããããªããžã§ã¯ããªã¬ãŒã·ã§ãã«ãããã³ã°ãã¯ããã¯ãå®è£ ããŸãããããããGraphQLçšã«ç¹å¥ã«æ§ç¯ãããORMããããŸãããããã®ããã€ãã¯ãã³ãŒãããŒãžã®ãµãŒãã¹ã»ã¯ã·ã§ã³ã«èšèŒãããŠããŸãã
ããããGraphQLã¯GraphQL Foundationã«ãã£ãŠç®¡çãããŠããŸãã
ã€ãŸãããã®ä»æ§ã¯ããšããšFacebookã§éçºãããFacebookã¯GraphQL Foundationã®ã¡ã³ããŒã§ããäžéšã®GitHubãªããžããªã®ã©ã€ã»ã³ã¹ããŸã Facebook Inc.ã®äžã«èšèŒãããŠããããšã«æ°ä»ããããããŸãããããããæŽæ°ããŠãããGraphiQLãDataLoaderãªã©ã®äž»èŠãããžã§ã¯ãã¯ãã§ã«æ°ããèäœæš©ãCopyright (c) 2020 GraphQL Contributors.ãã«å€æŽããŠããŸãã
å€ãã®äººã ã§ããïŒGraphQL ã®ä»æ§æžãšé¢é£ãããžã§ã¯ãå šãŠã¯ãªãŒãã³ãœãŒã¹ãªã®ã§ã誰ã§ãè²¢ç®ã§ããŸãããšã¯ããããªããžããªã®èåŸã«ã¯æ§é ãååšããŸããããã¯ã³ãã¥ããã£å ã®è¡çªã解決ããæè¡çãªæææ±ºå®ãå°ãããã«ååšããŸãã
GraphQL Foundationã GraphQL ã®å€§éšåã®ç£ç£ãè¡ã£ãŠããŸããããã¯æ°åã®ç°ãªãäŒæ¥ã®ä»£è¡šè ã§æ§æãããŠããŸãã
ãŸããGraphQL Foundation ã«ãã£ãŠç®¡çãããææ¬¡ã®ããŒãã£ã«GraphQLã¯ãŒãã³ã°ã°ã«ãŒã (WG) äŒè°ããããŸãããããã®äŒè°ã¯ãäžè¬çã«äœ¿çšãããŠãã GraphQL ã©ã€ãã©ãªãããŒã«ã®ã¡ã³ããã³ã¹æ åœè ããã㊠GraphQL ã³ãã¥ããã£ãžã®éèŠãªè²¢ç®è ãäžå ã«äŒãããããšãç®çãšããŠããŸããWG äŒè°ã¯å®å šã«å ¬éãããŠããŸãã誰ã§ãåå ããè°é¡ã«é ç®ãææ¡ããããšãã§ããŸãã
2020幎11æã®WGäŒè°ã§ã¯ãGraphQL ãä»åŸãæè¡è«®åå§å¡äŒ (TSC) ãæã€ããšãçºè¡šãããŸããã詳现ã«ã€ããŠã¯è¿æ¥å ¬éäºå®ã§ãã
åããã«ããå Žåã¯ãå¿é ãªã - å€ãã®ããšãé²è¡äžã§ããããèŠèŠçã§é«ã¬ãã«ã®æŠèŠã«ã€ããŠã¯ãGraphQL Landscapeãã芧ãã ããã
GraphQL Foundation ã¯ãGraphQL ã®ã¬ããã³ã¹ãæäŸããäžç«çãªè²¡å£ã§ããããã«ã¯ããªãŒãã³ãœãŒã¹ãªããžããªã®ãã³ããŒãã¥ãŒãã©ã«ãªç£èŠãè³é調éãã€ãã³ããªã©ãå«ãŸããŸããLinux Foundationã®äžã§ãã¹ããããŠãããæ°åã®ç°ãªãäŒæ¥ã®ä»£è¡šè ã§æ§æãããŠããŸããGraphQL ã³ãã¥ããã£ã®ããã®å ¬å¹³ã§ãªãŒãã³ãªããŒã ã§ããããšãç®çã§ãã
foundation.graphql.org ã蚪åããŠã詳现ã確èªã§ããŸãã
ã¯ããGraphQL ã¯ã¹ã±ãŒã©ãã«ã«ãªãããã«èšèšãããŠãããå€ãã®äŒæ¥ã§éåžžã«é«ãè² è·ã®äžã§æ¬çªç°å¢ã§äœ¿çšãããŠããŸãã
GraphQL ã«ã¯ã圹ã«ç«ã€çµã¿èŸŒã¿ã®ããã©ãŒãã³ã¹åäžæ©èœãããã€ãçšæãããŠããŸããããããæ¬çªç°å¢ã«å°å ¥ããããã€ã³ã¹ã¿ã³ã¹éã§ã®ã¹ã±ãŒãªã³ã°ãšããã©ãŒãã³ã¹ã®ç£èŠã¯ããªãã®è²¬ä»»ã«ãªããŸãã
ããããå°ãªããšããã€ãã£ãã§ã¯ãããŸããããããããªãã©ã€ã³ãã¡ãŒã¹ããæ§ç¯ã§ããGraphQL ã¯ã©ã€ã¢ã³ãããããŸãããããã¯ããã£ãã·ã³ã°ããµãŒãã¹ã¯ãŒã«ãŒãªã©ããªãã©ã€ã³æã«ããŒã¿æäœãå®è¡ããããã«èšèšãããæ©èœã䜿çšããŸãã
åçš®èšèªã® GraphQL ã¯ã©ã€ã¢ã³ãã®ãªã¹ãã¯ãåœç€Ÿã®ã³ãŒãããŒãžã«ãããŸãã
GraphQL ã«é¢é£ããã»ãã¥ãªãã£äžã®æžå¿µäºé ã®å€§éšåã¯ãä»»æã® API ããµãŒãã¹ã§äžè¬çã§ããããã€ãã®äŸãšããŠã¯ãSQL ã€ã³ãžã§ã¯ã·ã§ã³ããµãŒãã¹æåŠ (DoS) æ»æããŸãã¯æ¬ é¥ã®ããèªèšŒãæªçšãã人ãããŸããããããGraphQL ã«åºæã®æ»æããããŸããäŸãã°ããããæ»æã§ãããããã®æ»æã¯ãGraphQL ãåäžã®ãããã¯ãŒã¯åŒã³åºãã§è€æ°ã®ã¯ãšãªïŒãŸãã¯è€æ°ã®ãªããžã§ã¯ãã€ã³ã¹ã¿ã³ã¹ã«å¯Ÿãããªã¯ãšã¹ãïŒããããåŠçããããšãèš±å¯ããŠããããšãåå ã§çºçããå¯èœæ§ããããŸãã
æžå¿µäºé ã«ããããããäºé²æªçœ®ãè¬ããããšã¯éèŠã§ããGraphQL ãµãŒããŒãä¿è·ããããã®æ¹æ³ã¯ãããããããŸããã¿ã€ã ã¢ãŠãã®äœ¿çšãã¯ãšãªã®æå€§æ·±ãã®èšå®ãå®äºã«å¿ èŠãªãµãŒããŒæéã«åºã¥ããŠã¯ãšãªã®èª¿æŽãªã©ã¯ããã¹ãŠèããããã¢ãããŒãã§ãã
äžè¬çãªã»ãã¥ãªãã£äžã®æžå¿µäºé ãšãã®å¯ŸåŠæ¹æ³ã®æŠèŠã«ã€ããŠã¯ãHow to GraphQL ã®ã»ãã¥ãªãã£ãã¥ãŒããªã¢ã«ãšOWASP ã® GraphQL ããŒãã·ãŒããã芧ãã ããã
ããžãã¹ããžãã¯ã¬ã€ã€ãŒã§æ¿èªåäœãé©çšããããšããå§ãããŸããããããã°ãæ¿èªã®åäžã®çå®ã®æ å ±æºãæã€ããšãã§ããŸãã
ãã詳现ãªèª¬æã«ã€ããŠã¯ãåœç€Ÿã®æ¿èªããã¥ã¡ã³ããåç §ããŠãã ããã
OAuthãJWTãªã©ã®äžè¬çãªãã¿ãŒã³ã䜿çšããŠèªèšŒãå®è£ ã§ããŸããGraphQL ã®ä»æ§å ã§ã¯ãèªèšŒã«ã€ããŠç¹å¥ãªãã®ã¯äœããããŸããã
ããã€ãã®GraphQL ã©ã€ãã©ãªã«ã¯ãèªèšŒã®ããã®ç¹å®ã®ãããã³ã«ãå«ãŸããŠããŸãããã ãããã€ãã©ã€ã³ã¢ãã«ã䜿çšããŠããå Žåã¯ãGraphQL ããã¹ãŠã®èªèšŒããã«ãŠã§ã¢ã®åŸã«é 眮ããããšããå§ãããŸãã
GraphQL.jsã䜿çšã㊠API ãµãŒããŒãæ§ç¯ããå Žåã¯ãExpress ããã«ãŠã§ã¢ã䜿çšããèªèšŒã®åŠçã«é¢ããããã¥ã¡ã³ãããããŸãã
ã¯ããå¯èœã§ãããã€ã¯ããµãŒãã¹ã¢ãŒããã¯ãã£ã« GraphQL ãçµ±åããå Žåã¯ãã¯ã©ã€ã¢ã³ããè€æ°ã® GraphQL ãµãŒãã¹ãšéä¿¡ããã®ã§ã¯ãªããAPI ã²ãŒããŠã§ã€ãšã㊠1 ã€ã® GraphQL ã¹ããŒãã䜿çšããããšããå§ãããŸãããã®ããã«ããŠãããã¯ãšã³ãããã€ã¯ããµãŒãã¹ã«åå²ã§ããŸãããããã§ãåäžã® API ããããã³ããšã³ãã«ãã¹ãŠã®ããŒã¿ãåéã§ããŸãã
API ã²ãŒããŠã§ã€ãäœæããã«ã¯å€ãã®æ¹æ³ããããŸããGraphQL ã䜿çšããããšã®å©ç¹ã¯ããã£ãã·ã³ã°ããªã¯ãšã¹ãã®ããžã§ãããã¯ãšãªã®ã¹ã±ãžã¥ãŒã«ã®èšç»ãªã©ã®æ©èœãå©çšã§ããããšã§ãã
ä»ã® REST API ãšåæ§ã«ãGraphQL ãµãŒãã¹ã®ããŒãžã§ãã³ã°ã劚ãããã®ã¯ãããŸããããšã¯ãããGraphQL ã¯èšèšäžãããŒãžã§ã³ç®¡çãåé¿ããŸãã
代ããã«ãGraphQL ã¯ã¹ããŒããç¶ç¶çã«æ§ç¯ããã³é²åãããããã®ããŒã«ãæäŸããŸããããšãã°ãGraphQL ã¯æç€ºçã«èŠæ±ãããããŒã¿ã®ã¿ãè¿ããŸããããã¯ãç Žå£çãªå€æŽãäœæããããæ¢åã®ã¯ãšãªã®çµæãèšããŸãããããããšãªããæ°ããæ©èœïŒããã³é¢é£ãããã¹ãŠã®ã¿ã€ããšãã£ãŒã«ãïŒã远å ã§ããããšãæå³ããŸãã
GraphQL ã§ã®ããŒãžã§ã³ç®¡çã®ããã¿ã«ã€ããŠã¯ããã¹ããã©ã¯ãã£ã¹ã»ã¯ã·ã§ã³ã§è©³ããèªãããšãã§ããŸãã
GraphQL ã®å©ç¹ã® 1 ã€ã¯ãæ¬è³ªçã«èªå·±ããã¥ã¡ã³ãåãããŠããããšã§ããGraphiQLãªã©ã®ã€ã³ã¿ã©ã¯ãã£ãããŒã«ã䜿çšãããšãGraphQL API ã«ãã£ãŠå ¬éãããŠããããŒã¿ïŒãã£ãŒã«ããã¿ã€ããªã©ïŒã調ã¹ãããšãã§ããŸããdescription ãã£ãŒã«ãã远å ããŠããšã³ããã€ã³ãã«é¢ããè£è¶³çãªã¡ã¢ãæäŸããããšãã§ããŸãããã® description ãã£ãŒã«ãã¯ãæååãš Markdown ããµããŒãããŠããŸãã
å€ãã®äººã«ãšã£ãŠãããã¯åå㪠API ãªãã¡ã¬ã³ã¹ããã¥ã¡ã³ããæäŸããŸããããããä»ã®åœ¢åŒã®ããã¥ã¡ã³ãã®å¿ èŠæ§ãæžããããã§ã¯ãããŸãããäžè¬çãªæŠå¿µãç¹å®ã®ãŠãŒã¹ã±ãŒã¹ã«ã©ã®ããã«é¢é£ããŠãããã説æããã¬ã€ããäœæããå¿ èŠãããã§ãããã
GraphQL 仿§æžã®ææ°ã®ã¯ãŒãã³ã°ãã©ãããªãªãŒã¹ã¯ãspec.graphql.org/draftã«ãããŸãã以åã®ãšãã£ã·ã§ã³ãããªãªãŒã¹ã¿ã°ã«å¯Ÿå¿ããããŒããªã³ã¯ã§å©çšã§ããŸãã
åãªãªãŒã¹ã®èåŸã«ããããã»ã¹å šäœã¯ãªãŒãã³ãœãŒã¹ã§ããgraphql-spec ãªããžããªã®ãã«ãªã¯ãšã¹ãããã©ããŒããããšã§ã仿§æžã®ææ¡ãç£èŠã§ããŸãããŸããããŸããŸãªææ¡ã«é¢ããéå»ã® GraphQL ã¯ãŒãã³ã°ã°ã«ãŒãã®è°è«ãYouTubeã§ç¢ºèªããããšãã§ããŸãã
GraphQL ã¯ãŸã é²åããŠãããè²¢ç®ã¯å€§æè¿ã§ãïŒä»æ§æžïŒææ°ã®ã¯ãŒãã³ã°ãã©ãããå«ãïŒã¯ãªãŒãã³ãœãŒã¹ã§ããã³ã³ããªãã¥ãŒã¿ãŒã¬ã€ãã©ã€ã³ã¯ GitHub ã§å ¥æã§ããŸãã
ãããã仿§æžä»¥å€ã«ããGraphQL ã«é¢ããæ¹æ³ã¯ä»ã«ããããŸãããã®ãŠã§ããµã€ããšããã¥ã¡ã³ãã®ã³ã³ãã³ãã®æŽæ°ãªã©ã§ããgraphql-jsãgraphql-httpãGraphiQLããŸãã¯GraphQL Foundationã«ãã£ãŠç¶æãããŠãããã®ä»å€ãã®ãããžã§ã¯ãã® 1 ã€ãžã®è²¢ç®ãªã©ã§ãã
GraphQL 仿§æžãšé¢é£ããåç §å®è£ ã¯ãJoint Development Foundation ãããžã§ã¯ãïŒLinux Foundation ãã¡ããªãŒã®äžéšã§ããããŸãïŒãå人ãŸãã¯äŒæ¥ã®è²¢ç®è ã¯ãç¡æã§ããã¥ã¡ã³ãã«çœ²åããè²¢ç®ããããžã§ã¯ãã®ãªãŒãã³ãœãŒã¹ã©ã€ã»ã³ã¹ã«åŸãããšã«åæããŸãããã㯠GraphQL Foundation ã®ã¡ã³ããŒã·ããã§ã¯ãªãããã仿§æžã®ã¡ã³ããŒã¯äºç®ã®äœ¿ãéãæ±ºå®ããŸããã
GraphQL 仿§æžã®ã¡ã³ããŒã·ããææžã«çœ²åããã«ã¯ãä»»æã®GitHub ã® GraphQL ãªããžããªã«å¯Ÿã㊠PR ãéããŠãã ããã
ããªãã®çµç¹ã GraphQL ã䜿çšããŠæ©æµãåããŠããå Žåã¯ãäŒç€Ÿã代衚ã㊠PR ãéããGraphQL Foundation ã«åå ããããšãæ€èšããŠãã ããã
ãŸã ãã®ãŠã§ããµã€ãã«ã¯ãããŸããããçŸåšäœæ¥äžã§ãããµãã¹ã¯ãªãã·ã§ã³ã«é¢ããã¬ã€ãã®äœæã«ãååããã ããå Žåã¯ããç¥ãããã ããã
çŸæç¹ã§ã¯ã仿§æžã«ãµãã¹ã¯ãªãã·ã§ã³ã®æžãæ¹ãšå®è¡æ¹æ³ã®è©³çްãå«ãŸããŠããŸãã
ããããGraphQLã¯ã¹ããŒã管çã©ã€ãã©ãªã§ã¯ãããŸããããã¹ããŒã管çã©ã€ãã©ãªã®å¿ èŠæ§ã軜æžããããšãã§ããŸãã
Reduxã®ãããªã¹ããŒã管çã©ã€ãã©ãªã®å©ç¹ã®1ã€ã¯ãAPIã¬ã¹ãã³ã¹ãã¢ããªã±ãŒã·ã§ã³ãçè§£ã§ãã圢åŒã«å€æã§ããããšã§ããGraphQLã§ã¯ããªã¯ãšã¹ãããããŒã¿ãå¶åŸ¡ã§ããéåžžãã°ã©ãã®ãã¶ã€ã³ã«ãã£ãŠã¯ã©ã€ã¢ã³ããã¬ã³ããªãŒãªåœ¢åŒã§çµæããã©ãŒããããããŸãããã®ããããã®å©ç¹ã¯æ¢ã«çµã¿èŸŒãŸããŠããŸããå€ãã®ã¯ã©ã€ã¢ã³ãã©ã€ãã©ãªãã¹ããŒãã®ç®¡çã«äœ¿çšã§ãããã£ãã·ã¥ãªã©ã®æ©èœãçµã¿èŸŒãŸããŠããŸããããã§ãã¹ããŒã管çã©ã€ãã©ãªãå®è£ ããããšãéžæã§ããŸãããã¬ã¹ãã³ã¹ããŒã¿ã®ãã©ãŒãããã«äœ¿çšããããšã¯äžè¬çã«ã¯å¿ èŠãããŸããã
Foundationã®äž»ãªè²¬ä»»ã¯ãGraphQLã³ãã¥ããã£ã®æç¶å¯èœæ§ãæå€§éã«é«ããããã®ããªã·ãŒèšå®ãšäºç®é åã§ããã¡ã³ããŒã¯æ¯æéå¬ãããçäºäŒã«åå ããè³éã®é åæ¹æ³ã決å®ããŸãã
GraphQL Foundationã¯ãã¡ã³ããŒã®ãµããŒãã«ãã£ãŠã®ã¿è³éæäŸãããŠããŸããçäºäŒã¯ãäŒè²»ãã³ãã¥ããã£ã®æå€§éã®å©çã®ããã«äœ¿çšãã幎éäºç®ãèšå®ããŸããFoundationãäŒå¡ã·ãããéããŠéããè³éã®åé æ¹æ³ã¯æ¬¡ã®ãšããã§ãã
GraphQL Foundationã®äºç®ã¯ãã³ãã¥ããã£ã®ããŒãºã®å€åã«åãããŠèª¿æŽãããŸãã
ä»ã®Linux Foundationãããžã§ã¯ããšåæ§ã«ãçäºäŒã¯æç¥šã«ãã£ãŠæææ±ºå®ãè¡ããŸãããã¹ãŠã®æç¥šã¯å¹³çã§ãããã¡ã³ããŒã«ç¹å¥ãªæç¥šæš©ãç¹æš©ã¯ãããŸãããçŸåšã®æ²ç« ã§ã¯ãçäºäŒã®ã¡ã³ããŒæ°ã25åã«å¶éããŠããŸãã
GraphQL Foundationã®äŒå¡è³æ Œã¯ãGraphQLãšã³ã·ã¹ãã ãæ¯æŽãããäŒæ¥ã«éæŸãããŠããŸããGraphQL Foundationã¯Linux Foundationã«ãã¹ããããŠãããããã¡ã³ããŒã¯Linux Foundationã«ãåå ããå¿ èŠããããŸãã
ããããFoundationã®äŒå¡è³æ Œã¯æè¡éçºã³ãã¥ããã£ãšã¯å¥ã§ããGraphQLéçºã«åå ããè²»çšã¯ããããŸããããåå ããã«ã¯ç¡æã®GraphQL SpecificationäŒå¡å¥çŽã«çœ²åããå¿ èŠããããŸããããã2ã€ã¯å¥ç©ã§ãã
ã¡ã³ããŒã¯ãå¿ é ã®è³éãæäŸãããã®äœ¿ç𿹿³ã«é¢ããæææ±ºå®ã«åå ããããã«Foundationã«åå ããŸããéçºè ã¯ãã¢ã€ãã¢ãã³ãŒãããã®ä»ã®ã³ã³ãã³ããæäŸããããã«GraphQL Specificationã«åå ããŸããå€ãã®äŒæ¥ã¯äž¡æ¹ãè¡ã£ãŠããŸãã
ãã²ãåå ãã ããïŒå§ããã®ã«æé©ãªå Žæã¯ãæ¯æéå¬ãããGraphQLã¯ãŒãã³ã°ã°ã«ãŒãã§ããè°é¡ã«èªåèªèº«ã远å ããPRãéãã°ãåå ã§ããŸãã
ãã以å€ã§ã¯ãä»ã®ãããžã§ã¯ãã«åå ã§ããŸãã
GraphQL Foundationã¯ãApolloãAWSãButterfly NetworkãDgraph LabsãFacebookãGatsbyãGraphZenãHasuraãIBMãIntuitãNeo4jãNovvumãPipefyãSalsifyãSolo.ioãããã³Thicitã«ãã£ãŠèšç«ãããŸããã
GraphQL Foundationã®äŒå¡ããŒãžã§ãäŒå¡ã«ã€ããŠè©³ããç¥ãããšãã§ããŸãã
äŒå¡ç³è«ãã©ãŒã ã«èšå ¥ããããšã§ãGraphQL FoundationãšLinux Foundationã®ã¡ã³ããŒã«ãªãããšãã§ããŸãã