Sacha Greifã«ããèšäºããã®GraphQLãšã¯äœã§ããïŒãã®ç¿»èš³ã«æ³šç®ããŠãã ããã
ããªããç§ã®ãããªäººãªããæ°ããæè¡ã«ã€ããŠåŠã¶ãšããããªãã¯éåžž3ã€ã®æ®µéãçµãŸãïŒ
- æåŠïŒ å¥ã®JavaScriptã©ã€ãã©ãªïŒïŒ ãªãã§ïŒ ç§ã¯ãã§ã«jQueryãæã£ãŠããŸãïŒ
- èå³ïŒ ããŒããããããç§ã¯ãã®ã©ã€ãã©ãªãèŠãŠã¿ãå¿
èŠããããŸã...
- ãããã¯ïŒ å©ããŠïŒ ä»ãããã®ã©ã€ãã©ãªãå匷ããå¿
èŠããããŸã ãããããªããšãç§ã®ç¥èãæ代é
ãã«ãªããŸãïŒ
æ¥éã«é²åããæè¡ã®æ代ã«æ
éããç¶æããããã®1ã€ã®ç§ïŒããããŸããé¢å¿ãæãªããããšããã«ç¬¬2段éãšç¬¬3段éã®éã§æ°ããããšãåŠã¶ããšã§ããããããŸã§ã®ãšããæè¡ã¯ãŸã æ®åããŠããŸããã
ã ãããããä»ããããã®GraphQLãã©ãã§èããŠããã®ããç¥ãæã§ãã
åºæ¬
äžèšã§èšãã°ãGraphQLã¯ããŒã¿ããªã¯ãšã¹ãããæ¹æ³ãèšè¿°ããæ§æã§ãããäž»ã«ã¯ã©ã€ã¢ã³ãããµãŒããŒããããŒã¿ãããŠã³ããŒãããããã«äœ¿çšãããŸãã GraphQLã«ã¯3ã€ã®äž»ãªç¹åŸŽããããŸãã
- ã¯ã©ã€ã¢ã³ããå¿
èŠãªããŒã¿ãæ£ç¢ºã«æå®ã§ããããã«ããŸãã
- è€æ°ã®ãœãŒã¹ããã®ããŒã¿ã®éçŽãä¿é²ããŸãã
- åã·ã¹ãã ã䜿çšããŠããŒã¿ãèšè¿°ããŸãã
ããã§ã¯ãGraphQLã®åŠç¿ãã©ãããå§ããŸããïŒ å®éã«ã¯ã©ã®ããã«èŠããŸããïŒ äœ¿çšãéå§ããã«ã¯ïŒ èªãã§èŠã€ããŠãã ããïŒ
ææŠãã
GraphQLã¯å€§ããªå€ãFacebookã§éçºãããŸããããã¯ããã«åçŽãªã¢ããªã±ãŒã·ã§ã³ã§ãããåŸæ¥ã®REST APIã®å¶éã«çŽé¢ããå¯èœæ§ããããŸãã
ããšãã°ã
ïŒ posts
ïŒã®ãªã¹ãã衚瀺ããããããã®äžã«ãŠãŒã¶ãŒåãã¢ãã¿ãŒãå«ããããïŒïŒ likes
ïŒã®ãªã¹ãã衚瀺ããå¿
èŠããããšããŸãã å®éãé£ããã¯ãããŸããããŠãŒã¶ãŒãªããžã§ã¯ããå«ãlikes
é
åãå«ãããã«ã posts
APIãå€æŽããã ãã§ãã
ãããããã®åŸãã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ãéçºãããšãã«ãè¿œå ã®ããŒã¿ãèªã¿èŸŒãããã«ãã¢ããªã±ãŒã·ã§ã³ã®å®è¡ãé
ããªãããšãå€æããŸããã ãããã£ãŠã 2ã€ã®ãšã³ããã€ã³ããå¿
èŠã«ãªããŸãã1ã€ã¯ãããä»ãã®ã¬ã³ãŒããè¿ãããã1 ã€ã¯ãããïŒ
ãã1ã€ã®èŠçŽ ãè¿œå ããŸããã¬ã³ãŒãã¯MySQLããŒã¿ããŒã¹ã«æ ŒçŽãããRedisã«ã¯åé¡ã®ãã®ãæ ŒçŽãããŠããããšãããããŸãã ä»äœããã¹ããïŒïŒ
ãã®ã·ããªãªããFacebookãæ±ãå€ãã®ããŒã¿ãœãŒã¹ãšã¯ã©ã€ã¢ã³ãAPIã«å€æ¿ãããšãå€ãè¯ãREST APIãéçã«éããçç±ãç解ã§ããŸãã
解決ç
Facebookã¯æŠå¿µçã«ã·ã³ãã«ãªãœãªã¥ãŒã·ã§ã³ãèæ¡ããŸãããå€ãã®ãæããªããšã³ããã€ã³ãã䜿çšãã代ããã«ãè€éãªã¯ãšãªãåŠçããã¯ã©ã€ã¢ã³ããèŠæ±ãã圢åŒã®ããŒã¿ãæäŸã§ãããã¹ããŒãããšã³ããã€ã³ãã1ã€çšæããããšããå§ãããŸãã
å®éãGraphQLã¬ã€ã€ãŒã¯ã¯ã©ã€ã¢ã³ããš1ã€ä»¥äžã®ããŒã¿ãœãŒã¹ã®éã«ãããŸãã 顧客ã®èŠæ±ãåãå
¥ããæ瀺ã«åŸã£ãŠå¿
èŠãªããŒã¿ãè¿ããŸãã æ··ä¹±ããïŒ æ¯phorã®æéïŒ
å€ãRESTã¢ãã«ã䜿çšããããšã¯ããã¶ã泚æãã次ã«é£ã¹ç©ã®é
éã泚æãã次ã«ãã©ã€ã¯ãªãŒããŒãåŒã³åºããŠæãæŸããããªãã®ã§ãã 3ã€ã®åºè-3ã€ã®é»è©±ã
GraphQLã¯ããŒãœãã«ã¢ã·ã¹ã¿ã³ãã®ãããªãã®ã§ãã3ãæãã¹ãŠã®äœæãæããŠãããå¿
èŠãªãã®ïŒãç§ã®æã倧ããªãã¶ã2ããŒã¹ã®åµãæã£ãŠããŠãã ãããïŒãå°ããããããå±ãã®ãåŸ
ã€ããšãã§ããŸãã
èšãæããã°ãGraphQLã¯ãã®éæ³ã®ããŒãœãã«ã¢ã·ã¹ã¿ã³ããšè©±ãããã®æšæºèšèªã§ãã
Googleç»åã«ãããšãå
žåçãªããŒãœãã«ã¢ã·ã¹ã¿ã³ãã¯8人ã®ãšã€ãªã¢ã³ã§ã
å®éã«ã¯ãGraphQL APIã¯ãã¹ããŒãã ã¯ãšãª ããªãŸã«ãã®3ã€ã®äž»èŠãªæ§æèŠçŽ ã«åºã¥ããŠæ§ç¯ãããŠããŸãã
åãåãã
ïŒã¯ãšãªãšãªã¯ãšã¹ãã¯ããã¯ãšãªããšåçã«ç¿»èš³ãããŸãã以äžã§ã¯ãç¹ã«æå®ããªãéããã¯ãšãªã¯æ瀺ãããŸã-çŽperãïŒ
ããŒãœãã«ã¢ã·ã¹ã¿ã³ãã«äœããå°ãããšã ãªã¯ãšã¹ããå®äºããŸãã 次ã®ããã«ãªããŸãã
query { stuff }
query
ããŒã¯ãŒãã䜿çšããŠæ°ããã¯ãšãªã宣èšãã stuff
ãã£ãŒã«ãã«ã€ããŠãå°ããŸãã GraphQLã¯ãšãªã®çŽ æŽãããç¹ã¯ããã¹ãããããã£ãŒã«ãããµããŒãããŠããããã1ã¬ãã«æ·±ãã§ããããšã§ãã
query { stuff { eggs shirt pizza } }
ã芧ã®ãšããããªã¯ãšã¹ããçæãããšãã«ãã¯ã©ã€ã¢ã³ãã¯ããŒã¿ã®éä¿¡å
ãç¥ãå¿
èŠã¯ãããŸããã 圌ã¯ãããã«ã€ããŠè³ªåããã ãã§ãGraphQLãµãŒããŒãæ®ããåŠçããŸãã
ãŸããã¯ãšãªãã£ãŒã«ããé
åã«ããããšãã§ããŸã ã ããšãã°ãäžè¬çãªã¡ãã»ãŒãžãªã¹ãã¯ãšãªãã³ãã¬ãŒãã¯æ¬¡ã®ãšããã§ãã
query { posts { # title body author { # name avatarUrl profileUrl } } }
èŠæ±ãã£ãŒã«ãã«ã¯åŒæ°ãå«ããããšãã§ããŸãã ããšãã°ãç¹å®ã®æçš¿ã衚瀺ããå Žåã post
ãã£ãŒã«ãã«id
åŒæ°ãè¿œå ã§ããŸãã
query { post(id: "123foo"){ title body author{ name avatarUrl profileUrl } } }
æåŸã«ã id
åŒæ°ãåçã«ãããå Žåã¯ã å€æ°ãå®çŸ©ããŠãããªã¯ãšã¹ãã§äœ¿çšã§ããŸãïŒãªã¯ãšã¹ãã®ååãã«ããããšã«æ³šæããŠãã ããïŒã
query getMyPost($id: String) { post(id: $id){ title body author{ name avatarUrl profileUrl } } }
ããããã¹ãŠãå®éã«è©Šãè¯ãæ¹æ³ã¯ãGitHubã®GraphQL API Explorerã䜿çšããããšã§ã ã ããšãã°ã次ã®ã¯ãšãªãè©ŠããŠã¿ãŸãããã
query { repository(owner: "graphql", name: "graphql-js"){ name description } }
åäœäžã®GraphQLãšèªåè£å®
ãã£ãŒã«ãåãå
¥åãããšãGraphQL APIã䜿çšããŠååŸããããã£ãŒã«ãåãIDEã«ãã£ãŠèªåçã«æäŸãããããšã«æ³šæããŠãã ããã è³¢ãïŒ
GraphQLã¯ãšãªã®æ§é
GraphQLã¯ãšãªã®è©³çŽ°ã«ã€ããŠã¯ãåªããèšäºãAnatomy of GraphQL Queriesããã芧ãã ãã ã
ã¬ãŸã«ã
ããªãã圌ã«äœæãäžããªãéããäžçã§æé«ã®ããŒãœãã«ã¢ã·ã¹ã¿ã³ãã§ããããªãã®ãã©ã€ã¯ãªãŒãã³ã°ã¢ã€ãã ãæåããããšã¯ã§ããŸããã
åæ§ã«ãGraphQLãµãŒããŒã¯ã ãªãŸã«ããŒã䜿çšããŠèª¬æãããªãéããçä¿¡ã¯ãšãªã®åŠçæ¹æ³ãç¥ãããšãã§ããŸããã
èªèæ©èœã䜿çšããŠãGraphQLã¯ãèŠæ±ããããã£ãŒã«ãã«å¯Ÿå¿ããããŒã¿ãååŸããæ¹æ³ãšå Žæãç解ããŸãã ããšãã°ããã£ãŒã«ãã¬ã³ãŒãã®èªèãšã³ãžã³ã¯æ¬¡ã®ããã«ãªããŸãïŒApollo GraphQL-Toolsã»ããã®ã¹ããŒããžã§ãã¬ãŒã¿ãŒã䜿çšïŒã
Query: { post(root, args) { return Posts.find({ id: args.id }); } }
å¿çã®ã«ãŒãã§post
ãåä¿¡
ããã Query
ã»ã¯ã·ã§ã³ã«é
眮ããŸãã ãã ãã author
ãã£ãŒã«ããªã©ã®ãµããã£ãŒã«ãã®ãªãŸã«ããŒãäœæããããšãã§ããŸãã
Query: { post(root, args) { return Posts.find({ id: args.id }); } }, Post: { author(post) { return Users.find({ id: post.authorId}) } }
ãªãŸã«ãã¯è¿ããããªããžã§ã¯ãã®æ°ã«å¶éããªãããšã«æ³šæããŠãã ããã ããšãã°ã commentsCount
ãã£ãŒã«ããPost
ãªããžã§ã¯ãã«è¿œå ãããšcommentsCount
ãŸãã
Post: { author(post) { return Users.find({ id: post.authorId}) }, commentsCount(post) { return Comments.find({ postId: post.id}).count() } }
ããã§ã®éèŠãªæŠå¿µã¯ãGraphQLã¯ãšãªã¹ããŒããšããŒã¿ããŒã¹ã®æ§é ããŸã£ããé¢é£ããŠããªããšããããšã§ãã èšãæãããšã author
ãã£ãŒã«ããŸãã¯commentsCount
ãã£ãŒã«ãã¯ããŒã¿ããŒã¹ã«ååšããªãå¯èœæ§ããããŸãããã¬ã³ã°ãã€ã¶ãŒã®åã«ãããã·ãã¥ã¬ãŒããã§ããŸãã
äžèšã®ããã«ãã¬ã³ã°ãã€ã¶ãŒå
ã«ä»»æã®ã³ãŒããæžãããšãã§ããŸãã ãã®ãã ãããŒã¿ããŒã¹ã®å
容ãå€æŽã§ããŸãã ãã®ãããªèªèã¯çªç¶å€ç°ãšåŒã°ããŸãã
ã¹ããŒã
graphQLåã®ããŒã¿ã¹ããŒãã®ãããã§ãããã¯ãã¹ãŠå¯èœã«ãªããŸããã ãã®èšäºã®ç®çã¯ãå®å
šãªçŽ¹ä»ã§ã¯ãªãæŠèŠãæäŸããããšãªã®ã§ããã®ã»ã¯ã·ã§ã³ã§ã¯è©³çŽ°ã説æããŸããã
詳现ãç¥ãããå Žåã¯ã GraphQLã®ããã¥ã¡ã³ããã芧ãã ããã
ãããã質å
äŒæ©ããŠãããã€ãã®äžè¬çãªè³ªåã«çããŠãã ããã
ãããããªãã¯åŸåã«ããŸãã ã¯ããããã§ãã ç§ã¯ããªããäœããèããããšæãã®ãèŠãŸãã ãããæ¥ããããããªãã§ïŒ
å
±éç¹ã¯ãããŸããã å®éãGraphQLã¯Neo4jã®ãããªã°ã©ãããŒã¿ããŒã¹ãšã¯é¢ä¿ãããŸããã ãã°ã©ããéšåã¯ããã£ãŒã«ããšãµããã£ãŒã«ãã䜿çšããŠAPIã°ã©ãã調ã¹ãŠã³ã³ãã³ããååŸãããšããèãæ¹ãåæ ããŠããŸãã ãQLãã®äžéšã¯ãã¯ãšãªèšèªã-ãã¯ãšãªèšèªãã®ç¥ã§ãã
RESTã«å®å
šã«æºè¶³ããŠããŸãããGraphQLã«åãæ¿ããå¿
èŠãããã®ã¯ãªãã§ããïŒ
GraphQLã§ããREST APIã®åé¡ç¹ã«å°éããŠããªãå Žåãå¿é
ããå¿
èŠã¯ãããŸããã
RESTã®äžã§GraphQLã䜿çšãããšãAPIã®æ®ãã®éšåã§è€éãªå€æŽãè¡ã£ãããèç©ããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãå£ãããããããšã¯ã»ãšãã©ãªããããã©ã®ãããªå Žåã§ã移è¡ã¯æ»æŽ»åé¡ã§ã¯ãããŸããã ãããã£ãŠãå¯èœã§ããã°ããããžã§ã¯ãã®ããäžéšã§GraphQLãè©Šã䟡å€ããããŸãã
React / Relay / library_nameãªãã§GraphQLã䜿çšã§ããŸããïŒ
ãã¡ããïŒ GraphQLã¯åãªãä»æ§ã§ãããæ¢è£œã®ã¯ã©ã€ã¢ã³ãïŒããšãã°ã Apolloã«ã¯WebãiOSãAngularãªã©ã®ã¯ã©ã€ã¢ã³ãããããŸãïŒã䜿çšããããGraphQLãµãŒããŒã«ã¯ãšãªãæåã§éä¿¡ããããšã«ãããä»»æã®ãã©ãããã©ãŒã ã®ä»»æã®ã©ã€ãã©ãªã§äœ¿çšã§ããŸãã
GraphQLã¯Facebookã«ãã£ãŠäœæããããã®ã§ãããFacebookãä¿¡é ŒããŠããŸããã
ç¹°ãè¿ãã«ãªããŸãããGraphQLã¯åãªãä»æ§ã§ããã€ãŸããFacebookã«ãã£ãŠèšè¿°ããã1è¡ã®ã³ãŒãã䜿çšããã«äœ¿çšã§ããŸãã
Facebookã®ãµããŒãã¯ãGraphQLãšã³ã·ã¹ãã ã«ãšã£ãŠééããªãè¯ããã©ã¹ã§ãã ããããçŸæç¹ã§ã¯ãFacebookã¯GraphQLããµããŒãããã®ã«ååãªå€§ããã§ãïŒããšãFacebookã䜿çšãããããšããŠãïŒã
ã©ãããããããã¯ã©ã€ã¢ã³ãã«å¿
èŠãªããŒã¿ãèŠæ±ããããããšã¯å®å
šã«èŠããŸãã
èªèãšã³ãžã³ãäœæããŠããã®ã§ããã®ã¬ãã«ã§ã»ãã¥ãªãã£ã®åé¡ã解決ã§ããŸãã
ããšãã°ãã¯ã©ã€ã¢ã³ããlimit
ãã©ã¡ãŒã¿ãŒã䜿çšããŠèŠæ±ããããã¥ã¡ã³ãã®æ°ã瀺ãããšãèš±å¯ããå Žåãå€ãã®å Žåãã¯ã©ã€ã¢ã³ããäœçŸäžãã®ããã¥ã¡ã³ããèŠæ±ãããšãã«ãµãŒãã¹æåŠæ»æãåé¿ããããã«ãã®æ°ãå¶åŸ¡ããå¿
èŠããããŸãã
ããã§ãããªãã¯å§ããããã«äœãå¿
èŠã§ããïŒ
å®éãéå§ããã®ã«å¿
èŠãªã³ã³ããŒãã³ãã¯2ã€ã ãã§ãã
- APIãªã¯ãšã¹ããåŠçããããã®GraphQLãµãŒããŒ
- ãšã³ããã€ã³ãã«æ¥ç¶ããGraphQLã¯ã©ã€ã¢ã³ãã
GraphQLã®ä»çµã¿ãç解ããã®ã§ããã®åéã®äž»èŠãªãã¬ãŒã€ãŒã«ã€ããŠè©±ãããããšãã§ããŸãã
GraphQLãµãŒããŒ
æåã«äœæ¥ããå¿
èŠãããã®ã¯ãGraphQLãµãŒããŒã§ãã GraphQLèªäœã¯åãªãä»æ§ã§ããããã競åããå®è£
ãžã®æãéãããŠããŸãã
ããã¯ãGraphQLä»æ§ã®å
ã®å®è£
ãžã®ãªã³ã¯ã§ãã express-graphqlãšãšãã«äœ¿çšããŠãAPIãµãŒããŒãäœæã§ããŸã ã
ApolloããŒã ã«ã¯ãGraphQLãµãŒããŒã®ç¬èªã®å®è£
ããããŸãã ãªãªãžãã«ã»ã©å®å
šã§ã¯ãããŸããããéåžžã«ããææžåãããç¶æãããæ¥éã«éçºãããŠããŸãã
å
¬åŒWebãµã€ãã«ã¯ã ããŸããŸãªãã©ãããã©ãŒã ïŒPHPãRubyãªã©ïŒ åãã®GraphQLä»æ§ã®å®è£
ã®ãªã¹ãããããŸãã
GraphQLã¯ã©ã€ã¢ã³ã
ãã¡ãããGraphQL APIãçŽæ¥æäœããããšãã§ããŸãããç¹å¥ãªã¯ã©ã€ã¢ã³ãã©ã€ãã©ãªã䜿çšãããšééããªãäœæ¥ã楜ã«ãªããŸãã
ãªã¬ãŒã¯ãFacebookç¬èªã®ããŒã«ãããã§ãã ããã¯ãFacebookã®ããŒãºãèæ
®ããŠäœæããããã®ã§ãã»ãšãã©ã®ãŠãŒã¶ãŒã«ãšã£ãŠå°ãåé·ã«ãªãå¯èœæ§ããããŸãã
ããã«åœŒã®ä»£ããã«ãã®å°åã®æ°ããã¡ã³ããŒã ã¢ããã«ãªããŸãã ã å
žåçãªã¯ã©ã€ã¢ã³ãã¯ã次ã®2ã€ã®éšåã§æ§æãããŠããŸãã
ããã©ã«ãã§ã¯ãApolloã¯ã©ã€ã¢ã³ãã¯Reduxã䜿çšããŠããŒã¿ãä¿åããŸããReduxèªäœã¯ãè±å¯ãªãšã³ã·ã¹ãã ãåããããªãä¿¡é Œã§ããç¶æ
管çã©ã€ãã©ãªã§ãã
Chrome DevToolsã®Apolloæ¡åŒµæ©èœ
ãªãŒãã³ãœãŒã¹ã¢ããªã±ãŒã·ã§ã³
GraphQLã¯ããªãæ°ããæŠå¿µã§ãããšããäºå®ã«ãããããããããã䜿çšããææãªãªãŒãã³ãœãŒã¹ã¢ããªã±ãŒã·ã§ã³ããã§ã«ããã€ããããŸãã
ç§ïŒå
ã®èšäºã®èè
-çŽPerãïŒç§ã¯VulcanJSã®äž»ä»»éçºè
ã§ã ã å€ãã®å®åã³ãŒããæžããªããŠããReact / GraphQLã¹ã¿ãã¯ã®èœåãè©Šãæ©äŒã人ã
ã«äžããããã«äœæããŸããã æ°æé以å
ã«CRUDã¢ããªã±ãŒã·ã§ã³ïŒ Instagramã¯ããŒã³ãªã©ïŒãäœæã§ããããããææ°ã®Webãšã³ã·ã¹ãã ã®ã¬ãŒã«ããšèããããšãã§ããŸãã
Gatsbyã¯Reactã®éçãµã€ããžã§ãã¬ãŒã¿ãŒã§ããã ããŒãžã§ã³1.0以éã GraphQLã䜿çšããŠããŸãã ããã¯äžèŠå¥åŠãªçµã¿åããã®ããã«æãããããããŸããããå®éã«ã¯éåžžã«åŒ·åãªã¢ã€ãã¢ã§ãã ãã«ãããã»ã¹äžã«ãGatsbyã¯ããã€ãã®GraphQL APIããããŒã¿ãæœåºããããã䜿çšããŠå®å
šã«éçãªReactã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸãã
ä»ã®GraphQLããŒã«
GraphiQLã¯ãGraphQLãšã³ããã€ã³ããžã®ã¯ãšãªãäœæããã³å®è¡ããããã®éåžžã«äŸ¿å©ãªãã©ãŠã¶ããŒã¹ã®IDEã§ãã
GraphQLã¯ãšãªã¯ãã¹ããããŠããããã1ã€ã®ã¯ãšãªã§å€æ°ã®ããŒã¿ããŒã¹åŒã³åºããç°¡åã«åŒã³åºãããšãã§ããŸãã è² è·ã軜æžããã«ã¯ãFacebookãéçºããDataLoaderã©ã€ãã©ãªãªã©ã®ãã£ãã·ã¥ããŒã«ã䜿çšã§ããŸãã
Create GraphQL Serverã¯ãMongoããŒã¿ããŒã¹ã䜿çšããŠNodeããŒã¹ã®ãµãŒããŒãç°¡åãã€è¿
éã«çæã§ããã³ã³ãœãŒã«ããã°ã©ã ã§ãã
GraphQLãµãŒããŒã®äœæãšåæ§ã«ãGraphQL-upã䜿çšãããšã GraphcoolãµãŒãã¹ã«åºã¥ããŠGraphQLããã¯ãšã³ãããã°ããäœæã§ããŸãã
GraphQLãµãŒãã¹
æåŸã«ãGraphQL-backend-as-a-serviceãæäŸããäŒæ¥ãå€æ°ãããŸãã 圌ãã¯ããªãã®ããã«ãµãŒããŒåŽã®é¢åãèŠãã§ãããããããŠããã¯GraphQLãšã³ã·ã¹ãã ã«çªå
¥ããè¯ãæ¹æ³ã§ãã
GraphQLãšAWS Lambdaãç¡æã®éçºãã©ã³ãšçµã¿åãããæè»ãªããã¯ãšã³ããã©ãããã©ãŒã ã
å¥ã®GraphQL-back-as-a-a-serviceã§ãç¡æã®æéãã©ã³ããããŸãã Graphcoolã®ãããªå€ãã®æ©èœãæäŸããŸãã
GraphQLã«ã¯ãã§ã«å€ãã®ãªãœãŒã¹ããããŸãã
ïŒã³ã¡ã³ãã§ãã·ã¢èªã®ãªãœãŒã¹ãæäŸããŸã-çŽPerãïŒ
GraphQLã®å
¬åŒWebãµã€ãã«ã¯ã䜿ãå§ããã®ã«åœ¹ç«ã€åªããããã¥ã¡ã³ãããããŸãã
LearnGraphQLã¯ãKadiraãäœæãããªã³ã©ã€ã³ã³ãŒã¹ã§ãã
LearnGraphQLã®ç¶ç·šã§ããLearnApolloã¯ãGraphcoolãäœæããç¡æã®ã³ãŒã¹ã§ãã
Apolloããã°ã«ã¯ãApolloãšGraphQLå
šè¬ã«é¢ãã詳现ãã€å
å®ããèšäºããããããããŸãã
GraphcoolããŒã ããã¥ã¬ãŒã·ã§ã³ããGraphQLãã¥ãŒã¹ã¬ã¿ãŒã
GraphQLã«å ããŠãReactãšMeteorãåãäžããŠããå¥ã®å€§ããªãã¥ãŒã¹ã¬ã¿ãŒã
GraphQLã䜿çšããŠã€ã³ã¿ãŒã³ã ã¯ããŒã³ãäœæããæ¹æ³ã説æããäžé£ã®ãã¥ãŒããªã¢ã«ã
GraphQLã®ãªã³ã¯ãšãªãœãŒã¹ã®ããªãå
æ¬çãªãªã¹ãã
GraphQLã®æ°ãã«ç²åŸããç¥èãã©ã®ããã«å®è·µããããšãã§ããŸããïŒ ããªããè©Šãããšãã§ããããã€ãã®ã¬ã·ãã¯æ¬¡ã®ãšããã§ãã
ãã§ã«Next.jsãšReactã«ç²ŸéããŠããå Žåããã®äŸã§ã¯Graphcoolã䜿çšããŠGraphQLãšã³ããã€ã³ããæ§æããApolloã䜿çšããŠã¯ãšãªãéä¿¡ã§ããŸãã
Vulcanãã¥ãŒããªã¢ã«ã¯ããµãŒããŒãšã¯ã©ã€ã¢ã³ãã«ã·ã³ãã«ãªGraphQLããŒã¿ã¬ã€ã€ãŒãäœæããã®ã«åœ¹ç«ã¡ãŸãã Vulcanã¯ãªãŒã«ã€ã³ã¯ã³ãã©ãããã©ãŒã ã§ãããããããã¯èšå®ãªãã§éå§ããã®ã«é©ããæ¹æ³ã§ãã ãã«ããå¿
èŠãªå Žåã¯ãSlackãã£ã³ãã«ã«ãæ°è»œã«ãåãåãããã ãã ïŒ
Chromaããã°ã«ã¯ãã³ã³ããŒãã³ãããŒã¹ã®éçºã¢ãããŒãã䜿çšããŠReact / GraphQLã¢ããªã±ãŒã·ã§ã³ãäœæããããã®6éšæ§æã®ã¬ã€ãããããŸãã
ãããã«
GraphQLã¯ãçŸä»£ã®éçºã®å€ãã®åéã«åœ±é¿ãäžãããã¯ãããžãŒã§ãããããæåã¯è€éã«èŠãããããããŸããã ããããæéããããŠåºæ¬çãªæŠå¿µãç解ãããšãããã®å€ããçã«ããªã£ãŠããããšã«æ°ä»ããšæããŸãã
䜿çšãããã©ããã«ããããããGraphQLã«æ
£ããã®ã«æéãããã䟡å€ããããšæããŸãã ãŸããŸãå€ãã®äŒæ¥ãæ§é ã䜿çšãéå§ããŠãããä»åŸæ°å¹Žéã§ãŠã§ãéçºã®éèŠãªãã«ãã£ã³ã°ãããã¯ã®1ã€ã«ãªãå¯èœæ§ããããŸãã
åæããŸããïŒ åæããŸãããïŒ ã質åã¯ïŒ ã³ã¡ã³ãæ¬ã§æããŠãã ããã