çŽ10幎åãã¢ããªã·ãã¯åŠç¿ãã©ãããã©ãŒã ã®éçºã«Python2ãéžæããŸããããããããã以æ¥ãæ¥çã¯åçã«å€åããŸããã Python 2㯠ã2020幎1æ1æ¥ã«æ£åŒã« åè¬ãããŸãããã§ ã以åã® ç§ãã¡ã¯ãPython 3ã«ç§»è¡ããªãããšã«æ±ºããçç±ã®èšäºãç§ãã¡ã¯èª¬æã
ãæ¯æåœç€Ÿã®ãã©ãããã©ãŒã ã䜿çšããŠäœçŸäžäººãã®äººã ã
Goã§ããã¯ãšã³ããæžãçŽããŠã¢ãŒããã¯ãã£ã倿Žããããšã«ãããšããç§ãã¡ã¯äžå®ã®ãªã¹ã¯ãåããŸããã
Goãéžæããçç±ã¯ããã€ããããŸãã
- é«ãã³ã³ãã€ã«é床ã
- RAMã®ç¯çŽã
- GoããµããŒãããIDEã®éåžžã«å¹ åºãéžæè¢ã
ããããç§ãã¡ã¯ãªã¹ã¯ãæå°éã«æããã¢ãããŒããåããŸããã
GraphQLé£çã¯ã
ç§ãã¡ã¯åšãã®ç§ãã¡ã®æ°ããã¢ãŒããã¯ãã£ãæ§ç¯ããããšã決ã GraphQLã¢ããé£çãGraphQLã¯ãRESTAPIã®ä»£ããã«Facebookéçºè ã«ãã£ãŠäœæãããŸããããã§ãã¬ãŒã·ã§ã³ãšã¯ãè€æ°ã®ãµãŒãã¹ã®ããã®åäžã®ã²ãŒããŠã§ã€ãæ§ç¯ããããšã§ããåãµãŒãã¹ã¯ç¬èªã®GraphQLã¹ããŒããæã€ããšãã§ããŸããå ±éã®ã²ãŒããŠã§ã€ã¯ãã¹ããŒããçµã¿åãããŠåäžã®APIãçæããåæã«è€æ°ã®ãµãŒãã¹ã®ãªã¯ãšã¹ããèš±å¯ããŸãã
å ã«é²ãåã«ã次ã®ç¹ã«çŠç¹ãåœãŠãããšæããŸãã
- REST APIãšã¯ç°ãªããåGraphQLãµãŒããŒã«ã¯ç¬èªã®åä»ãããŒã¿ã¹ããŒãããããŸããããã«ãããããŒã¿ãšå¿
èŠãªä»»æã®ãã£ãŒã«ãã®ä»»æã®çµã¿åãããæ£ç¢ºã«ååŸã§ããŸãã
- REST APIã²ãŒããŠã§ã€ã䜿çšãããšã1ã€ã®ããã¯ãšã³ããµãŒãã¹ã«ã®ã¿ãªã¯ãšã¹ããéä¿¡ã§ããŸããGraphQLã²ãŒããŠã§ã€ã¯ãä»»æã®æ°ã®ããã¯ãšã³ããµãŒãã¹ã®ã¯ãšãªãã©ã³ãçæãããããããã®éžæãåäžã®æ±çšå¿çã§è¿ãããšãã§ããŸãã
ãããã£ãŠãã·ã¹ãã ã«GraphQLã²ãŒããŠã§ã€ãå«ãããšã次ã®ããã«ãªããŸãã
ç»åã®URLïŒ https://lh6.googleusercontent.com/6GBj9z5WVnQnhqI19oNTRncw0LYDJM4U7FpWeGxVMaZlP46IAIcKfYZKTtHcl-bDFomedAoxSa9pFo6pdhL2daxyWNX2ZKVQIgqIIBWHxnXEouzcQhO9_mdf1tODwtti5OEOOFeb
-äžæå²©ã§ã¯ãªãã ãã§ãã²ãŒããŠã§ã€ïŒãµãŒãã¹graphql-ã²ãŒããŠã§ã€å¥åïŒã¯ãåœç€Ÿã®ä»ã®ãµãŒãã¹ãžã®ã¯ãšãªãã©ã³GraphQL-ã¯ãšãªãäœæããéä¿¡ããããã®è²¬ä»»ããããŸãã GoãµãŒãã¹ã«ã¯ç¬èªã®GraphQLã¹ããŒãããããŸããgqlgenïŒããã¯Goçšã®GraphQLã©ã€ãã©ãªã§ãïŒã䜿çšããŠãã¯ãšãªãžã®å¿çãçæã ãŸãã
GraphQLãã§ãã¬ãŒã·ã§ã³ã¯å ±éã®GraphQLã¹ããŒããæäŸããã²ãŒããŠã§ã€ã¯ãã¹ãŠã®åå¥ã®ãµãŒãã¹ã¹ããŒãã1ã€ã«ãã³ãã«ãããããã¢ããªã¹ã¯ä»ã®ãµãŒãã¹ãšåãããã«çžäºäœçšããŸãããããåºæ¬çãªãã€ã³ãã§ãã
次ã«ãApollo GraphQLãµãŒããŒãã«ã¹ã¿ãã€ãºããŠãã¢ããªã¹ïŒPythonïŒãããã€ã¯ããµãŒãã¹ã¢ãŒããã¯ãã£ïŒGoïŒã«å®å šã«ç§»è¡ããæ¹æ³ã«ã€ããŠèª¬æããŸã ã
ãµã€ããã€ãµã€ããã¹ã
GraphQLã¯ãç¹å®ã®ã¿ã€ãã®ãªããžã§ã¯ããšãã£ãŒã«ãã®ã»ããã§ãèãããŸããçä¿¡èŠæ±ãã©ãåŠçãããããã£ãŒã«ãããã©ã®ããŒã¿ãã©ã®ããã«æœåºããããç¥ã£ãŠããã³ãŒãã¯ããªãŸã«ããŒãšåŒã°ããŸãã
å²ãåœãŠã®ããŒã¿åã®äŸã䜿çšããŠãç§»è¡ããã»ã¹ãèããŠã¿ãŸãããã
| 123 | ã¿ã€ãAssignment {createdDateïŒTimeâŠâŠâŠã} |
å®éã«ã¯ãã£ãšå€ãã®ãã£ãŒã«ããããããšã¯æããã§ãããåãã£ãŒã«ãã§ãã¹ãŠãåãããã«èŠããŸãã
ãã®ã¢ããªã¹ãã£ãŒã«ããGoã§èšè¿°ãããæ°ãããµãŒãã¹ã§è¡šçŸããããšããŸããæ°ãããªã³ããã³ããµãŒãã¹ãã¢ããªã¹ãšåãããŒã¿ãè¿ãããšãã©ã®ããã«ç¢ºèªã§ããŸããïŒãããè¡ãã«ã¯ãScientistã©ã€ãã©ãªãšåæ§ã®ã¢ãããŒãã䜿çšããŸã ãã¢ããªã¹ãšæ°ãããµãŒãã¹ã®äž¡æ¹ããããŒã¿ãèŠæ±ããŸãããçµæãæ¯èŒããŠããã®ãã¡ã®1ã€ã ããè¿ããŸãã
ã¹ããã1ïŒæåã¢ãŒã
ãŠãŒã¶ãŒãcreatedDateãã£ãŒã«ãã®å€ãèŠæ±ãããšãGraphQLã²ãŒããŠã§ã€ã¯æåã«ã¢ããªã¹ã«ã¢ã¯ã»ã¹ããŸãïŒPythonã§èšè¿°ãããŠããããšãèŠããŠãããŠãã ããïŒã
æåã®ã¹ãããã§ã¯ããã§ã«Goã§èšè¿°ãããŠããæ°ããå²ãåœãŠãµãŒãã¹ã«ãã£ãŒã«ãã远å ã§ããããšã確èªããå¿ èŠããããŸããæ¡åŒµåã.graphqlã®ãã¡ã€ã«ã«ã¯ã次ã®ãªãŸã«ããŒã³ãŒããå«ãŸããŠããå¿ èŠããããŸãã
| 12345 | ã¿ã€ãã®å²ãåœãŠãæ¡åŒµ ããŒïŒãã£ãŒã«ãïŒ "id"ïŒ{idïŒIDïŒ å€éš createdDateïŒTime @migrateïŒfromïŒ "python"ãstateïŒ "manual"ïŒ} |
ããã§ã¯ããã§ãã¬ãŒã·ã§ã³ã䜿çšããŠããµãŒãã¹ãcreatedDateãã£ãŒã«ããå²ãåœãŠã¿ã€ãã«è¿œå ããŠããããšã瀺ããŠããŸãããã£ãŒã«ãã«ã¯idã§ã¢ã¯ã»ã¹ããŸãããŸãããç§å¯ã®èŠçŽ ãã§ããç§»è¡ãã£ã¬ã¯ãã£ãã远å ããŸãããããã®ãã£ã¬ã¯ãã£ããçè§£ãããªã¯ãšã¹ããã«ãŒãã£ã³ã°ãããã©ãããæ±ºå®ãããšãã«GraphQLã²ãŒããŠã§ã€ã䜿çšããããã€ãã®ã¹ããŒããäœæããã³ãŒããäœæããŸããã
æåã¢ãŒãã§ã¯ãèŠæ±ã¯ã¢ããªã¹ã³ãŒãã«ã®ã¿ã¢ãã¬ã¹æå®ãããŸããæ°ãããµãŒãã¹ãéçºãããšãã¯ããã®å¯èœæ§ãèæ ®ããå¿ èŠããããŸããcreatedDateãã£ãŒã«ãã®å€ãååŸããããã«ãã¢ããªã¹ã«çŽæ¥ïŒãã©ã€ããªã¢ãŒãã§ïŒã¢ã¯ã»ã¹ããããæåã¢ãŒãã§GraphQLã²ãŒããŠã§ã€ã«ã¹ããŒããç §äŒããããšãã§ããŸããäž¡æ¹ã®ãªãã·ã§ã³ãæ©èœããã¯ãã§ãã
ã¹ããã2ïŒãµã€ããã€ãµã€ãã¢ãŒã
createdDateãã£ãŒã«ãã®ãªãŸã«ããŒã³ãŒããèšè¿°ããåŸããµã€ããã€ãµã€ãã¢ãŒãã«åãæ¿ããŸãã
| 12345 | ã¿ã€ãã®å²ãåœãŠãæ¡åŒµ ããŒïŒãã£ãŒã«ãïŒ "id"ïŒ{idïŒIDïŒ å€éš createdDateïŒTime @migrateïŒfromïŒ "python"ãstateïŒ "side-by-side"ïŒ} |
ãããŠä»ãã²ãŒããŠã§ã€ã¯ã¢ããªã¹ïŒPythonïŒãšæ°ãããµãŒãã¹ïŒGoïŒã®äž¡æ¹ã«ã¢ã¯ã»ã¹ããŸããçµæãæ¯èŒããéããããå Žåããã°ã«èšé²ããã¢ããªã¹ãããŠãŒã¶ãŒã«çµæãè¿ããŸãã
ãã®ã¢ãŒãã¯ãç§»è¡ããã»ã¹äžã«ã·ã¹ãã ã«ãã°ãçºçããªããšãã倧ããªèªä¿¡ããããããŸããäœå¹Žã«ãããã£ãŠãäœçŸäžãã®ãŠãŒã¶ãŒãšããããã³ãã®ããŒã¿ãããã³ããšã³ããšããã¯ãšã³ããééããŠããŸããããã®ã³ãŒããå®éã®æ¡ä»¶ã§ã©ã®ããã«æ©èœãããã芳å¯ããããšã§ããŸããªã±ãŒã¹ãã©ã³ãã ãªå€ãå€ããã£ããã£ãããå®å®ããŠæ£ããåŠçãããããšã確èªã§ããŸãã
ãã¹ãäžã«ããã®ãããªã¬ããŒããåãåããŸãã
å質ãå€§å¹ ã«æãªãããšãªããã¬ã€ã¢ãŠãäžã«ãã®ç»åãæ¡å€§ããŠã¿ãŠãã ããã
ãããã¯ãã¢ããªã¹ãšæ°ãããµãŒãã¹ã®éçšã«ççŸãèŠã€ãã£ãå Žåã«çŠç¹ãåœãŠãŠããŸãã
æåãç§ãã¡ã¯ãã°ãã°ãã®ãããªã±ãŒã¹ã«ééããŸãããæéã®çµéãšãšãã«ããã®ãããªåé¡ãç¹å®ããé倧床ãè©äŸ¡ããå¿ èŠã«å¿ããŠæé€ããããšãåŠã³ãŸããã
éçºãµãŒããŒã䜿çšãããšãã¯ãè²ã®éãã匷調ããããŒã«ã䜿çšããŸããããã«ãããåé¡ã®åæãšãœãªã¥ãŒã·ã§ã³ã®ãã¹ãã容æã«ãªããŸãã
çªç¶å€ç°ã¯ã©ãã§ããïŒ
PythonãšGoã®äž¡æ¹ã§åãããžãã¯ãå®è¡ãããã©ããçåã«æããããããããŸããããããŒã¿ãã¯ãšãªããã ãã§ãªããããŒã¿ã倿Žããã³ãŒãã¯ã©ããªããŸããïŒGraphQLã®çšèªã§ã¯ãããã¯ãã¥ãŒããŒã·ã§ã³ãšåŒã°ããŸãã
ç§ãã¡ã®ãµã€ããã€ãµã€ããã¹ãã§ã¯ãçªç¶å€ç°ã¯èæ ®ãããŠããŸããããããè¡ãããã®ããã€ãã®ã¢ãããŒããæ€èšããŸãã-ãããã¯ç§ãã¡ãæã£ãŠãããããè€éã§ããããšã倿ããŸãããããããç§ãã¡ã¯çªç¶å€ç°ã®åé¡ãã®ãã®ã解決ããã®ã«åœ¹ç«ã€ã¢ãããŒããéçºããŸããã
ã¹ããã2.5ïŒã«ããªã¢ã¢ãŒã
çç£æ®µéãŸã§æ£åžžã«çãæ®ã£ããã£ãŒã«ããŸãã¯çªç¶å€ç°ãããå Žåã¯ãã«ããªã¢ã¢ãŒããæå¹ã«ããŸãã
| 12345 | ã¿ã€ãã®å²ãåœãŠãæ¡åŒµ ããŒïŒãã£ãŒã«ãïŒ "id"ïŒ{idïŒIDïŒ å€éš createdDateïŒTime @migrateïŒfromïŒ "python"ãstateïŒ "canary"ïŒ} |
ã«ããªã¢ãã£ãŒã«ããšãã¥ãŒããŒã·ã§ã³ã¯ãããäžéšã®ãŠãŒã¶ãŒåãã«GoãµãŒãã¹ã«è¿œå ãããŸããããã«ããã©ãããã©ãŒã ã®å éšãŠãŒã¶ãŒã¯ã«ããªã¢ã¹ããŒã ããã¹ãããŠããŸããããã¯ãè€éãªå€æŽããã¹ãããããã®ããªãå®å šãªæ¹æ³ã§ããäœããæåŸ ã©ããã«æ©èœããªãå Žåã¯ãã«ããªã¢åè·¯ããã°ããç¡å¹ã«ããããšãã§ããŸãã
äžåºŠã«1ã€ã®ã«ããªã¢åè·¯ã®ã¿ã䜿çšããŸããå®éã«ã¯ãåæã«ã«ããªã¢ã¢ãŒãã«ãªã£ãŠãããã£ãŒã«ããšçªç¶å€ç°ã¯å€ããããŸãããã§ããããä»åŸã¯åé¡ãªããšæããŸããã¹ããŒããéåžžã«å€§ããïŒ5000ãã£ãŒã«ããè¶ ããïŒãã²ãŒããŠã§ã€ã€ã³ã¹ã¿ã³ã¹ã3ã€ã®ã¹ããŒãïŒãã©ã€ããªãæåãã«ããªã¢ïŒãã¡ã¢ãªã«æ ŒçŽããå¿ èŠããããããããã¯é©åãªåХ忡ã§ãã
ã¹ããã3ïŒç§»è¡ã¢ãŒã
ãã®ã¹ãããã§ã¯ãcreatedDateãã£ãŒã«ããç§»è¡ã¢ãŒãã«ããå¿ èŠããããŸãã
| 12345 | ã¿ã€ãã®å²ãåœãŠãæ¡åŒµ ããŒïŒãã£ãŒã«ãïŒ "id"ïŒ{idïŒIDïŒ å€éš createdDateïŒTime @migrateïŒfromïŒ "python"ãstateïŒ "migrated"ïŒ} |
ãã®ã¢ãŒãã§ã¯ãGraphQLã²ãŒããŠã§ã€ã¯Goã§èšè¿°ãããæ°ãããµãŒãã¹ã«ã®ã¿ãªã¯ãšã¹ããéä¿¡ããŸãããããããã€ã§ãã¢ããªã¹ãåãèŠæ±ãã©ã®ããã«åŠçããããèŠãããšãã§ããŸããããã«ãããåé¡ãçºçããå Žåã«å€æŽãå±éããŠããŒã«ããã¯ããããšãã¯ããã«ç°¡åã«ãªããŸãã
ã¹ããã4ïŒç§»è¡ãå®äºãã
ãããã€ãæåãããšããã®ãã£ãŒã«ãã®ã¢ããªã¹ã³ãŒãã¯äžèŠã«ãªãããªãŸã«ããŒã³ãŒããã@migrateãã£ã¬ã¯ãã£ããåé€ããŸãã
| 12345 | ã¿ã€ãã®å²ãåœãŠãæ¡åŒµ ããŒïŒãã£ãŒã«ãïŒ "id"ïŒ{idïŒIDïŒ å€éš createdDateïŒæé} |
ä»åŸãã²ãŒããŠã§ã€ã¯ãAssignment.createdDateåŒããGoã§èšè¿°ãããæ°ãããµãŒãã¹ãããã£ãŒã«ãå€ãååŸãããã®ãšããŠè§£éããŸãã
ãããã€ã³ã¯ãªã¡ã³ã¿ã«ç§»è¡ã§ãã
ãããŠãç§ãã¡ã¯ã©ããŸã§è¡ã£ãã®ã§ããããïŒ
ä»å¹Žããµã€ããã€ãµã€ãã®ãã¹ãã€ã³ãã©ã¹ãã©ã¯ãã£ã宿ãããŸãããããã«ãããå®å šã«ããã£ãããšãããã確å®ã«äžé£ã®Goã³ãŒããæžãçŽãããšãã§ããŸããã幎éãéããŠãã·ã¹ãã å ã®ãã©ãã£ãã¯ã®å¢å ãèæ¯ã«ããã©ãããã©ãŒã ã®é«å¯çšæ§ãç¶æããŠããŸããããã®èšäºã®å·çæç¹ã§ã¯ãGraphQLãã£ãŒã«ãã®çŽ40ïŒ ãGoãµãŒãã¹ã«ç§»åãããŠããŸãããããã£ãŠã説æããã¢ãããŒãã¯ãç§»è¡ããã»ã¹ã§ããŸãæ©èœããŸããã
ãããžã§ã¯ããå®äºããåŸã§ããã¢ãŒããã¯ãã£ã®å€æŽã«é¢é£ããä»ã®ã¿ã¹ã¯ã«ãã®ã¢ãããŒããåŒãç¶ã䜿çšã§ããŸãã
PS Steve Coffmanããã®ãããã¯ã«ã€ããŠè¬æŒããŸããïŒ Google Open Source Liveã§ïŒãããªãã¯é²é³ãèŠãããšãã§ããŸã ãã®YouTubeããŒã¯ïŒãŸãã¯ãã¬ãŒã³ããŒã·ã§ã³ãèŠãã ã ïŒã
Macleodã®ã¯ã©ãŠããµãŒã㌠ã¯é«éã§å®å šã§ãã
äžèšã®ãªã³ã¯ã䜿çšãããããããŒãã¯ãªãã¯ããŠç»é²ãããšãä»»æã®æ§æã®ãµãŒããŒãã¬ã³ã¿ã«ããæåã®æã10ïŒ å²åŒã«ãªããŸãã