--- /dev/null
+# 䞊è¡åŠçãš async / await
+
+*path operation 颿°*ã®ããã® `async def` ã«é¢ãã詳现ãšéåæ (asynchronous) ã³ãŒãã䞊è¡åŠç (Concurrency)ããããŠã䞊ååŠç (Parallelism) ã®èæ¯ã«ã€ããŠã
+
+## æ¥ãã§ããŸããïŒ
+
+<abbr title="too long; didn't read (é·ãããŠèªããªã人ã®ããã®èŠçŽãšããæå³ã®ã¹ã©ã³ã°)"><strong>TL;DR:</strong></abbr>
+
+次ã®ãããªã`await` ã䜿çšããŠåŒã³åºãã¹ããµãŒãããŒãã£ã©ã€ãã©ãªã䜿çšããŠããå Žå:
+
+```Python
+results = await some_library()
+```
+
+以äžã®æ§ã« `async def` ã䜿çšããŠ*path operation 颿°*ã宣èšããŸãã
+
+```Python hl_lines="2"
+@app.get('/')
+async def read_results():
+ results = await some_library()
+ return results
+```
+
+!!! note "åè"
+ `async def` ã䜿çšããŠäœæããã颿°ã®å
éšã§ãã `await` ã¯äœ¿çšã§ããŸããã
+
+---
+
+ããŒã¿ããŒã¹ãAPIããã¡ã€ã«ã·ã¹ãã ãªã©ãšéä¿¡ãã`await` ã®äœ¿çšããµããŒãããŠããªããµãŒãããŒãã£ã©ã€ãã©ãª (çŸåšã®ã»ãšãã©ã®ããŒã¿ããŒã¹ã©ã€ãã©ãªã«åœãŠã¯ãŸããŸã) ã䜿çšããŠããå Žåãæ¬¡ã®æ§ã«ãåã« `def` ã䜿çšããŠéåžžéã *path operation 颿°* ã宣èšããŠãã ãã:
+
+```Python hl_lines="2"
+@app.get('/')
+def results():
+ results = some_library()
+ return results
+```
+
+---
+
+ã¢ããªã±ãŒã·ã§ã³ã (ã©ãããããã) ä»ã®äœãšãéä¿¡ãããå¿çãåŸ
ã€å¿
èŠããªãå Žåã¯ã`async def` ã䜿çšããŠäžããã
+
+---
+
+ããåãããªãå Žåã¯ãéåžžã® `def` ã䜿çšããŠäžããã
+
+---
+
+**åè**: *path operation 颿°*ã«å¿
èŠãªã ã `def` ãš `async def` ãæ··åšãããããããã«æé©ãªãªãã·ã§ã³ã䜿çšããŠå®çŸ©ã§ããŸããããã«å¿ããŠFastAPIã¯æ£ããåŠçãè¡ããŸãã
+
+ãšã«ãããäžèšã®ãããã®å Žåã§ãFastAPIã¯éåæã§åäœããéåžžã«é«éã§ãã
+
+ããããäžèšã®ã¹ãããã«åŸãããšã§ãããã©ãŒãã³ã¹ã®æé©åãè¡ããŸãã
+
+## æè¡è©³çް
+
+çŸä»£çã®Pythonã¯ã**éåæã³ãŒã**ãããã**ã³ã«ãŒãã³**ããšç§°ããããã®ãå©çšããŠãµããŒãããŠããŸãããã㯠**`async` ãš `await`** æ§æãçšããŸãã
+
+次ã®ã»ã¯ã·ã§ã³ã§ããã¬ãŒãºå
ã®ããŒããé ã«èŠãŠãããŸããã:
+
+* **éåæã³ãŒã**
+* **`async` ãš `await`**
+* **ã³ã«ãŒãã³**
+
+## éåæã³ãŒã
+
+éåæã³ãŒããšã¯ãèšèªð¬ãã³ãŒãå
ã®ã©ããã§ãã³ã³ãã¥ãŒã¿/ããã°ã©ã ð€ã« *ä»ã®äœã* ãã©ããå¥ã®ç®æã§çµäºããã®ãåŸ
ã€ããã«äŒããææ®µãæã£ãŠããããšãæå³ããŸãã*ä»ã®äœã* ã¯ãé
ããã¡ã€ã«ðããšåŒã°ããŠãããšããŸããã.
+
+ãããã£ãŠãã³ã³ãã¥ãŒã¿ã¯ãé
ããã¡ã€ã«ðããçµäºãããŸã§ãä»ã®åŠçãã§ããŸãã
+
+ã³ã³ãã¥ãŒã¿/ããã°ã©ã ð€ã¯åã³åŸ
æ©ããæ©äŒããããšããããã®æç¹ã§è¡ã£ãŠãããã¹ãŠã®äœæ¥ãå®äºãããã³ã«æ»ã£ãŠããŸãããããŠãå¿
èŠãªåŠçãããªãããã³ã³ãã¥ãŒã¿/ããã°ã©ã ð€ãåŸ
ã£ãŠããåŠçã®ã©ãããçµãã£ãŠãããã©ãã確èªããŸãã
+
+次ã«ãããð€ãæåã®ã¿ã¹ã¯ (èŠããã«ãå
çšã®ãé
ããã¡ã€ã«ðã)ãçµããããŠããã®ã¿ã¹ã¯ã®çµæã䜿ãå¿
èŠãããåŠçãç¶ããŸãã
+
+ãã®ãä»ã®äœããåŸ
ã€ããšã¯ãé垞以äžã®æ§ãªãã®ãåŸ
ã€ãã㪠(ããã»ããµãšRAMã¡ã¢ãªã®éåºŠã«æ¯ã¹ãŠ) çžå¯Ÿçã«ãé
ãã<abbr title="ã€ã³ããããšã¢ãŠãããã">I/O</abbr> æäœãæããŸã:
+
+* ãããã¯ãŒã¯çµç±ã§ã¯ã©ã€ã¢ã³ãããéä¿¡ãããããŒã¿
+* ãããã¯ãŒã¯çµç±ã§ã¯ã©ã€ã¢ã³ããåä¿¡ãããããã°ã©ã ããéä¿¡ãããããŒã¿
+* ã·ã¹ãã ã«ãã£ãŠèªã¿åãããããã°ã©ã ã«æž¡ããããã£ã¹ã¯å
ã®ãã¡ã€ã«å
容
+* ããã°ã©ã ãã·ã¹ãã ã«æž¡ããŠããã£ã¹ã¯ã«æžã蟌ãå
容
+* ãªã¢ãŒãAPIæäœ
+* ããŒã¿ããŒã¹æäœã®å®äº
+* ããŒã¿ããŒã¹ã¯ãšãªãçµæãè¿ãããš
+* ãªã©ã
+
+å®è¡æéã®ã»ãšãã©ã<abbr title="ã€ã³ããããšã¢ãŠãããã">I/O</abbr> æäœã®åŸ
ã¡æéãå ããããããã®ãããªæäœããI/O ããŠã³ããæäœãšèšããŸãã
+
+ã³ã³ãã¥ãŒã¿/ããã°ã©ã ããã®ãããªé
ãã¿ã¹ã¯ãšãåæ (ã¿ã¹ã¯ã®çµæãååŸããŠäœæ¥ãç¶è¡ããããã«ãäœãããã«ãã¿ã¹ã¯ãå®äºããç¬éãæ£ç¢ºã«åŸ
ã€)ãããå¿
èŠããªãããããéåæããšåŒã°ããŸãã
+
+ãã®ä»£ããã«ããéåæãã·ã¹ãã ã§ããããšã«ããããã£ããçµäºãããšãã¿ã¹ã¯ã¯ãã³ã³ãã¥ãŒã¿/ããã°ã©ã ãæ¢ã«éå§ããåŠçããã¹ãŠå®äºããã®ãã»ãã®å°ã (æ°ãã€ã¯ãç§) åŸ
ã£ãŠãçµæãåãåãã«æ»ã£ãŠããŸãããããŠãåŠçãç¶ç¶ããŸãã
+
+ãåæãã®å Žå (ãéåæããšã¯ç°ãªã)ããã·ãŒã±ã³ã·ã£ã«ããšããçšèªããã䜿çšãããŸããããã¯ãã³ã³ãã¥ãŒã¿/ããã°ã©ã ããã¹ãŠã®ã¹ãããã (åŸ
æ©ã䌎ãå Žåã§ãå¥ã®ã¿ã¹ã¯ã«åãæ¿ããããšãªã) é çªã«å®è¡ããããã§ãã
+
+### 䞊è¡åŠçãšãã³ããŒã¬ãŒ
+
+äžèšã®**éåæ**ã³ãŒãã®ã¢ã€ãã¢ã¯ã**ã䞊è¡åŠçã**ãšåŒã°ããããšããããŸãã **ã䞊ååŠçã**ãšã¯ç°ãªããŸãã
+
+**䞊è¡åŠç**ãš**䞊ååŠç**ã¯ã©ã¡ãããå€ããå°ãªããåæã«çºçããããŸããŸãªããšãã«é¢é£ããŠããŸãã
+
+ãã ãã*䞊è¡åŠç*ãš*䞊ååŠç*ã®è©³çްã¯ãŸã£ããç°ãªããŸãã
+
+éãã確èªããã«ã¯ããã³ããŒã¬ãŒã«é¢ããæ¬¡ã®ç©èªãæ³åããŠã¿ãŠãã ãã:
+
+### 䞊è¡ãã³ããŒã¬ãŒ
+
+ãã¡ã¹ãããŒãðãé£ã¹ãããšã奜ããªäººðãšã¬ãžã«äžŠãã§ãããã¬ãžä¿ðãããªãã®åã«ãã人éã®æ³šæãåãã€ããŠããŸãã
+
+ããããããªãã®çªã«ãªãã奜ããªäººðãšèªåã®ããã«ã2ã€ã®éåžžã«è±ªè¯ãªãã³ããŒã¬ãŒðãæ³šæããŸãã
+
+æéãæ¯æããŸãðžã
+
+ã¬ãžä¿ðã¯ãããã³ã®ç·ðšâð³ã«åãã£ãŠãããªãã®ãã³ããŒã¬ãŒðãæºåããªããã°ãªããªããšäŒããããã«äœãèšããŸãã (圌ã¯çŸåšãåã®ã客ããã®ååãæºåããŠããŸãã)ã
+
+ã¬ãžä¿ðã¯ããªãã«çªå·æãæž¡ããŸãã
+
+åŸ
ã£ãŠããéã奜ããªäººðãšäžç·ã«ããŒãã«ãéžãã§åº§ãã奜ããªäººðãšé·ãé話ãããŸã (泚æãããã³ããŒã¬ãŒã¯éåžžã«è±ªè¯ã§ãæºåã«å°ãæéããããã®ã§âšðâš)ã
+
+ãã³ããŒã¬ãŒðãåŸ
ã¡ãªãã奜ããªäººðãšããŒãã«ã«åº§ã£ãŠããéãããªãã®å¥œããªäººããªããŠçŽ æŽãããããããããŠé ããããã ãšâšðâšæãæãããªããæéãè²»ããããšãã§ããŸãã
+
+奜ããªäººðãšè©±ããªããåŸ
ã£ãŠããéããšãã©ããã«ãŠã³ã¿ãŒã«è¡šç€ºãããŠããçªå·ããã§ãã¯ããŠãèªåã®çªãã©ããã確èªããŸãã
+
+ãã®åŸãã€ãã«ããªãã®çªã«ãªããŸãããã«ãŠã³ã¿ãŒã«è¡ãããã³ããŒã¬ãŒðãæã«å
¥ããŠããŒãã«ã«æ»ããŸãã
+
+ããªããšããªãã®å¥œããªäººðã¯ãã³ããŒã¬ãŒðãé£ã¹ãŠã楜ããæéãéãããŸãâšã
+
+---
+
+äžèšã®ã¹ããŒãªãŒã§ãããªããã³ã³ãã¥ãŒã¿/ããã°ã©ã ð€ã ãšæ³åããŠã¿ãŠãã ããã
+
+åã«ããéãããªãã¯ã¢ã€ãã«ç¶æ
ã§ãðŽãäœããçç£çããªããšãããããã èªåã®çªãåŸ
ã£ãŠããŸããããããã¬ãžä¿ðã¯æ³šæãåãåãã ããªã®ã§ (ååã®æºåãããŠããããã§ã¯ãªã)ãåã¯é«éã§ãããããã£ãŠãäœãåé¡ãããŸããã
+
+ãããããããªãã®çªã«ãªã£ãããå®ã«ãçç£çãªãäœæ¥ãè¡ããŸãð€ãã¡ãã¥ãŒã確èªããæ¬²ãããã®ã決ãã奜ããªäººðã®æ¬²ãããã®ãèããæéãæ¯æãðžãçŸéãŸãã¯ã«ãŒããæ£ããæž¡ããã確èªããæ£ããæž
ç®ãããããšã確èªããæ³šæãæ£ããéã£ãŠããããªã©ã確èªããŸãã
+
+ãããããã³ããŒã¬ãŒðããŸã ã§ããŠããªãã®ã§ããã³ããŒã¬ãŒã®æºåãã§ãããŸã§åŸ
æ©ðããå¿
èŠããããããã¬ãžä¿ðãšã®äœæ¥ã¯ãäžæåæ¢âžãã«ãªããŸãã
+
+ããããã«ãŠã³ã¿ãŒããé¢ããŠãçªå·æãæã£ãŠããŒãã«ã«åº§ã£ãŠãããšãã¯ã泚æã奜ããªäººðã«åãæ¿ããŠðããã®äžã§ãä»äºâ¯ð€ããè¡ãªããŸãããã®åŸã奜ããªäººðãšãã¡ãã€ããã®ãããªãéåžžã«ãçç£çãªð€ãããšãåã³è¡ããŸãã
+
+次ã«ãã¬ãžä¿ðã¯ãããã³ããŒã¬ãŒã®æºåãã§ããŸããðããšèšã£ãŠãã«ãŠã³ã¿ãŒã®ãã£ã¹ãã¬ã€ã«çªå·ã衚瀺ããŸããã衚瀺çªå·ãããªãã®çªå·ã«å€ãã£ãŠããããã«çã£ãããã«é£ãã§è¡ããããªããšã¯ãããŸãããããªãã¯èªåã®çªå·æãæã£ãŠãã£ãŠãä»ã®äººãèªåã®çªå·æãããã®ã§ãããªãã®ãã³ããŒã¬ãŒðãçã人ãããªãããšã¯ç¥ã£ãŠããŸãã
+
+ãªã®ã§ãããªãã¯å¥œããªäººðã話ãçµããã®ãåŸ
ã£ãŠ (çŸåšã®ä»äºâ¯ / åŠçäžã®ã¿ã¹ã¯ãçµäºããŸãð€)ãåªãã埮ç¬ãã§ããã³ããŒã¬ãŒãè²°ã£ãŠããããšèšããŸãâžã
+
+次ã«ãã«ãŠã³ã¿ãŒãžãããŸããå®äºããæåã®ã¿ã¹ã¯â¯ãžåããããã³ããŒã¬ãŒðãåãåããæè¬ã®æã衚ããŠãããŒãã«ã«æã£ãŠãããŸããããã§ãã«ãŠã³ã¿ãŒãšã®ããåãã®ã¹ããã/ã¿ã¹ã¯ãå®äºããŸããâ¹ãããã«ãããããã³ããŒã¬ãŒãé£ã¹ãðâ¯ããšããæ°ããã¿ã¹ã¯ãäœæãããŸããããããåã®ããã³ããŒã¬ãŒãååŸããããšããã¿ã¹ã¯ã¯çµäºããŸããâ¹ã
+
+### 䞊åãã³ããŒã¬ãŒ
+
+ããããã䞊è¡ãã³ããŒã¬ãŒãã§ã¯ãªããã䞊åãã³ããŒã¬ãŒãã§ãããšããŸãããã
+
+ããªãã¯å¥œããªäººðãšäžŠåãã¡ã¹ãããŒãðãè²·ãããšããŠããŸãã
+
+åã«äžŠãã§ããŸãããäœäººãã®æç人å
Œãã¬ãžä¿ (8人ãšããŸããã) ðšâð³ðšâð³ðšâð³ðšâð³ðšâð³ðšâð³ðšâð³ðšâð³ãããªãã®åã«ãã人éã®æ³šæãåãã€ããŠããŸãã
+
+8人ã®ã¬ãžä¿ãããããèªåã§æ³šæãåãããåŠããæ¬¡ã®æ³šæãåããåã«ãã³ããŒã¬ãŒãæºåããã®ã§ãããªãã®åã®äººéã¯ã«ãŠã³ã¿ãŒãé¢ããã«ããã³ããŒã¬ãŒðãã§ããã®ãåŸ
ã£ãŠããŸãðã
+
+ããããããããããªãã®çªã«ãªãã奜ããªäººðãšèªåã®ããã«ã2ã€ã®éåžžã«è±ªè¯ãªãã³ããŒã¬ãŒðãæ³šæããŸãã
+
+æéãæ¯æããŸãðžã
+
+ã¬ãžä¿ã¯ãããã³ã«è¡ããŸãðšâð³ã
+
+ããªãã¯ã«ãŠã³ã¿ãŒã®åã«ç«ã£ãŠåŸ
ã¡ãŸãðãçªå·æããªãã®ã§èª°ãããªããããå
ã«ãã³ããŒã¬ãŒðãåããªãããã«ããŸãã
+
+ããªããšå¥œããªäººðã¯å¿ããã®ã§ã誰ãããªãã®åã«æ¥ãããŸããããããªãã®ãã³ããŒã¬ãŒãå°çãããšãðã«èª°ã«ãåãããšãèš±ããŸãããããªãã¯å¥œããªäººã«æ³šæãæããŸããðã
+
+ããã¯ãåæãäœæ¥ã§ãããã¬ãžä¿/æç人ðšâð³ãšãåæãããŸããã¬ãžä¿/æç人ðšâð³ããã³ããŒã¬ãŒðã宿ãããŠããªãã«æž¡ããŸã§åŸ
ã€ðå¿
èŠããããã¡ããã©ãã®å®æã®ç¬éã«ããã«ããå¿
èŠããããŸããããã§ãªããã°ãä»ã®èª°ãã«åããããããããŸããã
+
+ãã®åŸãã«ãŠã³ã¿ãŒã®åã§é·ãæéåŸ
ã£ãŠããðãã€ãã«ã¬ãžä¿/æç人ðšâð³ããã³ããŒã¬ãŒðãæž¡ãã«æ»ã£ãŠããŸãã
+
+ãã³ããŒã¬ãŒðãåãã奜ããªäººðãšããŒãã«ã«è¡ããŸãã
+
+ãã é£ã¹ãã ããããã§ãããŸãã§ããðâ¹ã
+
+ã»ãšãã©ã®æéãã«ãŠã³ã¿ãŒã®åã§åŸ
ã€ã®ã«è²»ããããŠããã®ã§ðãããŸã話ããããã¡ãã€ãããšã¯ãããŸããã§ããðã
+
+---
+
+ãã®äžŠåãã³ããŒã¬ãŒã®ã·ããªãªã§ã¯ãããªãã¯2ã€ã®ããã»ããµãåããã³ã³ãã¥ãŒã¿/ããã°ã©ã ð€ (ããªããšããªãã®å¥œããªäººð) ã§ãããäž¡æ¹ãšãåŸ
æ©ðããŠããŠã圌ãã¯ãã«ãŠã³ã¿ãŒã§åŸ
æ©ðãããããšã«å°å¿µããŠããŸãâ¯ã
+
+ãã¡ã¹ãããŒãåºã«ã¯8ã€ã®ããã»ããµ (ã¬ãžä¿/æç人) ðšâð³ðšâð³ðšâð³ðšâð³ðšâð³ðšâð³ðšâð³ðšâð³ããããŸããäžæ¹ã䞊è¡ãã³ããŒã¬ãŒåºã«ã¯2人 (ã¬ãžä¿ãšæç人) ððšâð³ããããªãã£ããããããŸããã
+
+ããããããã§ããæçµçãªäœéšã¯æé«ã§ã¯ãããŸããðã
+
+---
+
+ããã¯ããã³ããŒã¬ãŒðã®è©±ãšåçãªè©±ã«ãªããŸãã
+
+ãããçŸå®çãªãäŸãšããŠãéè¡ãæ³åããŠã¿ãŠãã ããã
+
+æè¿ãŸã§ãã»ãšãã©ã®éè¡ã¯è€æ°ã®çªå£ðšâðŒðšâðŒðšâðŒðšâðŒã«ãè¡åððððððððãã§ããŠããŸããã
+
+ãã¹ãŠã®çªå£ã§ã次ã
ãšãäžäººã®å®¢ãšãã¹ãŠã®äœæ¥ãè¡ããŸãðšâðŒâ¯.
+
+ãã®äžãé·æéãåã«äžŠã°ãªããã°ãããŸããðãããããªããšãé çªãåã£ãŠããŸããã
+
+éè¡ðŠã§ã®çšäºã«ããªãã®å¥œããªäººðãé£ããŠè¡ãããã¯ãªãã§ãããã
+
+### ãã³ããŒã¬ãŒã®ãŸãšã
+
+ãã®ã奜ããªäººãšã®ãã¡ã¹ãããŒããã³ããŒã¬ãŒãã®ã·ããªãªã§ã¯ãåŸ
æ©ðãå€ãããã䞊è¡ã·ã¹ãã âžðâ¯ã䜿çšããæ¹ãã¯ããã«çã«ããªã£ãŠããŸãã
+
+ããã¯ãã»ãšãã©ã®Webã¢ããªã±ãŒã·ã§ã³ã«åœãŠã¯ãŸããŸãã
+
+å€ãã®ãŠãŒã¶ãŒãããŸããããµãŒããŒã¯ãããŸã匷ããªãåç·ã§ã®ãªã¯ãšã¹ãã®éä¿¡ãåŸ
æ©ðããŠããŸãã
+
+ãããŠãã¬ã¹ãã³ã¹ãè¿ã£ãŠããã®ãããäžåºŠåŸ
æ©ðããŸãã
+
+ãã®ãåŸ
æ©ðãã¯ãã€ã¯ãç§åäœã§ãããããã§ãããã¹ãŠåç®ãããšãæçµçã«ã¯ããªãåŸ
æ©ããããšã«ãªããŸãã
+
+ããããWeb APIãžã®éåæâžðâ¯ã³ãŒãã®å©çšãçã«ããªã£ãŠããçç±ã§ãã
+
+ã»ãšãã©ã®æ¢åã®äººæ°ã®ããPythonãã¬ãŒã ã¯ãŒã¯ (FlaskãDjangoãå«ã) ã¯ãPythonã®æ°ããéåææ©èœãã§ããåã«äœæãããŸããããããã£ãŠããããããããã€ããæ¹æ³ã¯ã䞊åå®è¡ãšãæ°æ©èœã»ã©åŒ·åã§ã¯ãªãå€ã圢åŒã®éåæå®è¡ããµããŒãããŸãã
+
+ããããWebSocketã®ãµããŒãã远å ããããã«ãéåæWeb Python (ASGI) ã®äž»ãªä»æ§ã¯Djangoã§éçºãããŸããã
+
+ãã®ãããªéåææ§ãNodeJSã人æ°ã«ããçç±ã§ã (NodeJSã¯äžŠåã§ã¯ãããŸããã)ããããŠãããã°ã©ãã³ã°èšèªãšããŠã®Goã®åŒ·ã¿ã§ããããŸãã
+
+ãããŠãããã¯**FastAPI**ã§åŸãããããã©ãŒãã³ã¹ãšåãã¬ãã«ã§ãã
+
+ãŸãã䞊ååŠçãšéåæåŠçãåæã«å®è¡ã§ããããããã¹ãæžã¿ã®ã»ãšãã©ã®NodeJSãã¬ãŒã ã¯ãŒã¯ãããé«ããGoãšåçã®ããã©ãŒãã³ã¹ãåŸãããŸããGoã¯ãCã«è¿ãã³ã³ãã€ã«èšèªã§ã <a href="https://www.techempower.com/benchmarks/#section=data-r17&hw=ph&test=query&l=zijmkf-1" class="external-link" target="_blank">(Starletteã«æè¬ããŸã)</a>ã
+
+### 䞊è¡ã¯äžŠåãããåªããŠããŸããïŒ
+
+ããïŒããã¯ãã®è©±ã®æèšã§ã¯ãããŸããã
+
+䞊è¡åŠçã¯äžŠååŠçãšã¯ç°ãªããŸããå€ãã®åŸ
æ©ã䌎ã**ç¹å®ã®**ã·ããªãªã«é©ããŠããŸãããã®ãããäžè¬ã«ãWebã¢ããªã±ãŒã·ã§ã³éçºã§ã¯äžŠååŠçãããã¯ããã«åªããŠããŸãããããããã¹ãŠã«å¯ŸããŠããè¯ããšããããã§ã¯ãããŸããã
+
+ãªã®ã§ããã©ã³ã¹ããšãããã«ã次ã®ç©èªãæ³åããŠäžãã:
+
+> ããªãã¯å€§ãããŠæ±ããå®¶ãæé€ããå¿
èŠããããŸãã
+
+*ã¯ãã以äžã§ã*ã
+
+---
+
+åŸ
æ©ðãããå®¶ã®äžã®è€æ°ã®å Žæã§ããããã®ä»äºãããã ãã§ãã
+
+ããªãã¯ãã³ããŒã¬ãŒã®äŸã®ããã«ãæåã¯ãªãã³ã°ã«ãŒã ãæ¬¡ã«ãããã³ã®ããã«é çªã«ãã£ãŠããããšãã§ããŸãããäœããåŸ
æ©ðããŠããããã§ã¯ãªãããã ã²ãããã«æé€ãããã ãã§ãé çªã¯äœã«ã圱é¿ããŸããã
+
+é çªã®æç¡ã«é¢ä¿ãªã (䞊è¡ã«) åãæéãããããåãéã®äœæ¥ãè¡ãããããšã«ãªãã§ãããã
+
+ãããããã®å Žåã8人ã®å
ã¬ãžä¿/æç人/çŸåœ¹æž
æå¡ðšâð³ðšâð³ðšâð³ðšâð³ðšâð³ðšâð³ðšâð³ðšâð³ãæé
ã§ããŠããããã (ããã«ããªãã) ãå®¶ã®å¥ã
ã®å Žæãæé€ã§ããã°ã远å ã®å©ããåããŠããã¹ãŠã®äœæ¥ã**䞊å**ã«è¡ããã¯ããã«æ©ãçµäºã§ããã§ãããã
+
+ãã®ã·ããªãªã§ã¯ãæž
æå¡ (ããªããå«ã) ã®ãããããããã»ããµãšãªããããããã®åœ¹å²ãæãããŸãã
+
+ãŸããå®è¡æéã®ã»ãšãã©ã¯ (åŸ
æ©ã§ã¯ãªã) å®éã®äœæ¥ã«è²»ããããã³ã³ãã¥ãŒã¿ã§ã®äœæ¥ã¯<abbr title="Central Processing Unit">CPU</abbr>ã«ãã£ãŠè¡ãããŸãããããã®åé¡ã¯ãCPUããŠã³ãããšèšããŸãã
+
+---
+
+CPUããŠã³ãæäœã®äžè¬çãªäŸã¯ãè€éãªæ°åŠåŠçãå¿
èŠãªãã®ã§ãã
+
+äŸãã°:
+
+* **ãªãŒãã£ãª** ã **ç»ååŠç**ã
+* **ã³ã³ãã¥ãŒã¿ããžã§ã³**: ç»åã¯æ°çŸäžã®ãã¯ã»ã«ã§æ§æãããåãã¯ã»ã«ã«ã¯3ã€ã®å€/è²ããããéåžžããããã®ãã¯ã»ã«ã§äœããåæã«èšç®ããå¿
èŠãããåŠçã
+* **æ©æ¢°åŠç¿**: éåžžãå€ãã®ãè¡åããšããã¯ãã«ãã®ä¹ç®ãå¿
èŠã§ãã巚倧ãªã¹ãã¬ããã·ãŒãã«æ°åãå
¥ããŠããããåæã«å
šéšæãåãããããšãèããŠã¿ãŠãã ããã
+* **ãã£ãŒãã©ãŒãã³ã°**: ããã¯æ©æ¢°åŠç¿ã®ãµããã£ãŒã«ãã§ãããããåãããšãåœãŠã¯ãŸããŸããä¹ç®ããæ°åãããåäžã®ã¹ãã¬ããã·ãŒãã§ã¯ãªãããããã®èšå€§ãªéåã§ãå€ãã®å Žåããããã®ã¢ãã«ãæ§ç¯ããã³/ãŸãã¯äœ¿çšããããã«ç¹å¥ãªããã»ããµã䜿çšããŸãã
+
+### 䞊è¡åŠç + 䞊ååŠç: Web + æ©æ¢°åŠç¿
+
+**FastAPI**ã䜿çšãããšãWebéçºã§éåžžã«äžè¬çãªäžŠè¡åŠç (NodeJSã®äž»ãªé
åãšåããã®) ãå©çšã§ããŸãã
+
+ãã ããæ©æ¢°åŠç¿ã·ã¹ãã ã®ãã㪠**CPUããŠã³ã** ã¯ãŒã¯ããŒãã«å¯ŸããŠã䞊ååŠçãšãã«ãããã»ãã·ã³ã° (è€æ°ã®ããã»ã¹ã䞊åã§å®è¡ããã) ã®å©ç¹ã掻çšããããšãã§ããŸãã
+
+ããã«ãPythonã**ããŒã¿ãµã€ãšã³ã¹**ãæ©æ¢°åŠç¿ãç¹ã«ãã£ãŒãã©ãŒãã³ã°ã®äž»èŠèšèªã§ãããšããåçŽãªäºå®ã«ãããFastAPIã¯ããŒã¿ãµã€ãšã³ã¹/æ©æ¢°åŠç¿ã®Web APIããã³ã¢ããªã±ãŒã·ã§ã³ (ä»ã®å€ãã®ã¢ããªã±ãŒã·ã§ã³ãšã®) ã«éåžžã«ããé©åããŠããŸãã
+
+æ¬çªç°å¢ã§ãã®äžŠååŠçãå®çŸããæ¹æ³ã«ã€ããŠã¯ã[ãããã€](deployment/index.md){.internal-link target=_blank}ã«é¢ããã»ã¯ã·ã§ã³ãåç
§ããŠãã ããã
+
+## `async` ãš `await`
+
+çŸä»£çãªããŒãžã§ã³ã®Pythonã«ã¯ãéåæã³ãŒããå®çŸ©ããéåžžã«çŽæçãªæ¹æ³ããããŸããããã«ãããéåžžã®ãã·ãŒã±ã³ã·ã£ã«ãã³ãŒãã®ããã«èŠããé©åãªã¿ã€ãã³ã°ã§ãåŸ
æ©ãããŸãã
+
+çµæãè¿ãåã«åŸ
æ©ããå¿
èŠãããããããã®æ°ããPythonæ©èœããµããŒãããæäœãããå Žåã¯ã次ã®ããã«ã³ãŒãã£ã³ã°ã§ããŸãã
+
+```Python
+burgers = await get_burgers(2)
+```
+
+ã«ã®ã¯ `await` ã§ããçµæã `burgers`ã«ä¿åããåã«ã`get_burgers(2)`ã®åŠçðã®å®äºãåŸ
ã€âžå¿
èŠãããããšãPythonã«äŒããŸããããã§Pythonã¯ããã®éã« (å¥ã®ãªã¯ãšã¹ããåä¿¡ãããªã©) äœãä»ã®ããšãã§ããðâ¯ããšãç¥ããŸãã
+
+`await` ãæ©èœããããã«ã¯ãéåæåŠçããµããŒããã颿°å
ã«ããå¿
èŠããããŸããããã¯ã`async def` ã§é¢æ°ã宣èšããã ãã§ããã§ã:
+
+```Python hl_lines="1"
+async def get_burgers(number: int):
+ # ãã³ããŒã¬ãŒãäœæããããã«éåæåŠçãå®è¡
+ return burgers
+```
+
+...`def` ã®ãããã«:
+
+```Python hl_lines="2"
+# éåæã§ã¯ãªã
+def get_sequential_burgers(number: int):
+ # ãã³ããŒã¬ãŒãäœæããããã«ã·ãŒã±ã³ã·ã£ã«ãªåŠçãå®è¡
+ return burgers
+```
+`async def` ã䜿çšãããšãPythonã«ãã®é¢æ°å
ã§ `await` åŒ (ãã®é¢æ°ã®å®è¡ããäžæåæ¢âžãããçµæãæ»ããŸã§ä»ã®äœããå®è¡ðãã) ãèªèããªããã°ãªããªããšäŒããããšãã§ããŸãã
+
+`async def` 颿°ãåŒã³åºããšãã¯ããawaitãããªããã°ãªããŸããããããã£ãŠãããã¯æ©èœããŸãã:
+
+```Python
+# get_burgersã¯async defã§å®çŸ©ãããŠããã®ã§åäœããªã
+burgers = get_burgers(2)
+```
+
+---
+
+ãããã£ãŠã `await` ã§åŒã³åºãããšãã§ããã©ã€ãã©ãªã䜿çšããŠããå Žåã¯ã次ã®ããã« `async def` ã䜿çšããŠãããã䜿çšãã*path operation 颿°*ãäœæããå¿
èŠããããŸã:
+
+```Python hl_lines="2-3"
+@app.get('/burgers')
+async def read_burgers():
+ burgers = await get_burgers(2)
+ return burgers
+```
+
+### ããçºå±çãªæè¡è©³çް
+
+`await` 㯠`async def` ã§å®çŸ©ããã颿°å
ã§ã®ã¿äœ¿çšã§ããããšãããã£ãããšæããŸãã
+
+ãããåæã«ã`async def` ã§å®çŸ©ããã颿°ã¯ãawaitããããå¿
èŠããããŸãããªã®ã§ã`async def` ãæã€é¢æ°ã¯ã`async def` ã§å®çŸ©ããã颿°å
ã§ã®ã¿åŒã³åºããŸãã
+
+ã§ã¯ããã®ãã¯ããªãšåµã®åé¡ã«ã€ããŠãæåã® `async` 颿°ãã©ã®ããã«åŒã³åºãã®ã§ããããïŒ
+
+**FastAPI**ã䜿çšããŠããå Žåããã®ãæåã®ã颿°ã*path operation 颿°*ã§ãããFastAPIãæ£ããå®è¡ããæ¹æ³ãç¥ã£ãŠããã®ã§ãå¿é
ããå¿
èŠã¯ãããŸããã
+
+ããããFastAPI以å€ã§ `async` / `await` ã䜿çšãããå Žåã¯ã<a href="https://docs.python.org/3/library/asyncio-task.html#coroutine" class="external-link" target="_blank">å
¬åŒPythonããã¥ã¡ã³ããåç
§ããŠäžãã</a>ã
+
+### éåæã³ãŒãã®ä»ã®åœ¢åŒ
+
+`async` ãš `await` ã䜿çšããã¹ã¿ã€ã«ã¯ããã®èšèªã§ã¯æ¯èŒçæ°ãããã®ã§ãã
+
+éåæã³ãŒãã®æäœãã¯ããã«ç°¡åã«ãªããŸãã
+
+ç䟡㪠(ãŸãã¯ã»ãšãã©åäžã®) æ§æããæè¿ã®ããŒãžã§ã³ã®JavaScript (ãã©ãŠã¶ããã³NodeJS) ã«ãæè¿çµã¿èŸŒãŸããŸããã
+
+ãããããã®åã¯ãéåæã³ãŒãã®åŠçã¯ããªãè€éã§é£è§£ã§ããã
+
+以åã®ããŒãžã§ã³ã®Pythonã§ã¯ãã¹ã¬ããã<a href="https://www.gevent.org/" class="external-link" target="_blank">Gevent</a>ãå©çšã§ããŸãããããããã³ãŒãã¯çè§£ããããã¯ããããŠãèå¯ãã¯ããã«è€éã§ãã
+
+以åã®ããŒãžã§ã³ã®NodeJS / ãã©ãŠã¶JavaScriptã§ã¯ããã³ãŒã«ããã¯ãã䜿çšããŠããŸãããããã¯ã<a href="http://callbackhell.com/" class="external-link" target="_blank">ã³ãŒã«ããã¯å°ç</a>ã«ã€ãªãããŸãã
+
+## ã³ã«ãŒãã³
+
+**ã³ã«ãŒãã³**ã¯ã`async def` 颿°ã«ãã£ãŠè¿ããããã®ãæãéåžžã«æŽèœãçšèªã§ããããã¯ãéå§ã§ããŠããã€ãçµäºãã颿°ã®ãããªãã®ã§ããããå
éšã« `await` ããããšãã¯å
éšçã«äžæåæ¢âžãããããšããããã®ã ãšPythonã¯èªèããŠããŸãã
+
+`async` ãš `await` ãçšããéåæã³ãŒãã䜿çšãããã¹ãŠã®æ©èœã¯ããã³ã«ãŒãã³ãã䜿çšãããã®ãšããŠäœåºŠããŸãšããããŠããŸããGoã®äž»èŠæ©èœã§ããããŽã«ãŒãã³ãã«çžåœããŸãã
+
+## ãŸãšã
+
+äžè¿°ãããã¬ãŒãºãèŠãŠã¿ãŸããã:
+
+> çŸä»£çã®Pythonã¯ã**éåæã³ãŒã**ãããã**ã³ã«ãŒãã³**ããšç§°ããããã®ãå©çšããŠãµããŒãããŠããŸãããã㯠**`async` ãš `await`** æ§æãçšããŸãã
+
+ä»ã§ã¯ããã®æå³ãããçè§£ã§ããã¯ãã§ããâš
+
+(Starletteãä»ããŠ) FastAPIã«åãäžããŠãå°è±¡çãªããã©ãŒãã³ã¹ãå®çŸããŠãããã®ã¯ããããã¹ãŠã§ãã
+
+## éåžžã«çºå±çãªæè¡ç詳现
+
+!!! warning "泚æ"
+ æããã¹ãããããŠãè¯ãã§ãããã
+
+ ãã®éšåã¯**FastAPI**ã®ä»çµã¿ã«é¢ããéåžžã«æè¡çãªè©³çްã§ãã
+
+ ããªãã®æè¡ç¥è (ã³ã«ãŒãã³ãã¹ã¬ãããããããã³ã°ãªã©) ããããFastAPIã `async def` ãšéåžžã® `def` ãã©ã®ããã«åŠçãããç¥ãããå Žåã¯ãå
ã«é²ãã§ãã ããã
+
+### Path operation 颿°
+
+*path operation 颿°*ã `async def` ã®ä»£ããã«éåžžã® `def` ã§å®£èšãããšã(ãµãŒããŒããããã¯ããã®ã§) çŽæ¥åŒã³åºã代ããã«å€éšã¹ã¬ããããŒã« (awaitããã) ã§å®è¡ãããŸãã
+
+äžèšã®æ¹æ³ãšéã£ãæ¹æ³ã®å¥ã®éåæãã¬ãŒã ã¯ãŒã¯ããæ¥ãŠãããå°ããªããã©ãŒãã³ã¹åäž (çŽ100ããç§) ã®ããã«éåžžã® `def` ã䜿çšããŠäºçŽ°ãªæŒç®ã®ã¿è¡ã *path operation 颿°* ãå®çŸ©ããã®ã«æ
£ããŠããå Žåã¯ã**FastAPI**ã§ã¯ãŸã£ããéã®å¹æã«ãªãããšã«æ³šæããŠãã ããããã®ãããªå Žåã*path operation 颿°* ãããããã³ã°<abbr title="å
¥å/åºå: ãã£ã¹ã¯ã®èªã¿åããŸãã¯æžã蟌ã¿ããããã¯ãŒã¯éä¿¡ã">I/O</abbr>ãå®è¡ããªãã®ã§ããã°ã`async def` ã®äœ¿çšããå§ãããŸãã
+
+ããã§ããã©ã¡ãã®ç¶æ³ã§ãã**FastAPI**ãéå»ã®ãã¬ãŒã ã¯ãŒã¯ããã (ãŸãã¯ããã«å¹æµããã»ã©) [é«éã«ãªã](/#performance){.internal-link target=_blank}å¯èœæ§ããããŸãã
+
+### äŸåé¢ä¿
+
+äŸåé¢ä¿ã«ã€ããŠãåæ§ã§ããäŸåé¢ä¿ã `async def` ã§ã¯ãªãæšæºã® `def` 颿°ã§ããå Žåãå€éšã¹ã¬ããããŒã«ã§å®è¡ãããŸãã
+
+### ãµãäŸåé¢ä¿
+
+(颿°å®çŸ©ã®ãã©ã¡ãŒã¿ãŒãšããŠ) çžäºã«å¿
èŠãªè€æ°ã®äŸåé¢ä¿ãšãµãäŸåé¢ä¿ãèšå®ã§ããŸããäžéšã¯ `async def` ã§äœæãããä»ã®äžéšã¯éåžžã® `def` ã§äœæãããŸããããã§ãåäœããéåžžã® `def`ã§äœæããããã®ã¯ããawaitãããã代ããã« (ã¹ã¬ããããŒã«ãã) å€éšã¹ã¬ããã§åŒã³åºãããŸãã
+
+### ãã®ä»ã®ãŠãŒãã£ãªãã£é¢æ°
+
+ããªããçŽæ¥åŒã³åºããŠãŒãã£ãªãã£é¢æ°ã¯éåžžã® `def` ãŸã㯠`async def` ã§äœæã§ããFastAPIã¯åŒã³åºãæ¹æ³ã«åœ±é¿ãäžããŸããã
+
+ããã¯ãFastAPIãåŒã³åºã颿°ãšå¯Ÿç
§çã§ã: *path operation 颿°*ãšäŸåé¢ä¿ã
+
+ãŠãŒãã£ãªãã£é¢æ°ã `def` ã䜿çšããéåžžã®é¢æ°ã§ããå Žåãã¹ã¬ããããŒã«ã§ã¯ãªãçŽæ¥ (ã³ãŒãã§èšè¿°ãããšããã«) åŒã³åºãããŸãã颿°ã `async def` ã䜿çšããŠäœæãããŠããå Žåã¯ãåŒã³åºãéã« `await` ããå¿
èŠããããŸãã
+
+---
+
+ç¹°ãè¿ãã«ãªããŸããããããã¯éåžžã«æè¡çãªè©³çްã§ãããæ€çŽ¢ããŠèŸ¿ãçããå Žåã¯åœ¹ç«ã€ã§ãããã
+
+ãã以å€ã®å Žåã¯ãäžèšã®ã»ã¯ã·ã§ã³ã®ã¬ã€ãã©ã€ã³ã§åé¡ãªãã¯ãã§ã: <a href="#in-a-hurry">æ¥ãã§ããŸããïŒ</a>ã