Python ã³ãŒãã®åãã§ã㯠ã·ã¹ãã ãå®è£ ããéã« Dropbox ããã©ã£ãéã«é¢ããè³æã®ç¿»èš³ã® XNUMX çªç®ã®éšåã玹ä»ããŸãã
â åç·šïŒ
å ¥åãããã³ãŒãã 4 äžè¡ã«éãã
ãã XNUMX ã€ã®å€§ããªèª²é¡ (瀟å 調æ»å¯Ÿè±¡è ã®é㧠XNUMX çªç®ã«å€ãã£ãæžå¿µäºé ) ã¯ãDropbox ã§åãã§ãã¯ã®å¯Ÿè±¡ãšãªãã³ãŒãã®éãå¢å ããããšã§ããã ç§ãã¡ã¯ãåä»ãã³ãŒãããŒã¹ã®ãµã€ãºãèªç¶ã«å€§ããããããšãããéçããã³åçãªèªååæšè«ã« mypy ããŒã ã®åãçµã¿ãéäžãããããšãŸã§ããã®åé¡ã解決ããããã«ããã€ãã®ã¢ãããŒããè©ŠããŠããŸããã æçµçã«ã¯ãåçŽãªåå©æŠç¥ã¯ååšããªãããã«èŠããŸããããå€ãã®ã¢ãããŒããçµã¿åãããããšã§ãã¢ãããŒã·ã§ã³ä»ãã³ãŒãã®éãæ¥éã«å¢ããããšãã§ããŸããã
ãã®çµæãåœç€Ÿã®æ倧㮠Python ãªããžã㪠(ããã¯ãšã³ã ã³ãŒããå«ã) ã«ã¯ãçŽ 4 äžè¡ã®æ³šéä»ãã³ãŒããå«ãŸããŠããŸãã éçã³ãŒãåä»ãã®äœæ¥ã¯çŽ XNUMX 幎ãããŠå®äºããŸããã Mypy ã¯ãå
¥åã®é²è¡ç¶æ³ãç£èŠããããããããŸããŸãªã¿ã€ãã®ã³ãŒã ã«ãã¬ããž ã¬ããŒãããµããŒãããããã«ãªããŸããã ç¹ã«ãåã®æ瀺çãªäœ¿çšãªã©ãåã«ææ§ããããã³ãŒãã«é¢ããã¬ããŒããçæã§ããŸãã Any
æ€èšŒã§ããªã泚éããŸãã¯å泚éã®ãªããµãŒãããŒã㣠ã©ã€ãã©ãªã®ã€ã³ããŒããªã©ã§ã Dropbox ã®åãã§ãã¯ã®ç²ŸåºŠãåäžããããããžã§ã¯ãã®äžç°ãšããŠãç§ãã¡ã¯éäžå Python ãªããžããªå
ã®ããã€ãã®äººæ°ã®ãããªãŒãã³ ãœãŒã¹ ã©ã€ãã©ãªã®åå®çŸ© (ããããã¹ã¿ã ãã¡ã€ã«) ã®æ¹åã«è²¢ç®ããŸããã
äžéšã®ç¹å®ã® Python ãã¿ãŒã³ã«å¯ŸããŠããæ£ç¢ºãªåãå¯èœã«ããåã·ã¹ãã ã®æ°æ©èœãå®è£
(ããã³åŸç¶ã® PEP ã§æšæºå) ããŸããã ãã®é¡èãªäŸã¯æ¬¡ã®ãšããã§ã TypeDict
ããããããç¬èªã®åã®å€ãæã€æååããŒã®åºå®ã»ãããæ〠JSON ã®ãããªèŸæžã®åãæäŸããŸãã ä»åŸãåã·ã¹ãã ãæ¡åŒµããŠãããŸãã 次ã®ã¹ãããã¯ãPython ã®æ°å€æ©èœã®ãµããŒããæ¹åããããšã«ãªãã§ãããã
泚éä»ãã³ãŒãã®è¡æ°: ãµãŒããŒ
泚éä»ãã³ãŒãã®è¡æ°: ã¯ã©ã€ã¢ã³ã
泚éä»ãã³ãŒãã®ç·è¡æ°
Dropbox å ã®æ³šéä»ãã³ãŒãã®éãå¢ããããã«è¡ã£ãäž»ãªæ©èœã®æŠèŠã¯æ¬¡ã®ãšããã§ãã
泚éã®å³å¯ãã æ°ããã³ãŒãã«æ³šéãä»ããå³å¯ãã®èŠä»¶ãåŸã ã«å¢ãããŠãããŸããã ç§ãã¡ã¯ããã§ã«æ³šéãä»ããããŠãããã¡ã€ã«ã«æ³šéãè¿œå ããããšãææ¡ãããªã³ã¿ãŒ ãã³ãããå§ããŸããã æ°ãã Python ãã¡ã€ã«ãšã»ãšãã©ã®æ¢åã®ãã¡ã€ã«ã§åã¢ãããŒã·ã§ã³ãå¿ èŠã«ãªããŸããã
ã¬ããŒããå ¥åããŠããŸãã ç§ãã¡ã¯ããŒã ã«ã³ãŒãã®å ¥åã¬ãã«ã«é¢ããã¬ããŒããé±æ¬¡ã§éä¿¡ããæåã«äœã«æ³šéãä»ããå¿ èŠããããã«ã€ããŠã¢ããã€ã¹ãæäŸããŸãã
ãã€ããŒã®æ®åã ç§ãã¡ã¯ã€ãã³ã㧠mypy ã«ã€ããŠè©±ããããŒã ãåã¢ãããŒã·ã§ã³ã䜿ãå§ããã®ãæ¯æŽããããã«è©±ãåããŸãã
äžè«èª¿æ»ã é倧ãªåé¡ãç¹å®ããããã«ãå®æçã«ãŠãŒã¶ãŒèª¿æ»ãå®æœããŸãã ç§ãã¡ã¯ãããã®åé¡ã解決ããããã«ããªãã®åªåãããæºåãã§ããŠããŸã (mypy ãé«éåããããã®æ°ããèšèªãäœæããããšãããããŸã!)ã
ããã©ãŒãã³ã¹ã ããŒã¢ã³ãš mypyc ã䜿çšããããšã§ãmypy ã®ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžããŸããã ããã¯ã泚éããã»ã¹äžã«çºçããäžäŸ¿ã軜æžãã倧éã®ã³ãŒããåŠçã§ããããã«ããããã«è¡ãããŸããã
ãšãã£ã¿ãŒãšã®çµ±åã Dropbox ã§äººæ°ã®ãããšãã£ã¿ã§ã® mypy ã®å®è¡ããµããŒãããããŒã«ãæ§ç¯ããŸããã ããã«ã¯ãPyCharmãVimãVS Code ãå«ãŸããŸãã ããã«ãããã³ãŒãã«æ³šéãä»ããŠãã®æ©èœããã§ãã¯ããããã»ã¹ãå€§å¹ ã«ç°¡çŽ åãããŸããã ãããã®ã¿ã€ãã®ã¢ã¯ã·ã§ã³ã¯ãæ¢åã®ã³ãŒãã«æ³šéãä»ããå Žåã«äžè¬çã§ãã
éç解æã éç解æããŒã«ã䜿çšããŠé¢æ°ã·ã°ããã£ãæšæž¬ããããŒã«ãäœæããŸããã ãã®ããŒã«ã¯æ¯èŒçåçŽãªç¶æ³ã§ã®ã¿æ©èœããŸãããããã»ã©èŠåŽããã«ã³ãŒã ã¿ã€ãã®ç¯å²ãå¢ããã®ã«åœ¹ç«ã¡ãŸããã
ãµãŒãããŒãã£ã©ã€ãã©ãªã®ãµããŒãã ç§ãã¡ã®ãããžã§ã¯ãã®å€ã㯠SQLAlchemy ããŒã«ãããã䜿çšããŠããŸãã ããã¯ãPEP 484 åã§ã¯çŽæ¥ã¢ãã«åã§ããªã Python ã®åçæ©èœãå©çšããŸãã PEP 561 ã«åŸã£ãŠã察å¿ããã¹ã¿ã ãã¡ã€ã«ãäœæããmypy çšã®ãã©ã°ã€ã³ãäœæããŸãã (
ç§ãã¡ãééããå°é£
4 äžè¡ã®åä»ãã³ãŒããžã®éã¯ãç§ãã¡ã«ãšã£ãŠå¿ ãããç°¡åãªãã®ã§ã¯ãããŸããã§ããã ãã®éã§ç§ãã¡ã¯ããããã®ç©Žã«ééããããã€ãã®ééããç¯ããŸããã ãããã¯ç§ãã¡ãééããåé¡ã®äžéšã§ãã ãããã«ã€ããŠäŒããããšã§ãä»ã®äººãåæ§ã®åé¡ãåé¿ããã®ã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã
ãã¡ã€ã«ããããŸããã ç§ãã¡ã¯å°éã®ãã¡ã€ã«ã®ã¿ããã§ãã¯ããããšããäœæ¥ãéå§ããŸããã ãããã®ãã¡ã€ã«ã«å«ãŸããŠããªããã®ã¯ãã§ãã¯ãããŸããã§ããã ãã¡ã€ã«ã¯ãæåã®æ³šéããã¡ã€ã«ã«è¡šç€ºããããšãã«ã¹ãã£ã³ ãªã¹ãã«è¿œå ãããŸããã æ€èšŒã®ç¯å²å€ã«ããã¢ãžã¥ãŒã«ããäœããã€ã³ããŒããããå Žåã次ã®ãããªå€ãæ±ãããšã«ã€ããŠè©±ããŠããŸããã Any
ããŸã£ãããã¹ããããŠããŸããã§ããã ããã«ãããç¹ã«ç§»è¡ã®åæ段éã§å
¥å粟床ã倧å¹
ã«äœäžããŸããã ãã®ã¢ãããŒãã¯ãããŸã§ã®ãšããé©ãã»ã©ããŸãæ©èœããŠããŸãããã¬ãã¥ãŒã®ç¯å²ã«ãã¡ã€ã«ãè¿œå ãããšãã³ãŒãããŒã¹ã®ä»ã®éšåã®åé¡ãæããã«ãªãã®ãäžè¬çãªç¶æ³ã§ãã ææªã®å Žåãã³ãŒãã® XNUMX ã€ã®åé¢ãããé åãããŒãžãããäºãã«ç¬ç«ããŠåããã§ãã¯ãããŠããå Žåããããã®é åã®åãäºãã«äºææ§ããªãããšãå€æããŸããã ãã®ããã泚éã«å€ãã®å€æŽãå ããå¿
èŠããããŸããã ä»æ¯ãè¿ã£ãŠã¿ããšãmypy ã®åãã§ãã¯é åã«ã³ã¢ ã©ã€ãã©ãª ã¢ãžã¥ãŒã«ããã£ãšæ©ãè¿œå ãã¹ãã ã£ããšæ°ã¥ããŸããã ããã«ãããç§ãã¡ã®ä»äºã¯ããäºæž¬å¯èœã«ãªããŸãã
å€ãã³ãŒãã«æ³šéãä»ããŸãã ç§ãã¡ãå§ãããšããæ¢åã® Python ã³ãŒãã¯çŽ 4 äžè¡ãããŸããã ãã®ã³ãŒããã¹ãŠã«æ³šéãä»ããã®ãç°¡åãªäœæ¥ã§ã¯ãªãããšã¯æããã§ããã ç§ãã¡ã¯ããã¹ãã®å®è¡æã«åæ å ±ãåéããåéããæ å ±ã«åºã¥ããŠã³ãŒãã«å泚éãè¿œå ã§ãã PyAnnotate ãšããããŒã«ãäœæããŸããã ãã ãããã®ããŒã«ãç¹ã«åºãæ¡çšãããŠãããšããããšã¯ãããŸããã åæ å ±ã®åéã«ã¯æéãããããèªåçæããã泚éã«ã¯å€ãã®æåç·šéãå¿ èŠã«ãªãããšããããããŸããã ã³ãŒããã¬ãã¥ãŒãããã³ã«ãã®ããŒã«ãèªåçã«å®è¡ããããšããå®éã®å°éã®ãããã¯ãŒã¯ ãªã¯ãšã¹ãã®åæã«åºã¥ããŠåæ å ±ãåéããããšãèããŸããããã©ã¡ãã®ã¢ãããŒãããªã¹ã¯ãé«ããããããå®è¡ããªãããšã«ããŸããã
ãã®çµæãã³ãŒãã®å€§éšåã¯ææè ã«ãã£ãŠæåã§æ³šéãä»ããããããšãããããŸãã ãã®ããã»ã¹ãæ£ããæ¹åã«å°ãããã«ã泚éãä»ããå¿ èŠãããç¹ã«éèŠãªã¢ãžã¥ãŒã«ãšæ©èœã«é¢ããã¬ããŒããäœæããŸãã ããšãã°ãäœçŸãã®å Žæã§äœ¿çšãããã©ã€ãã©ãª ã¢ãžã¥ãŒã«ã«åã¢ãããŒã·ã§ã³ãæäŸããããšãéèŠã§ãã ããããæ°ãããµãŒãã¹ã«çœ®ãæããããå€ããµãŒãã¹ã«ã¯ãã¢ãããŒã·ã§ã³ãä»ããããšã¯ããã»ã©éèŠã§ã¯ãªããªããŸããã ãŸããéç解æã䜿çšããŠã¬ã¬ã·ãŒ ã³ãŒãã®åã¢ãããŒã·ã§ã³ãçæããå®éšãè¡ã£ãŠããŸãã
埪ç°ã€ã³ããŒãã äžã§ã埪ç°ã€ã³ããŒã (ãäŸåé¢ä¿ã®ãã€ãã) ã«ã€ããŠèª¬æããŸããããã®ã€ã³ããŒãã®ååšã«ãããmypy ã®é«éåãå°é£ã«ãªããŸããã ãŸãããããã®åŸªç°ã€ã³ããŒãã«ãã£ãŠçããããããçš®é¡ã®ã€ãã£ãªã ã mypy ã§ãµããŒãã§ããããã«ããããã«ãæžåœã«åãçµãå¿ èŠããããŸããã ç§ãã¡ã¯æè¿ã埪ç°ã€ã³ããŒãã«é¢ãã mypy ã®åé¡ã®ã»ãšãã©ãä¿®æ£ãã倧èŠæš¡ãªã·ã¹ãã åèšèšãããžã§ã¯ããå®äºããŸããã ãããã®åé¡ã¯ãå®éã«ã¯ãmypy ãããžã§ã¯ããåœåçŠç¹ãåœãŠãŠããæè²èšèªã§ãã Alore ã«é¡ãããããžã§ã¯ãã®éåžžã«åæã®æ®µéã«çºçããŸããã Alore æ§æã䜿çšãããšã埪ç°ã€ã³ããŒã ã³ãã³ãã®åé¡ãç°¡åã«è§£æ±ºã§ããŸãã ææ°ã® mypy ã¯ã以åã®åçŽãªå®è£ (Alore ã«æé©ã§ãã) ããããã€ãã®å¶éãç¶æ¿ããŠããŸãã Python ã§ã¯ãåŒããããŸããªããšãäž»ãªçç±ã§ã埪ç°ã€ã³ããŒãã®æäœãå°é£ã«ãªããŸãã ããšãã°ãä»£å ¥æäœã§ã¯å®éã«åã®å¥åãå®çŸ©ããå ŽåããããŸãã Mypy ã¯ãã€ã³ããŒã ã«ãŒãã®å€§éšåãåŠçããããŸã§ããã®ãããªãã®ãåžžã«æ€åºã§ãããšã¯éããŸããã ã¢ããŒã¬ã«ã¯ãã®ãããªææ§ãã¯ãããŸããã§ããã ã·ã¹ãã éçºã®åæ段éã§äžé©åãªæ±ºå®ãäžããšãäœå¹ŽãåŸã«ããã°ã©ãã«äžå¿«ãªé©ããããããå¯èœæ§ããããŸãã
çµæ: 5 äžè¡ã®ã³ãŒããšæ°ããªå°å¹³ãžã®é
mypy ãããžã§ã¯ãã¯ãåæã®ãããã¿ã€ããã 4 äžè¡ã®è£œåã³ãŒã ã¿ã€ããå¶åŸ¡ããã·ã¹ãã ãŸã§ãé·ãéã®ããæ©ãã§ããŸããã mypy ãé²åããã«ã€ããŠãPython ã®åãã³ãã¯æšæºåãããŸããã æè¿ã§ã¯ãPython ã³ãŒãã®å ¥åãäžå¿ã«åŒ·åãªãšã³ã·ã¹ãã ãçºå±ããŠããŸãã ã©ã€ãã©ãªããµããŒãããå ŽæããããIDE ãšãšãã£ã¿çšã®è£å©ããŒã«ãå«ãŸããŠãããããã€ãã®åå¶åŸ¡ã·ã¹ãã ããããããããã«é·æãšçæããããŸãã
Dropbox ã§ã¯åãã§ãã¯ã¯ãã§ã«åœããåã«ãªã£ãŠããŸãããPython ã³ãŒãã®å ¥åã«é¢ããŠã¯ãŸã åæ段éã«ãããšæããŸãã åãã§ãã¯æè¡ã¯ä»åŸãé²åããæ¹åããããšæããŸãã
倧èŠæš¡ãª Python ãããžã§ã¯ãã§åãã§ãã¯ããŸã 䜿çšããããšããªãå Žåã¯ãéçåä»ããžã®ç§»è¡ãéå§ããã®ã«ä»ãéåžžã«è¯ãææã§ããããšãç¥ã£ãŠãã ããã åããããªå€åãéãã人ãã¡ãšè©±ãããŸããã 圌ãã®èª°ããããåŸæããŠããŸããã§ããã åãã§ãã¯ã«ãããPython ã¯ãéåžžã® Pythonãããã倧èŠæš¡ãããžã§ã¯ãã®éçºã«ã¯ããã«é©ããèšèªã«ãªããŸãã
芪æãªãèªè ïŒ Python ãããžã§ã¯ãã§åãã§ãã¯ã䜿çšããŠããŸãã?
åºæïŒ habr.com