Pythonã³ãŒãã®ããã©ãŒãã³ã¹è©äŸ¡ãã¡ããªã¯ã¹èšå®ãã°ããŒãã«éçºããŒã åãæé©åæŠç¥ãå®è£ ããããã®è©³çްã¬ã€ãã
Pythonããã©ãŒãã³ã¹ã¬ãã¥ãŒïŒã°ããŒãã«ããŒã ã®ããã®å æ¬çè©äŸ¡ãã¬ãŒã ã¯ãŒã¯
仿¥ã®ããŒã¹ã®éãã°ããŒãã«ãªãœãããŠã§ã¢éçºç°å¢ã«ãããŠãPythonã®å€çšéæ§ãšäœ¿ããããã¯ãæ°ãåããªãã»ã©ã®ãããžã§ã¯ãã®åºç€èšèªãšãªã£ãŠããŸããããããã¢ããªã±ãŒã·ã§ã³ãè€éåããèŠæš¡ãæ¡å€§ããã«ã€ããŠãPythonã®ããã©ãŒãã³ã¹ã¯éå€§ãªæžå¿µäºé ãšãªããŸããããã©ãŒãã³ã¹ãç¡èŠãããšãå¿çæéã®é å»¶ãã€ã³ãã©ã³ã¹ãã®å¢å ããããŠæçµçã«ã¯ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®äœäžã«ã€ãªããå¯èœæ§ããããŸããæ¬çš¿ã§ã¯ãã°ããŒãã«ã«åæ£ããããŒã åãã«èª¿æŽããããã³ãŒãå質ã確ä¿ããã¢ããªã±ãŒã·ã§ã³ã®å¹çãæé©åããããã®ãPythonããã©ãŒãã³ã¹ã¬ãã¥ãŒã宿œããããã®å æ¬çãªãã¬ãŒã ã¯ãŒã¯ãæäŸããŸãã
Pythonãããžã§ã¯ãã§ããã©ãŒãã³ã¹ã¬ãã¥ãŒãéèŠãªçç±
ããã©ãŒãã³ã¹ã¬ãã¥ãŒã¯ãåã«é ãã³ãŒããç¹å®ããã ãã®ãã®ã§ã¯ãããŸãããã³ãŒãå質ãåäžãããæé©åã®æåãè²ã¿ãé·æçãªãããžã§ã¯ãã®æåã確å®ã«ããããã®å æ¬çãªã¢ãããŒãã§ããã°ããŒãã«ã«åæ£ããããŒã ã«ãšã£ãŠãæšæºåãããéææ§ã®é«ãããã©ãŒãã³ã¹ã¬ãã¥ãŒããã»ã¹ã¯ãç°ãªãã¿ã€ã ãŸãŒã³ãã¹ãã«ã»ããéã§ã®äžè²«æ§ãšã³ã©ãã¬ãŒã·ã§ã³ãä¿é²ãããããããã«éèŠã§ããããã©ãŒãã³ã¹ã¬ãã¥ãŒãäžå¯æ¬ ã§ããçç±ã¯æ¬¡ã®ãšããã§ãïŒ
- ããã«ããã¯ã®æ©æçºèŠ: éçºãµã€ã¯ã«ã®æ©ã段éã§ããã©ãŒãã³ã¹ã®åé¡ãç¹å®ããããšã§ãåŸã 倧ããªåé¡ã«ãšã¹ã«ã¬ãŒãããã®ãé²ããŸãã
- ãªãœãŒã¹ã®æé©å: å¹ççãªã³ãŒãã¯ãªãœãŒã¹ããã广çã«å©çšããã€ã³ãã©ã³ã¹ããåæžããã¹ã±ãŒã©ããªãã£ãåäžãããŸãã
- ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®åäž: ããé«éãªã¢ããªã±ãŒã·ã§ã³ã¯ãããè¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«ã€ãªããããŠãŒã¶ãŒæºè¶³åºŠãšãšã³ã²ãŒãžã¡ã³ãã®åäžããããããŸãã
- ã³ãŒãå質ã®åäž: ããã©ãŒãã³ã¹ã¬ãã¥ãŒã¯ãéçºè ãããã¯ãªãŒã³ã§å¹ççãªã³ãŒããæžãããšã奚å±ããå šäœçãªã³ãŒãå質ãšä¿å®æ§ãé«ããŸãã
- ç¥èã®å ±æ: ã¬ãã¥ãŒããã»ã¹ã¯ããŒã ã¡ã³ããŒéã®ç¥èå ±æãä¿é²ãããã¹ããã©ã¯ãã£ã¹ãåºããç¶ç¶çãªåŠç¿ãä¿é²ããŸãã
- æšæºåããããã©ã¯ãã£ã¹: ã°ããŒãã«ããŒã ã«ãšã£ãŠãäžè²«ããã¬ãã¥ãŒããã»ã¹ã確ç«ããããšã¯ãç°ãªãå Žæã§æžãããã³ãŒããåãããã©ãŒãã³ã¹åºæºã«æºæ ããããšãä¿èšŒããŸãã
Pythonããã©ãŒãã³ã¹è©äŸ¡ãã¬ãŒã ã¯ãŒã¯ã®æ§ç¯
å ç¢ãªããã©ãŒãã³ã¹è©äŸ¡ãã¬ãŒã ã¯ãŒã¯ã¯ãããã€ãã®äž»èŠãªã³ã³ããŒãã³ãã§æ§æãããŠããŸããããããã詳ããèŠãŠãããŸãããïŒ
1. ããã©ãŒãã³ã¹ã¡ããªã¯ã¹ã®å®çŸ©
æåã®ã¹ãããã¯ããããžã§ã¯ãã®ç¹å®ã®èŠä»¶ã«åèŽãããæç¢ºã§æž¬å®å¯èœãªããã©ãŒãã³ã¹ã¡ããªã¯ã¹ãå®çŸ©ããããšã§ãããããã®ã¡ããªã¯ã¹ã¯ãã³ãŒãã®ããã©ãŒãã³ã¹ãè©äŸ¡ããæ¹åã®äœå°ãããé åãç¹å®ããããã®ãã³ãããŒã¯ãšããŠæ©èœããŸããPythonã¢ããªã±ãŒã·ã§ã³ã®äžè¬çãªããã©ãŒãã³ã¹ã¡ããªã¯ã¹ã«ã¯ã次ã®ãã®ããããŸãïŒ
- å®è¡æé: ç¹å®ã®é¢æ°ãŸãã¯ã³ãŒããããã¯ãå®è¡ã«ãããæéãããã¯ãããã©ãŒãã³ã¹ã®äœãã³ãŒããç¹å®ããããã®åºæ¬çãªã¡ããªã¯ã¹ã§ãã
- ã¡ã¢ãªäœ¿çšé: ã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠæ¶è²»ãããã¡ã¢ãªã®éãéå°ãªã¡ã¢ãªäœ¿çšã¯ãããã©ãŒãã³ã¹ã®äœäžãå®å®æ§ã®åé¡ã«ã€ãªããå¯èœæ§ããããŸããmemory_profilerã®ãããªããŒã«ã¯éåžžã«åœ¹ç«ã¡ãŸãã
- CPU䜿çšç: ã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠäœ¿çšãããCPUãªãœãŒã¹ã®å²åãé«ãCPU䜿çšçã¯ãéå¹çãªã¢ã«ãŽãªãºã ãéå°ãªåŠçã瀺ããŠããå¯èœæ§ããããŸãã
- I/Oæäœ: å ¥åºåæäœïŒäŸïŒãã¡ã€ã«ã®èªã¿æžããããŒã¿ããŒã¹ã¯ãšãªïŒã®æ°ãšæéãI/Oæäœã¯ãå€ãã®ã¢ããªã±ãŒã·ã§ã³ã§é倧ãªããã«ããã¯ã«ãªãå¯èœæ§ããããŸãã
- ã¬ã€ãã³ã·: ãªã¯ãšã¹ããåŠçãããã¬ã¹ãã³ã¹ãè¿ããããŸã§ã«ãããæéãããã¯ãWebã¢ããªã±ãŒã·ã§ã³ãAPIã«ãšã£ãŠç¹ã«éèŠã§ãã
- ã¹ã«ãŒããã: åäœæéãããã«åŠçããããªã¯ãšã¹ããŸãã¯ãã©ã³ã¶ã¯ã·ã§ã³ã®æ°ããã®ã¡ããªã¯ã¹ã¯ãã¢ããªã±ãŒã·ã§ã³ã®è² è·åŠçèœåãæž¬å®ããŸãã
- ãšã©ãŒç: å®è¡äžã«çºçãããšã©ãŒãäŸå€ã®é »åºŠãé«ããšã©ãŒçã¯ãæ ¹æ¬çãªããã©ãŒãã³ã¹ã®åé¡ãäžå®å®æ§ã瀺ããŠããå¯èœæ§ããããŸãã
äŸ: eã³ããŒã¹ãã©ãããã©ãŒã ã®å Žåãé¢é£ããã¡ããªã¯ã¹ã«ã¯ãå¹³åããŒãžèªã¿èŸŒã¿æéãæ³šæåŠçæéãããã³ããã©ãŒãã³ã¹ãäœäžãããããšãªãã·ã¹ãã ãåŠçã§ããåæãŠãŒã¶ãŒæ°ãå«ãŸããå ŽåããããŸããããŒã¿åŠçãã€ãã©ã€ã³ã®å Žåãäž»èŠãªã¡ããªã¯ã¹ã«ã¯ãããŒã¿ã®ãããåŠçã«ãããæéãåŠçãžã§ãã®ã¡ã¢ãªãããããªã³ããå«ãŸããå ŽåããããŸãã
å®è·µçãªæŽå¯: ããã©ãŒãã³ã¹ã¡ããªã¯ã¹ãã¢ããªã±ãŒã·ã§ã³ã®ç¹å®ã®ããŒãºã«åãããŠèª¿æŽããæž¬å®å¯èœã§è¿œè·¡å¯èœã§ããããšã確èªããŠãã ãããã¢ãã¿ãªã³ã°ããŒã«ã䜿çšããŠããã©ãŒãã³ã¹ããŒã¿ãèªåçã«åéããèŠèŠåããããšãæ€èšããŠãã ããã
2. ãããã¡ã€ãªã³ã°ãšãã³ãããŒãã³ã°ããŒã«
ããã©ãŒãã³ã¹ã¡ããªã¯ã¹ãå®çŸ©ããããããããæ£ç¢ºã«æž¬å®ããããã®ããŒã«ãå¿ èŠã§ããPythonã¯ãããã©ãŒãã³ã¹ã®ããã«ããã¯ãç¹å®ããæé©åã®åœ±é¿ãè©äŸ¡ããã®ã«åœ¹ç«ã€ããŸããŸãªãããã¡ã€ãªã³ã°ããã³ãã³ãããŒãã³ã°ããŒã«ãæäŸããŠããŸãã人æ°ã®ããããŒã«ã«ã¯ã次ã®ãã®ããããŸãïŒ
- cProfile: Pythonã®çµã¿èŸŒã¿ãããã¡ã€ã©ã§ã颿°åŒã³åºãåæ°ãå®è¡æéããã®ä»ã®ããã©ãŒãã³ã¹ã¡ããªã¯ã¹ã«é¢ããè©³çŽ°ãªæ
å ±ãæäŸããŸãã
cProfileã¯æ±ºå®è«çãããã¡ã€ã©ã§ãããå€å°ã®ãªãŒããŒãããã远å ããŸãããäžè¬çã«æ£ç¢ºã§ãã - line_profiler: æãæéãæ¶è²»ããŠããã³ãŒãã®è¡ãæ£ç¢ºã«ç¹å®ããã®ã«åœ¹ç«ã€è¡åäœã®ãããã¡ã€ã©ã§ããããã¯ã颿°å ã®ããã«ããã¯ãç¹å®ããããã«éåžžã«è²Žéã§ãã`pip install line_profiler`ã䜿çšããŠã€ã³ã¹ããŒã«ãã颿°ã`@profile`ã§ãã³ã¬ãŒãããŸãã
- memory_profiler: ã¡ã¢ãªäœ¿çšéãè¡åäœã§è¿œè·¡ããããã®ããŒã«ã§ããããã«ãããã¡ã¢ãªãªãŒã¯ãã¡ã¢ãªãæé©åã§ããé åãç¹å®ã§ããŸãã`pip install memory_profiler`ã§ã€ã³ã¹ããŒã«ãã`@profile`ãã³ã¬ãŒã¿ã䜿çšããŸãã
- timeit: å°ããªã³ãŒãã¹ããããããã³ãããŒã¯ããããã®ã¢ãžã¥ãŒã«ã§ãç°ãªãå®è£ ã®ããã©ãŒãã³ã¹ãæ¯èŒã§ããŸããããã¯ãã€ã¯ãæé©åã«åœ¹ç«ã¡ãŸãã
- pytest-benchmark: 颿°ãã¡ãœããããã³ãããŒã¯ããããã®pytestãã©ã°ã€ã³ã§ã詳现ãªããã©ãŒãã³ã¹ã¬ããŒããæäŸããæéçµéã«äŒŽãããã©ãŒãã³ã¹ãªã°ã¬ãã·ã§ã³ã远跡ã§ããŸãã
- ãã¬ãŒã ã°ã©ã: ãããã¡ã€ãªã³ã°ããŒã¿ã®èŠèŠç衚çŸã§ãã³ãŒã«ã¹ã¿ãã¯ãšå颿°ã§è²»ããããæéã瀺ããŸãããã¬ãŒã ã°ã©ãã䜿çšãããšãå šäœã®å®è¡æéã«æãå¯äžããŠãã颿°ãç°¡åã«ç¹å®ã§ããŸãã`py-spy`ã®ãããªããŒã«ã§ãã¬ãŒã ã°ã©ããçæã§ããŸãã
äŸ: cProfileã䜿çšãããšãæãé »ç¹ã«åŒã³åºãããå®è¡ã«æãæéãããã颿°ãç¹å®ã§ããŸããæ¬¡ã«line_profilerã䜿çšããŠããããã®é¢æ°ãæãäžããããã«ããã¯ã®åå ãšãªã£ãŠããç¹å®ã®ã³ãŒãè¡ãç¹å®ã§ããŸããmemory_profilerã¯ãã¡ã¢ãªãªãŒã¯ãã¡ã¢ãªäœ¿çšéãåæžã§ããé åãç¹å®ããã®ã«åœ¹ç«ã¡ãŸãã
å®è·µçãªæŽå¯: ããŒãºã«æãé©ãããããã¡ã€ãªã³ã°ããã³ãã³ãããŒãã³ã°ããŒã«ãéžæããããããéçºã¯ãŒã¯ãããŒã«çµ±åããŠãã ããããããã¡ã€ãªã³ã°ããã»ã¹ãèªååããŠãããã©ãŒãã³ã¹ãç¶ç¶çã«ç£èŠãããããã«ããŸãã
3. ããã©ãŒãã³ã¹ã«é¢ããã³ãŒãã¬ãã¥ãŒã®ãã¹ããã©ã¯ãã£ã¹
ã³ãŒãã¬ãã¥ãŒã¯ããããããœãããŠã§ã¢éçºããã»ã¹ã®äžå¯æ¬ ãªéšåã§ãããPythonã®ããã©ãŒãã³ã¹ã確ä¿ããããã«ã¯ç¹ã«éèŠã§ããã³ãŒãã¬ãã¥ãŒäžãéçºè ã¯æœåšçãªããã©ãŒãã³ã¹ã®åé¡ãç¹å®ããæé©åãææ¡ããããšã«éäžãã¹ãã§ããããã©ãŒãã³ã¹ã«çŠç¹ãåœãŠãã³ãŒãã¬ãã¥ãŒã宿œããããã®ãã¹ããã©ã¯ãã£ã¹ãããã€ã玹ä»ããŸãïŒ
- ã¢ã«ãŽãªãºã ã®å¹çã«çŠç¹ãåœãŠã: 䜿çšãããã¢ã«ãŽãªãºã ãå¹ççã§ãåœé¢ã®ã¿ã¹ã¯ã«é©ããŠããããšã確èªããŸããã¢ã«ãŽãªãºã ã®æéèšç®éãšç©ºéèšç®éãèæ ®ããŸãã
- åé·ãªæäœãç¹å®ãã: æé©åãŸãã¯æé€ã§ããåé·ãªèšç®ãæäœãæ¢ããŸãã
- ããŒã¿æ§é ãæé©åãã: åœé¢ã®ã¿ã¹ã¯ã«é©ããããŒã¿æ§é ãéžæããŸããééã£ãããŒã¿æ§é ã䜿çšãããšãå€§å¹ ãªããã©ãŒãã³ã¹äœäžã«ã€ãªããå¯èœæ§ããããŸãã
- I/Oæäœãæå°éã«æãã: I/Oæäœã®æ°ãšæéãåæžããŸãããã£ãã·ã¥ã䜿çšããŠããã£ã¹ã¯ããããã¯ãŒã¯ããããŒã¿ãèªã¿åãå¿ èŠæ§ãæžãããŸãã
- ãžã§ãã¬ãŒã¿ãšã€ãã¬ãŒã¿ã䜿çšãã: ãžã§ãã¬ãŒã¿ãšã€ãã¬ãŒã¿ã¯ãç¹ã«å€§èŠæš¡ãªããŒã¿ã»ãããæ±ãå Žåã«ããªã¹ããããã¡ã¢ãªå¹çãè¯ãããšããããŸãã
- ã°ããŒãã«å€æ°ãé¿ãã: ã°ããŒãã«å€æ°ã¯ããã©ãŒãã³ã¹ã®åé¡ã«ã€ãªãããã³ãŒãã®ä¿å®ãå°é£ã«ããå¯èœæ§ããããŸãã
- çµã¿èŸŒã¿é¢æ°ã䜿çšãã: Pythonã®çµã¿èŸŒã¿é¢æ°ãã©ã€ãã©ãªã¯é«åºŠã«æé©åãããŠããããšãå€ããããå¯èœãªéãæŽ»çšããŸãã
- äžŠè¡æ§ãšäžŠååŠçãæ€èšãã: é©åã§ããã°ãäžŠè¡æ§ãŸãã¯äžŠååŠçã䜿çšããŠããã©ãŒãã³ã¹ãåäžãããŸãããã ãã䞊è¡ããã°ã©ãã³ã°ã®è€éããšæœåšçãªèœãšãç©Žã«æ³šæããŠãã ããã`asyncio`ã`multiprocessing`ã®ãããªã©ã€ãã©ãªã圹ç«ã¡ãŸãã
- N+1ã¯ãšãªã®ãã§ãã¯ïŒããŒã¿ããŒã¹å©çšã¢ããªã±ãŒã·ã§ã³åãïŒ: ORMãå€çšããã¢ããªã±ãŒã·ã§ã³ã§ã¯ãéå°ãªããŒã¿ããŒã¹ã¯ãšãªïŒN+1åé¡ïŒãå®è¡ããŠããªãããšã確èªããŸããSQLãããã¡ã€ãªã³ã°ã®ãããªããŒã«ã圹ç«ã¡ãŸãã
äŸ: ã³ãŒãã¬ãã¥ãŒäžã«ãéçºè ã¯ãã颿°ã倧ããªãªã¹ããè€æ°åå埩åŠçããŠããããšã«æ°ã¥ããããããŸãããã«ãã¯ã¢ããæäœã®å¹çãåäžãããããã«ãèŸæžãã»ããã䜿çšããããšãææ¡ã§ããŸãã
å®è·µçãªæŽå¯: ããã©ãŒãã³ã¹ãžã®é æ ®ãéèŠããæç¢ºãªã³ãŒãã¬ãã¥ãŒã¬ã€ãã©ã€ã³ã確ç«ããŸããéçºè å士ãäºãã®ã³ãŒãã«ææŠããæé©åãææ¡ããããšã奚å±ããŸããã³ãŒãã¬ãã¥ãŒããŒã«ãå©çšããŠã¬ãã¥ãŒããã»ã¹ãèªååããäžè²«æ§ã確ä¿ããŸãã
4. ããã©ãŒãã³ã¹ãã¹ããšç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³
ããã©ãŒãã³ã¹ãã¹ãã¯ãç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ïŒCIïŒãã€ãã©ã€ã³ã®äžå¯æ¬ ãªéšåã§ããã¹ãã§ãããã¹ãŠã®ã³ãŒã倿Žã«å¯ŸããŠèªåçã«ããã©ãŒãã³ã¹ãã¹ããå®è¡ããããšã§ãããã©ãŒãã³ã¹ã®ãªã°ã¬ãã·ã§ã³ãæ©æã«æ€åºããããããæ¬çªç°å¢ã«å°éããã®ãé²ãããšãã§ããŸããCIã«ãããããã©ãŒãã³ã¹ãã¹ãã®ãã¹ããã©ã¯ãã£ã¹ãããã€ã玹ä»ããŸãïŒ
- ããã©ãŒãã³ã¹ãã¹ãã®èªåå: ããã©ãŒãã³ã¹ãã¹ããCIãã€ãã©ã€ã³ã«çµ±åãããã¹ãŠã®ã³ãŒã倿޿ã«èªåçã«å®è¡ããŸãã
- çŸå®çãªã¯ãŒã¯ããŒãã䜿çšãã: çŸå®çãªã¯ãŒã¯ããŒããšããŒã¿ã»ããã䜿çšããŠãå®éã®äœ¿çšãã¿ãŒã³ãã·ãã¥ã¬ãŒãããŸãã
- ããã©ãŒãã³ã¹ã®éŸå€ãèšå®ãã: åã¡ããªã¯ã¹ã«èš±å®¹å¯èœãªããã©ãŒãã³ã¹ã®éŸå€ãå®çŸ©ããéŸå€ãè¶ ããå Žåã¯ãã«ãã倱æãããŸãã
- ããã©ãŒãã³ã¹ã®åŸåã远跡ãã: æéã®çµéãšãšãã«ããã©ãŒãã³ã¹ã®åŸåã远跡ããæœåšçãªãªã°ã¬ãã·ã§ã³ãç¹å®ããæé©åã®åœ±é¿ãç£èŠããŸãã
- å°çšã®ãã¹ãç°å¢ã䜿çšãã: æ£ç¢ºãªçµæãä¿èšŒããããã«ãä»ã®ããã»ã¹ããéé¢ãããå°çšã®ãã¹ãç°å¢ã§ããã©ãŒãã³ã¹ãã¹ããå®è¡ããŸãã
- è² è·ãã¹ããæ€èšãã: é«ãã©ãã£ãã¯ã®ã·ããªãªãã·ãã¥ã¬ãŒãããæœåšçãªã¹ã±ãŒã©ããªãã£ã®åé¡ãç¹å®ããããã«ãè² è·ãã¹ããCIããã»ã¹ã«çµ±åããŸããLocustãJMeterã®ãããªããŒã«ãããã§åœ¹ç«ã¡ãŸãã
äŸ: ããã©ãŒãã³ã¹ãã¹ãã§ãããŒã¿ã®ãããåŠçã«ãããæéãæž¬å®ãããããããŸãããåŠçæéãäºåã«å®çŸ©ãããéŸå€ãè¶ ããå Žåããã¹ãã¯å€±æãããã«ãã¯æåŠãããã³ãŒã倿Žãæ¬çªç°å¢ã«ãããã€ãããã®ãé²ããŸãã
å®è·µçãªæŽå¯: ããã©ãŒãã³ã¹ãã¹ããCIãã€ãã©ã€ã³ã«çµ±åãããã¹ãããã»ã¹ãèªååããŸããçŸå®çãªã¯ãŒã¯ããŒãã䜿çšããããã©ãŒãã³ã¹ã®éŸå€ãèšå®ããŠãããã©ãŒãã³ã¹ã®ãªã°ã¬ãã·ã§ã³ãæ©æã«æ€åºãããããã«ããŸãã
5. ã°ããŒãã«ããŒã å ã§ã®ããã©ãŒãã³ã¹æåã®ç¢ºç«
ããã©ãŒãã³ã¹ãæèããæåãæ§ç¯ããããšã¯ãæç¶çãªããã©ãŒãã³ã¹åäžãéæããããã«äžå¯æ¬ ã§ããããã«ã¯ãæèåäžããã¬ãŒãã³ã°ã®æäŸããããŠéçºè ãããã©ãŒãã³ã¹ãåªå ããããšã奚å±ãããå調çãªç°å¢ã®éžæãå«ãŸããŸããã°ããŒãã«ã«åæ£ããããŒã ã«ãšã£ãŠã¯ãã³ãã¥ãã±ãŒã·ã§ã³ãšç¥èå ±æã«ç¹ã«æ³šæãæãå¿ èŠããããŸãã
- ãã¬ãŒãã³ã°ãšãªãœãŒã¹ã®æäŸ: éçºè ã«Pythonã®ããã©ãŒãã³ã¹æé©åæè¡ã«é¢ãããã¬ãŒãã³ã°ãšãªãœãŒã¹ãæäŸããŸãã
- ãã¹ããã©ã¯ãã£ã¹ã®å ±æ: ããã©ãŒãã³ã¹ãéèŠãããã¹ããã©ã¯ãã£ã¹ãšã³ãŒãã£ã³ã°æšæºãå ±æããŸãã
- ã³ã©ãã¬ãŒã·ã§ã³ã®å¥šå±: éçºè ãååããç¥èãšçµéšãå ±æããããšã奚å±ããŸãããªã³ã©ã€ã³ãã©ãŒã©ã ãwikiããã®ä»ã®ã³ã©ãã¬ãŒã·ã§ã³ããŒã«ã䜿çšããŠãã³ãã¥ãã±ãŒã·ã§ã³ãä¿é²ããŸãã
- ããã©ãŒãã³ã¹æ¹åã®èªèãšå ±é ¬: ããã©ãŒãã³ã¹æé©åã«å€§ããè²¢ç®ããéçºè ãèªèããå ±é ¬ãäžããŸãã
- 宿çãªããã©ãŒãã³ã¹ã¬ãã¥ãŒäŒè°ã®éå¬: ããã©ãŒãã³ã¹ã®åé¡ã«ã€ããŠè°è«ãããã¹ããã©ã¯ãã£ã¹ãå ±æãã鲿ã远跡ããããã«ã宿çãªããã©ãŒãã³ã¹ã¬ãã¥ãŒäŒè°ãéå¬ããŸãã
- ããã©ãŒãã³ã¹ã®åé¡ãšè§£æ±ºçã®ææžå: ããã©ãŒãã³ã¹ã®åé¡ãšãã®è§£æ±ºçã®ãã¬ããžããŒã¹ãç¶æããç¥èå ±æãä¿é²ããåé¡ã®åçºãé²ããŸãã
- éåæã³ãã¥ãã±ãŒã·ã§ã³ã®å¹æçãªå©çš: ã¿ã€ã ãŸãŒã³ã®éããèªèããéåæã³ãã¥ãã±ãŒã·ã§ã³ããŒã«ïŒäŸïŒã¡ãŒã«ããããžã§ã¯ã管çãœãããŠã§ã¢ïŒã掻çšããŠãããŒã ã¡ã³ããŒãå Žæã«é¢ä¿ãªã广çã«ååã§ããããã«ããŸãã
- æç¢ºãªã³ãã¥ãã±ãŒã·ã§ã³ãã£ãã«ã®ç¢ºç«: ããã©ãŒãã³ã¹ã®åé¡ãå ±åããæé©åæŠç¥ãå ±æããããã®æç¢ºãªã³ãã¥ãã±ãŒã·ã§ã³ãã£ãã«ãå®çŸ©ããŸãã
- ãã¢ããã°ã©ãã³ã°ã®æ€èš: ãªã¢ãŒãã§ã¯å°é£ã§ãããç°ãªãå Žæã«ããéçºè ãããã©ãŒãã³ã¹ã¯ãªãã£ã«ã«ãªã³ãŒãã§ååã§ããããã«ããã¢ããã°ã©ãã³ã°ã»ãã·ã§ã³ãæ€èšããŸãã
äŸ: Pythonã®ããã©ãŒãã³ã¹æé©åæè¡ã«é¢ãã宿çãªã¯ãŒã¯ã·ã§ããããã¬ãŒãã³ã°ã»ãã·ã§ã³ãéå¬ããŸãããã¹ããã©ã¯ãã£ã¹ãšã³ãŒãã£ã³ã°æšæºãèšèŒããwikiããŒãžãäœæããŸããããã©ãŒãã³ã¹ã®ããã«ããã¯ãç¹å®ããä¿®æ£ããéçºè ãèªèããå ±é ¬ãäžããŸãã
å®è·µçãªæŽå¯: ãã¬ãŒãã³ã°ã®æäŸããã¹ããã©ã¯ãã£ã¹ã®å ±æãã³ã©ãã¬ãŒã·ã§ã³ã®å¥šå±ãããã©ãŒãã³ã¹æ¹åã®èªèãéããŠãããã©ãŒãã³ã¹æåãéžæããŸããéçºããã»ã¹ã®ããããåŽé¢ã§ããã©ãŒãã³ã¹ãäž»èŠãªèæ ®äºé ãšããŸãã
6. ç¶ç¶çãªã¢ãã¿ãªã³ã°ãšæé©å
ããã©ãŒãã³ã¹ã®æé©åã¯äžåºŠããã®åãçµã¿ã§ã¯ãããŸãããç¶ç¶çãªã¢ãã¿ãªã³ã°ãšæé©åãå¿ èŠãšããç¶ç¶çãªããã»ã¹ã§ããã¢ããªã±ãŒã·ã§ã³ãæ¬çªç°å¢ã«ãããã€ããããããã®ããã©ãŒãã³ã¹ãç£èŠããæ¹åã®äœå°ãããé åãç¹å®ããå¿ èŠããããŸããç¶ç¶çãªã¢ãã¿ãªã³ã°ãšæé©åã®ããã®ãã¹ããã©ã¯ãã£ã¹ãããã€ã玹ä»ããŸãïŒ
- ã¢ãã¿ãªã³ã°ããŒã«ã®äœ¿çš: ã¢ãã¿ãªã³ã°ããŒã«ã䜿çšããŠãããã©ãŒãã³ã¹ã¡ããªã¯ã¹ããªã¢ã«ã¿ã€ã ã§è¿œè·¡ããŸããäžè¬çãªããŒã«ã«ã¯ãPrometheus, Grafana, New Relic, Datadogãªã©ããããŸãã
- ã¢ã©ãŒãã®èšå®: ããã©ãŒãã³ã¹ã®éŸå€ãè¶ ãããšãã«éç¥ããã¢ã©ãŒããèšå®ããŸãã
- ããã©ãŒãã³ã¹ããŒã¿ã®åæ: ããã©ãŒãã³ã¹ããŒã¿ãåæããŠãåŸåãšãã¿ãŒã³ãç¹å®ããŸãã
- 宿çãªã³ãŒãã¬ãã¥ãŒ: æœåšçãªããã©ãŒãã³ã¹ã®åé¡ã«ã€ããŠã宿çã«ã³ãŒããã¬ãã¥ãŒããŸãã
- ç°ãªãæé©åã®å®éš: ããŸããŸãªæé©åæè¡ã詊ãããã®ããã©ãŒãã³ã¹ãžã®åœ±é¿ã枬å®ããŸãã
- æé©åã¿ã¹ã¯ã®èªåå: å¯èœãªéãæé©åã¿ã¹ã¯ãèªååããŸãã
- æ ¹æ¬åå åæã®å®æœ: ããã©ãŒãã³ã¹ã®åé¡ãçºçããå Žåã¯ã培åºçãªæ ¹æ¬åå åæãè¡ããæ ¹æ¬çãªåå ãç¹å®ããŸãã
- ã©ã€ãã©ãªãšãã¬ãŒã ã¯ãŒã¯ã®æŽæ°: ããã©ãŒãã³ã¹ã®æ¹åããã°ä¿®æ£ã掻çšããããã«ãã©ã€ãã©ãªããã¬ãŒã ã¯ãŒã¯ã宿çã«æŽæ°ããŸãã
äŸ: ã¢ãã¿ãªã³ã°ããŒã«ã䜿çšããŠãWebã¢ããªã±ãŒã·ã§ã³ã®å¹³åå¿çæéã远跡ããŸããå¿çæéãäºåã«å®çŸ©ãããéŸå€ãè¶ ããå Žåãã¢ã©ãŒããããªã¬ãŒããŠåå ã調æ»ããŸãããããã¡ã€ãªã³ã°ããŒã«ã䜿çšããŠããã©ãŒãã³ã¹ã®äœãã³ãŒããç¹å®ããããŸããŸãªæé©åæè¡ã詊ããŸãã
å®è·µçãªæŽå¯: å ç¢ãªç£èŠã·ã¹ãã ãå®è£ ããç¶ç¶çã«ããã©ãŒãã³ã¹ããŒã¿ãåæããŠæ¹åã®äœå°ãããé åãç¹å®ããŸããããŸããŸãªæé©åæè¡ã詊ããå¯èœãªéãæé©åã¿ã¹ã¯ãèªååããŸãã
Pythonã®å ·äœçãªããã©ãŒãã³ã¹èæ ®äºé
äžè¬çãªãã¬ãŒã ã¯ãŒã¯ã«å ããŠãããã©ãŒãã³ã¹ã¬ãã¥ãŒäžã«ç²Ÿæ»ãã¹ãPythonã³ãŒãã®å ·äœçãªåŽé¢ã以äžã«ç€ºããŸãïŒ
- ã«ãŒãã®æé©å: Pythonã®ã«ãŒããç¹ã«ãã¹ããããã«ãŒãã¯ãããã©ãŒãã³ã¹ã®ããã«ããã¯ã«ãªãå¯èœæ§ããããŸãããªã¹ãå å 衚èšãmap/filter颿°ããŸãã¯ïŒNumPyã®ãããªã©ã€ãã©ãªã䜿çšããïŒãã¯ãã«åãããæäœã䜿çšããŠã«ãŒããæé©åããããšãæ€èšããŠãã ããã
- æååã®é£çµ: ç¹°ãè¿ãããæååã®é£çµã«`+`æŒç®åã䜿çšããã®ã¯é¿ããŠãã ããã代ããã«`join()`ã¡ãœããã䜿çšããæ¹ããã¯ããã«å¹ççã§ãã
- ã¬ããŒãžã³ã¬ã¯ã·ã§ã³: Pythonã®ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã¡ã«ããºã ã¯ãããã©ãŒãã³ã¹ã®ãªãŒããŒããããåŒãèµ·ããããšããããŸããã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãã©ã®ããã«æ©èœããããçè§£ãããªããžã§ã¯ãããŒãªã³ã°ã®ãããªæè¡ã䜿çšããŠã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã®é »åºŠãæžããããšãæ€èšããŠãã ããã
- ã°ããŒãã«ã€ã³ã¿ããªã¿ããã¯ïŒGILïŒ: GILã¯ãPythonã¹ã¬ããããã«ãã³ã¢ããã»ããµäžã§äžŠåã«å®è¡ããèœåãå¶éããŸããCPUããŠã³ããªã¿ã¹ã¯ã«ã¯ãGILããã€ãã¹ããããã«ãã«ãããã»ãã·ã³ã°ã䜿çšããããšãæ€èšããŠãã ããã
- ããŒã¿ããŒã¹ãšã®çžäºäœçš: ããŒã¿ããŒã¹ã¯ãšãªãæé©åãããã£ãã·ã¥ã䜿çšããŠããŒã¿ããŒã¹ãªã¯ãšã¹ãã®æ°ãæžãããŸããã³ãã¯ã·ã§ã³ããŒãªã³ã°ã䜿çšããŠããŒã¿ããŒã¹æ¥ç¶ãåå©çšããæ¥ç¶ã®ãªãŒããŒããããåæžããŸãã
- ã·ãªã¢ã©ã€ãº/ãã·ãªã¢ã©ã€ãº: ããŒã¿ã«é©ããã·ãªã¢ã©ã€ãºåœ¢åŒãéžæããŠãã ãããProtocol BuffersãMessagePackã®ãããªåœ¢åŒã¯ãJSONãPickleãããå¹ççãªå ŽåããããŸãã
- æ£èŠè¡šçŸ: æ£èŠè¡šçŸã¯åŒ·åã§ãããããã©ãŒãã³ã¹ã倿¶è²»ããããšããããŸããæ éã«äœ¿çšããæ³šææ·±ãæé©åããŠãã ãããç¹°ãè¿ã䜿çšããå Žåã¯ãæ£èŠè¡šçŸãã³ã³ãã€ã«ããŸãã
ã°ããŒãã«ããŒã åãã®ããã©ãŒãã³ã¹ã¬ãã¥ãŒã¯ãŒã¯ãããŒäŸ
å°ççã«åæ£ããããŒã ã«é©å¿ã§ãããµã³ãã«ã¯ãŒã¯ãããŒã以äžã«ç€ºããŸãïŒ
- ã³ãŒãã®æåº: éçºè ãããŒãžã§ã³ç®¡çã·ã¹ãã ïŒäŸïŒGitïŒãéããŠã³ãŒã倿ŽãæåºããŸãã
- èªåãã¹ã: CIã·ã¹ãã ãèªåçã«åäœãã¹ããçµ±åãã¹ããããã©ãŒãã³ã¹ãã¹ããå®è¡ããŸãã
- ã³ãŒãã¬ãã¥ãŒã®ãªã¯ãšã¹ã: éçºè ãæå®ãããã¬ãã¥ãŒæ åœè ïŒçæ³çã«ã¯ã倿§ãªèŠç¹ã確ä¿ããããã«ç°ãªãå Žæã«ãã人ïŒã«ã³ãŒãã¬ãã¥ãŒããªã¯ãšã¹ãããŸãã
- éåæã¬ãã¥ãŒ: ã¬ãã¥ãŒæ åœè ã¯ã³ãŒãã調ã¹ãããã©ãŒãã³ã¹ã®åŽé¢ã«æ³šæãæããŸããéåæã³ãã¥ãã±ãŒã·ã§ã³ããŒã«ïŒäŸïŒãã«ãªã¯ãšã¹ããžã®ã³ã¡ã³ããã¡ãŒã«ïŒã䜿çšããŠãã£ãŒãããã¯ãæäŸããŸãã
- ãã£ãŒãããã¯ã®å®è£ : éçºè ã¯ã¬ãã¥ãŒæ åœè ã®ãã£ãŒãããã¯ã«å¯Ÿå¿ããå¿ èŠãªå€æŽãè¡ããŸãã
- ããã©ãŒãã³ã¹ãããã¡ã€ãªã³ã°ïŒå¿
èŠãªå ŽåïŒ: ããã©ãŒãã³ã¹ã«é¢ããæžå¿µãæèµ·ãããå Žåãéçºè
ã¯
cProfileãline_profilerãªã©ã®ããŒã«ã䜿çšããŠã³ãŒãããããã¡ã€ãªã³ã°ããŸãããããã¡ã€ãªã³ã°ã®çµæãã¬ãã¥ãŒæ åœè ãšå ±æããŸãã - ä¿®æ£ã³ãŒãã®æåº: éçºè ãä¿®æ£ãããã³ãŒã倿ŽãæåºããŸãã
- æçµã¬ãã¥ãŒãšæ¿èª: ã¬ãã¥ãŒæ åœè ãæçµã¬ãã¥ãŒãè¡ããã³ãŒã倿Žãæ¿èªããŸãã
- ãããã€: CIã·ã¹ãã ãèªåçã«ã³ãŒã倿Žãæ¬çªç°å¢ã«ãããã€ããŸãã
- ç¶ç¶çãªã¢ãã¿ãªã³ã°: æ¬çªç°å¢ã¯ããã©ãŒãã³ã¹ã®åé¡ã«ã€ããŠç¶ç¶çã«ç£èŠãããŸãã
çµè«
Pythonã®ããã©ãŒãã³ã¹ã¬ãã¥ãŒã¯ãã³ãŒãå質ã®ç¢ºä¿ããªãœãŒã¹äœ¿çšçã®æé©åããããŠããžãã£ããªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®æäŸã«äžå¯æ¬ ã§ããå æ¬çãªè©äŸ¡ãã¬ãŒã ã¯ãŒã¯ãå®è£ ããæç¢ºãªã¡ããªã¯ã¹ãå®çŸ©ããé©åãªãããã¡ã€ãªã³ã°ããŒã«ã䜿çšããããã©ãŒãã³ã¹ãæèããæåãè²ãããšã§ãã°ããŒãã«ã«åæ£ããããŒã ã¯ã仿¥ã®ããŒã¹ã®éãäžçã®èŠæ±ã«å¿ãã髿§èœãªPythonã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸããããã©ãŒãã³ã¹ã®æé©åã¯ãç¶ç¶çãªç£èŠãšæ¹åãå¿ èŠãšããç¶ç¶çãªããã»ã¹ã§ããããšãå¿ããªãã§ãã ãããããã©ãŒãã³ã¹ã«å¯Ÿããç©æ¥µçãªã¢ãããŒããåãå ¥ããããšã§ãPythonãããžã§ã¯ãã®é·æçãªæåã確å®ã«ããããšãã§ããŸãã