diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md
index 152f684e7..2f2d599dc 100644
--- a/docs/en/docs/release-notes.md
+++ b/docs/en/docs/release-notes.md
@@ -13,6 +13,7 @@ hide:
### Translations
+* ð Update translations for ja (update-all). PR [#14916](https://github.com/fastapi/fastapi/pull/14916) by [@YuriiMotov](https://github.com/YuriiMotov).
* ð Update translations for pt (update-all). PR [#14912](https://github.com/fastapi/fastapi/pull/14912) by [@YuriiMotov](https://github.com/YuriiMotov).
* ð Update translations for es (update-all and add-missing). PR [#14911](https://github.com/fastapi/fastapi/pull/14911) by [@YuriiMotov](https://github.com/YuriiMotov).
* ð Update translations for zh (update-all). PR [#14917](https://github.com/fastapi/fastapi/pull/14917) by [@YuriiMotov](https://github.com/YuriiMotov).
diff --git a/docs/ja/docs/_llm-test.md b/docs/ja/docs/_llm-test.md
new file mode 100644
index 000000000..b3d9fc28c
--- /dev/null
+++ b/docs/ja/docs/_llm-test.md
@@ -0,0 +1,503 @@
+# LLM ãã¹ããã¡ã€ã« { #llm-test-file }
+
+ãã®ããã¥ã¡ã³ãã¯ãããã¥ã¡ã³ãã翻蚳ãã LLM ãã`scripts/translate.py` ã® `general_prompt` ãšã`docs/{language code}/llm-prompt.md` ã®èšèªåºæããã³ãããçè§£ããŠãããããã¹ãããŸããèšèªåºæããã³ãã㯠`general_prompt` ã®æ«å°Ÿã«è¿œå ãããŸãã
+
+ããã«è¿œå ãããã¹ãã¯ããã¹ãŠã®èšèªåºæããã³ããã®èšèšè
ãåç
§ããŸãã
+
+äœ¿ãæ¹:
+
+* èšèªåºæããã³ãããçšæããŸã - `docs/{language code}/llm-prompt.md`ã
+* ãã®ææžãåžæããã¿ãŒã²ããèšèªã«æ°èŠã§ç¿»èš³ããŸãïŒäŸ: `translate.py` ã® `translate-page` ã³ãã³ãïŒãããã«ãã `docs/{language code}/docs/_llm-test.md` ã«ç¿»èš³ãäœæãããŸãã
+* 翻蚳ãåé¡ãªãã確èªããŸãã
+* å¿
èŠã§ããã°ãèšèªåºæããã³ãããgeneral ããã³ããããŸãã¯è±èªããã¥ã¡ã³ããæ¹åããŸãã
+* ãã®åŸãç¿»èš³ã«æ®ã£ãŠããåé¡ãæåã§ä¿®æ£ããè¯ã翻蚳ã«ããŸãã
+* è¯ã翻蚳ãçšæããç¶æ
ã§ããäžåºŠç¿»èš³ããŸããçæ³çãªçµæã¯ãLLM ã翻蚳ã«äžå倿Žãå ããªãããšã§ããã€ãŸã general ããã³ãããšèšèªåºæããã³ãããæè¯ã§ããããšãæå³ããŸãïŒæã
ããã€ãã©ã³ãã ã«èŠãã倿Žãè¡ãããšããããŸããçç±ã¯ LLM ã¯æ±ºå®è«çã¢ã«ãŽãªãºã ã§ã¯ãªã ããã§ãïŒã
+
+ãã¹ãå
容:
+
+## ã³ãŒãã¹ãããã { #code-snippets }
+
+//// tab | ãã¹ã
+
+ããã¯ã³ãŒãã¹ããããã§ã: `foo`ããããŠãããã³ãŒãã¹ããããã§ã: `bar`ãããã«ããäžã€: `baz quux`ã
+
+////
+
+//// tab | æ
å ±
+
+ã³ãŒãã¹ããããã®å
容ã¯ãã®ãŸãŸã«ããŠããå¿
èŠããããŸãã
+
+`scripts/translate.py` ã® general ããã³ããå
ã### Content of code snippetsãã®ç¯ãåç
§ããŠãã ããã
+
+////
+
+## åŒçš { #quotes }
+
+//// tab | ãã¹ã
+
+æšæ¥ãå人ã¯ããæžããŸããããincorrectly ãæ£ããç¶Žãã°ãããªãã¯ãããééã£ãŠç¶Žã£ãããšã«ãªãããããã«å¯ŸããŠç§ã¯ããçããŸãããããã®ãšããããã ããincorrectlyãã¯èª€ãã§ãã"incorrectly"ãã§ã¯ãããŸãããã
+
+/// note | åè
+
+LLM ã¯ããããããã誀ã£ãŠç¿»èš³ããŸããéèŠãªã®ã¯ãå翻蚳æã«ä¿®æ£æžã¿ã®ç¿»èš³ãç¶æã§ãããã©ããã ãã§ãã
+
+///
+
+////
+
+//// tab | æ
å ±
+
+ããã³ããèšèšè
ã¯ãã¹ãã¬ãŒãã¯ã©ãŒããã¿ã€ãã°ã©ãã£ãã¯ãªåŒçšç¬Šã«å€æãããã©ãããéžã¹ãŸãããã®ãŸãŸã§ãåé¡ãããŸããã
+
+äŸãšã㊠`docs/de/llm-prompt.md` ã®ã### Quotesãã®ç¯ãåç
§ããŠãã ããã
+
+////
+
+## ã³ãŒãã¹ããããå
ã®åŒçš { #quotes-in-code-snippets }
+
+//// tab | ãã¹ã
+
+`pip install "foo[bar]"`
+
+ã³ãŒãã¹ããããäžã®æååãªãã©ã«ã®äŸ: `"this"`, `'that'`.
+
+é£ããæååãªãã©ã«ã®äŸ: `f"I like {'oranges' if orange else "apples"}"`
+
+ããŒãã³ã¢: `Yesterday, my friend wrote: "If you spell incorrectly correctly, you have spelled it incorrectly". To which I answered: "Correct, but 'incorrectly' is incorrectly not '"incorrectly"'"`
+
+////
+
+//// tab | æ
å ±
+
+... ãã ããã³ãŒãã¹ããããå
ã®åŒçšç¬Šã¯ãã®ãŸãŸã«ããŠããå¿
èŠããããŸãã
+
+////
+
+## ã³ãŒãããã㯠{ #code-blocks }
+
+//// tab | ãã¹ã
+
+Bash ã®ã³ãŒãäŸã§ã...
+
+```bash
+# å®å®ã«ãããã€ã衚瀺
+echo "Hello universe"
+```
+
+...ãããŠã³ã³ãœãŒã«ã®ã³ãŒãäŸã§ã...
+
+```console
+$ fastapi run main.py
+ FastAPI Starting server
+ Searching for package file structure
+```
+
+...ããã«å¥ã®ã³ã³ãœãŒã«ã®ã³ãŒãäŸã§ã...
+
+```console
+// ãã£ã¬ã¯ã㪠"code" ãäœæ
+$ mkdir code
+// ãã®ãã£ã¬ã¯ããªã«ç§»å
+$ cd code
+```
+
+...ãã㊠Python ã®ã³ãŒãäŸã§ã...
+
+```Python
+wont_work() # ããã¯åäœããŸãã ð±
+works(foo="bar") # ããã¯åäœããŸã ð
+```
+
+...以äžã§ãã
+
+////
+
+//// tab | æ
å ±
+
+ã³ãŒããããã¯å
ã®ã³ãŒãã¯ãã³ã¡ã³ããé€ãã倿ŽããŠã¯ãããŸããã
+
+`scripts/translate.py` ã® general ããã³ããå
ã### Content of code blocksãã®ç¯ãåç
§ããŠãã ããã
+
+////
+
+## ã¿ããšè²ä»ãããã¯ã¹ { #tabs-and-colored-boxes }
+
+//// tab | ãã¹ã
+
+/// info | æ
å ±
+ããã€ãã®ããã¹ã
+///
+
+/// note | åè
+ããã€ãã®ããã¹ã
+///
+
+/// note | æè¡è©³çް
+ããã€ãã®ããã¹ã
+///
+
+/// check | 確èª
+ããã€ãã®ããã¹ã
+///
+
+/// tip | è±ç¥è
+ããã€ãã®ããã¹ã
+///
+
+/// warning | 泚æ
+ããã€ãã®ããã¹ã
+///
+
+/// danger | èŠå
+ããã€ãã®ããã¹ã
+///
+
+////
+
+//// tab | æ
å ±
+
+ã¿ãããã³ `Info`/`Note`/`Warning` ãªã©ã®ãããã¯ã«ã¯ãã¿ã€ãã«ã®ç¿»èš³ã瞊æ£ïŒ`|`ïŒã®åŸãã«è¿œå ããŸãã
+
+`scripts/translate.py` ã® general ããã³ããå
ã### Special blocksããšã### Tab blocksãã®ç¯ãåç
§ããŠãã ããã
+
+////
+
+## Web ãªã³ã¯ãšå
éšãªã³ã¯ { #web-and-internal-links }
+
+//// tab | ãã¹ã
+
+ãªã³ã¯ã®ããã¹ãã¯ç¿»èš³ãããªã³ã¯å
ã®ã¢ãã¬ã¹ã¯å€æŽããªãã§ãã ãã:
+
+* [äžã®èŠåºããžã®ãªã³ã¯](#code-snippets)
+* [å
éšãªã³ã¯](index.md#installation){.internal-link target=_blank}
+* å€éšãªã³ã¯
+* ã¹ã¿ã€ã«ãžã®ãªã³ã¯
+* ã¹ã¯ãªãããžã®ãªã³ã¯
+* ç»åãžã®ãªã³ã¯
+
+ãªã³ã¯ã®ããã¹ãã¯ç¿»èš³ãããªã³ã¯å
ã®ã¢ãã¬ã¹ã¯ç¿»èš³çãæãããã«ããŠãã ãã:
+
+* FastAPI ãªã³ã¯
+
+////
+
+//// tab | æ
å ±
+
+ãªã³ã¯ã®ããã¹ãã¯ç¿»èš³ããã¢ãã¬ã¹ã¯å€æŽããªãã§ãã ãããäŸå€ã¯ãFastAPI ããã¥ã¡ã³ãã®ããŒãžãžã®çµ¶å¯Ÿ URL ã§ãããã®å Žåã¯ç¿»èš³çãžã®ãªã³ã¯ã«ããŸãã
+
+`scripts/translate.py` ã® general ããã³ããå
ã### Linksãã®ç¯ãåç
§ããŠãã ããã
+
+////
+
+## HTML "abbr" èŠçŽ { #html-abbr-elements }
+
+//// tab | ãã¹ã
+
+ããã§ã¯ HTML ã® "abbr" èŠçŽ ã§å
ãŸãããã®ãããã€ã瀺ããŸãïŒããã€ãã¯æ¶ç©ºã§ãïŒ:
+
+### abbr ãå®å
šãªèªå¥ã瀺ã { #the-abbr-gives-a-full-phrase }
+
+* GTD
+* lt
+* XWT
+* PSGI
+
+### abbr ãå®å
šãªèªå¥ãšèª¬æã瀺ã { #the-abbr-gives-a-full-phrase-and-an-explanation }
+
+* MDN
+* I/O.
+
+////
+
+//// tab | æ
å ±
+
+"abbr" èŠçŽ ã® "title" 屿§ã¯ç¹å®ã®æç€ºã«åŸã£ãŠç¿»èš³ããŸãã
+
+翻蚳ã¯ãè±èªã®èªã説æããããã«ç¬èªã® "abbr" èŠçŽ ã远å ããŠããããLLM ã¯ããããåé€ããŠã¯ãããŸããã
+
+`scripts/translate.py` ã® general ããã³ããå
ã### HTML abbr elementsãã®ç¯ãåç
§ããŠãã ããã
+
+////
+
+## HTML "dfn" èŠçŽ { #html-dfn-elements }
+
+* ã¯ã©ã¹ã¿ãŒ
+* ãã£ãŒãã©ãŒãã³ã°
+
+## èŠåºã { #headings }
+
+//// tab | ãã¹ã
+
+### Web ã¢ããªãéçºãã - ãã¥ãŒããªã¢ã« { #develop-a-webapp-a-tutorial }
+
+ããã«ã¡ã¯ã
+
+### åãã³ããšã¢ãããŒã·ã§ã³ { #type-hints-and-annotations }
+
+ãŸãããã«ã¡ã¯ã
+
+### ã¹ãŒããŒã¯ã©ã¹ãšãµãã¯ã©ã¹ { #super-and-subclasses }
+
+ãŸãããã«ã¡ã¯ã
+
+////
+
+//// tab | æ
å ±
+
+èŠåºãã«é¢ããå¯äžã®å³æ Œãªã«ãŒã«ã¯ããªã³ã¯ãå£ããªãããã«ãLLM ãäžæ¬åŒ§å
ã®ããã·ã¥éšåã倿Žããªãããšã§ãã
+
+`scripts/translate.py` ã® general ããã³ããå
ã### Headingsãã®ç¯ãåç
§ããŠãã ããã
+
+èšèªåºæã®æç€ºã«ã€ããŠã¯ãäŸãšã㊠`docs/de/llm-prompt.md` ã®ã### Headingsãã®ç¯ãåç
§ããŠãã ããã
+
+////
+
+## ããã¥ã¡ã³ãã§äœ¿ãçšèª { #terms-used-in-the-docs }
+
+//// tab | ãã¹ã
+
+* you
+* your
+
+* e.g.
+* etc.
+
+* `foo` ã `int` ãšããŠ
+* `bar` ã `str` ãšããŠ
+* `baz` ã `list` ãšããŠ
+
+* ãã¥ãŒããªã¢ã« - ãŠãŒã¶ãŒã¬ã€ã
+* äžçŽãŠãŒã¶ãŒã¬ã€ã
+* SQLModel ããã¥ã¡ã³ã
+* API ããã¥ã¡ã³ã
+* èªåçæããã¥ã¡ã³ã
+
+* ããŒã¿ãµã€ãšã³ã¹
+* ãã£ãŒãã©ãŒãã³ã°
+* æ©æ¢°åŠç¿
+* äŸåæ§æ³šå
¥
+* HTTP Basic èªèšŒ
+* HTTP Digest
+* ISO 圢åŒ
+* JSON Schema èŠæ Œ
+* JSON ã¹ããŒã
+* ã¹ããŒãå®çŸ©
+* Password Flow
+* ã¢ãã€ã«
+
+* éæšå¥š
+* èšèšããã
+* ç¡å¹
+* ãªã³ã¶ãã©ã€
+* æšæº
+* ããã©ã«ã
+* 倧æåå°æåãåºå¥
+* 倧æåå°æåãåºå¥ããªã
+
+* ã¢ããªã±ãŒã·ã§ã³ãæäŸãã
+* ããŒãžãé
ä¿¡ãã
+
+* ã¢ããª
+* ã¢ããªã±ãŒã·ã§ã³
+
+* ãªã¯ãšã¹ã
+* ã¬ã¹ãã³ã¹
+* ãšã©ãŒã¬ã¹ãã³ã¹
+
+* path operation
+* path operation ãã³ã¬ãŒã¿
+* path operation 颿°
+
+* ããã£
+* ãªã¯ãšã¹ãããã£
+* ã¬ã¹ãã³ã¹ããã£
+* JSON ããã£
+* ãã©ãŒã ããã£
+* ãã¡ã€ã«ããã£
+* 颿°æ¬äœ
+
+* ãã©ã¡ãŒã¿
+* ããã£ãã©ã¡ãŒã¿
+* ãã¹ãã©ã¡ãŒã¿
+* ã¯ãšãªãã©ã¡ãŒã¿
+* Cookie ãã©ã¡ãŒã¿
+* ããããŒãã©ã¡ãŒã¿
+* ãã©ãŒã ãã©ã¡ãŒã¿
+* 颿°ãã©ã¡ãŒã¿
+
+* ã€ãã³ã
+* èµ·åã€ãã³ã
+* ãµãŒããŒã®èµ·å
+* ã·ã£ããããŠã³ã€ãã³ã
+* lifespan ã€ãã³ã
+
+* ãã³ãã©
+* ã€ãã³ããã³ãã©
+* äŸå€ãã³ãã©
+* åŠçãã
+
+* ã¢ãã«
+* Pydantic ã¢ãã«
+* ããŒã¿ã¢ãã«
+* ããŒã¿ããŒã¹ã¢ãã«
+* ãã©ãŒã ã¢ãã«
+* ã¢ãã«ãªããžã§ã¯ã
+
+* ã¯ã©ã¹
+* åºåºã¯ã©ã¹
+* 芪ã¯ã©ã¹
+* ãµãã¯ã©ã¹
+* åã¯ã©ã¹
+* å
åŒã¯ã©ã¹
+* ã¯ã©ã¹ã¡ãœãã
+
+* ããããŒ
+* ããããŒïŒè€æ°ïŒ
+* èªå¯ããããŒ
+* `Authorization` ããããŒ
+* Forwarded ããããŒ
+
+* äŸåæ§æ³šå
¥ã·ã¹ãã
+* äŸåé¢ä¿
+* dependable
+* dependant
+
+* I/O ããŠã³ã
+* CPU ããŠã³ã
+* åæå®è¡æ§
+* äžŠåæ§
+* ãã«ãããã»ãã·ã³ã°
+
+* env var
+* ç°å¢å€æ°
+* `PATH`
+* `PATH` ç°å¢å€æ°
+
+* èªèšŒ
+* èªèšŒãããã€ã
+* èªå¯
+* èªå¯ãã©ãŒã
+* èªå¯ãããã€ã
+* ãŠãŒã¶ãŒãèªèšŒãã
+* ã·ã¹ãã ããŠãŒã¶ãŒãèªèšŒãã
+
+* CLI
+* ã³ãã³ãã©ã€ã³ã€ã³ã¿ãŒãã§ãŒã¹
+
+* ãµãŒããŒ
+* ã¯ã©ã€ã¢ã³ã
+
+* ã¯ã©ãŠããããã€ã
+* ã¯ã©ãŠããµãŒãã¹
+
+* éçº
+* éçºæ®µé
+
+* dict
+* èŸæž
+* åæå
+* Enum
+* åæã¡ã³ããŒ
+
+* ãšã³ã³ãŒããŒ
+* ãã³ãŒããŒ
+* ãšã³ã³ãŒããã
+* ãã³ãŒããã
+
+* äŸå€
+* éåºãã
+
+* åŒ
+* æ
+
+* ããã³ããšã³ã
+* ããã¯ãšã³ã
+
+* GitHub ãã£ã¹ã«ãã·ã§ã³
+* GitHub Issue
+
+* ããã©ãŒãã³ã¹
+* ããã©ãŒãã³ã¹æé©å
+
+* æ»ãå€ã®å
+* æ»ãå€
+
+* ã»ãã¥ãªãã£
+* ã»ãã¥ãªãã£ã¹ããŒã
+
+* ã¿ã¹ã¯
+* ããã¯ã°ã©ãŠã³ãã¿ã¹ã¯
+* ã¿ã¹ã¯é¢æ°
+
+* ãã³ãã¬ãŒã
+* ãã³ãã¬ãŒããšã³ãžã³
+
+* åã¢ãããŒã·ã§ã³
+* åãã³ã
+
+* ãµãŒããŒã¯ãŒã«ãŒ
+* Uvicorn ã¯ãŒã«ãŒ
+* Gunicorn ã¯ãŒã«ãŒ
+* ã¯ãŒã«ãŒããã»ã¹
+* ã¯ãŒã«ãŒã¯ã©ã¹
+* ã¯ãŒã¯ããŒã
+
+* ãããã€
+* ãããã€ãã
+
+* SDK
+* ãœãããŠã§ã¢éçºããã
+
+* `APIRouter`
+* `requirements.txt`
+* Bearer Token
+* ç Žå£ç倿Ž
+* ãã°
+* ãã¿ã³
+* åŒã³åºãå¯èœ
+* ã³ãŒã
+* ã³ããã
+* ã³ã³ããã¹ããããŒãžã£
+* ã³ã«ãŒãã³
+* ããŒã¿ããŒã¹ã»ãã·ã§ã³
+* ãã£ã¹ã¯
+* ãã¡ã€ã³
+* ãšã³ãžã³
+* ãã§ã€ã¯ã® X
+* HTTP GET ã¡ãœãã
+* ã¢ã€ãã
+* ã©ã€ãã©ãª
+* ã©ã€ãã¹ãã³
+* ããã¯
+* ããã«ãŠã§ã¢
+* ã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³
+* ã¢ãžã¥ãŒã«
+* ããŠã³ã
+* ãããã¯ãŒã¯
+* ãªãªãžã³
+* ãªãŒããŒã©ã€ã
+* ãã€ããŒã
+* ããã»ããµ
+* ããããã£
+* ãããã·
+* ãã«ãªã¯ãšã¹ã
+* ã¯ãšãª
+* RAM
+* ãªã¢ãŒããã·ã³
+* ã¹ããŒã¿ã¹ã³ãŒã
+* æåå
+* ã¿ã°
+* Web ãã¬ãŒã ã¯ãŒã¯
+* ã¯ã€ã«ãã«ãŒã
+* è¿ã
+* æ€èšŒãã
+
+////
+
+//// tab | æ
å ±
+
+ããã¯ããã¥ã¡ã³ãã§èŠãããïŒäž»ã«ïŒæè¡çšèªã®äžå®å
šãã€èŠç¯çã§ãªãäžèЧã§ããããã³ããèšèšè
ããLLM ãã©ã®çšèªã§æå©ããå¿
èŠãšããŠããããææ¡ããã®ã«åœ¹ç«ã€ãããããŸãããäŸãã°ãè¯ã翻蚳ãæé©ã§ãªãç¿»èš³ã«æ»ããŠããŸãå Žåããããªãã®èšèªã§ã®æŽ»çšã»æ Œå€åã«åé¡ãããå Žåãªã©ã§ãã
+
+`docs/de/llm-prompt.md` ã®ã### List of English terms and their preferred German translationsãã®ç¯ãåç
§ããŠãã ããã
+
+////
diff --git a/docs/ja/docs/about/index.md b/docs/ja/docs/about/index.md
new file mode 100644
index 000000000..b099df7fa
--- /dev/null
+++ b/docs/ja/docs/about/index.md
@@ -0,0 +1,3 @@
+# æŠèŠ { #about }
+
+FastAPI ã®æŠèŠããã®èšèšãã€ã³ã¹ãã¬ãŒã·ã§ã³ãªã©ã«ã€ããŠè§£èª¬ããŸããð€
diff --git a/docs/ja/docs/advanced/additional-responses.md b/docs/ja/docs/advanced/additional-responses.md
new file mode 100644
index 000000000..4c4425788
--- /dev/null
+++ b/docs/ja/docs/advanced/additional-responses.md
@@ -0,0 +1,247 @@
+# OpenAPI ã®è¿œå ã¬ã¹ãã³ã¹ { #additional-responses-in-openapi }
+
+/// warning | 泚æ
+
+ããã¯æ¯èŒçé«åºŠãªãããã¯ã§ãã
+
+FastAPI ã䜿ãå§ããã°ããã§ããã°ãããã¯äžèŠãããããŸããã
+
+///
+
+远å ã®ã¹ããŒã¿ã¹ã³ãŒããã¡ãã£ã¢ã¿ã€ãã説æãªã©ã䌎ã远å ã¬ã¹ãã³ã¹ã宣èšã§ããŸãã
+
+ãããã®è¿œå ã¬ã¹ãã³ã¹ã¯ OpenAPI ã¹ããŒãã«å«ãŸããAPI ããã¥ã¡ã³ãã«ã衚瀺ãããŸãã
+
+ãã ãããããã®è¿œå ã¬ã¹ãã³ã¹ã«ã€ããŠã¯ãã¹ããŒã¿ã¹ã³ãŒããšã³ã³ãã³ããæå®ã㊠`JSONResponse` ãªã©ã® `Response` ãçŽæ¥è¿ãå¿
èŠããããŸãã
+
+## `model` ã䜿ã£ã远å ã¬ã¹ãã³ã¹ { #additional-response-with-model }
+
+*path operation ãã³ã¬ãŒã¿*ã« `responses` ãã©ã¡ãŒã¿ãæž¡ããŸãã
+
+ãã㯠`dict` ãåãåããããŒã¯åã¬ã¹ãã³ã¹ã®ã¹ããŒã¿ã¹ã³ãŒãïŒäŸ: `200`ïŒãå€ã¯åã¬ã¹ãã³ã¹ã®æ
å ±ãå«ãå¥ã® `dict` ã§ãã
+
+ããããã®ã¬ã¹ãã³ã¹ `dict` ã«ã¯ã`response_model` ãšåæ§ã« Pydantic ã¢ãã«ãæ ŒçŽãã `model` ããŒãå«ããããŸãã
+
+FastAPI ã¯ãã®ã¢ãã«ãã JSON Schema ãçæããOpenAPI ã®é©åãªå Žæã«å«ããŸãã
+
+äŸãã°ãã¹ããŒã¿ã¹ã³ãŒã `404` ãš Pydantic ã¢ãã« `Message` ãæã€å¥ã®ã¬ã¹ãã³ã¹ã宣èšããã«ã¯ã次ã®ããã«æžããŸã:
+
+{* ../../docs_src/additional_responses/tutorial001_py310.py hl[18,22] *}
+
+/// note | åè
+
+`JSONResponse` ãçŽæ¥è¿ãå¿
èŠãããç¹ã«æ³šæããŠãã ããã
+
+///
+
+/// info | æ
å ±
+
+`model` ããŒã¯ OpenAPI ã®äžéšã§ã¯ãããŸããã
+
+FastAPI ã¯ãããã Pydantic ã¢ãã«ãååŸã㊠JSON Schema ãçæããé©åãªå Žæã«é
眮ããŸãã
+
+é©åãªå Žæã¯æ¬¡ã®ãšããã§ã:
+
+- `content` ããŒã®äžãããã¯å€ãšããŠå¥ã® JSON ãªããžã§ã¯ãïŒ`dict`ïŒãæã¡ããã®äžã«æ¬¡ãå«ãŸããŸã:
+ - ã¡ãã£ã¢ã¿ã€ãïŒäŸ: `application/json`ïŒãããŒãšããå€ãšããŠããã«å¥ã® JSON ãªããžã§ã¯ããæã¡ããã®äžã«æ¬¡ãå«ãŸããŸã:
+ - `schema` ããŒãå€ãšããŠã¢ãã«ç±æ¥ã® JSON Schema ãæã¡ããããæ£ããé
çœ®å Žæã§ãã
+ - FastAPI ã¯ããã«ãã¹ããŒããçŽæ¥åã蟌ã代ããã« OpenAPI å
ã®ã°ããŒãã«ãª JSON Schema ãžã®åç
§ã远å ããŸããããã«ãããä»ã®ã¢ããªã±ãŒã·ã§ã³ãã¯ã©ã€ã¢ã³ãããããã® JSON Schema ãçŽæ¥å©çšããããè¯ãã³ãŒãçæããŒã«çãæäŸã§ããŸãã
+
+///
+
+ãã® *path operation* ã®ããã« OpenAPI ã«çæãããã¬ã¹ãã³ã¹ã¯æ¬¡ã®ãšããã§ã:
+
+```JSON hl_lines="3-12"
+{
+ "responses": {
+ "404": {
+ "description": "Additional Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Message"
+ }
+ }
+ }
+ },
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Item"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+}
+```
+
+ã¹ããŒã㯠OpenAPI ã¹ããŒãå
ã®å¥ã®å Žæãžã®åç
§ã«ãªããŸã:
+
+```JSON hl_lines="4-16"
+{
+ "components": {
+ "schemas": {
+ "Message": {
+ "title": "Message",
+ "required": [
+ "message"
+ ],
+ "type": "object",
+ "properties": {
+ "message": {
+ "title": "Message",
+ "type": "string"
+ }
+ }
+ },
+ "Item": {
+ "title": "Item",
+ "required": [
+ "id",
+ "value"
+ ],
+ "type": "object",
+ "properties": {
+ "id": {
+ "title": "Id",
+ "type": "string"
+ },
+ "value": {
+ "title": "Value",
+ "type": "string"
+ }
+ }
+ },
+ "ValidationError": {
+ "title": "ValidationError",
+ "required": [
+ "loc",
+ "msg",
+ "type"
+ ],
+ "type": "object",
+ "properties": {
+ "loc": {
+ "title": "Location",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "msg": {
+ "title": "Message",
+ "type": "string"
+ },
+ "type": {
+ "title": "Error Type",
+ "type": "string"
+ }
+ }
+ },
+ "HTTPValidationError": {
+ "title": "HTTPValidationError",
+ "type": "object",
+ "properties": {
+ "detail": {
+ "title": "Detail",
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+}
+```
+
+## ã¡ã€ã³ã®ã¬ã¹ãã³ã¹ã«è¿œå ã®ã¡ãã£ã¢ã¿ã€ã { #additional-media-types-for-the-main-response }
+
+åã `responses` ãã©ã¡ãŒã¿ã䜿ã£ãŠãåäžã®ã¡ã€ã³ã¬ã¹ãã³ã¹ã«å¥ã®ã¡ãã£ã¢ã¿ã€ãã远å ã§ããŸãã
+
+äŸãã°ã`image/png` ã®è¿œå ã¡ãã£ã¢ã¿ã€ããå ããããªãã® *path operation* ã JSON ãªããžã§ã¯ãïŒã¡ãã£ã¢ã¿ã€ã `application/json`ïŒãŸã㯠PNG ç»åãè¿ããããšã宣èšã§ããŸã:
+
+{* ../../docs_src/additional_responses/tutorial002_py310.py hl[17:22,26] *}
+
+/// note | åè
+
+ç»å㯠`FileResponse` ã䜿ã£ãŠçŽæ¥è¿ãå¿
èŠãããç¹ã«æ³šæããŠãã ããã
+
+///
+
+/// info | æ
å ±
+
+`responses` ãã©ã¡ãŒã¿ã§æç€ºçã«å¥ã®ã¡ãã£ã¢ã¿ã€ããæå®ããªãéããFastAPI ã¯ã¬ã¹ãã³ã¹ãã¡ã€ã³ã®ã¬ã¹ãã³ã¹ã¯ã©ã¹ãšåãã¡ãã£ã¢ã¿ã€ãïŒããã©ã«ã㯠`application/json`ïŒã§ãããšã¿ãªããŸãã
+
+ãã ããã¡ãã£ã¢ã¿ã€ãã `None` ã®ã«ã¹ã¿ã ã¬ã¹ãã³ã¹ã¯ã©ã¹ãæå®ããŠããå Žåãã¢ãã«ãé¢é£ä»ãããã远å ã¬ã¹ãã³ã¹ã«ã¯ FastAPI 㯠`application/json` ã䜿çšããŸãã
+
+///
+
+## æ
å ±ã®çµå { #combining-information }
+
+`response_model`ã`status_code`ã`responses` ãã©ã¡ãŒã¿ãªã©ãè€æ°ã®å Žæããã®ã¬ã¹ãã³ã¹æ
å ±ãçµã¿åãããããšãã§ããŸãã
+
+`response_model` ã宣èšããããã©ã«ãã®ã¹ããŒã¿ã¹ã³ãŒã `200`ïŒå¿
èŠãªãä»»æã®ã³ãŒãïŒã䜿ãããã®åãã¬ã¹ãã³ã¹ã«å¯Ÿããè¿œå æ
å ±ã `responses` ã§ OpenAPI ã¹ããŒãã«çŽæ¥èšè¿°ã§ããŸãã
+
+FastAPI 㯠`responses` ã«ããè¿œå æ
å ±ãä¿æããã¢ãã«ã® JSON Schema ãšçµåããŸãã
+
+äŸãã°ãPydantic ã¢ãã«ãçšããç¬èªã® `description` ãæã€ã¹ããŒã¿ã¹ã³ãŒã `404` ã®ã¬ã¹ãã³ã¹ã宣èšã§ããŸãã
+
+ããã«ã`response_model` ã䜿ãã¹ããŒã¿ã¹ã³ãŒã `200` ã®ã¬ã¹ãã³ã¹ã«ç¬èªã® `example` ãå«ããããšãã§ããŸã:
+
+{* ../../docs_src/additional_responses/tutorial003_py310.py hl[20:31] *}
+
+ãããã¯ãã¹ãŠçµåãã㊠OpenAPI ã«å«ãŸããAPI ããã¥ã¡ã³ãã«è¡šç€ºãããŸã:
+
+
+
+## äºåå®çŸ©ã¬ã¹ãã³ã¹ãšã«ã¹ã¿ã ã®çµã¿åãã { #combine-predefined-responses-and-custom-ones }
+
+å€ãã® *path operations* ã«é©çšã§ããäºåå®çŸ©ã®ã¬ã¹ãã³ã¹ãçšæãã€ã€ãå *path operation* ããšã«å¿
èŠãªã«ã¹ã¿ã ã¬ã¹ãã³ã¹ãšçµã¿åããããå ŽåããããŸãã
+
+ãã®ãããªå ŽåãPython ã® `**dict_to_unpack` ã«ãã `dict` ã®ãã¢ã³ããã¯ããã¯ããã¯ã䜿ããŸã:
+
+```Python
+old_dict = {
+ "old key": "old value",
+ "second old key": "second old value",
+}
+new_dict = {**old_dict, "new key": "new value"}
+```
+
+ããã§ã¯ã`new_dict` ã«ã¯ `old_dict` ã®ãã¹ãŠã®ããŒãšå€ã«å ããæ°ããããŒãšå€ãå«ãŸããŸã:
+
+```Python
+{
+ "old key": "old value",
+ "second old key": "second old value",
+ "new key": "new value",
+}
+```
+
+ãã®ãã¯ããã¯ã䜿ããšã*path operations* ã§äºåå®çŸ©ã¬ã¹ãã³ã¹ãåå©çšããããã«ã«ã¹ã¿ã ã®ã¬ã¹ãã³ã¹ãçµã¿åãããããŸãã
+
+äŸãã°:
+
+{* ../../docs_src/additional_responses/tutorial004_py310.py hl[11:15,24] *}
+
+## OpenAPI ã¬ã¹ãã³ã¹ã®è©³çް { #more-information-about-openapi-responses }
+
+ã¬ã¹ãã³ã¹ã«æ£ç¢ºã«äœãå«ãããããã¯ãOpenAPI 仿§ã®æ¬¡ã®ã»ã¯ã·ã§ã³ãåç
§ããŠãã ãã:
+
+- OpenAPI ã® Responses Objectãããã«ã¯ `Response Object` ãå«ãŸããŸãã
+- OpenAPI ã® Response Objectã`responses` ãã©ã¡ãŒã¿å
ã®åã¬ã¹ãã³ã¹ã«ãããã§å®çŸ©ãããŠããèŠçŽ ãçŽæ¥å«ããããŸãã`description`ã`headers`ã`content`ïŒããã§ç°ãªãã¡ãã£ã¢ã¿ã€ãã JSON Schema ã宣èšããŸãïŒã`links` ãªã©ã
diff --git a/docs/ja/docs/advanced/additional-status-codes.md b/docs/ja/docs/advanced/additional-status-codes.md
index 14b7e8ba8..fdac52e83 100644
--- a/docs/ja/docs/advanced/additional-status-codes.md
+++ b/docs/ja/docs/advanced/additional-status-codes.md
@@ -16,7 +16,7 @@
{* ../../docs_src/additional_status_codes/tutorial001_an_py310.py hl[4,25] *}
-/// warning | 泚æ
+/// warning
äžã®äŸã®ããã« `Response` ãçŽæ¥è¿ããšãããã¯ãã®ãŸãŸè¿ãããŸãã
@@ -38,4 +38,4 @@
远å ã®ã¹ããŒã¿ã¹ã³ãŒããšã¬ã¹ãã³ã¹ãçŽæ¥è¿ãå Žåãããã㯠OpenAPI ã¹ããŒãïŒAPI ããã¥ã¡ã³ãïŒã«ã¯å«ãŸããŸãããFastAPI ã«ã¯ãäºåã«äœãè¿ãããããç¥ãæ¹æ³ããªãããã§ãã
-ãããã[Additional Responses](additional-responses.md){.internal-link target=_blank} ã䜿ã£ãŠã³ãŒãå
ã«ããã¥ã¡ã³ãåã§ããŸãã
+ãããã[远å ã®ã¬ã¹ãã³ã¹](additional-responses.md){.internal-link target=_blank} ã䜿ã£ãŠã³ãŒãå
ã«ããã¥ã¡ã³ãåã§ããŸãã
diff --git a/docs/ja/docs/advanced/advanced-dependencies.md b/docs/ja/docs/advanced/advanced-dependencies.md
new file mode 100644
index 000000000..d38ce548d
--- /dev/null
+++ b/docs/ja/docs/advanced/advanced-dependencies.md
@@ -0,0 +1,163 @@
+# é«åºŠãªäŸåé¢ä¿ { #advanced-dependencies }
+
+## ãã©ã¡ãŒã¿åãããäŸåé¢ä¿ { #parameterized-dependencies }
+
+ãããŸã§èŠãŠããäŸåé¢ä¿ã¯ãåºå®ã®é¢æ°ãŸãã¯ã¯ã©ã¹ã§ããã
+
+ããããå€ãã®ç°ãªã颿°ãã¯ã©ã¹ã宣èšããã«ããã®äŸåé¢ä¿ã«ãã©ã¡ãŒã¿ãèšå®ãããå ŽåããããŸãã
+
+ããšãã°ãã¯ãšãªãã©ã¡ãŒã¿ `q` ã«ãããåºå®ã®å
容ãå«ãŸããŠããããæ€æ»ããäŸåé¢ä¿ã欲ãããšããŸãã
+
+ãã ãããã®åºå®ã®å
容ã¯ãã©ã¡ãŒã¿åã§ããããã«ãããã§ãã
+
+## "callable" ãªã€ã³ã¹ã¿ã³ã¹ { #a-callable-instance }
+
+Python ã«ã¯ãã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã "callable" ã«ããæ¹æ³ããããŸãã
+
+ã¯ã©ã¹èªäœïŒããã¯ãã§ã« callable ã§ãïŒã§ã¯ãªãããã®ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã§ãã
+
+ãã®ããã«ã¯ã`__call__` ã¡ãœããã宣èšããŸã:
+
+{* ../../docs_src/dependencies/tutorial011_an_py310.py hl[12] *}
+
+ãã®å Žåããã® `__call__` ãã**FastAPI** ã远å ã®ãã©ã¡ãŒã¿ããµãäŸåé¢ä¿ã確èªããããã«äœ¿ããã®ã«ãªããåŸã§ããªãã® *path operation 颿°* ã®ãã©ã¡ãŒã¿ã«å€ãæž¡ãããã«åŒã³åºããããã®ã«ãªããŸãã
+
+## ã€ã³ã¹ã¿ã³ã¹ã®ãã©ã¡ãŒã¿å { #parameterize-the-instance }
+
+ãããŠã`__init__` ã䜿ã£ãŠãäŸåé¢ä¿ãããã©ã¡ãŒã¿åãããããã«å©çšã§ããã€ã³ã¹ã¿ã³ã¹ã®ãã©ã¡ãŒã¿ã宣èšã§ããŸã:
+
+{* ../../docs_src/dependencies/tutorial011_an_py310.py hl[9] *}
+
+ãã®å Žåã**FastAPI** 㯠`__init__` ã«è§Šãããæ°ã«ããããããããšã¯ãããŸãããç§ãã¡ãã³ãŒãå
ã§çŽæ¥äœ¿ããŸãã
+
+## ã€ã³ã¹ã¿ã³ã¹ã®äœæ { #create-an-instance }
+
+ãã®ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã¯æ¬¡ã®ããã«äœæã§ããŸã:
+
+{* ../../docs_src/dependencies/tutorial011_an_py310.py hl[18] *}
+
+ãã®ããã«ããŠäŸåé¢ä¿ãããã©ã¡ãŒã¿åãã§ããŸããããŸã `"bar"` ã屿§ `checker.fixed_content` ãšããŠäžã«ä¿æãããŠããŸãã
+
+## ã€ã³ã¹ã¿ã³ã¹ãäŸåé¢ä¿ãšããŠäœ¿ã { #use-the-instance-as-a-dependency }
+
+ãã®åŸã`Depends(FixedContentQueryChecker)` ã®ä»£ããã« `Depends(checker)` ã§ãã® `checker` ã䜿ããŸããäŸåé¢ä¿ã¯ã¯ã©ã¹ãã®ãã®ã§ã¯ãªããã€ã³ã¹ã¿ã³ã¹ã§ãã `checker` ã ããã§ãã
+
+äŸåé¢ä¿ã解決ãããšãã**FastAPI** ã¯ãã® `checker` ãæ¬¡ã®ããã«åŒã³åºããŸã:
+
+```Python
+checker(q="somequery")
+```
+
+...ãããŠããã®æ»ãå€ã *path operation 颿°* å
ã®äŸåé¢ä¿ã®å€ãšããŠããã©ã¡ãŒã¿ `fixed_content_included` ã«æž¡ããŸã:
+
+{* ../../docs_src/dependencies/tutorial011_an_py310.py hl[22] *}
+
+/// tip | è±ç¥è
+
+ãããŸã§ã®å
容ã¯åããã©ãæãããããããããŸããããŸã ã©ã®ããã«åœ¹ç«ã€ããæç¢ºã§ãªããããããŸããã
+
+ãããã®äŸã¯æå³çã«åçŽã§ãããä»çµã¿ã瀺ããŠããŸãã
+
+ã»ãã¥ãªãã£ã®ç« ã§ã¯ãåãããæ¹ã§å®è£
ããããŠãŒãã£ãªãã£é¢æ°ããããŸãã
+
+ãããŸã§ãçè§£ã§ããŠããã°ãããããã»ãã¥ãªãã£çšãŠãŒãã£ãªãã£ãå
éšã§ã©ã®ããã«åããŠããããçè§£ã§ããŠããŸãã
+
+///
+
+## `yield`ã`HTTPException`ã`except` ãšããã¯ã°ã©ãŠã³ãã¿ã¹ã¯ã䌎ãäŸåé¢ä¿ { #dependencies-with-yield-httpexception-except-and-background-tasks }
+
+/// warning | 泚æ
+
+ãããã®æè¡ç詳现ã¯ãã»ãšãã©ã®å Žåã¯äžèŠã§ãã
+
+äž»ã«ã0.121.0 ããåã® FastAPI ã¢ããªã±ãŒã·ã§ã³ãããã`yield` ã䜿ãäŸåé¢ä¿ã§åé¡ãçºçããŠããå Žåã«æçšã§ãã
+
+///
+
+`yield` ã䜿ãäŸåé¢ä¿ã¯ãããŸããŸãªãŠãŒã¹ã±ãŒã¹ã«å¯Ÿå¿ããããã€ãã®åé¡ãä¿®æ£ããããã«æéãšãšãã«é²åããŠããŸãããããã§ã¯å€æŽç¹ã®æŠèŠã説æããŸãã
+
+### `yield` ãš `scope` ã䌎ãäŸåé¢ä¿ { #dependencies-with-yield-and-scope }
+
+ããŒãžã§ã³ 0.121.0 ã§ã`yield` ã䜿ãäŸåé¢ä¿ã«å¯Ÿã㊠`Depends(scope="function")` ããµããŒããããŸããã
+
+`Depends(scope="function")` ã䜿ããšã`yield` ã®åŸã®çµäºã³ãŒãã¯ãã¯ã©ã€ã¢ã³ããžã¬ã¹ãã³ã¹ãè¿ãããåã*path operation 颿°* ãçµäºããçŽåŸã«å®è¡ãããŸãã
+
+ãããŠã`Depends(scope="request")`ïŒããã©ã«ãïŒã䜿ãå Žåã`yield` ã®åŸã®çµäºã³ãŒãã¯ã¬ã¹ãã³ã¹éä¿¡åŸã«å®è¡ãããŸãã
+
+詳ããã¯ããã¥ã¡ã³ãã[`yield` ã䜿ãäŸåé¢ä¿ - æ©æçµäºãš `scope`](../tutorial/dependencies/dependencies-with-yield.md#early-exit-and-scope)ããåç
§ããŠãã ããã
+
+### `yield` ãš `StreamingResponse` ã䌎ãäŸåé¢ä¿ãæè¡è©³çް { #dependencies-with-yield-and-streamingresponse-technical-details }
+
+FastAPI 0.118.0 ããåã§ã¯ã`yield` ã䜿ãäŸåé¢ä¿ã䜿çšãããšã*path operation 颿°* ãæ»ã£ãŠããã¬ã¹ãã³ã¹éä¿¡çŽåã«çµäºã³ãŒããå®è¡ãããŠããŸããã
+
+ããã¯ãã¬ã¹ãã³ã¹ããããã¯ãŒã¯äžãç§»åããã®ãåŸ
ã£ãŠããéã«ãäžèŠã«ãªãœãŒã¹ãä¿æããªãããã«ããæå³ã§ããã
+
+ãã®å€æŽã«ããã`StreamingResponse` ãè¿ãå Žåã`yield` ãæã€äŸåé¢ä¿ã®çµäºã³ãŒãã¯ãã§ã«å®è¡ãããŠããããšã«ãªããŸããã
+
+ããšãã°ã`yield` ãæã€äŸåé¢ä¿ã®äžã§ããŒã¿ããŒã¹ã»ãã·ã§ã³ãæã£ãŠããå Žåã`StreamingResponse` ã¯ããŒã¿ãã¹ããªãŒãã³ã°ããŠããéã«ãã®ã»ãã·ã§ã³ã䜿ããŸããããšããã®ãã`yield` ã®åŸã®çµäºã³ãŒãã§ãã®ã»ãã·ã§ã³ããã§ã«ã¯ããŒãºãããŠããããã§ãã
+
+ãã®æå㯠0.118.0 ã§å
ã«æ»ããã`yield` ã®åŸã®çµäºã³ãŒãã¯ã¬ã¹ãã³ã¹éä¿¡åŸã«å®è¡ãããããã«ãªããŸããã
+
+/// info | æ
å ±
+
+以äžã§èŠãããã«ãããã¯ããŒãžã§ã³ 0.106.0 ããåã®æåãšãšãŠã䌌ãŠããŸãããããã€ãã®ã³ãŒããŒã±ãŒã¹ã«å¯Ÿããæ¹è¯ãšãã°ä¿®æ£ãå«ãŸããŠããŸãã
+
+///
+
+#### æ©æçµäºã³ãŒãã®ãŠãŒã¹ã±ãŒã¹ { #use-cases-with-early-exit-code }
+
+ç¹å®ã®æ¡ä»¶ã§ã¯ãã¬ã¹ãã³ã¹éä¿¡åã« `yield` ãæã€äŸåé¢ä¿ã®çµäºã³ãŒããå®è¡ãããå€ãæåã®æ©æµãåãããããŠãŒã¹ã±ãŒã¹ããããŸãã
+
+äŸãã°ã`yield` ãæã€äŸåé¢ä¿ã§ããŒã¿ããŒã¹ã»ãã·ã§ã³ã䜿ã£ãŠãŠãŒã¶æ€èšŒã ããè¡ãããã®åŸã¯ *path operation 颿°* å
ã§ã¯ãã®ããŒã¿ããŒã¹ã»ãã·ã§ã³ãäžå䜿ããªãããã€ã¬ã¹ãã³ã¹éä¿¡ã«é·ãæéããããïŒäŸãã°ããŒã¿ããã£ããéã `StreamingResponse`ïŒããäœããã®çç±ã§ããŒã¿ããŒã¹ã¯äœ¿ããªãããšããã±ãŒã¹ã§ãã
+
+ãã®å Žåãã¬ã¹ãã³ã¹ã®éä¿¡ãçµãããŸã§ããŒã¿ããŒã¹ã»ãã·ã§ã³ãä¿æãããŸããã䜿ããªãã®ã§ããã°ä¿æããå¿
èŠã¯ãããŸããã
+
+次ã®ããã«ãªããŸã:
+
+{* ../../docs_src/dependencies/tutorial013_an_py310.py *}
+
+çµäºã³ãŒããããªãã¡ `Session` ã®èªåã¯ããŒãºã¯:
+
+{* ../../docs_src/dependencies/tutorial013_an_py310.py ln[19:21] *}
+
+...ã®éšåã§å®çŸ©ãããŠãããé
ãããŒã¿éä¿¡ãçµãã£ãåŸã«å®è¡ãããŸã:
+
+{* ../../docs_src/dependencies/tutorial013_an_py310.py ln[30:38] hl[31:33] *}
+
+ãããã`generate_stream()` ã¯ããŒã¿ããŒã¹ã»ãã·ã§ã³ã䜿ããªããããã¬ã¹ãã³ã¹éä¿¡äžã«ã»ãã·ã§ã³ãéãããŸãŸã«ããŠããå¿
èŠã¯å®éã«ã¯ãããŸããã
+
+SQLModelïŒãŸã㯠SQLAlchemyïŒã§ãã®ç¹å®ã®ãŠãŒã¹ã±ãŒã¹ãããå Žåã¯ãäžèŠã«ãªã£ãæç¹ã§ã»ãã·ã§ã³ãæç€ºçã«ã¯ããŒãºã§ããŸã:
+
+{* ../../docs_src/dependencies/tutorial014_an_py310.py ln[24:28] hl[28] *}
+
+ãã®ããã«ãããšãã»ãã·ã§ã³ã¯ããŒã¿ããŒã¹æ¥ç¶ãè§£æŸãããããä»ã®ãªã¯ãšã¹ããããã䜿ããããã«ãªããŸãã
+
+`yield` ãæã€äŸåé¢ä¿ã§æ©æçµäºãå¿
èŠãªå¥ã®ãŠãŒã¹ã±ãŒã¹ãããå Žåã¯ãããªãã®å
·äœçãªãŠãŒã¹ã±ãŒã¹ãšããªã `yield` ãæã€äŸåé¢ä¿ã®æ©æã¯ããŒãºãæçãã説æããŠãGitHub Discussion ã®è³ªåãäœæããŠãã ããã
+
+`yield` ãæã€äŸåé¢ä¿ã®æ©æã¯ããŒãºã«çŽåŸã§ãããŠãŒã¹ã±ãŒã¹ãããå Žåã¯ãæ©æã¯ããŒãºã«ãªããã€ã³ããæ°ããæ¹æ³ã远å ããããšãæ€èšããŸãã
+
+### `yield` ãš `except` ã䌎ãäŸåé¢ä¿ãæè¡è©³çް { #dependencies-with-yield-and-except-technical-details }
+
+FastAPI 0.110.0 ããåã§ã¯ã`yield` ãæã€äŸåé¢ä¿ã䜿ãããã®äŸåé¢ä¿å
ã§ `except` ã«ãã£ãŠäŸå€ãææããå床ãã®äŸå€ãéåºããªãã£ãå Žåã§ãããã®äŸå€ã¯èªåçã«éåºïŒãã©ã¯ãŒãïŒãããä»»æã®äŸå€ãã³ãã©ãŸãã¯å
éšãµãŒããšã©ãŒãã³ãã©ã«æž¡ãããŠããŸããã
+
+ããã¯ããã³ãã©ã®ãªããã©ã¯ãŒããããäŸå€ïŒå
éšãµãŒããšã©ãŒïŒã«ããæªåŠçã®ã¡ã¢ãªæ¶è²»ãä¿®æ£ããéåžžã® Python ã³ãŒãã®æåãšäžè²«æ§ãæããããããããŒãžã§ã³ 0.110.0 ã§å€æŽãããŸããã
+
+### ããã¯ã°ã©ãŠã³ãã¿ã¹ã¯ãš `yield` ã䌎ãäŸåé¢ä¿ãæè¡è©³çް { #background-tasks-and-dependencies-with-yield-technical-details }
+
+FastAPI 0.106.0 ããåã§ã¯ã`yield` ã®åŸã§äŸå€ãéåºããããšã¯ã§ããŸããã§ããã`yield` ãæã€äŸåé¢ä¿ã®çµäºã³ãŒãã¯ã¬ã¹ãã³ã¹éä¿¡ãåŸãã«å®è¡ãããããã[äŸå€ãã³ãã©](../tutorial/handling-errors.md#install-custom-exception-handlers){.internal-link target=_blank} ã¯ãã§ã«å®è¡æžã¿ã§ããã
+
+ããã¯äž»ã«ãäŸåé¢ä¿ã "yield" ããåããªããžã§ã¯ããããã¯ã°ã©ãŠã³ãã¿ã¹ã¯å
ã§å©çšã§ããããã«ããããã®èšèšã§ãããçµäºã³ãŒãã¯ããã¯ã°ã©ãŠã³ãã¿ã¹ã¯å®äºåŸã«å®è¡ãããããã§ãã
+
+ããã¯ãã¬ã¹ãã³ã¹ããããã¯ãŒã¯äžãç§»åããã®ãåŸ
ã£ãŠããéã«ãªãœãŒã¹ãä¿æããªãããã«ããæå³ã§ãFastAPI 0.106.0 ã§å€æŽãããŸããã
+
+/// tip | è±ç¥è
+
+å ããŠãããã¯ã°ã©ãŠã³ãã¿ã¹ã¯ã¯éåžžãç¬ç«ããããžãã¯ã®éåã§ãããïŒäŸãã°å°çšã®ããŒã¿ããŒã¹æ¥ç¶ãªã©ïŒããèªèº«ã®ãªãœãŒã¹ã§åå¥ã«æ±ãã¹ãã§ãã
+
+ãã®ããããã®ããæ¹ã®æ¹ãã³ãŒãã¯ããããããã¯ãªãŒã³ã«ãªããŸãã
+
+///
+
+ãã®æåã«äŸåããŠããå Žåã¯ãããã¯ã°ã©ãŠã³ãã¿ã¹ã¯çšã®ãªãœãŒã¹ãããã¯ã°ã©ãŠã³ãã¿ã¹ã¯å
éšã§äœæãã`yield` ãæã€äŸåé¢ä¿ã®ãªãœãŒã¹ã«äŸåããªãããŒã¿ã ããå
éšã§äœ¿çšããããã«ããŠãã ããã
+
+äŸãã°ãåãããŒã¿ããŒã¹ã»ãã·ã§ã³ã䜿ãã®ã§ã¯ãªããããã¯ã°ã©ãŠã³ãã¿ã¹ã¯å
ã§æ°ããããŒã¿ããŒã¹ã»ãã·ã§ã³ãäœæãããã®æ°ããã»ãã·ã§ã³ã§ããŒã¿ããŒã¹ãããªããžã§ã¯ããååŸããŸãããããŠãããã¯ã°ã©ãŠã³ãã¿ã¹ã¯é¢æ°ã®åŒæ°ãšããŠããŒã¿ããŒã¹ã®ãªããžã§ã¯ãèªäœãæž¡ãã®ã§ã¯ãªãããã®ãªããžã§ã¯ãã® ID ãæž¡ããããã¯ã°ã©ãŠã³ãã¿ã¹ã¯é¢æ°å
ã§ããäžåºŠãã®ãªããžã§ã¯ããååŸããŸãã
diff --git a/docs/ja/docs/advanced/advanced-python-types.md b/docs/ja/docs/advanced/advanced-python-types.md
new file mode 100644
index 000000000..b4409bcf6
--- /dev/null
+++ b/docs/ja/docs/advanced/advanced-python-types.md
@@ -0,0 +1,61 @@
+# é«åºŠãª Python ã®å { #advanced-python-types }
+
+Python ã®åãæ±ããšãã«åœ¹ç«ã€è¿œå ã®ã¢ã€ãã¢ãããã€ã玹ä»ããŸãã
+
+## `Union` ãŸã㯠`Optional` ã®å©çš { #using-union-or-optional }
+
+äœããã®çç±ã§ `|` ã䜿ããªãå Žåãããšãã°åã¢ãããŒã·ã§ã³ã§ã¯ãªã `response_model=` ã®ãããªå Žæã§ã¯ã瞊æ£ïŒ`|`ïŒã®ä»£ããã« `typing` ã® `Union` ã䜿ããŸãã
+
+äŸãã°ã`str` ãŸã㯠`None` ã«ãªãåŸãããšã宣èšã§ããŸã:
+
+```python
+from typing import Union
+
+
+def say_hi(name: Union[str, None]):
+ print(f"Hi {name}!")
+```
+
+`typing` ã«ã¯ã`None` ãåãåŸãããšã宣èšããããã®ç瞮圢ãšã㊠`Optional` ããããŸãã
+
+ããããã¯ç§ã®ãšãŠã䞻芳çãªææ¡ã§ã:
+
+- ðš `Optional[SomeType]` ã®äœ¿çšã¯é¿ããŸããã
+- 代ããã« âš **`Union[SomeType, None]` ã䜿ããŸããã** âšã
+
+ã©ã¡ããç䟡ã§å
éšçã«ã¯åäžã§ããããoptionalïŒä»»æïŒããšããèªãå€ãä»»æã ãšèª€è§£ããããããå®éã®æå³ã¯ã`None` ãåãåŸããã§ãããä»»æã§ã¯ãªãäŸç¶ãšããŠå¿
é ã§ããå Žåã§ãããã§ãããã®ãã `Optional` ãã `Union` ãå§ããŸãã
+
+`Union[SomeType, None]` ã®æ¹ãæå³ãããæç¢ºã ãšæããŸãã
+
+ããã¯çšèªãååä»ãã®è©±ã«éããŸãããããã®èšèãããªããããŒã ã¡ã€ãã®ã³ãŒãã®æãæ¹ã«åœ±é¿ããŸãã
+
+äŸãšããŠæ¬¡ã®é¢æ°ãèŠãŠã¿ãŸããã:
+
+```python
+from typing import Optional
+
+
+def say_hi(name: Optional[str]):
+ print(f"Hey {name}!")
+```
+
+ãã©ã¡ãŒã¿ `name` 㯠`Optional[str]` ãšå®çŸ©ãããŠããŸãããä»»æã§ã¯ãããŸããããã®ãã©ã¡ãŒã¿ãªãã§é¢æ°ãåŒã³åºãããšã¯ã§ããŸãã:
+
+```Python
+say_hi() # ãã£ãããã¯ãšã©ãŒã«ãªããŸãïŒð±
+```
+
+`name` ãã©ã¡ãŒã¿ã«ã¯ããã©ã«ãå€ããªããããäŸç¶ãšããŠå¿
é ïŒä»»æã§ã¯ãªãïŒã§ãããã ãã`name` ã¯å€ãšã㊠`None` ãåãä»ããŸã:
+
+```Python
+say_hi(name=None) # ããã¯åäœããŸããNone ã¯æå¹ã§ã ð
+```
+
+æå ±ãšããŠãå€ãã®å Žåã¯åçŽã« `|` ã䜿ã£ãŠåã® Union ãå®çŸ©ã§ããŸã:
+
+```python
+def say_hi(name: str | None):
+ print(f"Hey {name}!")
+```
+
+ãããã£ãŠãé垞㯠`Optional` ã `Union` ãšãã£ãååãæ°ã«ããå¿
èŠã¯ãããŸãããð
diff --git a/docs/ja/docs/advanced/async-tests.md b/docs/ja/docs/advanced/async-tests.md
new file mode 100644
index 000000000..067e9cc9a
--- /dev/null
+++ b/docs/ja/docs/advanced/async-tests.md
@@ -0,0 +1,99 @@
+# éåæãã¹ã { #async-tests }
+
+ãããŸã§ã«ãæäŸãããŠãã `TestClient` ã䜿ã£ãŠ **FastAPI** ã¢ããªã±ãŒã·ã§ã³ããã¹ãããæ¹æ³ãèŠãŠããŸããããããŸã§ã¯ã`async` 颿°ã䜿ããªãåæãã¹ãã®ã¿ã§ããã
+
+ãã¹ãã§éåæé¢æ°ã䜿ãããšãããšãã°ããŒã¿ããŒã¹ãžéåæã«ã¯ãšãªããå Žåãªã©ã«äŸ¿å©ã§ããéåæããŒã¿ããŒã¹ã©ã€ãã©ãªã䜿ããªãããFastAPI ã¢ããªã«ãªã¯ãšã¹ããéãããã®åŸããã¯ãšã³ããæ£ããããŒã¿ãããŒã¿ããŒã¹ã«æžã蟌ããããæ€èšŒãããããšãã£ãã±ãŒã¹ãæ³åããŠãã ããã
+
+ãã®æ¹æ³ãèŠãŠãããŸãã
+
+## pytest.mark.anyio { #pytest-mark-anyio }
+
+ãã¹ãå
ã§éåæé¢æ°ãåŒã³åºãããå Žåããã¹ã颿°èªäœãéåæã§ããå¿
èŠããããŸããAnyIO ã¯ãããå®çŸããããã®äŸ¿å©ãªãã©ã°ã€ã³ãæäŸããŠãããç¹å®ã®ãã¹ã颿°ãéåæã§åŒã³åºãããšãæå®ã§ããŸãã
+
+## HTTPX { #httpx }
+
+**FastAPI** ã¢ããªã±ãŒã·ã§ã³ãéåžžã® `def` 颿°ã䜿ã£ãŠããŠãããã®å
åŽã¯äŸç¶ãšã㊠`async` ã¢ããªã±ãŒã·ã§ã³ã§ãã
+
+`TestClient` ã¯ãæšæºã® pytest ã䜿ã£ãŠéåžžã® `def` ã®ãã¹ã颿°ããéåæã® FastAPI ã¢ããªãåŒã³åºãããã®ãããŸããªãããå
éšã§è¡ããŸãããããããã®ãããŸããªããã¯ãã¹ã颿°èªäœãéåæã®å Žåã«ã¯æ©èœããŸããããã¹ããéåæã§å®è¡ãããšããã¹ã颿°å
ã§ `TestClient` ã¯äœ¿ããªããªããŸãã
+
+`TestClient` 㯠HTTPX ãåºã«äœãããŠããã幞ããªããšã« API ã®ãã¹ãã«ã¯ HTTPX ãçŽæ¥å©çšã§ããŸãã
+
+## äŸ { #example }
+
+ç°¡åãªäŸãšããŠã[倧ããªã¢ããªã±ãŒã·ã§ã³](../tutorial/bigger-applications.md){.internal-link target=_blank} ãš [ãã¹ã](../tutorial/testing.md){.internal-link target=_blank} ã§èª¬æãããã®ã«äŒŒããã¡ã€ã«æ§æãèããŸã:
+
+```
+.
+âââ app
+â  âââ __init__.py
+â  âââ main.py
+â  âââ test_main.py
+```
+
+`main.py` ã¯æ¬¡ã®ããã«ãªããŸã:
+
+{* ../../docs_src/async_tests/app_a_py310/main.py *}
+
+`test_main.py` 㯠`main.py` ã®ãã¹ããæã¡ã次ã®ããã«ãªããŸã:
+
+{* ../../docs_src/async_tests/app_a_py310/test_main.py *}
+
+## å®è¡ { #run-it }
+
+ãã¹ãã¯ãã€ãéãæ¬¡ã§å®è¡ã§ããŸã:
+
+
+
+ãããããããã·ïŒããŒã `9999`ïŒã䜿ã£ããå
¬åŒãURL `/api/v1/docs` ã§ããã¥ã¡ã³ã UI ã«ã¢ã¯ã»ã¹ãããšãæ£ããåäœããŸãïŒð
+
+http://127.0.0.1:9999/api/v1/docs ã確èªããŠãã ãã:
+
+
+
+ãããã©ããã§ããâïž
+
+ããã¯ãFastAPI ã `root_path` ã䜿ã£ãŠãOpenAPI ã®æ¢å®ã® `server` ã `root_path` ã® URL ã§çæããããã§ãã
+
+## 远å ã®ãµãŒã㌠{ #additional-servers }
+
+/// warning | 泚æ
+
+ããã¯é«åºŠãªãŠãŒã¹ã±ãŒã¹ã§ããèªã¿é£ã°ããŠãæ§ããŸããã
+
+///
+
+æ¢å®ã§ã¯ã**FastAPI** 㯠OpenAPI ã¹ããŒãå
ã« `root_path` ã® URL ãæã€ `server` ãäœæããŸãã
+
+ããããã¹ããŒãžã³ã°ãšæ¬çªã®äž¡æ¹ãšåãããã¥ã¡ã³ã UI ã§å¯Ÿè©±ããããå Žåãªã©ãå¥ã® `servers` ãæå®ããããšãã§ããŸãã
+
+ã«ã¹ã¿ã ã® `servers` ãªã¹ããæž¡ããŠããŠãã〠`root_path`ïŒAPI ããããã·ã®èåŸã«ããããïŒãèšå®ãããŠããå Žåã**FastAPI** ã¯ãã® `root_path` ãçšãããserverãããªã¹ãã®å
é ã«æ¿å
¥ããŸãã
+
+äŸãã°:
+
+{* ../../docs_src/behind_a_proxy/tutorial003_py310.py hl[4:7] *}
+
+次ã®ãã㪠OpenAPI ã¹ããŒããçæãããŸã:
+
+```JSON hl_lines="5-7"
+{
+ "openapi": "3.1.0",
+ // ã»ãã®é
ç®
+ "servers": [
+ {
+ "url": "/api/v1"
+ },
+ {
+ "url": "https://stag.example.com",
+ "description": "Staging environment"
+ },
+ {
+ "url": "https://prod.example.com",
+ "description": "Production environment"
+ }
+ ],
+ "paths": {
+ // ã»ãã®é
ç®
+ }
+}
+```
+
+/// tip | è±ç¥è
+
+`root_path` ããååŸãã `url` å€ `/api/v1` ãæã€ server ãèªåçæãããŠããç¹ã«æ³šç®ããŠãã ããã
+
+///
+
+ããã¥ã¡ã³ã UIïŒhttp://127.0.0.1:9999/api/v1/docsïŒã§ã¯æ¬¡ã®ããã«è¡šç€ºãããŸã:
+
+
+
+/// tip | è±ç¥è
+
+ããã¥ã¡ã³ã UI ã¯ãéžæãã server ãšå¯Ÿè©±ããŸãã
+
+///
+
+/// note | æè¡è©³çް
+
+OpenAPI 仿§ã® `servers` ããããã£ã¯ä»»æã§ãã
+
+`servers` ãã©ã¡ãŒã¿ãæå®ãããã〠`root_path` ã `/` ã®å Žåãçæããã OpenAPI ã¹ããŒããã㯠`servers` ããããã£ãæ¢å®ã§å®å
šã«çç¥ãããŸããããã¯ã`url` ã `/` ã® server ã 1 ã€ããã®ãšåçã§ãã
+
+///
+
+### `root_path` ç±æ¥ã®èªå server ãç¡å¹å { #disable-automatic-server-from-root-path }
+
+`root_path` ãçšããèªåç㪠server ã **FastAPI** ã«å«ããŠã»ãããªãå Žåã¯ããã©ã¡ãŒã¿ `root_path_in_servers=False` ã䜿çšããŸã:
+
+{* ../../docs_src/behind_a_proxy/tutorial004_py310.py hl[9] *}
+
+ãããšãOpenAPI ã¹ããŒãã«ã¯å«ãŸããŸããã
+
+## ãµãã¢ããªã±ãŒã·ã§ã³ã®ããŠã³ã { #mounting-a-sub-application }
+
+`root_path` ã䌎ããããã·ã䜿çšãã€ã€ãµãã¢ããªã±ãŒã·ã§ã³ãããŠã³ãããå¿
èŠãããå Žåã§ãïŒ[ãµãã¢ããªã±ãŒã·ã§ã³ - ããŠã³ã](sub-applications.md){.internal-link target=_blank} åç
§ïŒãéåžžã©ããã«è¡ããŸãã
+
+FastAPI ã¯å
éšã§ `root_path` ãé©åã«æ±ãããããã®ãŸãŸåäœããŸããâš
diff --git a/docs/ja/docs/advanced/custom-response.md b/docs/ja/docs/advanced/custom-response.md
index 9d881c013..50a789165 100644
--- a/docs/ja/docs/advanced/custom-response.md
+++ b/docs/ja/docs/advanced/custom-response.md
@@ -30,7 +30,7 @@
ããããè¿ãããšããŠããã³ã³ãã³ãã **JSONã§ã·ãªã¢ã©ã€ãºå¯èœ**ã§ããããšã確å®ãªãããããçŽæ¥ã¬ã¹ãã³ã¹ã¯ã©ã¹ã«æž¡ããŠãFastAPIãã¬ã¹ãã³ã¹ã¯ã©ã¹ãžæž¡ãåã«è¿åŽã³ã³ãã³ãã `jsonable_encoder` ã«éãããšã§çºçãã远å ã®ãªãŒããŒããããåé¿ã§ããŸãã
-{* ../../docs_src/custom_response/tutorial001b_py39.py hl[2,7] *}
+{* ../../docs_src/custom_response/tutorial001b_py310.py hl[2,7] *}
/// info | æ
å ±
@@ -55,7 +55,7 @@
* `HTMLResponse` ãã€ã³ããŒãããã
* *path operation ãã³ã¬ãŒã¿* ã®ãã©ã¡ãŒã¿ `response_class` ã« `HTMLResponse` ãæž¡ãã
-{* ../../docs_src/custom_response/tutorial002_py39.py hl[2,7] *}
+{* ../../docs_src/custom_response/tutorial002_py310.py hl[2,7] *}
/// info | æ
å ±
@@ -73,7 +73,7 @@
äžèšãšåãäŸã«ãããŠã `HTMLResponse` ãè¿ããšããã®ããã«ãªããŸã:
-{* ../../docs_src/custom_response/tutorial003_py39.py hl[2,7,19] *}
+{* ../../docs_src/custom_response/tutorial003_py310.py hl[2,7,19] *}
/// warning | 泚æ
@@ -97,7 +97,7 @@
äŸãã°ããã®ããã«ãªããŸã:
-{* ../../docs_src/custom_response/tutorial004_py39.py hl[7,21,23] *}
+{* ../../docs_src/custom_response/tutorial004_py310.py hl[7,21,23] *}
ãã®äŸã§ã¯ã颿° `generate_html_response()` ã¯ã`str` ã®HTMLãè¿ãã®ã§ã¯ãªãã`Response` ãçæããŠè¿ããŠããŸãã
@@ -136,7 +136,7 @@
FastAPIïŒå®éã«ã¯StarletteïŒã¯èªåçã«Content-LengthããããŒãå«ã¿ãŸãããŸãã`media_type` ã«åºã¥ããContent-TypeããããŒãå«ã¿ãããã¹ãã¿ã€ãã®ããã«charsetã远å ããŸãã
-{* ../../docs_src/response_directly/tutorial002_py39.py hl[1,18] *}
+{* ../../docs_src/response_directly/tutorial002_py310.py hl[1,18] *}
### `HTMLResponse` { #htmlresponse }
@@ -146,7 +146,7 @@ FastAPIïŒå®éã«ã¯StarletteïŒã¯èªåçã«Content-LengthããããŒã
ããã¹ãããã€ããåãåãããã¬ãŒã³ããã¹ãã®ã¬ã¹ãã³ã¹ãè¿ããŸãã
-{* ../../docs_src/custom_response/tutorial005_py39.py hl[2,7,9] *}
+{* ../../docs_src/custom_response/tutorial005_py310.py hl[2,7,9] *}
### `JSONResponse` { #jsonresponse }
@@ -180,7 +180,7 @@ FastAPIïŒå®éã«ã¯StarletteïŒã¯èªåçã«Content-LengthããããŒã
///
-{* ../../docs_src/custom_response/tutorial001_py39.py hl[2,7] *}
+{* ../../docs_src/custom_response/tutorial001_py310.py hl[2,7] *}
/// tip | è±ç¥è
@@ -194,13 +194,13 @@ HTTPãªãã€ã¬ã¯ããè¿ããŸããããã©ã«ãã§ã¯307ã¹ããŒã¿ã¹
`RedirectResponse` ãçŽæ¥è¿ããŸã:
-{* ../../docs_src/custom_response/tutorial006_py39.py hl[2,9] *}
+{* ../../docs_src/custom_response/tutorial006_py310.py hl[2,9] *}
---
ãŸãã¯ã`response_class` ãã©ã¡ãŒã¿ã§äœ¿çšã§ããŸã:
-{* ../../docs_src/custom_response/tutorial006b_py39.py hl[2,7,9] *}
+{* ../../docs_src/custom_response/tutorial006b_py310.py hl[2,7,9] *}
ãã®å Žåã*path operation*颿°ããURLãçŽæ¥è¿ããŸãã
@@ -210,13 +210,13 @@ HTTPãªãã€ã¬ã¯ããè¿ããŸããããã©ã«ãã§ã¯307ã¹ããŒã¿ã¹
ãŸãã`status_code` ãã©ã¡ãŒã¿ã `response_class` ãã©ã¡ãŒã¿ãšçµã¿åãããŠäœ¿ãããšãã§ããŸã:
-{* ../../docs_src/custom_response/tutorial006c_py39.py hl[2,7,9] *}
+{* ../../docs_src/custom_response/tutorial006c_py310.py hl[2,7,9] *}
### `StreamingResponse` { #streamingresponse }
éåæãžã§ãã¬ãŒã¿ããŸãã¯éåžžã®ãžã§ãã¬ãŒã¿/ã€ãã¬ãŒã¿ãåãåããã¬ã¹ãã³ã¹ããã£ãã¹ããªãŒã ããŸãã
-{* ../../docs_src/custom_response/tutorial007_py39.py hl[2,14] *}
+{* ../../docs_src/custom_response/tutorial007_py310.py hl[2,14] *}
#### ãã¡ã€ã«ã©ã€ã¯ãªããžã§ã¯ãã§ `StreamingResponse` ã䜿ã { #using-streamingresponse-with-file-like-objects }
@@ -226,7 +226,7 @@ HTTPãªãã€ã¬ã¯ããè¿ããŸããããã©ã«ãã§ã¯307ã¹ããŒã¿ã¹
ããã«ã¯ã¯ã©ãŠãã¹ãã¬ãŒãžãšã®é£æºãæ ååŠçãªã©ãå€ãã®ã©ã€ãã©ãªãå«ãŸããŸãã
-{* ../../docs_src/custom_response/tutorial008_py39.py hl[2,10:12,14] *}
+{* ../../docs_src/custom_response/tutorial008_py310.py hl[2,10:12,14] *}
1. ããã¯ãžã§ãã¬ãŒã¿é¢æ°ã§ããå
éšã« `yield` æãå«ãããããžã§ãã¬ãŒã¿é¢æ°ãã§ãã
2. `with` ãããã¯ã䜿ãããšã§ããžã§ãã¬ãŒã¿é¢æ°ãçµãã£ãåŸïŒã€ãŸãã¬ã¹ãã³ã¹ã®éä¿¡ãå®äºããåŸïŒã«file-likeãªããžã§ã¯ãã確å®ã«ã¯ããŒãºãããããã«ããŸãã
@@ -255,11 +255,11 @@ HTTPãªãã€ã¬ã¯ããè¿ããŸããããã©ã«ãã§ã¯307ã¹ããŒã¿ã¹
ãã¡ã€ã«ã¬ã¹ãã³ã¹ã«ã¯ãé©å㪠`Content-Length`ã`Last-Modified`ã`ETag` ããããŒãå«ãŸããŸãã
-{* ../../docs_src/custom_response/tutorial009_py39.py hl[2,10] *}
+{* ../../docs_src/custom_response/tutorial009_py310.py hl[2,10] *}
`response_class` ãã©ã¡ãŒã¿ã䜿ãããšãã§ããŸã:
-{* ../../docs_src/custom_response/tutorial009b_py39.py hl[2,8,10] *}
+{* ../../docs_src/custom_response/tutorial009b_py310.py hl[2,8,10] *}
ãã®å Žåã*path operation*颿°ãããã¡ã€ã«ãã¹ãçŽæ¥è¿ããŸãã
@@ -273,7 +273,7 @@ HTTPãªãã€ã¬ã¯ããè¿ããŸããããã©ã«ãã§ã¯307ã¹ããŒã¿ã¹
`CustomORJSONResponse` ãäœããŸããäž»ã«å¿
èŠãªã®ã¯ãã³ã³ãã³ãã `bytes` ãšããŠè¿ã `Response.render(content)` ã¡ãœãããäœãããšã§ã:
-{* ../../docs_src/custom_response/tutorial009c_py39.py hl[9:14,17] *}
+{* ../../docs_src/custom_response/tutorial009c_py310.py hl[9:14,17] *}
ãããŸã§ã¯æ¬¡ã®ããã«è¿ããŠãããã®ã:
@@ -299,7 +299,7 @@ HTTPãªãã€ã¬ã¯ããè¿ããŸããããã©ã«ãã§ã¯307ã¹ããŒã¿ã¹
以äžã®äŸã§ã¯ã**FastAPI** ã¯ãã¹ãŠã®*path operation*ã§ã`JSONResponse` ã®ä»£ããã« `ORJSONResponse` ãããã©ã«ããšããŠäœ¿ããŸãã
-{* ../../docs_src/custom_response/tutorial010_py39.py hl[2,4] *}
+{* ../../docs_src/custom_response/tutorial010_py310.py hl[2,4] *}
/// tip | è±ç¥è
diff --git a/docs/ja/docs/advanced/dataclasses.md b/docs/ja/docs/advanced/dataclasses.md
new file mode 100644
index 000000000..74f479f07
--- /dev/null
+++ b/docs/ja/docs/advanced/dataclasses.md
@@ -0,0 +1,95 @@
+# Dataclasses ã®äœ¿çš { #using-dataclasses }
+
+FastAPI 㯠**Pydantic** ã®äžã«æ§ç¯ãããŠããããããŸã§ã«ãªã¯ãšã¹ããã¬ã¹ãã³ã¹ã宣èšããããã« Pydantic ã¢ãã«ãäœ¿ãæ¹æ³ã玹ä»ããŠããŸããã
+
+ããã FastAPI ã¯ãåæ§ã®æ¹æ³ã§ `dataclasses` ããµããŒãããŸã:
+
+{* ../../docs_src/dataclasses_/tutorial001_py310.py hl[1,6:11,18:19] *}
+
+ãã㯠**Pydantic** ã«ãã£ãŠåŒãç¶ããµããŒããããŠããŸããPydantic ã«ã¯ `dataclasses` ã®å
éšãµããŒã ãããããã§ãã
+
+ãã®ãããäžèšã®ããã«æç€ºçã« Pydantic ã䜿ã£ãŠããªãã³ãŒãã§ããFastAPI ã¯æšæºã® dataclass ã Pydantic ç¬èªã® dataclass ã«å€æããããã« Pydantic ã䜿çšããŠããŸãã
+
+ãããŠåœç¶ãªãããæ¬¡ã®ç¹ãåæ§ã«ãµããŒããããŸã:
+
+- ããŒã¿æ€èšŒ
+- ããŒã¿ã®ã·ãªã¢ã©ã€ãº
+- ããŒã¿ã®ããã¥ã¡ã³ãå ãªã©
+
+ãã㯠Pydantic ã¢ãã«ã®å Žåãšåãããã«åäœããŸããå
éšçã«ãåæ§ã« Pydantic ã䜿ã£ãŠå®çŸãããŠããŸãã
+
+/// info | æ
å ±
+
+dataclasses ã¯ãPydantic ã¢ãã«ãã§ããããšããã¹ãŠã¯è¡ããªãç¹ã«çæããŠãã ããã
+
+ãã®ãããPydantic ã¢ãã«ã䜿ãå¿
èŠãããå ŽåããããŸãã
+
+ãããæ¢åã® dataclass ã倿°ãããªããFastAPI ã§ Web API ãæ§ç¯ããéã«ããããæŽ»çšããã¡ãã£ãšãããã¯ããã¯ã«ãªããŸããð€
+
+///
+
+## `response_model` ã§ã® dataclasses { #dataclasses-in-response-model }
+
+`response_model` ãã©ã¡ãŒã¿ã§ã `dataclasses` ã䜿çšã§ããŸã:
+
+{* ../../docs_src/dataclasses_/tutorial002_py310.py hl[1,6:12,18] *}
+
+dataclass ã¯èªåçã« Pydantic ã® dataclass ã«å€æãããŸãã
+
+ãã®ããããã®ã¹ããŒã㯠API ããã¥ã¡ã³ãã® UI ã«è¡šç€ºãããŸã:
+
+
+
+## ãã¹ãããããŒã¿æ§é ã§ã® dataclasses { #dataclasses-in-nested-data-structures }
+
+`dataclasses` ãä»ã®å泚éãšçµã¿åãããŠããã¹ãããããŒã¿æ§é ãäœæã§ããŸãã
+
+å Žåã«ãã£ãŠã¯ãèªåçæããã API ããã¥ã¡ã³ãã§ãšã©ãŒãçºçãããªã©ã®çç±ã§ãPydantic çã® `dataclasses` ã䜿ãå¿
èŠããããããããŸããã
+
+ãã®å Žåã¯ãæšæºã® `dataclasses` ã `pydantic.dataclasses` ã«çœ®ãæããã ãã§æžã¿ãŸããããã¯ããããã€ã³çœ®æã§ã:
+
+{* ../../docs_src/dataclasses_/tutorial003_py310.py hl[1,4,7:10,13:16,22:24,27] *}
+
+1. äŸç¶ãšããŠæšæºã® `dataclasses` ãã `field` ãã€ã³ããŒãããŸãã
+
+2. `pydantic.dataclasses` 㯠`dataclasses` ã®ããããã€ã³çœ®æã§ãã
+
+3. `Author` dataclass 㯠`Item` dataclass ã®ãªã¹ããå«ã¿ãŸãã
+
+4. `Author` dataclass ã `response_model` ãã©ã¡ãŒã¿ãšããŠäœ¿çšããŠããŸãã
+
+5. ãªã¯ãšã¹ãããã£ãšããŠã® dataclass ãšäœµããŠãä»ã®æšæºã®å泚éã䜿çšã§ããŸãã
+
+ ãã®äŸã§ã¯ã`Item` dataclass ã®ãªã¹ãã§ãã
+
+6. ããã§ã¯ãdataclass ã®ãªã¹ãã§ãã `items` ãå«ãèŸæžãè¿ããŠããŸãã
+
+ FastAPI ã¯ããŒã¿ã JSON ã« ã·ãªã¢ã©ã€ãº ã§ããŸãã
+
+7. ããã§ã¯ `response_model` ã« `Author` dataclass ã®ãªã¹ããšããåæ³šéã䜿çšããŠããŸãã
+
+ ãã®ããã«ã`dataclasses` ã¯æšæºã®å泚éãšçµã¿åãããããŸãã
+
+8. ãã® *path operation 颿°* ã¯ã`async def` ã§ã¯ãªãéåžžã® `def` ã䜿çšããŠããŸãã
+
+ ãã€ãã©ãããFastAPI ã§ã¯å¿
èŠã«å¿ã㊠`def` ãš `async def` ãçµã¿åãããããŸãã
+
+ ã©ã¡ãããã€äœ¿ããã®åŸ©ç¿ãå¿
èŠãªå Žåã¯ã[`async` ãš `await`](../async.md#in-a-hurry){.internal-link target=_blank} ã«é¢ããããã¥ã¡ã³ãã® _"In a hurry?"_ ã»ã¯ã·ã§ã³ãåç
§ããŠãã ããã
+
+9. ãã® *path operation 颿°* ã¯ïŒå¯èœã§ã¯ãããŸããïŒdataclass èªäœã¯è¿ãããå
éšããŒã¿ãæã€èŸæžã®ãªã¹ããè¿ããŠããŸãã
+
+ FastAPI 㯠dataclass ãå«ã `response_model` ãã©ã¡ãŒã¿ã䜿ã£ãŠã¬ã¹ãã³ã¹ã倿ããŸãã
+
+`dataclasses` ã¯ä»ã®å泚éãšå€æ§ãªçµã¿åãããå¯èœã§ãè€éãªããŒã¿æ§é ãæ§æã§ããŸãã
+
+äžèšã®ã³ãŒãå
ã³ã¡ã³ãã®ãã³ããåç
§ããŠãããå
·äœçãªè©³çްã確èªããŠãã ããã
+
+## ããã«åŠã¶ { #learn-more }
+
+`dataclasses` ãä»ã® Pydantic ã¢ãã«ãšçµã¿åãããããç¶æ¿ããããèªåã®ã¢ãã«ã«å«ããããã§ããŸãã
+
+詳ããã¯ãdataclasses ã«é¢ãã Pydantic ããã¥ã¡ã³ã ãåç
§ããŠãã ããã
+
+## ããŒãžã§ã³ { #version }
+
+ãã㯠FastAPI ããŒãžã§ã³ `0.67.0` 以éã§å©çšå¯èœã§ããð
diff --git a/docs/ja/docs/advanced/events.md b/docs/ja/docs/advanced/events.md
new file mode 100644
index 000000000..fb79062fa
--- /dev/null
+++ b/docs/ja/docs/advanced/events.md
@@ -0,0 +1,165 @@
+# Lifespan ã€ãã³ã { #lifespan-events }
+
+ã¢ããªã±ãŒã·ã§ã³ãèµ·åããåã«äžåºŠã ãå®è¡ãã¹ãããžãã¯ïŒã³ãŒãïŒãå®çŸ©ã§ããŸããããã¯ãã¢ããªã±ãŒã·ã§ã³ããªã¯ãšã¹ããåãåãå§ããåã«ããã®ã³ãŒããäžåºŠã ãå®è¡ãããããšããæå³ã§ãã
+
+åæ§ã«ãã¢ããªã±ãŒã·ã§ã³ãã·ã£ããããŠã³ãããšãã«å®è¡ãã¹ãããžãã¯ïŒã³ãŒãïŒãå®çŸ©ã§ããŸãããã®å Žåããã®ã³ãŒãã¯ãïŒå€ãã®ãªã¯ãšã¹ããåŠçããïŒåŸã«äžåºŠã ãå®è¡ãããŸãã
+
+ãã®ã³ãŒãã¯ãã¢ããªã±ãŒã·ã§ã³ããªã¯ãšã¹ãã®åãä»ãããéå§ãããåããããŠåŠçããçµäºãããçŽåŸã«å®è¡ããããããã¢ããªã±ãŒã·ã§ã³ã®å
šäœã®ãLifespanãïŒãã®ãlifespanããšããèšèã¯ããåŸã§éèŠã«ãªããŸã ðïŒãã«ããŒããŸãã
+
+ããã¯ãã¢ããªå
šäœã§äœ¿çšãããªã¯ãšã¹ãéã§ãå
±æããããã€åŸã§ãã¯ãªãŒã³ã¢ãããããå¿
èŠããããããªããªãœãŒã¹ããã»ããã¢ããããã®ã«ãšãŠã䟿å©ã§ããããšãã°ãããŒã¿ããŒã¹æ¥ç¶ããŒã«ããå
±æã®æ©æ¢°åŠç¿ã¢ãã«ã®èªã¿èŸŒã¿ãªã©ã§ãã
+
+## ãŠãŒã¹ã±ãŒã¹ { #use-case }
+
+ãŸãã¯ãŠãŒã¹ã±ãŒã¹ã®äŸããå§ããŠããããã©ã®ããã«è§£æ±ºããããèŠãŠãããŸãã
+
+ãªã¯ãšã¹ããåŠçããããã«äœ¿çšããããæ©æ¢°åŠç¿ã¢ãã«ããããã€ããããšæ³åããŠãã ãããð€
+
+åãã¢ãã«ããªã¯ãšã¹ãéã§å
±æããã®ã§ããªã¯ãšã¹ãããšããŠãŒã¶ãŒããšã«å¥ã
ã®ã¢ãã«ã䜿ãããã§ã¯ãããŸããã
+
+ã¢ãã«ã®èªã¿èŸŒã¿ã«ã¯ãã£ã¹ã¯ãã倧éã®ããŒã¿ãèªãå¿
èŠããããããªãæéãããããããããŸããããããã£ãŠããªã¯ãšã¹ãããšã«èªã¿èŸŒã¿ããã¯ãããŸããã
+
+ã¢ãžã¥ãŒã«/ãã¡ã€ã«ã®ãããã¬ãã«ã§èªã¿èŸŒãããšãã§ããŸããããã®å Žåã¯ãããšãç°¡åãªèªåãã¹ããå®è¡ããã ãã§ããã¢ãã«ãèªã¿èŸŒããããšã«ãªãããã®ã¢ãã«ã®èªã¿èŸŒã¿ãåŸ
ã€å¿
èŠããããããç¬ç«ããã³ãŒãéšåãèµ°ãããã ãã®ãã¹ãã§ããé
ãããªã£ãŠããŸããŸãã
+
+ããã解決ããŸãããããªã¯ãšã¹ããåŠçããåã«ã¢ãã«ãèªã¿èŸŒã¿ãŸãããã³ãŒããããŒããããŠããæäžã§ã¯ãªããã¢ããªã±ãŒã·ã§ã³ããªã¯ãšã¹ãã®åãä»ããéå§ããçŽåã ãã«ããŸãã
+
+## Lifespan { #lifespan }
+
+ãã®ãèµ·åæããšãã·ã£ããããŠã³æãã®ããžãã¯ã¯ã`FastAPI` ã¢ããªã® `lifespan` ãã©ã¡ãŒã¿ãšãã³ã³ããã¹ããããŒãžã£ãïŒãããäœãã¯ããã«ç€ºããŸãïŒã䜿ã£ãŠå®çŸ©ã§ããŸãã
+
+ãŸãã¯äŸãèŠãŠããã詳现ã説æããŸãã
+
+次ã®ããã«ã`yield` ã䜿ãéåæé¢æ° `lifespan()` ãäœæããŸã:
+
+{* ../../docs_src/events/tutorial003_py310.py hl[16,19] *}
+
+ããã§ã¯ã`yield` ã®åã§æ©æ¢°åŠç¿ã¢ãã«ã®èŸæžã«ïŒãããŒã®ïŒã¢ãã«é¢æ°ãå
¥ããããšã§ãé«ã³ã¹ããªãèµ·åæãã®ã¢ãã«èªã¿èŸŒã¿ãã·ãã¥ã¬ãŒã·ã§ã³ããŠããŸãããã®ã³ãŒãã¯ãã¢ããªã±ãŒã·ã§ã³ããªã¯ãšã¹ãããåãä»ãå§ããåãã«ãããªãã¡èµ·åæã«å®è¡ãããŸãã
+
+ãã㊠`yield` ã®çŽåŸã§ã¢ãã«ãã¢ã³ããŒãããŸãããã®ã³ãŒãã¯ãã¢ããªã±ãŒã·ã§ã³ããªã¯ãšã¹ãåŠçããçµäºãããåŸãã·ã£ããããŠã³çŽåã«å®è¡ãããŸããããšãã°ã¡ã¢ãªã GPU ã®ãããªãªãœãŒã¹ãè§£æŸã§ããŸãã
+
+/// tip | è±ç¥è
+
+`shutdown` ã¯ãã¢ããªã±ãŒã·ã§ã³ãã忢ããããšãã«çºçããŸãã
+
+æ°ããããŒãžã§ã³ãéå§ããå¿
èŠãããããåã«å®è¡ããããããªã£ãã®ãããããŸãããð€·
+
+///
+
+### Lifespan 颿° { #lifespan-function }
+
+ãŸã泚ç®ãã¹ãã¯ã`yield` ã䜿ãéåæé¢æ°ãå®çŸ©ããŠããããšã§ããããã¯ãyield ã䜿ãäŸåé¢ä¿ïŒDependenciesïŒãã«ãšãŠããã䌌ãŠããŸãã
+
+{* ../../docs_src/events/tutorial003_py310.py hl[14:19] *}
+
+`yield` ã®åã®ååã¯ãã¢ããªã±ãŒã·ã§ã³ãéå§ããããåãã«å®è¡ãããŸãã
+
+`yield` ã®åŸåã¯ãã¢ããªã±ãŒã·ã§ã³ã®åŠçããçµäºããããåŸãã«å®è¡ãããŸãã
+
+### éåæã³ã³ããã¹ããããŒãžã£ { #async-context-manager }
+
+ãã®é¢æ°ã«ã¯ `@asynccontextmanager` ããã³ã¬ãŒããããŠããŸãã
+
+ããã«ããããã®é¢æ°ã¯ãéåæã³ã³ããã¹ããããŒãžã£ãã«ãªããŸãã
+
+{* ../../docs_src/events/tutorial003_py310.py hl[1,13] *}
+
+Python ã®ãã³ã³ããã¹ããããŒãžã£ãã¯ã`with` æã§äœ¿ãããã®ã§ããããšãã°ã`open()` ã¯ã³ã³ããã¹ããããŒãžã£ãšããŠäœ¿ããŸã:
+
+```Python
+with open("file.txt") as file:
+ file.read()
+```
+
+æè¿ã® Python ã«ã¯ãéåæã³ã³ããã¹ããããŒãžã£ãããããŸãã`async with` ã§äœ¿ããŸã:
+
+```Python
+async with lifespan(app):
+ await do_stuff()
+```
+
+ãã®ããã«ã³ã³ããã¹ããããŒãžã£ïŒãŸãã¯éåæã³ã³ããã¹ããããŒãžã£ïŒãäœããšã`with` ãããã¯ã«å
¥ãåã« `yield` ããåã®ã³ãŒããå®è¡ããã`with` ãããã¯ãåºãåŸã« `yield` ããåŸãã®ã³ãŒããå®è¡ãããŸãã
+
+äžã®ã³ãŒãäŸã§ã¯çŽæ¥ããã䜿ã£ãŠã¯ããŸããããFastAPI ã«æž¡ããŠå
éšã§äœ¿ã£ãŠããããŸãã
+
+`FastAPI` ã¢ããªã® `lifespan` ãã©ã¡ãŒã¿ã¯ãéåæã³ã³ããã¹ããããŒãžã£ããåãåãã®ã§ãæ°ããäœã£ã `lifespan` éåæã³ã³ããã¹ããããŒãžã£ãæž¡ããŸãã
+
+{* ../../docs_src/events/tutorial003_py310.py hl[22] *}
+
+## 代æ¿ã®ã€ãã³ãïŒéæšå¥šïŒ { #alternative-events-deprecated }
+
+/// warning | 泚æ
+
+æšå¥šãããæ¹æ³ã¯ãäžã§èª¬æãããšãã `FastAPI` ã¢ããªã® `lifespan` ãã©ã¡ãŒã¿ã䜿ã£ãŠãèµ·åããšãã·ã£ããããŠã³ããæ±ãããšã§ãã`lifespan` ãã©ã¡ãŒã¿ãæå®ãããšã`startup` ãš `shutdown` ã®ã€ãã³ããã³ãã©ã¯åŒã³åºãããªããªããŸãã`lifespan` ãã€ãã³ãããã©ã¡ããäžæ¹ã§ãããäž¡æ¹åæã§ã¯ãããŸããã
+
+ãã®ç¯ã¯èªã¿é£ã°ããŠãããŸããŸããã
+
+///
+
+èµ·åæãšã·ã£ããããŠã³æã«å®è¡ãããããžãã¯ãå®çŸ©ããå¥ã®æ¹æ³ããããŸãã
+
+ã¢ããªã±ãŒã·ã§ã³ãèµ·åããåããŸãã¯ã·ã£ããããŠã³ãããšãã«å®è¡ããå¿
èŠãããã€ãã³ããã³ãã©ïŒé¢æ°ïŒãå®çŸ©ã§ããŸãã
+
+ãããã®é¢æ°ã¯ `async def` ã§ããéåžžã® `def` ã§ãæ§ããŸããã
+
+### `startup` ã€ãã³ã { #startup-event }
+
+ã¢ããªã±ãŒã·ã§ã³ãéå§ãããåã«å®è¡ãã¹ã颿°ã远å ããã«ã¯ãã€ãã³ã `"startup"` ã§å®£èšããŸã:
+
+{* ../../docs_src/events/tutorial001_py310.py hl[8] *}
+
+ãã®å Žåã`startup` ã®ã€ãã³ããã³ãã©é¢æ°ã¯ items ã®ãããŒã¿ããŒã¹ãïŒåãªã `dict`ïŒãããã€ãã®å€ã§åæåããŸãã
+
+ã€ãã³ããã³ãã©é¢æ°ã¯è€æ°è¿œå ã§ããŸãã
+
+ãã¹ãŠã® `startup` ã€ãã³ããã³ãã©ãå®äºãããŸã§ãã¢ããªã±ãŒã·ã§ã³ã¯ãªã¯ãšã¹ãã®åãä»ããéå§ããŸããã
+
+### `shutdown` ã€ãã³ã { #shutdown-event }
+
+ã¢ããªã±ãŒã·ã§ã³ãã·ã£ããããŠã³ãããšãã«å®è¡ãã¹ã颿°ã远å ããã«ã¯ãã€ãã³ã `"shutdown"` ã§å®£èšããŸã:
+
+{* ../../docs_src/events/tutorial002_py310.py hl[6] *}
+
+ããã§ã¯ã`shutdown` ã®ã€ãã³ããã³ãã©é¢æ°ããããã¹ãè¡ `"Application shutdown"` ããã¡ã€ã« `log.txt` ã«æžã蟌ã¿ãŸãã
+
+/// info | æ
å ±
+
+`open()` 颿°ã® `mode="a"` ã¯ã远å ãïŒappendïŒãæå³ããŸããã€ãŸãããã®ãã¡ã€ã«ã«æ¢ã«ããå
容ãäžæžããããè¡ãåŸãã«è¿œèšãããŸãã
+
+///
+
+/// tip | è±ç¥è
+
+ãã®äŸã§ã¯ããã¡ã€ã«ãæ±ãæšæºã® Python 颿° `open()` ã䜿ã£ãŠããŸãã
+
+ãã®ããããã£ã¹ã¯ãžã®æžã蟌ã¿ããåŸ
ã€ãå¿
èŠããã I/OïŒå
¥å/åºåïŒãé¢ãããŸãã
+
+ããã `open()` èªäœã¯ `async` ã `await` ã䜿ããŸããã
+
+ãããã£ãŠãã€ãã³ããã³ãã©é¢æ°ã¯ `async def` ã§ã¯ãªãéåžžã® `def` ã§å®£èšããŠããŸãã
+
+///
+
+### `startup` ãš `shutdown` ããŸãšã㊠{ #startup-and-shutdown-together }
+
+èµ·åæãšã·ã£ããããŠã³æã®ããžãã¯ã¯é¢é£ããŠããããšãå€ãã§ããäœããéå§ããŠããçµäºãããããªãœãŒã¹ãç²åŸããŠããè§£æŸãããããªã©ã§ã.
+
+å
±æããããžãã¯ã倿°ã®ãªãå¥ã
ã®é¢æ°ã§ãããè¡ãã®ã¯é£ãããã°ããŒãã«å€æ°ãªã©ã«å€ãä¿åããå¿
èŠãåºãŠããŸãã
+
+ãã®ãããçŸåšã¯äžã§èª¬æãããšãã `lifespan` ã䜿ãããšãæšå¥šãããŠããŸãã
+
+## æè¡è©³çް { #technical-details }
+
+æè¡ãæ°ã«ãªãæ¹ãžã®çްããªè©³çްã§ããð€
+
+å
éšçã«ã¯ãASGI ã®æè¡ä»æ§ã«ãããŠããã㯠Lifespan ãããã³ã« ã®äžéšã§ããã`startup` ãš `shutdown` ãšããã€ãã³ããå®çŸ©ãããŠããŸãã
+
+/// info | æ
å ±
+
+Starlette ã® `lifespan` ãã³ãã©ã«ã€ããŠã¯ãStarlette ã® Lifespan ããã¥ã¡ã³ãã§è©³ããèªãããšãã§ããŸãã
+
+ã³ãŒãã®ä»ã®é åã§äœ¿ãã lifespan ã®ç¶æ
ãã©ã®ããã«æ±ãããå«ãŸããŠããŸãã
+
+///
+
+## ãµãã¢ããªã±ãŒã·ã§ã³ { #sub-applications }
+
+ðš ãããã® lifespan ã€ãã³ãïŒstartup ãš shutdownïŒã¯ã¡ã€ã³ã®ã¢ããªã±ãŒã·ã§ã³ã«å¯ŸããŠã®ã¿å®è¡ããã[ãµãã¢ããªã±ãŒã·ã§ã³ - ããŠã³ã](sub-applications.md){.internal-link target=_blank} ã«ã¯å®è¡ãããªãããšã«æ³šæããŠãã ããã
diff --git a/docs/ja/docs/advanced/generate-clients.md b/docs/ja/docs/advanced/generate-clients.md
new file mode 100644
index 000000000..7b9f82054
--- /dev/null
+++ b/docs/ja/docs/advanced/generate-clients.md
@@ -0,0 +1,208 @@
+# SDK ã®çæ { #generating-sdks }
+
+**FastAPI** 㯠**OpenAPI** 仿§ã«åºã¥ããŠããããããã® API ã¯å€ãã®ããŒã«ãçè§£ã§ããæšæºåœ¢åŒã§èšè¿°ã§ããŸãã
+
+ããã«ãããææ°ã®**ããã¥ã¡ã³ã**ãè€æ°èšèªã®ã¯ã©ã€ã¢ã³ãã©ã€ãã©ãªïŒ**SDKs**ïŒããããŠã³ãŒããšåæãç¶ãã**ãã¹ã**ã**èªååã¯ãŒã¯ãããŒ**ã容æã«çæã§ããŸãã
+
+æ¬ã¬ã€ãã§ã¯ãFastAPI ããã¯ãšã³ãåãã® **TypeScript SDK** ãçæããæ¹æ³ã説æããŸãã
+
+## ãªãŒããœãŒã¹ã® SDK ãžã§ãã¬ãŒã¿ { #open-source-sdk-generators }
+
+å€çšéãªéžæè¢ãšã㊠OpenAPI Generator ããããŸããããã¯**倿°ã®ããã°ã©ãã³ã°èšèª**ããµããŒãããOpenAPI 仿§ãã SDK ãçæã§ããŸãã
+
+**TypeScript ã¯ã©ã€ã¢ã³ã**åãã«ã¯ãHey API ãç®çç¹åã®ãœãªã¥ãŒã·ã§ã³ã§ãTypeScript ãšã³ã·ã¹ãã ã«æé©åãããäœéšãæäŸããŸãã
+
+ä»ã® SDK ãžã§ãã¬ãŒã¿ã¯ OpenAPI.Tools ã§ãèŠã€ããããŸãã
+
+/// tip | è±ç¥è
+
+FastAPI ã¯èªåçã« **OpenAPI 3.1** ã®ä»æ§ãçæããŸãããããã£ãŠã䜿çšããããŒã«ã¯ãã®ããŒãžã§ã³ããµããŒãããŠããå¿
èŠããããŸãã
+
+///
+
+## FastAPI ã¹ãã³ãµãŒã«ãã SDK ãžã§ãã¬ãŒã¿ { #sdk-generators-from-fastapi-sponsors }
+
+ãã®ã»ã¯ã·ã§ã³ã§ã¯ãFastAPI ãã¹ãã³ãµãŒããŠããäŒæ¥ã«ããã**ãã³ãã£ãŒæ¯æŽ**ããã³**äŒæ¥æ¯æŽ**ã®ãœãªã¥ãŒã·ã§ã³ã玹ä»ããŸãããããã®è£œåã¯ãé«å質ãªçæ SDK ã«å ããŠã**è¿œå æ©èœ**ã**çµ±å**ãæäŸããŸãã
+
+âš [**FastAPI ãã¹ãã³ãµãŒãã**](../help-fastapi.md#sponsor-the-author){.internal-link target=_blank} âš ããšã§ããããã®äŒæ¥ã¯ãã¬ãŒã ã¯ãŒã¯ãšãã®**ãšã³ã·ã¹ãã **ã®å¥å
šæ§ãš**æç¶å¯èœæ§**ãæ¯æŽããŠããŸãã
+
+ãã®æ¯æŽã¯ãFastAPI ã®**ã³ãã¥ããã£**ïŒçããïŒãžã®åŒ·ãã³ãããã¡ã³ãã®è¡šæã§ãããã**åªãããµãŒãã¹**ã®æäŸã ãã§ãªããå
ç¢ã§çºå±ãããã¬ãŒã ã¯ãŒã¯ FastAPI ãæ¯ããå§¿å¢ã瀺ããŠããŸããð
+
+äŸãã°ã次ã®ãããªãã®ããããŸã:
+
+* Speakeasy
+* Stainless
+* liblab
+
+ãããã®ãœãªã¥ãŒã·ã§ã³ã®äžã«ã¯ãªãŒãã³ãœãŒã¹ãç¡ææ ãæäŸãããã®ããããééçã³ãããã¡ã³ããªãã§è©Šãããšãã§ããŸããä»ã®åçš SDK ãžã§ãã¬ãŒã¿ãååšãããªã³ã©ã€ã³ã§èŠã€ããããŸããð€
+
+## TypeScript SDK ãäœæãã { #create-a-typescript-sdk }
+
+ãŸãã¯ç°¡å㪠FastAPI ã¢ããªããå§ããŸã:
+
+{* ../../docs_src/generate_clients/tutorial001_py310.py hl[7:9,12:13,16:17,21] *}
+
+ããã§ã*path operation* ã¯ãªã¯ãšã¹ããšã¬ã¹ãã³ã¹ã®ãã€ããŒãã«äœ¿çšããã¢ãã«ãå®çŸ©ããŠããã`Item` ãš `ResponseMessage` ã䜿ã£ãŠããŸãã
+
+### API ããã¥ã¡ã³ã { #api-docs }
+
+`/docs` ã«ç§»åãããšããªã¯ãšã¹ãã§éä¿¡ã»ã¬ã¹ãã³ã¹ã§åä¿¡ããããŒã¿ã®**ã¹ããŒã**ã衚瀺ãããŸã:
+
+
+
+ãããã®ã¹ããŒãã¯ãã¢ããªå
ã§ã¢ãã«ãšããŠå®£èšãããŠãããã衚瀺ãããŸãã
+
+ãã®æ
å ±ã¯ã¢ããªã® **OpenAPI ã¹ããŒã**ã«å«ãŸããAPI ããã¥ã¡ã³ãã«è¡šç€ºãããŸãã
+
+OpenAPI ã«å«ãŸãããããã®ã¢ãã«æ
å ±ã䜿ã£ãŠã**ã¯ã©ã€ã¢ã³ãã³ãŒããçæ**ã§ããŸãã
+
+### Hey API { #hey-api }
+
+ã¢ãã«ãåãã FastAPI ã¢ããªãããã°ãHey API ã§ TypeScript ã¯ã©ã€ã¢ã³ããçæã§ããŸããæãææ©ãæ¹æ³ã¯ npx ã䜿ãããšã§ãã
+
+```sh
+npx @hey-api/openapi-ts -i http://localhost:8000/openapi.json -o src/client
+```
+
+ããã§ TypeScript SDK ã `./src/client` ã«çæãããŸãã
+
+`@hey-api/openapi-ts` ã®ã€ã³ã¹ããŒã«æ¹æ³ããçæç©ã®è©³çްã¯å
¬åŒãµã€ããåç
§ããŠãã ããã
+
+### SDK ã®å©çš { #using-the-sdk }
+
+ããã§ã¯ã©ã€ã¢ã³ãã³ãŒãã import ããŠå©çšã§ããŸããäŸãã°æ¬¡ã®ããã«ãªããã¡ãœããã«å¯ŸããŠè£å®ãå¹ããŸã:
+
+
+
+éä¿¡ãããã€ããŒãã«ãè£å®ãé©çšãããŸã:
+
+
+
+/// tip | è±ç¥è
+
+FastAPI ã¢ããªã® `Item` ã¢ãã«ã§å®çŸ©ãã `name` ãš `price` ã«è£å®ãå¹ããŠããç¹ã«æ³šç®ããŠãã ããã
+
+///
+
+éä¿¡ããŒã¿ã«å¯Ÿããã€ã³ã©ã€ã³ãšã©ãŒã衚瀺ãããŸã:
+
+
+
+ã¬ã¹ãã³ã¹ãªããžã§ã¯ãã«ãè£å®ããããŸã:
+
+
+
+## ã¿ã°ä»ãã® FastAPI ã¢ã㪠{ #fastapi-app-with-tags }
+
+å®éçšã§ã¯ã¢ããªã¯å€§ãããªãã*path operation* ã®ã°ã«ãŒãåãã«ã¿ã°ã䜿ãããšãå€ãã§ãããã
+
+äŸãã° **items** çšãš **users** çšã®ã»ã¯ã·ã§ã³ããããã¿ã°ã§åããããŸã:
+
+{* ../../docs_src/generate_clients/tutorial002_py310.py hl[21,26,34] *}
+
+### ã¿ã°ä»ã TypeScript ã¯ã©ã€ã¢ã³ãã®çæ { #generate-a-typescript-client-with-tags }
+
+ã¿ã°ãçšãã FastAPI ã¢ããªããã¯ã©ã€ã¢ã³ããçæãããšãéåžžã¯ã©ã€ã¢ã³ãåŽã®ã³ãŒããã¿ã°ããšã«åå²ãããŸãã
+
+ããã«ãããã¯ã©ã€ã¢ã³ãã³ãŒããæ£ããæŽçã»ã°ã«ãŒãã³ã°ãããŸã:
+
+
+
+ãã®äŸã§ã¯æ¬¡ã®ããã«ãªããŸã:
+
+* `ItemsService`
+* `UsersService`
+
+### ã¯ã©ã€ã¢ã³ãã®ã¡ãœããå { #client-method-names }
+
+çŸç¶ã§ã¯ãçæãããã¡ãœããåïŒ`createItemItemsPost` ãªã©ïŒã¯ããŸããããã§ã¯ãããŸãã:
+
+```TypeScript
+ItemsService.createItemItemsPost({name: "Plumbus", price: 5})
+```
+
+ããã¯ãã¯ã©ã€ã¢ã³ããžã§ãã¬ãŒã¿ãå *path operation* ã® OpenAPI å
éšã® **operation ID** ãçšããããã§ãã
+
+OpenAPI ã§ã¯ operation ID ã¯å
šãŠã® *path operation* ãéããŠäžæã§ããå¿
èŠããããŸãããã®ãã FastAPI ã¯**颿°å**ã**ãã¹**ã**HTTP ã¡ãœãã/ãªãã¬ãŒã·ã§ã³**ãçµã¿åãã㊠operation ID ãçæããäžææ§ãä¿èšŒããŸãã
+
+次ã«ãããæ¹åããæ¹æ³ã瀺ããŸããð€
+
+## ã«ã¹ã¿ã operation ID ãšããè¯ãã¡ãœããå { #custom-operation-ids-and-better-method-names }
+
+operation ID ã®**çææ¹æ³**ã**倿Ž**ããŠç°¡æœã«ããã¯ã©ã€ã¢ã³ãåŽã®**ã¡ãœããåãã·ã³ãã«**ã«ã§ããŸãã
+
+ãã®å Žåã§ãå operation ID ã**äžæ**ã§ããããšã¯å¥ã®æ¹æ³ã§ä¿èšŒããå¿
èŠããããŸãã
+
+äŸãã°ãå *path operation* ã«ã¿ã°ãä»ãã**ã¿ã°**ãš *path operation* ã®**åå**ïŒé¢æ°åïŒãã operation ID ãçæã§ããŸãã
+
+### äžæ ID çæé¢æ°ã®ã«ã¹ã¿ãã€ãº { #custom-generate-unique-id-function }
+
+FastAPI ã¯å *path operation* ã«**äžæ ID**ãçšããŠããããã㯠**operation ID** ã®ã»ããå¿
èŠã«å¿ããŠãªã¯ãšã¹ããã¬ã¹ãã³ã¹ã®ã«ã¹ã¿ã ã¢ãã«åã«ã䜿ãããŸãã
+
+ãã®é¢æ°ã¯ã«ã¹ã¿ãã€ãºå¯èœã§ãã`APIRoute` ãåãåããæååãè¿ããŸãã
+
+äŸãã°ããã§ã¯ãæåã®ã¿ã°ïŒé垞㯠1 ã€ïŒãš *path operation* åïŒé¢æ°åïŒã䜿ããŸãã
+
+ãã®ã«ã¹ã¿ã 颿°ã **FastAPI** ã® `generate_unique_id_function` ãã©ã¡ãŒã¿ã«æž¡ããŸã:
+
+{* ../../docs_src/generate_clients/tutorial003_py310.py hl[6:7,10] *}
+
+### ã«ã¹ã¿ã operation ID ã§ TypeScript ã¯ã©ã€ã¢ã³ããçæ { #generate-a-typescript-client-with-custom-operation-ids }
+
+ãã®ç¶æ
ã§ã¯ã©ã€ã¢ã³ããåçæãããšãã¡ãœããåãæ¹åãããŠããŸã:
+
+
+
+ã芧ã®ãšãããã¡ãœããåã¯ã¿ã°åãšé¢æ°åã®ã¿ã«ãªããURL ãã¹ã HTTP ãªãã¬ãŒã·ã§ã³ã®æ
å ±ã¯å«ãŸããŸããã
+
+### ã¯ã©ã€ã¢ã³ãçæåãã® OpenAPI 仿§ã®ååŠç { #preprocess-the-openapi-specification-for-the-client-generator }
+
+ããã§ãçæã³ãŒãã«ã¯**éè€æ
å ±**ãæ®ã£ãŠããŸãã
+
+`ItemsService`ïŒã¿ã°ç±æ¥ïŒãã items é¢é£ã§ããããšã¯ãã§ã«åããã®ã«ãã¡ãœããåã«ãã¿ã°åãå眮ãããŠããŸããð
+
+OpenAPI å
šäœãšããŠã¯ operation ID ã®**äžææ§**ã®ããã«ããã®ãã¬ãã£ãã¯ã¹ãç¶æãããå Žåãããã§ãããã
+
+ãããçæã¯ã©ã€ã¢ã³ãçšã«ã¯ãã¯ã©ã€ã¢ã³ããçæããçŽåã« OpenAPI ã® operation ID ã**å å·¥**ããŠãã¡ãœããåããã**èŠããã**ã**ã¯ãªãŒã³**ã«ã§ããŸãã
+
+OpenAPI ã® JSON ã `openapi.json` ãšããŠä¿åããæ¬¡ã®ãããªã¹ã¯ãªããã§**ãã®ã¿ã°ã®ãã¬ãã£ãã¯ã¹ãé€å»**ã§ããŸã:
+
+{* ../../docs_src/generate_clients/tutorial004_py310.py *}
+
+//// tab | Node.js
+
+```Javascript
+{!> ../../docs_src/generate_clients/tutorial004.js!}
+```
+
+////
+
+ããã«ãã operation ID 㯠`items-get_items` ã®ãããªåœ¢ããåãªã `get_items` ã«çœ®ãæãããã¯ã©ã€ã¢ã³ããžã§ãã¬ãŒã¿ã¯ããç°¡æœãªã¡ãœããåãçæã§ããŸãã
+
+### ååŠçæžã¿ OpenAPI ãã TypeScript ã¯ã©ã€ã¢ã³ããçæ { #generate-a-typescript-client-with-the-preprocessed-openapi }
+
+çæå
ã `openapi.json` ã«ãªã£ãã®ã§ãå
¥åã®å ŽæãæŽæ°ããŸã:
+
+```sh
+npx @hey-api/openapi-ts -i ./openapi.json -o src/client
+```
+
+æ°ããã¯ã©ã€ã¢ã³ããçæãããšã**ã¯ãªãŒã³ãªã¡ãœããå**ã«ãªãã**è£å®**ã**ã€ã³ã©ã€ã³ãšã©ãŒ**ãªã©ããã®ãŸãŸå©çšã§ããŸã:
+
+
+
+## å©ç¹ { #benefits }
+
+èªåçæãããã¯ã©ã€ã¢ã³ãã䜿ããšã次ã®ãããªå¯Ÿè±¡ã§**è£å®**ãåŸãããŸã:
+
+* ã¡ãœãã
+* æ¬äœã®ãªã¯ãšã¹ããã€ããŒããã¯ãšãªãã©ã¡ãŒã¿ç
+* ã¬ã¹ãã³ã¹ã®ãã€ããŒã
+
+ãŸããããããç®æã§**ã€ã³ã©ã€ã³ãšã©ãŒ**ãåŸãããŸãã
+
+ããã¯ãšã³ãã³ãŒããæŽæ°ããŠããã³ããšã³ãã**åçæ**ããã°ãæ°ãã *path operation* ã¯ã¡ãœãããšããŠè¿œå ãããå€ããã®ã¯åé€ããããã®ä»ã®å€æŽãçæã³ãŒãã«åæ ãããŸããð€
+
+ã€ãŸãã倿Žãããã°èªåçã«ã¯ã©ã€ã¢ã³ãã³ãŒãã«**åæ **ãããŸããã¯ã©ã€ã¢ã³ãã**ãã«ã**ããã°ã䜿çšããŒã¿ã«**äžæŽå**ãããã°ãšã©ãŒã«ãªããŸãã
+
+ãã®çµæãå€ãã®ãšã©ãŒãéçºã®åææ®µéã§**æ©æçºèŠ**ã§ããæ¬çªã§æçµãŠãŒã¶ãŒã«äžå
·åãçŸããŠããåå ããããã°ããå¿
èŠããªããªããŸããâš
diff --git a/docs/ja/docs/advanced/middleware.md b/docs/ja/docs/advanced/middleware.md
new file mode 100644
index 000000000..2883d53d8
--- /dev/null
+++ b/docs/ja/docs/advanced/middleware.md
@@ -0,0 +1,97 @@
+# é«åºŠãªããã«ãŠã§ã¢ { #advanced-middleware }
+
+ã¡ã€ã³ã®ãã¥ãŒããªã¢ã«ã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã«[ã«ã¹ã¿ã ããã«ãŠã§ã¢](../tutorial/middleware.md){.internal-link target=_blank}ã远å ããæ¹æ³ãåŠã³ãŸããã
+
+ãããŠã[`CORSMiddleware` ã䜿ã£ã CORS ã®æ±ãæ¹](../tutorial/cors.md){.internal-link target=_blank}ãåŠã³ãŸããã
+
+ãã®ã»ã¯ã·ã§ã³ã§ã¯ããã®ä»ã®ããã«ãŠã§ã¢ã®äœ¿ãæ¹ãèŠãŠãããŸãã
+
+## ASGI ããã«ãŠã§ã¢ã®è¿œå { #adding-asgi-middlewares }
+
+**FastAPI** 㯠Starlette ãåºç€ãšããŠãããASGI 仿§ãå®è£
ããŠãããããä»»æã® ASGI ããã«ãŠã§ã¢ãå©çšã§ããŸãã
+
+ããã«ãŠã§ã¢ã¯ ASGI 仿§ã«åŸã£ãŠããã°ãFastAPI ã Starlette å°çšã«äœãããŠããªããŠãåäœããŸãã
+
+äžè¬ã«ãASGI ããã«ãŠã§ã¢ã¯æåã®åŒæ°ãšã㊠ASGI ã¢ããªãåãåãã¯ã©ã¹ã§ãã
+
+ãã®ããããµãŒãããŒãã£ã® ASGI ããã«ãŠã§ã¢ã®ããã¥ã¡ã³ãã§ã¯ãããããæ¬¡ã®ããã«æžãããŠããã§ããã:
+
+```Python
+from unicorn import UnicornMiddleware
+
+app = SomeASGIApp()
+
+new_app = UnicornMiddleware(app, some_config="rainbow")
+```
+
+ããã FastAPIïŒæ£ç¢ºã«ã¯ StarletteïŒã¯ãå
éšããã«ãŠã§ã¢ããµãŒããŒãšã©ãŒãåŠçããã«ã¹ã¿ã äŸå€ãã³ãã©ãæ£ããåäœããããšãä¿èšŒãããããç°¡åãªæ¹æ³ãæäŸããŠããŸãã
+
+ãã®ããã«ã¯ïŒCORS ã®äŸãšåæ§ã«ïŒ`app.add_middleware()` ã䜿ããŸãã
+
+```Python
+from fastapi import FastAPI
+from unicorn import UnicornMiddleware
+
+app = FastAPI()
+
+app.add_middleware(UnicornMiddleware, some_config="rainbow")
+```
+
+`app.add_middleware()` ã¯ãæåã®åŒæ°ã«ããã«ãŠã§ã¢ã®ã¯ã©ã¹ãåãããã以å€ã®è¿œå åŒæ°ã¯ããã«ãŠã§ã¢ã«æž¡ãããŸãã
+
+## çµã¿èŸŒã¿ããã«ãŠã§ã¢ { #integrated-middlewares }
+
+**FastAPI** ã¯äžè¬çãªãŠãŒã¹ã±ãŒã¹ã«å¯Ÿå¿ããããã€ãã®ããã«ãŠã§ã¢ãå«ãã§ããŸãã以äžã§ãã®äœ¿ãæ¹ãèŠãŠãããŸãã
+
+/// note | æè¡è©³çް
+
+以äžã®äŸã§ã¯ã`from starlette.middleware.something import SomethingMiddleware` ã䜿ãããšãã§ããŸãã
+
+**FastAPI** ã¯éçºè
ã§ããããªãã®äŸ¿å®ã®ããã« `fastapi.middleware` ã«ããã€ãã®ããã«ãŠã§ã¢ãæäŸããŠããŸããããããå©çšå¯èœãªããã«ãŠã§ã¢ã®å€ã㯠Starlette ããçŽæ¥æäŸãããŠããŸãã
+
+///
+
+## `HTTPSRedirectMiddleware` { #httpsredirectmiddleware }
+
+ãã¹ãŠã®åä¿¡ãªã¯ãšã¹ãã `https` ãŸã㯠`wss` ã§ãªããã°ãªããªãããã«åŒ·å¶ããŸãã
+
+`http` ãŸã㯠`ws` ãžã®åä¿¡ãªã¯ãšã¹ãã¯ãå®å
šãªã¹ããŒã ã«ãªãã€ã¬ã¯ããããŸãã
+
+{* ../../docs_src/advanced_middleware/tutorial001_py310.py hl[2,6] *}
+
+## `TrustedHostMiddleware` { #trustedhostmiddleware }
+
+HTTP Host Header æ»æãé²ãããããã¹ãŠã®åä¿¡ãªã¯ãšã¹ãã«æ£ããèšå®ããã `Host` ããããŒã匷å¶ããŸãã
+
+{* ../../docs_src/advanced_middleware/tutorial002_py310.py hl[2,6:8] *}
+
+ãµããŒããããåŒæ°ã¯æ¬¡ã®ãšããã§ã:
+
+- `allowed_hosts` - èš±å¯ãããã¹ãåã®ãã¡ã€ã³åãªã¹ãã`*.example.com` ã®ãããªã¯ã€ã«ãã«ãŒããã¡ã€ã³ã§ãµããã¡ã€ã³ã®ãããã³ã°ããµããŒãããŸããä»»æã®ãã¹ãåãèš±å¯ããã«ã¯ã`allowed_hosts=["*"]` ã䜿ããããã®ããã«ãŠã§ã¢ãçç¥ããŸãã
+- `www_redirect` - True ã«èšå®ãããšãèš±å¯ããããã¹ãã®é www çãžã®ãªã¯ãšã¹ãã www çãžãªãã€ã¬ã¯ãããŸããããã©ã«ã㯠`True` ã§ãã
+
+åä¿¡ãªã¯ãšã¹ããæ£ããæ€èšŒãããªãå Žåã`400` ã®ã¬ã¹ãã³ã¹ãè¿ãããŸãã
+
+## `GZipMiddleware` { #gzipmiddleware }
+
+`Accept-Encoding` ããããŒã« "gzip" ãå«ããªã¯ãšã¹ãã«å¯Ÿã㊠GZip ã¬ã¹ãã³ã¹ãåŠçããŸãã
+
+ãã®ããã«ãŠã§ã¢ã¯ãéåžžã®ã¬ã¹ãã³ã¹ãšã¹ããªãŒãã³ã°ã¬ã¹ãã³ã¹ã®äž¡æ¹ãåŠçããŸãã
+
+{* ../../docs_src/advanced_middleware/tutorial003_py310.py hl[2,6] *}
+
+ãµããŒããããåŒæ°ã¯æ¬¡ã®ãšããã§ã:
+
+- `minimum_size` - ãã®ãã€ãæ°ã®æå°ãµã€ãºæªæºã®ã¬ã¹ãã³ã¹ã¯ GZip å§çž®ããŸãããããã©ã«ã㯠`500` ã§ãã
+- `compresslevel` - GZip å§çž®æã«äœ¿çšããŸãã1 ãã 9 ãŸã§ã®æŽæ°ã§ããããã©ã«ã㯠`9`ãå€ãå°ããã»ã©å§çž®ã¯éããªããŸãããã¡ã€ã«ãµã€ãºã¯å€§ãããªããå€ã倧ããã»ã©å§çž®ã¯é
ããªããŸãããã¡ã€ã«ãµã€ãºã¯å°ãããªããŸãã
+
+## ãã®ä»ã®ããã«ãŠã§ã¢ { #other-middlewares }
+
+ä»ã«ãå€ãã® ASGI ããã«ãŠã§ã¢ããããŸãã
+
+äŸãã°:
+
+- Uvicorn ã® `ProxyHeadersMiddleware`
+- MessagePack
+
+ä»ã«å©çšå¯èœãªããã«ãŠã§ã¢ã«ã€ããŠã¯ãStarlette ã®ããã«ãŠã§ã¢ããã¥ã¡ã³ãã ASGI Awesome List ãåç
§ããŠãã ããã
diff --git a/docs/ja/docs/advanced/openapi-callbacks.md b/docs/ja/docs/advanced/openapi-callbacks.md
new file mode 100644
index 000000000..283a80b21
--- /dev/null
+++ b/docs/ja/docs/advanced/openapi-callbacks.md
@@ -0,0 +1,186 @@
+# OpenAPI ã³ãŒã«ãã㯠{ #openapi-callbacks }
+
+ããªãã¯ã*path operation* ãæã€ API ãäœæããä»è
ïŒå€ãã®å Žåãããªãã® API ããå©çšãããåäžã®éçºè
ïŒãäœæãã *å€éš API* ãžãªã¯ãšã¹ããããªã¬ãŒã§ããããã«ã§ããŸãã
+
+ããªãã® API ã¢ããªã *å€éš API* ãåŒã³åºããšãã«èµ·ããåŠçã¯ãã³ãŒã«ããã¯ããšåŒã°ããŸãããªããªããå€éšéçºè
ãäœæãããœãããŠã§ã¢ãããªãã® API ã«ãªã¯ãšã¹ããéãããã®åŸã§ããªãã® API ããåŒã³è¿ããã*å€éš API*ïŒããããåãéçºè
ãäœæïŒãžãªã¯ãšã¹ããéãããã§ãã
+
+ãã®å Žåããã® *å€éš API* ãã©ã®ããã§ãããã¹ããããããã¥ã¡ã³ãåããããªãã§ããããã©ã㪠*path operation* ãæã¡ãã©ããªããã£ãåãåããã©ããªã¬ã¹ãã³ã¹ãè¿ããããªã©ã§ãã
+
+## ã³ãŒã«ããã¯ã®ããã¢ã㪠{ #an-app-with-callbacks }
+
+äŸã§èŠãŠãããŸãã
+
+ããªããè«æ±æžãäœæã§ããã¢ããªãéçºããŠãããšæ³åããŠãã ããã
+
+ãããã®è«æ±æžã¯ `id`ã`title`ïŒä»»æïŒã`customer`ã`total` ãæã¡ãŸãã
+
+ããªãã® API ã®å©çšè
ïŒå€éšéçºè
ïŒã¯ãPOST ãªã¯ãšã¹ãã§ããªãã® API ã«è«æ±æžãäœæããŸãã
+
+ãã®åŸãããªãã® API ã¯ïŒä»®ã«ããããŸãããïŒ:
+
+* å€éšéçºè
ã®é¡§å®¢ã«è«æ±æžãéããŸãã
+* 代éãååããŸãã
+* API å©çšè
ïŒå€éšéçºè
ïŒã«éç¥ãéãè¿ããŸãã
+ * ããã¯ïŒããªãã® API ããïŒå€éšéçºè
ãæäŸãã *å€éš API* ã« POST ãªã¯ãšã¹ããéãããšã§è¡ãããŸãïŒããããã³ãŒã«ããã¯ãã§ãïŒã
+
+## éåžžã® FastAPI ã¢ã㪠{ #the-normal-fastapi-app }
+
+ãŸããã³ãŒã«ããã¯ã远å ããåã®éåžžã® API ã¢ããªãã©ããªããèŠãŠã¿ãŸãããã
+
+`Invoice` ããã£ãåãåããã¯ãšãªãã©ã¡ãŒã¿ `callback_url` ã«ã³ãŒã«ããã¯çšã® URL ãå«ãã *path operation* ãæã¡ãŸãã
+
+ãã®éšåã¯ãšãŠãæ®éã§ãã»ãšãã©ã®ã³ãŒãã¯ãã§ã«èŠèŠããããã¯ãã§ã:
+
+{* ../../docs_src/openapi_callbacks/tutorial001_py310.py hl[7:11,34:51] *}
+
+/// tip | è±ç¥è
+
+`callback_url` ã¯ãšãªãã©ã¡ãŒã¿ã¯ãPydantic ã® Url åã䜿çšããŸãã
+
+///
+
+å¯äžã®æ°ããç¹ã¯ã*path operation ãã³ã¬ãŒã¿*ã®åŒæ°ãšã㊠`callbacks=invoices_callback_router.routes` ãæž¡ãããšã§ãããããäœãã¯æ¬¡ã§èŠãŸãã
+
+## ã³ãŒã«ããã¯ã®ããã¥ã¡ã³ãå { #documenting-the-callback }
+
+å®éã®ã³ãŒã«ããã¯ã®ã³ãŒãã¯ãããªãèªèº«ã® API ã¢ããªã«å€§ããäŸåããŸãã
+
+ãããŠã¢ããªããšã«å€§ããç°ãªãã§ãããã
+
+ããã¯æ¬¡ã®ããã« 1ã2 è¡ã®ã³ãŒããããããŸãã:
+
+```Python
+callback_url = "https://example.com/api/v1/invoices/events/"
+httpx.post(callback_url, json={"description": "Invoice paid", "paid": True})
+```
+
+ããããããããã³ãŒã«ããã¯ã§æãéèŠãªç¹ã¯ãããªãã® API å©çšè
ïŒå€éšéçºè
ïŒãã*ããªãã® API* ãã³ãŒã«ããã¯ã®ãªã¯ãšã¹ãããã£ãªã©ã§éãããŒã¿ã«åŸã£ãŠã*å€éš API* ãæ£ããå®è£
ããããšã確å®ã«ããããšã§ãã
+
+ããã§æ¬¡ã«è¡ãã®ã¯ã*ããªãã® API* ããã®ã³ãŒã«ããã¯ãåãåãããã«ããã® *å€éš API* ãã©ãããã¹ãããããã¥ã¡ã³ãåããã³ãŒãã远å ããããšã§ãã
+
+ãã®ããã¥ã¡ã³ãã¯ããªãã® API ã® `/docs` ã® Swagger UI ã«è¡šç€ºãããå€éšéçºè
ã« *å€éš API* ã®äœãæ¹ãç¥ãããŸãã
+
+ãã®äŸã§ã¯ã³ãŒã«ããã¯èªäœã¯å®è£
ããŸããïŒãã㯠1 è¡ã®ã³ãŒãã§ãããã§ãããïŒãããã¥ã¡ã³ãéšåã®ã¿ã§ãã
+
+/// tip | è±ç¥è
+
+å®éã®ã³ãŒã«ããã¯ã¯åãªã HTTP ãªã¯ãšã¹ãã§ãã
+
+èªåã§ã³ãŒã«ããã¯ãå®è£
ããå Žåã¯ãHTTPX ã Requests ã®ãããªãã®ã䜿ããŸãã
+
+///
+
+## ã³ãŒã«ããã¯ã®ããã¥ã¡ã³ãçšã³ãŒããæžã { #write-the-callback-documentation-code }
+
+ãã®ã³ãŒãã¯ããªãã®ã¢ããªã§å®è¡ãããŸããã*å€éš API* ãã©ãããã¹ãããããã¥ã¡ã³ãåããããã ãã«å¿
èŠã§ãã
+
+ããããããªãã¯ãã§ã« **FastAPI** ã§ API ã®èªåããã¥ã¡ã³ããç°¡åã«äœãæ¹æ³ãç¥ã£ãŠããŸãã
+
+ãã®ç¥èã䜿ã£ãŠã*å€éš API* ãã©ãããã¹ãããããã¥ã¡ã³ãåããŸãâŠâŠã€ãŸããå€éš API ãå®è£
ãã¹ã *path operation(s)*ïŒããªãã® API ãåŒã³åºããã®ïŒãäœæããŸãã
+
+/// tip | è±ç¥è
+
+ã³ãŒã«ããã¯ãããã¥ã¡ã³ãåããã³ãŒããæžããšãã¯ãããªãããã®ãå€éšéçºè
ãã ãšæ³åããã®ã圹ã«ç«ã€ãããããŸãããããŸå®è£
ããŠããã®ã¯ãããªãã® APIãã§ã¯ãªãã*å€éš API* ã§ãã
+
+ãã®ïŒå€éšéçºè
ã®ïŒèŠç¹ãäžæçã«æ¡çšãããšããã® *å€éš API* ã«å¯ŸããŠãã©ã¡ãŒã¿ãããã£çšã® Pydantic ã¢ãã«ãã¬ã¹ãã³ã¹ãªã©ãã©ãã«çœ®ãã®ãèªç¶ããããæç¢ºã«æããããã§ãããã
+
+///
+
+### ã³ãŒã«ããã¯çš APIRouter ãäœæ { #create-a-callback-apirouter }
+
+ãŸãã1 ã€ä»¥äžã®ã³ãŒã«ããã¯ãå«ãæ°ãã `APIRouter` ãäœæããŸãã
+
+{* ../../docs_src/openapi_callbacks/tutorial001_py310.py hl[1,23] *}
+
+### ã³ãŒã«ããã¯ã® path operation ãäœæ { #create-the-callback-path-operation }
+
+äžã§äœæããã®ãšåã `APIRouter` ã䜿ã£ãŠãã³ãŒã«ããã¯ã® *path operation* ãäœæããŸãã
+
+èŠãç®ã¯éåžžã® FastAPI ã® *path operation* ãšåãã§ã:
+
+* åãåãããã£ã®å®£èšïŒäŸ: `body: InvoiceEvent`ïŒãå¿
èŠã§ãããã
+* è¿ãã¬ã¹ãã³ã¹ã®å®£èšïŒäŸ: `response_model=InvoiceEventReceived`ïŒãæãŠãŸãã
+
+{* ../../docs_src/openapi_callbacks/tutorial001_py310.py hl[14:16,19:20,26:30] *}
+
+éåžžã® *path operation* ãšç°ãªãäž»ãªç¹ã 2 ã€ãããŸã:
+
+* å®éã®ã³ãŒãã¯äžèŠã§ããããªãã®ã¢ããªã¯ãã®ã³ãŒããæ±ºããŠåŒã³ãŸããããã㯠*å€éš API* ãããã¥ã¡ã³ãåããããã ãã«äœ¿ãããŸãããããã£ãŠã颿°æ¬äœã¯ `pass` ã§æ§ããŸããã
+* *ãã¹* ã«ã¯ã*ããªãã® API* ã«éãããå
ã®ãªã¯ãšã¹ãã®ãã©ã¡ãŒã¿ãäžéšã倿°ãšããŠäœ¿ãã OpenAPI 3 ã®åŒïŒåŸè¿°ïŒãå«ããããŸãã
+
+### ã³ãŒã«ããã¯ã®ãã¹åŒ { #the-callback-path-expression }
+
+ã³ãŒã«ããã¯ã® *ãã¹* ã«ã¯ã*ããªãã® API* ã«éãããå
ã®ãªã¯ãšã¹ãã®äžéšãå«ãããã OpenAPI 3 ã®åŒã䜿çšã§ããŸãã
+
+ãã®äŸã§ã¯ã`str` ã¯æ¬¡ã®ãšããã§ã:
+
+```Python
+"{$callback_url}/invoices/{$request.body.id}"
+```
+
+ã€ãŸããããªãã® API å©çšè
ïŒå€éšéçºè
ïŒã *ããªãã® API* ã«æ¬¡ã®ããã«ãªã¯ãšã¹ããéã£ãå Žå:
+
+```
+https://yourapi.com/invoices/?callback_url=https://www.external.org/events
+```
+
+JSON ããã£ã¯:
+
+```JSON
+{
+ "id": "2expen51ve",
+ "customer": "Mr. Richie Rich",
+ "total": "9999"
+}
+```
+
+ãã®åŸ *ããªãã® API* ã¯è«æ±æžãåŠçããã®ã¡ã»ã© `callback_url`ïŒ*å€éš API*ïŒãžã³ãŒã«ããã¯ã®ãªã¯ãšã¹ããéããŸã:
+
+```
+https://www.external.org/events/invoices/2expen51ve
+```
+
+JSON ããã£ã¯æ¬¡ã®ãããªå
容ã§ã:
+
+```JSON
+{
+ "description": "Payment celebration",
+ "paid": true
+}
+```
+
+ãã㊠*å€éš API* ããã¯æ¬¡ã®ãã㪠JSON ããã£ã®ã¬ã¹ãã³ã¹ãæåŸ
ããŸã:
+
+```JSON
+{
+ "ok": true
+}
+```
+
+/// tip | è±ç¥è
+
+䜿çšãããã³ãŒã«ãã㯠URL ã«ã¯ãã¯ãšãªãã©ã¡ãŒã¿ `callback_url`ïŒ`https://www.external.org/events`ïŒã§åãåã£ã URL ãšãJSON ããã£å
ã®è«æ±æž `id`ïŒ`2expen51ve`ïŒãå«ãŸããŠããç¹ã«æ³šç®ããŠãã ããã
+
+///
+
+### ã³ãŒã«ããã¯çšã«ãŒã¿ãŒã远å { #add-the-callback-router }
+
+ããã§ãäžã§äœæããã³ãŒã«ããã¯çšã«ãŒã¿ãŒå
ã«ãå¿
èŠãªã³ãŒã«ããã¯ã® *path operation(s)*ïŒ*å€éšéçºè
* ã *å€éš API* ã«å®è£
ãã¹ããã®ïŒãçšæã§ããŸããã
+
+次ã«ã*ããªãã® API ã® path operation ãã³ã¬ãŒã¿*ã® `callbacks` ãã©ã¡ãŒã¿ã«ããã®ã³ãŒã«ããã¯çšã«ãŒã¿ãŒã®å±æ§ `.routes`ïŒå®äœã¯ã«ãŒã/*path operations* ã® `list`ïŒãæž¡ããŸã:
+
+{* ../../docs_src/openapi_callbacks/tutorial001_py310.py hl[33] *}
+
+/// tip | è±ç¥è
+
+`callback=` ã«æž¡ãã®ã¯ã«ãŒã¿ãŒæ¬äœïŒ`invoices_callback_router`ïŒã§ã¯ãªãã屿§ `.routes`ïŒ`invoices_callback_router.routes`ïŒã§ããç¹ã«æ³šæããŠãã ããã
+
+///
+
+### ããã¥ã¡ã³ããç¢ºèª { #check-the-docs }
+
+ã¢ããªãèµ·åã㊠http://127.0.0.1:8000/docs ã«ã¢ã¯ã»ã¹ããŸãã
+
+ããªãã® *path operation* ã«ãCallbacksãã»ã¯ã·ã§ã³ãå«ãŸãã*å€éš API* ãã©ãããã¹ããã衚瀺ãããŠããã®ã確èªã§ããŸã:
+
+
diff --git a/docs/ja/docs/advanced/openapi-webhooks.md b/docs/ja/docs/advanced/openapi-webhooks.md
new file mode 100644
index 000000000..368cfddd8
--- /dev/null
+++ b/docs/ja/docs/advanced/openapi-webhooks.md
@@ -0,0 +1,55 @@
+# OpenAPI ã® Webhook { #openapi-webhooks }
+
+ã¢ããªãããçš®ã®**ã€ãã³ã**ã**éç¥**ããããã«ãããŒã¿ä»ãã§çžæã®ã¢ããªïŒãªã¯ãšã¹ãéä¿¡ïŒãåŒã³åºãå¯èœæ§ãããããšããAPI ã®**ãŠãŒã¶ãŒ**ã«äŒãããå ŽåããããŸãã
+
+ããã¯ãéåžžã®ããã«ãŠãŒã¶ãŒãããªãã® API ã«ãªã¯ãšã¹ããéãã®ã§ã¯ãªãã**ããªãã® APIïŒããªãã®ã¢ããªïŒ**ã**çžæã®ã·ã¹ãã **ïŒçžæã® APIãã¢ããªïŒã«ãªã¯ãšã¹ããéãããšããããšã§ãã
+
+ããã¯äžè¬ã«**Webhook**ãšåŒã°ããŸãã
+
+## Webhook ã®æé { #webhooks-steps }
+
+éåžžã®æµããšããŠããŸãããªãã®ã³ãŒãå
ã§ãéä¿¡ããã¡ãã»ãŒãžãããªãã¡ãªã¯ãšã¹ãã®**æ¬æïŒããã£ïŒ**ã**å®çŸ©**ããŸãã
+
+å ããŠãã¢ããªããããã®ãªã¯ãšã¹ãïŒã€ãã³ãïŒãéä¿¡ãã**ã¿ã€ãã³ã°**ãäœããã®åœ¢ã§å®çŸ©ããŸãã
+
+ãããŠ**ãŠãŒã¶ãŒ**ã¯ãã¢ããªããã®ãªã¯ãšã¹ããéãã¹ã**URL**ãïŒããšãã°ã©ããã® Web ããã·ã¥ããŒãã§ïŒå®çŸ©ããŸãã
+
+Webhook ã® URL ãç»é²ããæ¹æ³ãå®éã«ãªã¯ãšã¹ããéãã³ãŒããªã©ããããã®**ããžãã¯**ã¯ãã¹ãŠããªã次第ã§ãã**ããªãèªèº«ã®ã³ãŒã**ã§å¥œããªããã«å®è£
ããŸãã
+
+## FastAPI ãš OpenAPI ã«ãã Webhook ã®ããã¥ã¡ã³ãå { #documenting-webhooks-with-fastapi-and-openapi }
+
+**FastAPI** ãš OpenAPI ã䜿ããšãWebhook ã®ååãã¢ããªãéä¿¡ã§ãã HTTP ã®æäœïŒäŸ: `POST`, `PUT` ãªã©ïŒãã¢ããªãéããªã¯ãšã¹ãã®**ããã£**ãå®çŸ©ã§ããŸãã
+
+ããã«ããããŠãŒã¶ãŒãããªãã® **Webhook** ãªã¯ãšã¹ããåãåãããã®**API ãå®è£
**ããã®ã倧å¹
ã«ç°¡åã«ãªããŸããå Žåã«ãã£ãŠã¯ããŠãŒã¶ãŒãèªåãã¡ã® API ã³ãŒããèªåçæã§ãããããããŸããã
+
+/// info | æ
å ±
+
+Webhook 㯠OpenAPI 3.1.0 以äžã§å©çšå¯èœã§ãFastAPI `0.99.0` 以äžã察å¿ããŠããŸãã
+
+///
+
+## Webhook ãæã€ã¢ã㪠{ #an-app-with-webhooks }
+
+**FastAPI** ã¢ããªã±ãŒã·ã§ã³ãäœæãããšã`webhooks` ãšãã屿§ããããããã§ *path operations* ãšåæ§ã«ïŒäŸ: `@app.webhooks.post()`ïŒ*webhook* ãå®çŸ©ã§ããŸãã
+
+{* ../../docs_src/openapi_webhooks/tutorial001_py310.py hl[9:12,15:20] *}
+
+å®çŸ©ãã webhook 㯠**OpenAPI** ã¹ããŒãããã³èªåçæããã **ããã¥ã¡ã³ã UI** ã«åæ ãããŸãã
+
+/// info | æ
å ±
+
+`app.webhooks` ãªããžã§ã¯ãã¯å®éã«ã¯åãªã `APIRouter` ã§ãè€æ°ãã¡ã€ã«ã§ã¢ããªãæ§æããéã«äœ¿ããã®ãšåãåã§ãã
+
+///
+
+Webhook ã§ã¯ïŒ`/items/` ã®ãããªïŒ*ãã¹*ã宣èšããŠããããã§ã¯ãªãç¹ã«æ³šæããŠãã ãããããã§æž¡ãæåå㯠webhook ã®**èå¥å**ïŒã€ãã³ãåïŒã§ããããšãã° `@app.webhooks.post("new-subscription")` ã§ã® webhook å㯠`new-subscription` ã§ãã
+
+ããã¯ã**ãŠãŒã¶ãŒ**ãå®éã« Webhook ãªã¯ãšã¹ããåãåããã**URL ãã¹**ããå¥ã®æ¹æ³ïŒäŸ: Web ããã·ã¥ããŒãïŒã§å®çŸ©ããããšãæ³å®ããŠããããã§ãã
+
+### ããã¥ã¡ã³ãã®ç¢ºèª { #check-the-docs }
+
+ã¢ããªãèµ·åããhttp://127.0.0.1:8000/docs ã«ã¢ã¯ã»ã¹ããŸãã
+
+ããã¥ã¡ã³ãã«ã¯éåžžã® *path operations* ã«å ããŠã**webhooks** ã衚瀺ãããŸã:
+
+
diff --git a/docs/ja/docs/advanced/path-operation-advanced-configuration.md b/docs/ja/docs/advanced/path-operation-advanced-configuration.md
index a78c3cb02..f7e340617 100644
--- a/docs/ja/docs/advanced/path-operation-advanced-configuration.md
+++ b/docs/ja/docs/advanced/path-operation-advanced-configuration.md
@@ -12,7 +12,7 @@ OpenAPIã®ããšãã¹ããŒããã§ãªããã°ãããã¯ããããå¿
èŠ
åãªãã¬ãŒã·ã§ã³ã§äžæã«ãªãããã«ããå¿
èŠããããŸãã
-{* ../../docs_src/path_operation_advanced_configuration/tutorial001_py39.py hl[6] *}
+{* ../../docs_src/path_operation_advanced_configuration/tutorial001_py310.py hl[6] *}
### *path operation颿°* ã®ååãoperationIdãšããŠäœ¿çšãã { #using-the-path-operation-function-name-as-the-operationid }
@@ -20,7 +20,7 @@ APIã®é¢æ°åã `operationId` ãšããŠå©çšãããå Žåããã¹ãŠã®AP
ãã¹ãŠã® *path operation* ã远å ããåŸã«è¡ãã¹ãã§ãã
-{* ../../docs_src/path_operation_advanced_configuration/tutorial002_py39.py hl[2, 12:21, 24] *}
+{* ../../docs_src/path_operation_advanced_configuration/tutorial002_py310.py hl[2, 12:21, 24] *}
/// tip | è±ç¥è
@@ -40,7 +40,7 @@ APIã®é¢æ°åã `operationId` ãšããŠå©çšãããå Žåããã¹ãŠã®AP
çæãããOpenAPIã¹ããŒãïŒã€ãŸããèªåããã¥ã¡ã³ãçæã®ä»çµã¿ïŒãã *path operation* ãé€å€ããã«ã¯ã`include_in_schema` ãã©ã¡ãŒã¿ã䜿çšã㊠`False` ã«èšå®ããŸãã
-{* ../../docs_src/path_operation_advanced_configuration/tutorial003_py39.py hl[6] *}
+{* ../../docs_src/path_operation_advanced_configuration/tutorial003_py310.py hl[6] *}
## docstringã«ãã説æã®é«åºŠãªèšå® { #advanced-description-from-docstring }
@@ -92,7 +92,7 @@ OpenAPI仿§ã§ã¯ parsed ããããçŽæ¥ `bytes` ãšããŠèªã¿åãããŸãããã㊠`magic_data_reader()` 颿°ããäœããã®æ¹æ³ã§ãããããŒã¹ãã責åãæ
ããŸãã
+ãã®äŸã§ã¯ãPydanticã¢ãã«ãäžå宣èšããŠããŸãããå®éããªã¯ãšã¹ãããã£ã¯JSONãšã㊠ããŒã¹ ããããçŽæ¥ `bytes` ãšããŠèªã¿åãããŸãããã㊠`magic_data_reader()` 颿°ããäœããã®æ¹æ³ã§ãããããŒã¹ãã責åãæ
ããŸãã
ããã§ãããªã¯ãšã¹ãããã£ã«æåŸ
ãããã¹ããŒãã宣èšã§ããŸãã
@@ -153,7 +153,7 @@ OpenAPI仿§ã§ã¯ Starlette ã®ããã¥ã¡ã³ããåç
§ããŠãã ããã
diff --git a/docs/ja/docs/advanced/response-directly.md b/docs/ja/docs/advanced/response-directly.md
index 7e83b9ffb..103e84c38 100644
--- a/docs/ja/docs/advanced/response-directly.md
+++ b/docs/ja/docs/advanced/response-directly.md
@@ -54,7 +54,7 @@
XMLãæååã«ãã`Response` ã«å«ãããããè¿ããŸãã
-{* ../../docs_src/response_directly/tutorial002_py39.py hl[1,18] *}
+{* ../../docs_src/response_directly/tutorial002_py310.py hl[1,18] *}
## åè { #notes }
diff --git a/docs/ja/docs/advanced/response-headers.md b/docs/ja/docs/advanced/response-headers.md
new file mode 100644
index 000000000..10aec7845
--- /dev/null
+++ b/docs/ja/docs/advanced/response-headers.md
@@ -0,0 +1,41 @@
+# ã¬ã¹ãã³ã¹ããã㌠{ #response-headers }
+
+## `Response` ãã©ã¡ãŒã¿ã䜿ã { #use-a-response-parameter }
+
+ïŒCookie ãšåæ§ã«ïŒ*path operation 颿°*ã§ `Response` åã®ãã©ã¡ãŒã¿ã宣èšã§ããŸãã
+
+ãããŠããã®*äžæç*ãªã¬ã¹ãã³ã¹ãªããžã§ã¯ãã«ããããŒãèšå®ã§ããŸãã
+
+{* ../../docs_src/response_headers/tutorial002_py310.py hl[1, 7:8] *}
+
+ãã®åŸã¯éåžžã©ãããå¿
èŠãªä»»æã®ãªããžã§ã¯ãïŒ`dict`ãããŒã¿ããŒã¹ã¢ãã«ãªã©ïŒãè¿ããŸãã
+
+`response_model` ã宣èšããŠããå Žåã¯ãè¿ãããªããžã§ã¯ãã®ãã£ã«ã¿ãšå€æã«åŒãç¶ã䜿çšãããŸãã
+
+**FastAPI** ã¯ãã®*äžæç*ãªã¬ã¹ãã³ã¹ããããããŒïŒCookie ãã¹ããŒã¿ã¹ã³ãŒããå«ãïŒãåãåºãã`response_model` ã«ãã£ãŠãã£ã«ã¿ãããè¿åŽå€ãå«ãæçµçãªã¬ã¹ãã³ã¹ã«åæ ããŸãã
+
+ãŸããäŸåé¢ä¿ã®äžã§ `Response` ãã©ã¡ãŒã¿ã宣èšãããã®äžã§ããããŒïŒã CookieïŒãèšå®ããããšãã§ããŸãã
+
+## `Response` ãçŽæ¥è¿ã { #return-a-response-directly }
+
+`Response` ãçŽæ¥è¿ãå Žåã«ãããããŒã远å ã§ããŸãã
+
+[Response ãçŽæ¥è¿ã](response-directly.md){.internal-link target=_blank} ã§èª¬æããããã«ã¬ã¹ãã³ã¹ãäœæããããããŒã远å ã®ãã©ã¡ãŒã¿ãšããŠæž¡ããŸã:
+
+{* ../../docs_src/response_headers/tutorial001_py310.py hl[10:12] *}
+
+/// note | æè¡è©³çް
+
+`from starlette.responses import Response` ã `from starlette.responses import JSONResponse` ã䜿ãããšãã§ããŸãã
+
+**FastAPI** ã¯ãéçºè
ã§ããããªããžã®äŸ¿å®ãšããŠã`starlette.responses` ãšåããã®ã `fastapi.responses` ãšããŠæäŸããŠããŸããããããå©çšå¯èœãªã¬ã¹ãã³ã¹ã®å€§åã¯çŽæ¥ Starlette ããæ¥ãŠããŸãã
+
+ãŸãã`Response` ã¯ããããŒã Cookie ãèšå®ããã®ã«ãã䜿ãããããã**FastAPI** 㯠`fastapi.Response` ã§ãæäŸããŠããŸãã
+
+///
+
+## ã«ã¹ã¿ã ããã㌠{ #custom-headers }
+
+ç¬èªã®ã«ã¹ã¿ã ããããŒã¯ã`X-` ãã¬ãã£ãã¯ã¹ã䜿ã£ãŠè¿œå ã§ããããšã«æ³šæããŠãã ããã
+
+ãã ãããã©ãŠã¶ã®ã¯ã©ã€ã¢ã³ãã«èŠããããã«ãããã«ã¹ã¿ã ããããŒãããå Žåã¯ãCORS èšå®ã«ãããã远å ããå¿
èŠããããŸãïŒ[CORS (Cross-Origin Resource Sharing)](../tutorial/cors.md){.internal-link target=_blank} ãåç
§ïŒããã®ãšããStarlette ã® CORS ããã¥ã¡ã³ãã«èšèŒã® `expose_headers` ãã©ã¡ãŒã¿ã䜿çšããŸãã
diff --git a/docs/ja/docs/advanced/security/http-basic-auth.md b/docs/ja/docs/advanced/security/http-basic-auth.md
new file mode 100644
index 000000000..7ee56a039
--- /dev/null
+++ b/docs/ja/docs/advanced/security/http-basic-auth.md
@@ -0,0 +1,107 @@
+# HTTP Basic èªèšŒ { #http-basic-auth }
+
+æãã·ã³ãã«ãªã±ãŒã¹ã§ã¯ãHTTP Basic èªèšŒãå©çšã§ããŸãã
+
+HTTP Basic èªèšŒã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã¯ãŠãŒã¶ãŒåãšãã¹ã¯ãŒããå«ãããããŒãæåŸ
ããŸãã
+
+ãããåãåããªãå ŽåãHTTP 401 "Unauthorized" ãšã©ãŒãè¿ããŸãã
+
+ãããŠãå€ã `Basic` ã®ããã㌠`WWW-Authenticate` ããä»»æã® `realm` ãã©ã¡ãŒã¿ãšãšãã«è¿ããŸãã
+
+ããã«ããããã©ãŠã¶ã¯çµã¿èŸŒã¿ã®ãŠãŒã¶ãŒåãšãã¹ã¯ãŒãå
¥åããã³ããã衚瀺ããŸãã
+
+ãã®åŸããã®ãŠãŒã¶ãŒåãšãã¹ã¯ãŒããå
¥åãããšããã©ãŠã¶ã¯ããããããããŒã«èªåçã«ä»äžããŠéä¿¡ããŸãã
+
+## ã·ã³ãã«ãª HTTP Basic èªèšŒ { #simple-http-basic-auth }
+
+- `HTTPBasic` ãš `HTTPBasicCredentials` ãã€ã³ããŒãããŸãã
+- `HTTPBasic` ã䜿ã£ãŠã`security` ã¹ããŒã ããäœæããŸãã
+- ãã® `security` ãäŸåé¢ä¿ãšã㊠path operation ã«äœ¿çšããŸãã
+- `HTTPBasicCredentials` åã®ãªããžã§ã¯ããè¿ããŸã:
+ - éä¿¡ããã `username` ãš `password` ãå«ã¿ãŸãã
+
+{* ../../docs_src/security/tutorial006_an_py310.py hl[4,8,12] *}
+
+URL ãæåã«éãããšãããšãïŒãŸãã¯ããã¥ã¡ã³ãã§ãExecuteããã¿ã³ãã¯ãªãã¯ãããšãïŒããã©ãŠã¶ã¯ãŠãŒã¶ãŒåãšãã¹ã¯ãŒãã®å
¥åãæ±ããŸã:
+
+
+
+## ãŠãŒã¶ãŒåã®ç¢ºèª { #check-the-username }
+
+ããå®å
šãªäŸã§ãã
+
+äŸåé¢ä¿ã䜿ã£ãŠãŠãŒã¶ãŒåãšãã¹ã¯ãŒããæ£ãããã確èªããŸãã
+
+ããã«ã¯ãPython æšæºã¢ãžã¥ãŒã« `secrets` ãçšããŠãŠãŒã¶ãŒåãšãã¹ã¯ãŒããæ€èšŒããŸãã
+
+`secrets.compare_digest()` 㯠`bytes` ããASCII æåïŒè±èªã®æåïŒã®ã¿ãå«ã `str` ãåãåãå¿
èŠããããŸããã€ãŸãã`Sebastián` ã®ããã« `á` ãå«ãæåã§ã¯ãã®ãŸãŸã§ã¯åäœããŸããã
+
+ããã«å¯ŸåŠããããããŸã `username` ãš `password` ã UTF-8 ã§ãšã³ã³ãŒãã㊠`bytes` ã«å€æããŸãã
+
+ãã®ããã§ã`secrets.compare_digest()` ã䜿ã£ãŠã`credentials.username` ã `"stanleyjobson"` ã§ããã`credentials.password` ã `"swordfish"` ã§ããããšã確èªããŸãã
+
+{* ../../docs_src/security/tutorial007_an_py310.py hl[1,12:24] *}
+
+ããã¯æ¬¡ã®ãããªã³ãŒãã«çžåœããŸã:
+
+```Python
+if not (credentials.username == "stanleyjobson") or not (credentials.password == "swordfish"):
+ # Return some error
+ ...
+```
+
+ããã `secrets.compare_digest()` ã䜿ãããšã§ããã¿ã€ãã³ã°æ»æããšåŒã°ããçš®é¡ã®æ»æã«å¯ŸããŠå®å
šã«ãªããŸãã
+
+### ã¿ã€ãã³ã°æ»æ { #timing-attacks }
+
+ãã¿ã€ãã³ã°æ»æããšã¯äœã§ããããïŒ
+
+æ»æè
ããŠãŒã¶ãŒåãšãã¹ã¯ãŒããæšæž¬ããããšããŠãããšæ³åããŠãã ããã
+
+ãããŠããŠãŒã¶ãŒå `johndoe`ããã¹ã¯ãŒã `love123` ã䜿ã£ãŠãªã¯ãšã¹ããéããŸãã
+
+ãã®å Žåãã¢ããªã±ãŒã·ã§ã³å
ã® Python ã³ãŒãã¯æ¬¡ã®ãããªãã®ãšç䟡ã«ãªããŸã:
+
+```Python
+if "johndoe" == "stanleyjobson" and "love123" == "swordfish":
+ ...
+```
+
+ããããPython 㯠`johndoe` ã®æåã® `j` ãš `stanleyjobson` ã®æåã® `s` ãæ¯èŒããæç¹ã§ãäž¡è
ã®æååãåãã§ãªããšå€æããŠããã« `False` ãè¿ããŸããã€ãŸããæ®ãã®æåãæ¯èŒããŠèšç®è³æºãç¡é§ã«ããå¿
èŠã¯ãªãããšèããããã§ãããããŠã¢ããªã±ãŒã·ã§ã³ã¯ããŠãŒã¶ãŒåãŸãã¯ãã¹ã¯ãŒããæ£ãããããŸããããšè¿ããŸãã
+
+次ã«ãæ»æè
ããŠãŒã¶ãŒå `stanleyjobsox`ããã¹ã¯ãŒã `love123` ã§è©ŠããšããŸãã
+
+ã¢ããªã±ãŒã·ã§ã³ã®ã³ãŒãã¯æ¬¡ã®ããã«ãªããŸã:
+
+```Python
+if "stanleyjobsox" == "stanleyjobson" and "love123" == "swordfish":
+ ...
+```
+
+ãã®å ŽåãPython 㯠`stanleyjobsox` ãš `stanleyjobson` ã®äž¡æ¹ã§ `stanleyjobso` å
šäœãæ¯èŒããŠãããæååãåãã§ãªããšæ°ã¥ããŸãããããã£ãŠãããŠãŒã¶ãŒåãŸãã¯ãã¹ã¯ãŒããæ£ãããããŸããããšå¿çãããŸã§ã«äœåã«æ°ãã€ã¯ãç§ããããŸãã
+
+#### å¿çæéãæ»æè
ãå©ãã { #the-time-to-answer-helps-the-attackers }
+
+ããã§ããµãŒããŒãããŠãŒã¶ãŒåãŸãã¯ãã¹ã¯ãŒããæ£ãããããŸããããšããã¬ã¹ãã³ã¹ãè¿ããŸã§ã«ããããã«é·ãæéãããã£ãããšã«æ°ã¥ãã°ãæ»æè
ã¯äœãããæ£è§£ã«è¿ã¥ãããããªãã¡å
é ã®ããã€ãã®æåãæ£ããã£ãããšãç¥ãããšãã§ããŸãã
+
+ãããšã`johndoe` ããã `stanleyjobsox` ã«è¿ããã®ãçã£ãŠå詊è¡ã§ããŸãã
+
+#### ããããã¬ãã«ã®æ»æ { #a-professional-attack }
+
+ãã¡ãããæ»æè
ã¯ããããæäœæ¥ã§ã¯è¡ãããããã°ã©ã ãæžããŠã1 ç§éã«æ°åãæ°çŸäžåã®ãã¹ããè¡ãã§ãããããã㊠1 åã« 1 æåãã€æ£ããæåãèŠã€ããŠãããŸãã
+
+ããããããšã§ãæ°åããæ°æéã®ãã¡ã«ãæ»æè
ã¯ç§ãã¡ã®ã¢ããªã±ãŒã·ã§ã³ã®ãå©ããïŒå¿çã«ããã£ãæéïŒã ããå©çšããŠãæ£ãããŠãŒã¶ãŒåãšãã¹ã¯ãŒããæšæž¬ã§ããŠããŸããŸãã
+
+#### `secrets.compare_digest()` ã§å¯Ÿç { #fix-it-with-secrets-compare-digest }
+
+ããããç§ãã¡ã®ã³ãŒãã§ã¯å®éã« `secrets.compare_digest()` ã䜿çšããŠããŸãã
+
+èŠããã«ã`stanleyjobsox` ãš `stanleyjobson` ãæ¯èŒããã®ã«ãããæéã¯ã`johndoe` ãš `stanleyjobson` ãæ¯èŒããã®ã«ãããæéãšåãã«ãªããŸãããã¹ã¯ãŒãã§ãåæ§ã§ãã
+
+ãã®ããã«ãã¢ããªã±ãŒã·ã§ã³ã³ãŒãã§ `secrets.compare_digest()` ã䜿ããšããã®çš®ã®äžé£ã®ã»ãã¥ãªãã£æ»æã«å¯ŸããŠå®å
šã«ãªããŸãã
+
+### ãšã©ãŒãè¿ã { #return-the-error }
+
+èªèšŒæ
å ±ãäžæ£ã§ããããšãæ€åºããããã¹ããŒã¿ã¹ã³ãŒã 401ïŒèªèšŒæ
å ±ãæäŸãããªãå ŽåãšåãïŒã§ `HTTPException` ãè¿ãããã©ãŠã¶ã«å床ãã°ã€ã³ããã³ããã衚瀺ãããããã«ããã㌠`WWW-Authenticate` ã远å ããŸã:
+
+{* ../../docs_src/security/tutorial007_an_py310.py hl[26:30] *}
diff --git a/docs/ja/docs/advanced/security/index.md b/docs/ja/docs/advanced/security/index.md
new file mode 100644
index 000000000..069e2686c
--- /dev/null
+++ b/docs/ja/docs/advanced/security/index.md
@@ -0,0 +1,19 @@
+# é«åºŠãªã»ãã¥ãªã㣠{ #advanced-security }
+
+## è¿œå æ©èœ { #additional-features }
+
+[ãã¥ãŒããªã¢ã« - ãŠãŒã¶ãŒã¬ã€ã: ã»ãã¥ãªãã£](../../tutorial/security/index.md){.internal-link target=_blank}ã§æ±ã£ããã®ä»¥å€ã«ããã»ãã¥ãªãã£ãæ±ãããã®è¿œå æ©èœãããã€ããããŸãã
+
+/// tip | è±ç¥è
+
+次ã®ç¯ã¯å¿
ããããé«åºŠãã§ã¯ãããŸããã
+
+ããªãã®ãŠãŒã¹ã±ãŒã¹ã§ã¯ããã®äžã®ããããã«è§£æ±ºçããããããããŸããã
+
+///
+
+## ãŸããã¥ãŒããªã¢ã«ãèªã { #read-the-tutorial-first }
+
+以äžã®ç¯ã¯ããã§ã«ã¡ã€ã³ã®[ãã¥ãŒããªã¢ã« - ãŠãŒã¶ãŒã¬ã€ã: ã»ãã¥ãªãã£](../../tutorial/security/index.md){.internal-link target=_blank}ãèªãã§ããããšãåæãšããŸãã
+
+ããããåãæŠå¿µã«åºã¥ããŠããŸãããããã€ãã®è¿œå æ©èœãå©çšã§ããŸãã
diff --git a/docs/ja/docs/advanced/security/oauth2-scopes.md b/docs/ja/docs/advanced/security/oauth2-scopes.md
new file mode 100644
index 000000000..7c6cfdbf0
--- /dev/null
+++ b/docs/ja/docs/advanced/security/oauth2-scopes.md
@@ -0,0 +1,274 @@
+# OAuth2 ã®ã¹ã³ãŒã { #oauth2-scopes }
+
+OAuth2 ã®ã¹ã³ãŒã㯠**FastAPI** ã§çŽæ¥å©çšã§ããã·ãŒã ã¬ã¹ã«çµ±åãããŠããŸãã
+
+ããã«ãããOAuth2 æšæºã«åŸã£ãããããã现ããªæš©éã·ã¹ãã ããOpenAPI 察å¿ã¢ããªã±ãŒã·ã§ã³ïŒããã³ API ããã¥ã¡ã³ãïŒã«çµ±åã§ããŸãã
+
+ã¹ã³ãŒãä»ãã® OAuth2 ã¯ãFacebookãGoogleãGitHubãMicrosoftãX (Twitter) ãªã©ãå€ãã®å€§æèªèšŒãããã€ãã§äœ¿ãããŠããä»çµã¿ã§ãããŠãŒã¶ãŒãã¢ããªã±ãŒã·ã§ã³ã«ç¹å®ã®æš©éãä»äžããããã«å©çšãããŸãã
+
+ãFacebook ã§ãã°ã€ã³ããGoogle ã§ãã°ã€ã³ããGitHub ã§ãã°ã€ã³ããMicrosoft ã§ãã°ã€ã³ããX (Twitter) ã§ãã°ã€ã³ããããã³ã«ããã®ã¢ããªã±ãŒã·ã§ã³ã¯ã¹ã³ãŒãä»ãã® OAuth2 ã䜿ã£ãŠããŸãã
+
+ãã®ç¯ã§ã¯ãåãã¹ã³ãŒãä»ã OAuth2 ã䜿ã£ãŠã**FastAPI** ã¢ããªã±ãŒã·ã§ã³ã§èªèšŒãšèªå¯ã管çããæ¹æ³ãèŠãŠãããŸãã
+
+/// warning | 泚æ
+
+ããã¯ããé«åºŠãªå
容ã§ããã¯ãããã°ããã§ããã°èªã¿é£ã°ããŠãæ§ããŸããã
+
+OAuth2 ã®ã¹ã³ãŒãã¯å¿
ãããå¿
èŠã§ã¯ãªããèªèšŒãšèªå¯ã¯å¥œããªããæ¹ã§å®è£
ã§ããŸãã
+
+ãã ããã¹ã³ãŒãä»ãã® OAuth2 ã¯ãAPIïŒOpenAPIïŒã API ããã¥ã¡ã³ãã«ãããã«çµ±åã§ããŸãã
+
+ãšã¯ããããããã®ã¹ã³ãŒãããã®ä»ã®ã»ãã¥ãªãã£ïŒèªå¯èŠä»¶ã®é©çšã¯ãå¿
èŠã«å¿ããŠã³ãŒãã®äžã§è¡ãå¿
èŠããããŸãã
+
+å€ãã®å Žåãã¹ã³ãŒãä»ã OAuth2 ã¯ãªãŒããŒã¹ããã¯ã«ãªãããŸãã
+
+ããã§ãå¿
èŠã ãšåãã£ãŠããå Žåããèå³ãããå Žåã¯ããã®ãŸãŸèªã¿é²ããŠãã ããã
+
+///
+
+## OAuth2 ã®ã¹ã³ãŒããš OpenAPI { #oauth2-scopes-and-openapi }
+
+OAuth2 仿§ã§ã¯ããã¹ã³ãŒããã¯ç©ºçœã§åºåãããæååã®äžèЧãšããŠå®çŸ©ãããŠããŸãã
+
+åæååã®å
容ã¯ä»»æã§ããã空çœã¯å«ããããŸããã
+
+ãããã®ã¹ã³ãŒãã¯ãæš©éãã衚ããŸãã
+
+OpenAPIïŒäŸ: API ããã¥ã¡ã³ãïŒã§ã¯ããã»ãã¥ãªãã£ã¹ããŒã ããå®çŸ©ã§ããŸãã
+
+ãããã®ã»ãã¥ãªãã£ã¹ããŒã ã®äžã€ã OAuth2 ã䜿ãå Žåãã¹ã³ãŒãã宣èšããŠå©çšã§ããŸãã
+
+åãã¹ã³ãŒããã¯ããã ã®æååïŒç©ºçœãªãïŒã§ãã
+
+éåžžãç¹å®ã®ã»ãã¥ãªãã£æš©éã宣èšããããã«äœ¿ãããŸããäŸãã°:
+
+- `users:read` ã `users:write` ã¯äžè¬çãªäŸã§ãã
+- `instagram_basic` 㯠Facebook / Instagram ã§äœ¿ãããŠããŸãã
+- `https://www.googleapis.com/auth/drive` 㯠Google ã§äœ¿ãããŠããŸãã
+
+/// info | æ
å ±
+
+OAuth2 ã«ãããŠãã¹ã³ãŒããã¯ãå¿
èŠãªç¹å®ã®æš©éã宣èšããåãªãæååã§ãã
+
+`:` ã®ãããªä»ã®æåãå«ãŸããŠããŠããURL ã§ãã£ãŠãåé¡ãããŸããã
+
+ãããã®è©³çްã¯å®è£
äŸåã§ãã
+
+OAuth2 ã«ãšã£ãŠã¯ãåã«æååã«éããŸããã
+
+///
+
+## å
šäœå { #global-view }
+
+ãŸããã¡ã€ã³ã®**ãã¥ãŒããªã¢ã« - ãŠãŒã¶ãŒã¬ã€ã**ã«ãã [OAuth2ïŒãã¹ã¯ãŒãããã·ã¥åããïŒãBearer ãš JWT ããŒã¯ã³](../../tutorial/security/oauth2-jwt.md){.internal-link target=_blank} ã®äŸãã倿Žãããéšåããã¹ã³ãŒãä»ã OAuth2 ã䜿ã£ãŠææ©ãèŠãŠã¿ãŸãããã
+
+{* ../../docs_src/security/tutorial005_an_py310.py hl[5,9,13,47,65,106,108:116,122:126,130:136,141,157] *}
+
+ã§ã¯ããããã®å€æŽãäžã€ãã€ç¢ºèªããŠãããŸãã
+
+## OAuth2 ã®ã»ãã¥ãªãã£ã¹ããŒã { #oauth2-security-scheme }
+
+æåã®å€æŽç¹ã¯ã`me` ãš `items` ã® 2 ã€ã®ã¹ã³ãŒããæã€ OAuth2 ã»ãã¥ãªãã£ã¹ããŒã ã宣èšããŠããããšã§ãã
+
+`scopes` ãã©ã¡ãŒã¿ã¯ãåã¹ã³ãŒããããŒããã®èª¬æãå€ãšãã `dict` ãåãåããŸã:
+
+{* ../../docs_src/security/tutorial005_an_py310.py hl[63:66] *}
+
+ãããã®ã¹ã³ãŒãã宣èšããŠããããããã°ã€ã³ïŒèªå¯æã« API ããã¥ã¡ã³ãã«è¡šç€ºãããŸãã
+
+ãããŠãä»äžããã¹ã³ãŒãïŒ`me`ã`items`ïŒãéžæã§ããŸãã
+
+ããã¯ãFacebookãGoogleãGitHub ãªã©ã§ãã°ã€ã³æã«æš©éãä»äžããéãšåãä»çµã¿ã§ã:
+
+
+
+## ã¹ã³ãŒãä»ãã® JWT ããŒã¯ã³ { #jwt-token-with-scopes }
+
+次ã«ãããŒã¯ã³ã® path operation ãä¿®æ£ããŠãèŠæ±ãããã¹ã³ãŒããè¿ãããã«ããŸãã
+
+åŒãç¶ãåã `OAuth2PasswordRequestForm` ã䜿çšããŸããããã«ã¯ããªã¯ãšã¹ãã§åãåã£ãåã¹ã³ãŒããå«ãã`str` ã® `list` ã§ãã `scopes` ããããã£ãå«ãŸããŸãã
+
+ãããŠããã®ã¹ã³ãŒãã JWT ããŒã¯ã³ã®äžéšãšããŠè¿ããŸãã
+
+/// danger | èŠå
+
+ç°¡åã®ãããããã§ã¯åãåã£ãã¹ã³ãŒãããã®ãŸãŸããŒã¯ã³ã«è¿œå ããŠããŸãã
+
+ããããæ¬çªã¢ããªã±ãŒã·ã§ã³ã§ã¯ã»ãã¥ãªãã£ã®ããããŠãŒã¶ãŒãå®éã«æã€ããšãã§ããã¹ã³ãŒãããŸãã¯äºåã«å®çŸ©ããã¹ã³ãŒãã ãã远å ããããã«ããŠãã ããã
+
+///
+
+{* ../../docs_src/security/tutorial005_an_py310.py hl[157] *}
+
+## path operation ãšäŸåé¢ä¿ã§ã¹ã³ãŒããå®£èš { #declare-scopes-in-path-operations-and-dependencies }
+
+ããã§ã¯ã`/users/me/items/` ã® path operation ã `items` ã¹ã³ãŒããå¿
èŠãšããããã«å®£èšããŸãã
+
+ãã®ããã«ã`fastapi` ãã `Security` ãã€ã³ããŒãããŠäœ¿ããŸãã
+
+`Security` ã¯ïŒ`Depends` ãšåæ§ã«ïŒäŸåé¢ä¿ã宣èšã§ããŸãããããã«ã¹ã³ãŒãïŒæååïŒã®ãªã¹ããåãåã `scopes` ãã©ã¡ãŒã¿ãæã¡ãŸãã
+
+ãã®å Žåã`Security` ã«äŸå颿° `get_current_active_user` ãæž¡ããŸãïŒ`Depends` ãšåæ§ã§ãïŒã
+
+å ããŠã`items` ãšãã 1 ã€ã®ã¹ã³ãŒãïŒè€æ°ã§ãå¯ïŒãå«ã `list` ãæž¡ããŸãã
+
+äŸå颿° `get_current_active_user` ã¯ã`Depends` ã ãã§ãªã `Security` ã§ããµãäŸåé¢ä¿ã宣èšã§ããŸããèªèº«ã®ãµãäŸå颿°ïŒ`get_current_user`ïŒã宣èšããããã«ã¹ã³ãŒãèŠä»¶ã远å ããŸãã
+
+ãã®å Žåã`me` ã¹ã³ãŒããèŠæ±ããŸãïŒè€æ°ã®ã¹ã³ãŒããå¯ïŒã
+
+/// note | åè
+
+ç°ãªãå Žæã§ç°ãªãã¹ã³ãŒãã远å ããå¿
èŠã¯å¿
ããããããŸããã
+
+ããã§ã¯ã**FastAPI** ãç°ãªãã¬ãã«ã§å®£èšãããã¹ã³ãŒããã©ã®ããã«æ±ããã瀺ãããã«ããããŠããŸãã
+
+///
+
+{* ../../docs_src/security/tutorial005_an_py310.py hl[5,141,172] *}
+
+/// info | æè¡è©³çް
+
+`Security` ã¯å®éã«ã¯ `Depends` ã®ãµãã¯ã©ã¹ã§ãåŸè¿°ãã远å ãã©ã¡ãŒã¿ã 1 ã€ããã ãã§ãã
+
+ããã `Depends` ã®ä»£ããã« `Security` ã䜿ãããšã§ã**FastAPI** ã¯ã»ãã¥ãªãã£ã¹ã³ãŒãã宣èšã»å
éšå©çšã§ããOpenAPI ã§ API ãããã¥ã¡ã³ãåã§ãããšå€æããŸãã
+
+ãªãã`fastapi` ãã `Query`ã`Path`ã`Depends`ã`Security` ãªã©ãã€ã³ããŒãããéããããã¯å®éã«ã¯ç¹æ®ãªã¯ã©ã¹ãè¿ã颿°ã§ãã
+
+///
+
+## `SecurityScopes` ã䜿ã { #use-securityscopes }
+
+次ã«ãäŸå颿° `get_current_user` ãæŽæ°ããŸãã
+
+ããã¯äžèšã®äŸåé¢ä¿ãã䜿çšãããŸãã
+
+ããã§ãå
ã»ã©äœæããåã OAuth2 ã¹ããŒã ãäŸåé¢ä¿ïŒ`oauth2_scheme`ïŒãšããŠå®£èšããŠäœ¿ããŸãã
+
+ãã®äŸå颿°èªäœã¯ã¹ã³ãŒãèŠä»¶ãæããªãããã`oauth2_scheme` ã«ã¯ `Depends` ã䜿ããŸããã»ãã¥ãªãã£ã¹ã³ãŒããæå®ããå¿
èŠããªãå Žå㯠`Security` ã䜿ãå¿
èŠã¯ãããŸããã
+
+ããã«ã`fastapi.security` ããã€ã³ããŒãããç¹å¥ãªå `SecurityScopes` ã®ãã©ã¡ãŒã¿ã宣èšããŸãã
+
+ãã® `SecurityScopes` ã¯ã©ã¹ã¯ `Request` ã«äŒŒãŠããŸãïŒ`Request` ã¯ãªã¯ãšã¹ããªããžã§ã¯ããçŽæ¥ååŸããããã«äœ¿ããŸããïŒã
+
+{* ../../docs_src/security/tutorial005_an_py310.py hl[9,106] *}
+
+## `scopes` ã䜿ã { #use-the-scopes }
+
+ãã©ã¡ãŒã¿ `security_scopes` 㯠`SecurityScopes` åã«ãªããŸãã
+
+ãã®ãªããžã§ã¯ãã¯ãèªèº«ããã³ããããµãäŸåãšããŠäœ¿ããã¹ãŠã®äŸåé¢ä¿ã§èŠæ±ãããã¹ã³ãŒããå«ã `scopes` ããããã£ïŒãªã¹ãïŒãæã¡ãŸããã€ãŸãããã¹ãŠã®ãäŸåå
ã... å°ãåããã«ãããããããŸããããåŸã§å床説æããŸãã
+
+`security_scopes`ïŒ`SecurityScopes` ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ïŒã¯ãèŠæ±ãããã¹ã³ãŒãã空çœã§é£çµãã 1 ã€ã®æååãè¿ã `scope_str` ãæäŸããŸãïŒããã䜿ããŸãïŒã
+
+åŸã§è€æ°ç®æã§åå©çšïŒraiseïŒã§ããããã«ã`HTTPException` ã 1 ã€äœæããŸãã
+
+ãã®äŸå€ã«ã¯ãèŠæ±ãããã¹ã³ãŒããããã°ãããã空çœåºåãã®æååïŒ`scope_str` ã䜿çšïŒãšããŠå«ããŸãããã®ã¹ã³ãŒãæåå㯠`WWW-Authenticate` ãããã«å
¥ããŸãïŒä»æ§ã®äžéšã§ãïŒã
+
+{* ../../docs_src/security/tutorial005_an_py310.py hl[106,108:116] *}
+
+## `username` ãšããŒã¿æ§é ã®æ€èšŒ { #verify-the-username-and-data-shape }
+
+`username` ãååŸã§ããŠããããšã確èªããã¹ã³ãŒããåãåºããŸãã
+
+ãããŠããã®ããŒã¿ã Pydantic ã¢ãã«ã§æ€èšŒããŸãïŒ`ValidationError` äŸå€ãææïŒãJWT ããŒã¯ã³ã®èªã¿åãã Pydantic ã«ããããŒã¿æ€èšŒã§ãšã©ãŒãçºçããå Žåã¯ãå
ã»ã©äœæãã `HTTPException` ãéåºããŸãã
+
+ãã®ããã«ãPydantic ã¢ãã« `TokenData` ã«æ°ãããããã㣠`scopes` ã远å ããŸãã
+
+Pydantic ã§ããŒã¿ãæ€èšŒããããšã§ãäŸãã°ã¹ã³ãŒã㯠`str` ã® `list`ã`username` 㯠`str` ãšãã£ããæ£ç¢ºãªåã«ãªã£ãŠããããšãä¿èšŒã§ããŸãã
+
+ããããŠããã°ãäŸãã°èª€ã£ãŠ `dict` ãªã©ãå
¥ã£ãŠåŸã§ã¢ããªã±ãŒã·ã§ã³ãç Žå£ããŠããŸããã»ãã¥ãªãã£ãªã¹ã¯ã«ãªãããšãã£ãäºæ
ãé¿ããããŸãã
+
+ãŸãããã® `username` ãæã€ãŠãŒã¶ãŒãååšããããšã確èªããååšããªããã°ããã¯ãå
ã»ã©ã®äŸå€ãéåºããŸãã
+
+{* ../../docs_src/security/tutorial005_an_py310.py hl[47,117:129] *}
+
+## `scopes` ã®æ€èšŒ { #verify-the-scopes }
+
+ãã®äŸå颿°ããã³ãã¹ãŠã®äŸåå
ïŒpath operation ãå«ãïŒãèŠæ±ãããã¹ãŠã®ã¹ã³ãŒãããåãåã£ãããŒã¯ã³ã«å«ãŸããŠããããšãæ€èšŒããå«ãŸããŠããªããã° `HTTPException` ãéåºããŸãã
+
+ãã®ããã«ãããããã¹ãŠã®ã¹ã³ãŒãã `str` ã® `list` ãšããŠå«ã `security_scopes.scopes` ã䜿ããŸãã
+
+{* ../../docs_src/security/tutorial005_an_py310.py hl[130:136] *}
+
+## äŸåé¢ä¿ããªãŒãšã¹ã³ãŒã { #dependency-tree-and-scopes }
+
+äŸåé¢ä¿ããªãŒãšã¹ã³ãŒããããäžåºŠèŠãŠã¿ãŸãããã
+
+`get_current_active_user` äŸåé¢ä¿ã¯ `get_current_user` ããµãäŸåãšããŠæã€ããã`get_current_active_user` ã§å®£èšããã `"me"` ã¹ã³ãŒãã¯ã`get_current_user` ã«æž¡ããã `security_scopes.scopes` ã®å¿
é ã¹ã³ãŒãäžèЧã«å«ãŸããŸãã
+
+path operation èªäœã `"items"` ã¹ã³ãŒãã宣èšãããããããã `get_current_user` ã«æž¡ããã `security_scopes.scopes` ã«å«ãŸããŸãã
+
+äŸåé¢ä¿ãšã¹ã³ãŒãã®éå±€ã¯æ¬¡ã®ããã«ãªããŸã:
+
+- *path operation* `read_own_items` ã«ã¯:
+ - äŸåé¢ä¿ã«å¯ŸããŠå¿
é ã¹ã³ãŒã `["items"]` ããã:
+ - `get_current_active_user`:
+ - äŸå颿° `get_current_active_user` ã«ã¯:
+ - äŸåé¢ä¿ã«å¯ŸããŠå¿
é ã¹ã³ãŒã `["me"]` ããã:
+ - `get_current_user`:
+ - äŸå颿° `get_current_user` ã«ã¯:
+ - èªèº«ã«å¿
é ã¹ã³ãŒãã¯ãªãã
+ - `oauth2_scheme` ã䜿ãäŸåé¢ä¿ãããã
+ - `SecurityScopes` åã® `security_scopes` ãã©ã¡ãŒã¿ããã:
+ - ãã® `security_scopes` ãã©ã¡ãŒã¿ã¯ãäžã§å®£èšããããã¹ãŠã®ã¹ã³ãŒããå«ã `list` ãæã€ `scopes` ããããã£ãæã€ããããã£ãŠ:
+ - *path operation* `read_own_items` ã§ã¯ã`security_scopes.scopes` 㯠`["me", "items"]` ãå«ãã
+ - *path operation* `read_users_me` ã§ã¯ã`security_scopes.scopes` 㯠`["me"]` ãå«ããããã¯äŸåé¢ä¿ `get_current_active_user` ã«å®£èšãããŠããããã
+ - *path operation* `read_system_status` ã§ã¯ã`security_scopes.scopes` 㯠`[]`ïŒç©ºïŒã«ãªãã`scopes` ãæã€ `Security` ã宣èšããŠãããããã®äŸåé¢ä¿ `get_current_user` ã `scopes` ã宣èšããŠããªãããã
+
+/// tip | è±ç¥è
+
+éèŠã§ãéæ³ã®ããããªç¹ã¯ã`get_current_user` ã path operation ããšã«ç°ãªã `scopes` ã®ãªã¹ãããã§ãã¯ããããšã«ãªãããšããããšã§ãã
+
+ããã¯ãããããã® path operation ãšããã® path operation ã®äŸåé¢ä¿ããªãŒå
ã®åäŸåé¢ä¿ã§å®£èšããã `scopes` ã«ãã£ãŠæ±ºãŸããŸãã
+
+///
+
+## `SecurityScopes` ã®è©³çް { #more-details-about-securityscopes }
+
+`SecurityScopes` ã¯ã©ã®å°ç¹ã§ããè€æ°ç®æã§ã䜿ããŸãããã«ãŒããã®äŸåé¢ä¿ã§ããå¿
èŠã¯ãããŸããã
+
+åžžã«ããã®æç¹ã® `Security` äŸåé¢ä¿ãšã**ãã®ç¹å®ã®** path operation ãš **ãã®ç¹å®ã®** äŸåé¢ä¿ããªãŒã«ãããããã¹ãŠã®äŸåå
ã§å®£èšãããã»ãã¥ãªãã£ã¹ã³ãŒããæã¡ãŸãã
+
+`SecurityScopes` ã«ã¯äŸåå
ã§å®£èšããããã¹ãŠã®ã¹ã³ãŒããå
¥ããããããŒã¯ã³ãå¿
èŠãªã¹ã³ãŒããæã£ãŠãããã©ãããäžå€®ã®äŸå颿°ã§æ€èšŒããpath operation ããšã«ç°ãªãã¹ã³ãŒãèŠä»¶ã宣èšããããšãã£ãäœ¿ãæ¹ãã§ããŸãã
+
+ããã㯠path operation ããšã«ç¬ç«ããŠæ€èšŒãããŸãã
+
+## ãã§ã㯠{ #check-it }
+
+API ããã¥ã¡ã³ããéããšãèªèšŒããŠãèš±å¯ããã¹ã³ãŒããæå®ã§ããŸãã
+
+
+
+ã©ã®ã¹ã³ãŒããéžæããªãå Žåã¯ãèªèšŒæžã¿ãã«ã¯ãªããŸããã`/users/me/` ã `/users/me/items/` ã«ã¢ã¯ã»ã¹ããããšãããšãæš©éãäžè¶³ããŠãããšãããšã©ãŒã«ãªããŸãã`/status/` ã«ã¯åŒãç¶ãã¢ã¯ã»ã¹ã§ããŸãã
+
+`me` ã¹ã³ãŒãã ããéžæãã`items` ã¹ã³ãŒããéžæããªãå Žåã¯ã`/users/me/` ã«ã¯ã¢ã¯ã»ã¹ã§ããŸããã`/users/me/items/` ã«ã¯ã¢ã¯ã»ã¹ã§ããŸããã
+
+ããã¯ããŠãŒã¶ãŒãã¢ããªã±ãŒã·ã§ã³ã«äžããæš©éã®ç¯å²ã«å¿ããŠããµãŒãããŒãã£ã¢ããªã±ãŒã·ã§ã³ããããã® path operation ã®ããããã«ããŠãŒã¶ãŒããæäŸãããããŒã¯ã³ã§ã¢ã¯ã»ã¹ããããšãããšãã«èµ·ããåäœã§ãã
+
+## ãµãŒãããŒãã£çµ±åã«ã€ã㊠{ #about-third-party-integrations }
+
+ãã®äŸã§ã¯ãOAuth2 ã®ãpasswordããããŒã䜿çšããŠããŸãã
+
+ããã¯ãïŒããããèªåã®ããã³ããšã³ãã§ïŒèªåãã¡ã®ã¢ããªã±ãŒã·ã§ã³ã«ãã°ã€ã³ããå Žåã«é©ããŠããŸãã
+
+èªåãã¡ã§ç®¡çããŠããããã`username` ãš `password` ãåãåãçžæãä¿¡é Œã§ããããã§ãã
+
+ããããä»è
ãæ¥ç¶ãã OAuth2 ã¢ããªã±ãŒã·ã§ã³ïŒFacebookãGoogleãGitHub ãªã©ã«çžåœããèªèšŒãããã€ãïŒãæ§ç¯ããå Žåã¯ãä»ã®ããããã®ãããŒã䜿çšãã¹ãã§ãã
+
+æãäžè¬çãªã®ã¯ implicit ãããŒã§ãã
+
+æãå®å
šãªã®ã¯ code ãããŒã§ãããæé ãå€ãå®è£
ãããè€éã§ããè€éãªãããå€ãã®ãããã€ãã¯çµå± implicit ãããŒãæšå¥šããããšããããŸãã
+
+/// note | åè
+
+åèªèšŒãããã€ãããããŒã«ç¬èªã®åç§°ãä»ããèªç€Ÿã®ãã©ã³ãã®äžéšã«ããã®ã¯äžè¬çã§ãã
+
+ããããæçµçã«ã¯åã OAuth2 æšæºãå®è£
ããŠããŸãã
+
+///
+
+**FastAPI** ã«ã¯ãããããã¹ãŠã® OAuth2 èªèšŒãããŒåãã®ãŠãŒãã£ãªãã£ã `fastapi.security.oauth2` ã«å«ãŸããŠããŸãã
+
+## ãã³ã¬ãŒã¿ `dependencies` ã§ã® `Security` { #security-in-decorator-dependencies }
+
+ãã³ã¬ãŒã¿ã® `dependencies` ãã©ã¡ãŒã¿ã« `Depends` ã® `list` ãå®çŸ©ã§ããã®ãšåæ§ïŒ[path operation ãã³ã¬ãŒã¿ã§ã®äŸåé¢ä¿](../../tutorial/dependencies/dependencies-in-path-operation-decorators.md){.internal-link target=_blank} åç
§ïŒãããã§ `scopes` ãæå®ãã `Security` ã䜿çšã§ããŸãã
diff --git a/docs/ja/docs/advanced/settings.md b/docs/ja/docs/advanced/settings.md
new file mode 100644
index 000000000..5508ad6d9
--- /dev/null
+++ b/docs/ja/docs/advanced/settings.md
@@ -0,0 +1,302 @@
+# èšå®ãšç°å¢å€æ° { #settings-and-environment-variables }
+
+å€ãã®å Žåãã¢ããªã±ãŒã·ã§ã³ã¯å€éšã®èšå®ãæ§æãå¿
èŠãšããŸããããšãã°ãã·ãŒã¯ã¬ããããŒãããŒã¿ããŒã¹èªèšŒæ
å ±ãã¡ãŒã«ãµãŒãã¹ã®èªèšŒæ
å ±ãªã©ã§ãã
+
+ãããã®èšå®ã®å€ãã¯å¯å€ïŒå€æŽããããïŒã§ãããŒã¿ããŒã¹ã®URLã®ãããªãã®ããããŸãããŸããå€ãã¯ã·ãŒã¯ã¬ããã®ããã«æ©åŸ®ãªæ
å ±ã§ãã
+
+ãã®ãããã¢ããªã±ãŒã·ã§ã³ãèªã¿åãç°å¢å€æ°ã§æäŸããã®ãäžè¬çã§ãã
+
+/// tip | è±ç¥è
+
+ç°å¢å€æ°ã«ã€ããŠçè§£ããã«ã¯ã[ç°å¢å€æ°](../environment-variables.md){.internal-link target=_blank}ãåç
§ããŠãã ããã
+
+///
+
+## åãšããªããŒã·ã§ã³ { #types-and-validation }
+
+ãããã®ç°å¢å€æ°ã¯ Python ã®å€éšã«ãããä»ã®ããã°ã©ã ãã·ã¹ãã å
šäœïŒLinuxãWindowsãmacOS ãšãã£ãç°ãªãOSãå«ãïŒãšäºææ§ãå¿
èŠãªãããæååããã¹ãã®ã¿ãæ±ããŸãã
+
+ã€ãŸããPython ã§ç°å¢å€æ°ããèªã¿åãããå€ã¯ãã¹ãŠ `str` ã«ãªããä»ã®åãžã®å€æãããªããŒã·ã§ã³ã¯ã³ãŒãã§è¡ãå¿
èŠããããŸãã
+
+## Pydantic ã® `Settings` { #pydantic-settings }
+
+幞ããªããšã«ãPydantic ã«ã¯ç°å¢å€æ°ããæ¥ãèšå®ãæ±ãããã®åªãããŠãŒãã£ãªãã£ããããPydantic: Settings management ã§æäŸãããŠããŸãã
+
+### `pydantic-settings` ã®ã€ã³ã¹ããŒã« { #install-pydantic-settings }
+
+ãŸãã[ä»®æ³ç°å¢](../virtual-environments.md){.internal-link target=_blank}ãäœæããŠæå¹åãã`pydantic-settings` ããã±ãŒãžãã€ã³ã¹ããŒã«ããŸã:
+
+
+
+次ã«ããµãã¢ããªã±ãŒã·ã§ã³ã®ããã¥ã¡ã³ã http://127.0.0.1:8000/subapi/docs ãéããŸãã
+
+ãµãã¢ããªã±ãŒã·ã§ã³çšã®èªå API ããã¥ã¡ã³ãã衚瀺ããããã®ã¢ããªèªèº«ã® path operation ã®ã¿ããæ£ãããµããã¹æ¥é èŸ `/subapi` ã®äžã§è¡šç€ºãããŸã:
+
+
+
+ã©ã¡ãã® UI ã§ãæäœããã°æ£ããåäœããŸãããã©ãŠã¶ãããããã®ã¢ããªïŒãµãã¢ããªãšéä¿¡ã§ããããã§ãã
+
+### æè¡è©³çް: `root_path` { #technical-details-root-path }
+
+äžèšã®ããã«ãµãã¢ããªã±ãŒã·ã§ã³ãããŠã³ããããšãFastAPI 㯠ASGI 仿§ã® `root_path` ãšåŒã°ããä»çµã¿ã䜿ã£ãŠããã®ãµãã¢ããªã±ãŒã·ã§ã³ãžã®ããŠã³ããã¹ãäŒæããŸãã
+
+ãã®ããããµãã¢ããªã±ãŒã·ã§ã³ã¯ããã¥ã¡ã³ã UI ã§ãã®ãã¹æ¥é èŸã䜿çšãã¹ãããšãèªèã§ããŸãã
+
+ããã«ããµãã¢ããªã±ãŒã·ã§ã³èªèº«ãå¥ã®ãµãã¢ããªã±ãŒã·ã§ã³ãããŠã³ãããŠããŠãåé¡ãããŸãããFastAPI ããããã® `root_path` ããã¹ãŠèªåçã«åŠçããããã§ãã
+
+`root_path` ã®è©³çްãæç€ºçãªæå®æ¹æ³ã«ã€ããŠã¯ã[ãããã·ã®èåŸã§](behind-a-proxy.md){.internal-link target=_blank} ã®ç¯ã§åŠã¹ãŸãã
diff --git a/docs/ja/docs/advanced/templates.md b/docs/ja/docs/advanced/templates.md
new file mode 100644
index 000000000..3c4827b88
--- /dev/null
+++ b/docs/ja/docs/advanced/templates.md
@@ -0,0 +1,126 @@
+# ãã³ãã¬ãŒã { #templates }
+
+**FastAPI** ã§ã¯ä»»æã®ãã³ãã¬ãŒããšã³ãžã³ã䜿çšã§ããŸãã
+
+Flask ãªã©ã§ã䜿ãããŠãã Jinja2 ãäžè¬çãªéžæè¢ã§ãã
+
+Starlette ã«ãã£ãŠæäŸããã**FastAPI** ã¢ããªã§çŽæ¥äœ¿ãããç°¡åã«èšå®ã§ãããŠãŒãã£ãªãã£ããããŸãã
+
+## äŸåé¢ä¿ã®ã€ã³ã¹ããŒã« { #install-dependencies }
+
+[ä»®æ³ç°å¢](../virtual-environments.md){.internal-link target=_blank} ãäœæããŠæå¹åãã`jinja2` ãã€ã³ã¹ããŒã«ããŸã:
+
+
-æéãæ¯æããŸãðžã
+ãããŠããªãã®çªã«ãªãã奜ããªäººãšèªåã®ããã«ããšãŠã豪è¯ãªãã³ããŒã¬ãŒã2ã€æ³šæããŸããðð
-ã¬ãžä¿ðã¯ãããã³ã®ç·ðšâð³ã«åãã£ãŠãããªãã®ãã³ããŒã¬ãŒðãæºåããªããã°ãªããªããšäŒããããã«äœãèšããŸãã (圌ã¯çŸåšãåã®ã客ããã®ååãæºåããŠããŸãã)ã
+
-ã¬ãžä¿ðã¯ããªãã«çªå·æãæž¡ããŸãã
+ã¬ãžä¿ã¯ãããã³ã®æç人ã«ãããªãã®ãã³ããŒã¬ãŒãçšæãããã声ããããŸã (æç人ã¯ããŸåã®ã客ããã®åãäœã£ãŠããŸã)ã
-åŸ
ã£ãŠããéã奜ããªäººðãšäžç·ã«ããŒãã«ãéžãã§åº§ãã奜ããªäººðãšé·ãé話ãããŸã (泚æãããã³ããŒã¬ãŒã¯éåžžã«è±ªè¯ã§ãæºåã«å°ãæéããããã®ã§âšðâš)ã
+
-ãã³ããŒã¬ãŒðãåŸ
ã¡ãªãã奜ããªäººðãšããŒãã«ã«åº§ã£ãŠããéãããªãã®å¥œããªäººããªããŠçŽ æŽãããããããããŠé ããããã ãšâšðâšæãæãããªããæéãè²»ããããšãã§ããŸãã
+æ¯æããããŸããðž
-奜ããªäººðãšè©±ããªããåŸ
ã£ãŠããéããšãã©ããã«ãŠã³ã¿ãŒã«è¡šç€ºãããŠããçªå·ããã§ãã¯ããŠãèªåã®çªãã©ããã確èªããŸãã
+ã¬ãžä¿ã¯ããªãã«çªå·æãæž¡ããŸãã
-ãã®åŸãã€ãã«ããªãã®çªã«ãªããŸãããã«ãŠã³ã¿ãŒã«è¡ãããã³ããŒã¬ãŒðãæã«å
¥ããŠããŒãã«ã«æ»ããŸãã
+
-ããªããšããªãã®å¥œããªäººðã¯ãã³ããŒã¬ãŒðãé£ã¹ãŠã楜ããæéãéãããŸãâšã
+åŸ
ã£ãŠããéã奜ããªäººãšããŒãã«ã«ç§»åããŠåº§ãã(豪è¯ãªãã³ããŒã¬ãŒã¯æéããããã®ã§) ãã°ãã話ããŸãã
+
+ããŒãã«ã§åŸ
ã£ãŠããéã奜ããªäººãã©ãã ãçŽ æµã§ããããããŠãé ãè¯ãããçºããŠæéãéãããŸã âšðâšã
+
+
+
+æã
ã«ãŠã³ã¿ãŒã®è¡šç€ºãèŠãŠãèªåã®çªå·ã«ãªã£ãŠããã確èªããŸãã
+
+ãããŠããªãã®çªã«ãªããŸããã«ãŠã³ã¿ãŒã«è¡ãããã³ããŒã¬ãŒãåãåããããŒãã«ã«æ»ããŸãã
+
+
+
+ããªããšå¥œããªäººã¯ãã³ããŒã¬ãŒãé£ã¹ãŠã楜ããæéãéãããŸããâš
+
+
+
+/// info | æ
å ±
+
+çŸããã€ã©ã¹ã㯠Ketrina Thompson ã«ãããã®ã§ããðš
+
+///
---
-äžèšã®ã¹ããŒãªãŒã§ãããªããã³ã³ãã¥ãŒã¿/ããã°ã©ã ð€ã ãšæ³åããŠã¿ãŠãã ããã
+ãã®ç©èªã§ãããªãèªèº«ãã³ã³ãã¥ãŒã¿/ããã°ã©ã ð€ ã ãšæ³åããŠã¿ãŠãã ããã
-åã«ããéãããªãã¯ã¢ã€ãã«ç¶æ
ã§ãðŽãäœããçç£çããªããšãããããã èªåã®çªãåŸ
ã£ãŠããŸããããããã¬ãžä¿ðã¯æ³šæãåãåãã ããªã®ã§ (ååã®æºåãããŠããããã§ã¯ãªã)ãåã¯é«éã§ãããããã£ãŠãäœãåé¡ãããŸããã
+åã«ããéã¯ãäœããçç£çããªããšããããèªåã®çªãåŸ
ã€ã ãã®ã¢ã€ãã«ç¶æ
ðŽ ã§ãããã ãã¬ãžä¿ã¯æ³šæãåãã ã (äœãã¯ããªã) ãªã®ã§åã¯éãé²ã¿ãåé¡ãããŸããã
-ãããããããªãã®çªã«ãªã£ãããå®ã«ãçç£çãªãäœæ¥ãè¡ããŸãð€ãã¡ãã¥ãŒã確èªããæ¬²ãããã®ã決ãã奜ããªäººðã®æ¬²ãããã®ãèããæéãæ¯æãðžãçŸéãŸãã¯ã«ãŒããæ£ããæž¡ããã確èªããæ£ããæž
ç®ãããããšã確èªããæ³šæãæ£ããéã£ãŠããããªã©ã確èªããŸãã
+ããªãã®çªã«ãªããšãå®éã«ãçç£çããªäœæ¥ãããŸããã¡ãã¥ãŒãèŠãŠæ³šæã決ãã奜ããªäººã®åã確èªããæ¯æããæ£ããçŽå¹£/ã«ãŒããæž¡ããããæ£ããæ±ºæžãããããæ³šæå
å®¹ãæ£ããããªã©ã確èªããŸãã
-ãããããã³ããŒã¬ãŒðããŸã ã§ããŠããªãã®ã§ããã³ããŒã¬ãŒã®æºåãã§ãããŸã§åŸ
æ©ðããå¿
èŠããããããã¬ãžä¿ðãšã®äœæ¥ã¯ãäžæåæ¢âžãã«ãªããŸãã
+ãããããã³ããŒã¬ãŒã¯ãŸã åºæ¥äžãã£ãŠããªãã®ã§ãã¬ãžä¿ãšã®ããåãã¯ãäžæåæ¢ãâž ã«ãªããŸãããã³ããŒã¬ãŒãã§ãããŸã§åŸ
〠ð å¿
èŠãããããã§ãã
-ããããã«ãŠã³ã¿ãŒããé¢ããŠãçªå·æãæã£ãŠããŒãã«ã«åº§ã£ãŠãããšãã¯ã泚æã奜ããªäººðã«åãæ¿ããŠðããã®äžã§ãä»äºâ¯ð€ããè¡ãªããŸãããã®åŸã奜ããªäººðãšãã¡ãã€ããã®ãããªãéåžžã«ãçç£çãªð€ãããšãåã³è¡ããŸãã
+ãã ããçªå·æãæã£ãŠã«ãŠã³ã¿ãŒããé¢ãããŒãã«ã«åº§ãã°ã泚æã奜ããªäººã«åãæ¿ã ðãããã®äœæ¥ã⯠ð€ ã«åãçµããŸãã奜ããªäººãšãã¡ãã€ããšããããšãŠããçç£çãð€ ãªããšããŸãã§ããŸãã
-次ã«ãã¬ãžä¿ðã¯ãããã³ããŒã¬ãŒã®æºåãã§ããŸããðããšèšã£ãŠãã«ãŠã³ã¿ãŒã®ãã£ã¹ãã¬ã€ã«çªå·ã衚瀺ããŸããã衚瀺çªå·ãããªãã®çªå·ã«å€ãã£ãŠããããã«çã£ãããã«é£ãã§è¡ããããªããšã¯ãããŸãããããªãã¯èªåã®çªå·æãæã£ãŠãã£ãŠãä»ã®äººãèªåã®çªå·æãããã®ã§ãããªãã®ãã³ããŒã¬ãŒðãçã人ãããªãããšã¯ç¥ã£ãŠããŸãã
+ã¬ãžä¿ ð ãã«ãŠã³ã¿ãŒã®è¡šç€ºã«ããªãã®çªå·ãåºããŠããã³ããŒã¬ãŒãã§ããŸããããšç¥ãããŠããããªãã¯è¡šç€ºãåãæ¿ãã£ãç¬éã«é£ã³è·³ãããããŸãããèªåã®çªå·æããããä»ã®äººã«ãããããçªå·æãããã®ã§ããã³ããŒã¬ãŒãçãããããšã¯ãªããšç¥ã£ãŠããããã§ãã
-ãªã®ã§ãããªãã¯å¥œããªäººðã話ãçµããã®ãåŸ
ã£ãŠ (çŸåšã®ä»äºâ¯ / åŠçäžã®ã¿ã¹ã¯ãçµäºããŸãð€)ãåªãã埮ç¬ãã§ããã³ããŒã¬ãŒãè²°ã£ãŠããããšèšããŸãâžã
+ã ããã奜ããªäººã®è©±ãçµããã®ãåŸ
ã¡ (çŸåšã®äœæ¥ ⯠/ åŠçäžã®ã¿ã¹ã¯ãå®äºã ð€)ã埮ç¬ãã§ããã³ããŒã¬ãŒåã£ãŠãããããšèšããŸã âžã
-次ã«ãã«ãŠã³ã¿ãŒãžãããŸããå®äºããæåã®ã¿ã¹ã¯â¯ãžåããããã³ããŒã¬ãŒðãåãåããæè¬ã®æã衚ããŠãããŒãã«ã«æã£ãŠãããŸããããã§ãã«ãŠã³ã¿ãŒãšã®ããåãã®ã¹ããã/ã¿ã¹ã¯ãå®äºããŸããâ¹ãããã«ãããããã³ããŒã¬ãŒãé£ã¹ãðâ¯ããšããæ°ããã¿ã¹ã¯ãäœæãããŸããããããåã®ããã³ããŒã¬ãŒãååŸããããšããã¿ã¹ã¯ã¯çµäºããŸããâ¹ã
+ããããã«ãŠã³ã¿ãŒãžè¡ã ðãããŸå®äºããåæã®ã¿ã¹ã¯ â¯ ã«æ»ã£ãŠããã³ããŒã¬ãŒãåãåãã瀌ãèšã£ãŠããŒãã«ã«æã£ãŠãããŸããããã§ã«ãŠã³ã¿ãŒãšã®ããåããšããã¹ããã/ã¿ã¹ã¯ã¯å®äº â¹ ã§ãããã®çµæãšããŠããã³ããŒã¬ãŒãé£ã¹ããð ⯠ãšããæ°ããã¿ã¹ã¯ãçãŸããŸãããå
ã®ããã³ããŒã¬ãŒãåãåããã¿ã¹ã¯ã¯å®äº â¹ ããŠããŸãã
-### 䞊åãã³ããŒã¬ãŒ
+### 䞊åãã³ããŒã¬ãŒ { #parallel-burgers }
-ããããã䞊è¡ãã³ããŒã¬ãŒãã§ã¯ãªããã䞊åãã³ããŒã¬ãŒãã§ãããšããŸãããã
+ä»åºŠã¯ããããã䞊è¡ãã³ããŒã¬ãŒãã§ã¯ãªãã䞊åãã³ããŒã¬ãŒãã ãšæ³åããŸãããã
-ããªãã¯å¥œããªäººðãšäžŠåãã¡ã¹ãããŒãðãè²·ãããšããŠããŸãã
+ããªãã¯å¥œããªäººãšã䞊åããã¡ã¹ãããŒããè²·ãã«è¡ããŸãã
-åã«äžŠãã§ããŸãããäœäººãã®æç人å
Œãã¬ãžä¿ (8人ãšããŸããã) ðšâð³ðšâð³ðšâð³ðšâð³ðšâð³ðšâð³ðšâð³ðšâð³ãããªãã®åã«ãã人éã®æ³šæãåãã€ããŠããŸãã
+è€æ°ã®ã¬ãžä¿ (äŸãã° 8 人) ãåæã«æç人ã§ããããåã®äººãã¡ã®æ³šæãåããŠããŸãã
-8人ã®ã¬ãžä¿ãããããèªåã§æ³šæãåãããåŠããæ¬¡ã®æ³šæãåããåã«ãã³ããŒã¬ãŒãæºåããã®ã§ãããªãã®åã®äººéã¯ã«ãŠã³ã¿ãŒãé¢ããã«ããã³ããŒã¬ãŒðãã§ããã®ãåŸ
ã£ãŠããŸãðã
+8 人ã®ã¬ãžä¿ã¯ãããããæ¬¡ã®æ³šæãåãåã«ããã«èª¿çã«åãããããããããªãã®åã®äººãã¡ã¯ã«ãŠã³ã¿ãŒãé¢ããããã³ããŒã¬ãŒãã§ããã®ãåŸ
ã£ãŠããŸãã
-ããããããããããªãã®çªã«ãªãã奜ããªäººðãšèªåã®ããã«ã2ã€ã®éåžžã«è±ªè¯ãªãã³ããŒã¬ãŒðãæ³šæããŸãã
+
-æéãæ¯æããŸãðžã
+ããããããªãã®çªã«ãªãã奜ããªäººãšèªåã®ããã«è±ªè¯ãªãã³ããŒã¬ãŒã 2 ã€æ³šæããŸãã
-ã¬ãžä¿ã¯ãããã³ã«è¡ããŸãðšâð³ã
+æ¯æããããŸã ðžã
-ããªãã¯ã«ãŠã³ã¿ãŒã®åã«ç«ã£ãŠåŸ
ã¡ãŸãðãçªå·æããªãã®ã§èª°ãããªããããå
ã«ãã³ããŒã¬ãŒðãåããªãããã«ããŸãã
+
-ããªããšå¥œããªäººðã¯å¿ããã®ã§ã誰ãããªãã®åã«æ¥ãããŸããããããªãã®ãã³ããŒã¬ãŒãå°çãããšãðã«èª°ã«ãåãããšãèš±ããŸãããããªãã¯å¥œããªäººã«æ³šæãæããŸããðã
+ã¬ãžä¿ã¯ãããã³ã«åãããŸãã
-ããã¯ãåæãäœæ¥ã§ãããã¬ãžä¿/æç人ðšâð³ãšãåæãããŸããã¬ãžä¿/æç人ðšâð³ããã³ããŒã¬ãŒðã宿ãããŠããªãã«æž¡ããŸã§åŸ
ã€ðå¿
èŠããããã¡ããã©ãã®å®æã®ç¬éã«ããã«ããå¿
èŠããããŸããããã§ãªããã°ãä»ã®èª°ãã«åããããããããŸããã
+çªå·æããªããããä»ã®èª°ãã«å
ã«åãããªããããã«ãŠã³ã¿ãŒã®åã§ç«ã£ãŠåŸ
ã¡ãŸã ðã
-ãã®åŸãã«ãŠã³ã¿ãŒã®åã§é·ãæéåŸ
ã£ãŠããðãã€ãã«ã¬ãžä¿/æç人ðšâð³ããã³ããŒã¬ãŒðãæž¡ãã«æ»ã£ãŠããŸãã
+
-ãã³ããŒã¬ãŒðãåãã奜ããªäººðãšããŒãã«ã«è¡ããŸãã
+ããªããšå¥œããªäººã¯ã誰ã«ãå²ã蟌ãŸãããã³ããŒã¬ãŒãæ¥ããããåãåããããèŠåŒµã£ãŠããã®ã§ã奜ããªäººã«æ³šæãåããããŸãããð
-ãã é£ã¹ãã ããããã§ãããŸãã§ããðâ¹ã
+ããã¯ãåæãçãªäœæ¥ã§ããã¬ãžä¿/æç人 ðšâð³ ãšãåæãããŠããŸããã¬ãžä¿/æç人 ðšâð³ ããã³ããŒã¬ãŒãäœãçµããŠææž¡ããã®ç¬éã«ãåŸ
ã£ãŠ ð ãã®å Žã«ããªããã°ãªããŸãããããã§ãªããšä»ã®èª°ãã«åããããããããŸããã
-ã»ãšãã©ã®æéãã«ãŠã³ã¿ãŒã®åã§åŸ
ã€ã®ã«è²»ããããŠããã®ã§ðãããŸã話ããããã¡ãã€ãããšã¯ãããŸããã§ããðã
+
+
+é·ãæé ð ã«ãŠã³ã¿ãŒåã§åŸ
ã£ãåŸãããããã¬ãžä¿/æç人 ðšâð³ ããã³ããŒã¬ãŒãæã£ãŠæ»ã£ãŠããŸãã
+
+
+
+ãã³ããŒã¬ãŒãåãåãã奜ããªäººãšããŒãã«ã«è¡ããŸãã
+
+é£ã¹ãŠããããŸãã§ããâ¹
+
+
+
+ã»ãšãã©ã®æéãã«ãŠã³ã¿ãŒåã§åŸ
〠ð ã®ã«è²»ããããããããŸã話ãããããã¡ãã€ãããã§ããŸããã§ãããð
+
+/// info | æ
å ±
+
+çŸããã€ã©ã¹ã㯠Ketrina Thompson ã«ãããã®ã§ããðš
+
+///
---
-ãã®äžŠåãã³ããŒã¬ãŒã®ã·ããªãªã§ã¯ãããªãã¯2ã€ã®ããã»ããµãåããã³ã³ãã¥ãŒã¿/ããã°ã©ã ð€ (ããªããšããªãã®å¥œããªäººð) ã§ãããäž¡æ¹ãšãåŸ
æ©ðããŠããŠã圌ãã¯ãã«ãŠã³ã¿ãŒã§åŸ
æ©ðãããããšã«å°å¿µããŠããŸãâ¯ã
+ãã®ã䞊åãã³ããŒã¬ãŒãã®ã·ããªãªã§ã¯ãããªã㯠2 ã€ã®ããã»ããµ (ããªããšå¥œããªäºº) ãæã€ã³ã³ãã¥ãŒã¿/ããã°ã©ã ð€ ã§ãã©ã¡ããé·ãé ðãã«ãŠã³ã¿ãŒã§ã®åŸ
æ©ãã«æ³šæ ⯠ãå°å¿µããŠããŸãã
-ãã¡ã¹ãããŒãåºã«ã¯8ã€ã®ããã»ããµ (ã¬ãžä¿/æç人) ðšâð³ðšâð³ðšâð³ðšâð³ðšâð³ðšâð³ðšâð³ðšâð³ããããŸããäžæ¹ã䞊è¡ãã³ããŒã¬ãŒåºã«ã¯2人 (ã¬ãžä¿ãšæç人) ððšâð³ããããªãã£ããããããŸããã
+ãã¡ã¹ãããŒãåºã«ã¯ 8 åã®ããã»ããµ (ã¬ãžä¿/æç人) ããããŸããäžæ¹ã䞊è¡ãã³ããŒã¬ãŒã®åºã«ã¯ (ã¬ãžä¿ 1ã人ãæç人 1 人ã®) 2 åãããªãã£ããããããŸããã
-ããããããã§ããæçµçãªäœéšã¯æé«ã§ã¯ãããŸããðã
+ããã§ããæçµçãªäœéšã¯æè¯ãšã¯èšããŸãããð
---
-ããã¯ããã³ããŒã¬ãŒðã®è©±ãšåçãªè©±ã«ãªããŸãã
+ããã¯ãã³ããŒã¬ãŒã«ããã䞊åçã®ç©èªã§ããð
ãããçŸå®çãªãäŸãšããŠãéè¡ãæ³åããŠã¿ãŠãã ããã
-æè¿ãŸã§ãã»ãšãã©ã®éè¡ã¯è€æ°ã®çªå£ðšâðŒðšâðŒðšâðŒðšâðŒã«ãè¡åððððððððãã§ããŠããŸããã
+ã€ãæè¿ãŸã§ãã»ãšãã©ã®éè¡ã«ã¯è€æ°ã®çªå£ä¿ ðšâðŒðšâðŒðšâðŒðšâðŒ ãšé·ãè¡å ðððððððð ããããŸããã
-ãã¹ãŠã®çªå£ã§ã次ã
ãšãäžäººã®å®¢ãšãã¹ãŠã®äœæ¥ãè¡ããŸãðšâðŒâ¯.
+åçªå£ä¿ããäžäººãã€ããã¹ãŠã®äœæ¥ãé çªã«è¡ããŸã ðšâðŒâ¯ã
-ãã®äžãé·æéãåã«äžŠã°ãªããã°ãããŸããðãããããªããšãé çªãåã£ãŠããŸããã
+ãããŠãé·æé ð è¡åã§åŸ
ããªããã°é çªã倱ããŸãã
-éè¡ðŠã§ã®çšäºã«ããªãã®å¥œããªäººðãé£ããŠè¡ãããã¯ãªãã§ãããã
+éè¡ã®çšäº ðŠ ã«ã奜ããªäºº ð ãé£ããŠè¡ããããšã¯æããªãã§ãããã
-### ãã³ããŒã¬ãŒã®ãŸãšã
+### ãã³ããŒã¬ãŒã®ãŸãšã { #burger-conclusion }
-ãã®ã奜ããªäººãšã®ãã¡ã¹ãããŒããã³ããŒã¬ãŒãã®ã·ããªãªã§ã¯ãåŸ
æ©ðãå€ãããã䞊è¡ã·ã¹ãã âžðâ¯ã䜿çšããæ¹ãã¯ããã«çã«ããªã£ãŠããŸãã
+ãã®ã奜ããªäººãšãã¡ã¹ãããŒããã®ã·ããªãªã§ã¯ãåŸ
ã¡æé ð ãå€ãããã䞊è¡ã·ã¹ãã âžð⯠ãäœ¿ãæ¹ãã¯ããã«çã«ããªã£ãŠããŸãã
-ããã¯ãã»ãšãã©ã®Webã¢ããªã±ãŒã·ã§ã³ã«åœãŠã¯ãŸããŸãã
+ããã¯ãã»ãšãã©ã® Web ã¢ããªã±ãŒã·ã§ã³ã«ãåœãŠã¯ãŸããŸãã
-å€ãã®ãŠãŒã¶ãŒãããŸããããµãŒããŒã¯ãããŸã匷ããªãåç·ã§ã®ãªã¯ãšã¹ãã®éä¿¡ãåŸ
æ©ðããŠããŸãã
+ãšãŠãå€ãã®ãŠãŒã¶ãŒãããŸããããµãŒãã¯åœŒãã®ããŸãéããªãåç·ãããªã¯ãšã¹ããå±ãã®ãåŸ
ã¡ ðã
-ãããŠãã¬ã¹ãã³ã¹ãè¿ã£ãŠããã®ãããäžåºŠåŸ
æ©ðããŸãã
+ãã®åŸãã¬ã¹ãã³ã¹ãæ»ã£ãŠããã®ããŸãåŸ
ã¡ãŸã ðã
-ãã®ãåŸ
æ©ðãã¯ãã€ã¯ãç§åäœã§ãããããã§ãããã¹ãŠåç®ãããšãæçµçã«ã¯ããªãåŸ
æ©ããããšã«ãªããŸãã
+ãã®ãåŸ
ã¡ãð ã¯ãã€ã¯ãç§åäœã§æž¬ãããŸããããã¹ãŠãåèšãããšãçµå±ããªãã®åŸ
ã¡ã«ãªããŸãã
-ããããWeb APIãžã®éåæâžðâ¯ã³ãŒãã®å©çšãçã«ããªã£ãŠããçç±ã§ãã
+ã ãããããWeb API ã«ã¯éåæ âžð⯠ã³ãŒãã䜿ãã®ãçã«ããªã£ãŠããŸãã
-ã»ãšãã©ã®æ¢åã®äººæ°ã®ããPythonãã¬ãŒã ã¯ãŒã¯ (FlaskãDjangoãå«ã) ã¯ãPythonã®æ°ããéåææ©èœãã§ããåã«äœæãããŸããããããã£ãŠããããããããã€ããæ¹æ³ã¯ã䞊åå®è¡ãšãæ°æ©èœã»ã©åŒ·åã§ã¯ãªãå€ã圢åŒã®éåæå®è¡ããµããŒãããŸãã
+ããããNodeJS ã人æ°ã«ããèŠå (NodeJS èªäœã¯äžŠåã§ã¯ãããŸãã) ã§ãããããã°ã©ãã³ã°èšèªãšããŠã® Go ã®åŒ·ã¿ã§ããããŸãã
-ããããWebSocketã®ãµããŒãã远å ããããã«ãéåæWeb Python (ASGI) ã®äž»ãªä»æ§ã¯Djangoã§éçºãããŸããã
+ãããŠãããã **FastAPI** ã§åŸãããããã©ãŒãã³ã¹ã®æ°Žæºã§ãã
-ãã®ãããªéåææ§ãNodeJSã人æ°ã«ããçç±ã§ã (NodeJSã¯äžŠåã§ã¯ãããŸããã)ããããŠãããã°ã©ãã³ã°èšèªãšããŠã®Goã®åŒ·ã¿ã§ããããŸãã
+ããã«ãäžŠåæ§ãšéåææ§ãåæã«æŽ»çšã§ããããããã¹ããããå€ãã® NodeJS ãã¬ãŒã ã¯ãŒã¯ããé«ãæ§èœãçºæ®ããC ã«è¿ãã³ã³ãã€ã«èšèªã§ãã Go ãšåçã®æ§èœã«ãªããŸã (ãã¹ãŠ Starlette ã®ãããã§ã)ã
-ãããŠãããã¯**FastAPI**ã§åŸãããããã©ãŒãã³ã¹ãšåãã¬ãã«ã§ãã
+### 䞊è¡åŠçã¯äžŠååŠçããåªããŠããïŒ { #is-concurrency-better-than-parallelism }
-ãŸãã䞊ååŠçãšéåæåŠçãåæã«å®è¡ã§ããããããã¹ãæžã¿ã®ã»ãšãã©ã®NodeJSãã¬ãŒã ã¯ãŒã¯ãããé«ããGoãšåçã®ããã©ãŒãã³ã¹ãåŸãããŸããGoã¯ãCã«è¿ãã³ã³ãã€ã«èšèªã§ã (Starletteã«æè¬ããŸã)ã
+ãããïŒããããã®è©±ã®æèšã§ã¯ãããŸããã
-### 䞊è¡ã¯äžŠåãããåªããŠããŸããïŒ
+䞊è¡åŠçã¯äžŠååŠçãšã¯ç°ãªããŸãããããŠå€ãã®åŸ
ã¡æéã䌎ã**ç¹å®ã®**ã·ããªãªã§ã¯åªããŠããŸãããã®ãããäžè¬ã« Web ã¢ããªéçºã§ã¯äžŠååŠçããã¯ããã«é©ããŠããŸãããããããã¹ãŠã«å¯ŸããŠæè¯ãšããããã§ã¯ãããŸããã
-ããïŒããã¯ãã®è©±ã®æèšã§ã¯ãããŸããã
+ãã©ã³ã¹ãåãããã«ã次ã®çãç©èªãæ³åããŠãã ããã
-䞊è¡åŠçã¯äžŠååŠçãšã¯ç°ãªããŸããå€ãã®åŸ
æ©ã䌎ã**ç¹å®ã®**ã·ããªãªã«é©ããŠããŸãããã®ãããäžè¬ã«ãWebã¢ããªã±ãŒã·ã§ã³éçºã§ã¯äžŠååŠçãããã¯ããã«åªããŠããŸãããããããã¹ãŠã«å¯ŸããŠããè¯ããšããããã§ã¯ãããŸããã
+> 倧ãããŠæ±ããå®¶ãæé€ããªããã°ãªããªãã
-ãªã®ã§ããã©ã³ã¹ããšãããã«ã次ã®ç©èªãæ³åããŠäžãã:
-
-> ããªãã¯å€§ãããŠæ±ããå®¶ãæé€ããå¿
èŠããããŸãã
-
-*ã¯ãã以äžã§ã*ã
+*ã¯ããããã§ç©èªã¯å
šéšã§ã*ã
---
-åŸ
æ©ðãããå®¶ã®äžã®è€æ°ã®å Žæã§ããããã®ä»äºãããã ãã§ãã
+ã©ãã«ãåŸ
ã¡ ð ã¯ãªããå®¶ã®è€æ°ç®æã§å€§éã®äœæ¥ãããã ãã§ãã
-ããªãã¯ãã³ããŒã¬ãŒã®äŸã®ããã«ãæåã¯ãªãã³ã°ã«ãŒã ãæ¬¡ã«ãããã³ã®ããã«é çªã«ãã£ãŠããããšãã§ããŸãããäœããåŸ
æ©ðããŠããããã§ã¯ãªãããã ã²ãããã«æé€ãããã ãã§ãé çªã¯äœã«ã圱é¿ããŸããã
+ãã³ããŒã¬ãŒã®äŸã®ããã«é çªã決ããŠããŸããªãã³ã°ã次ã«ãããã³ããšé²ããŠãããã®ã§ãããäœããåŸ
〠ð ããã§ã¯ãªããã²ãããæé€ããã ããªã®ã§ãé çªã¯äœã圱é¿ããŸããã
-é çªã®æç¡ã«é¢ä¿ãªã (䞊è¡ã«) åãæéãããããåãéã®äœæ¥ãè¡ãããããšã«ãªãã§ãããã
+é çªã®æç¡ (äžŠè¡æ§ã®æç¡) ã«é¢ä¿ãªããçµäºãŸã§ã«åãæéãããããåãäœæ¥éãããªãããšã«ãªããŸãã
-ãããããã®å Žåã8人ã®å
ã¬ãžä¿/æç人/çŸåœ¹æž
æå¡ðšâð³ðšâð³ðšâð³ðšâð³ðšâð³ðšâð³ðšâð³ðšâð³ãæé
ã§ããŠããããã (ããã«ããªãã) ãå®¶ã®å¥ã
ã®å Žæãæé€ã§ããã°ã远å ã®å©ããåããŠããã¹ãŠã®äœæ¥ã**䞊å**ã«è¡ããã¯ããã«æ©ãçµäºã§ããã§ãããã
+ããããã®å Žåã8 人ã®å
ã¬ãžä¿/æç人/çŸæž
æå¡ãé£ããŠããŠããããã (ããªããå ããŠ) å®¶ã®å¥ã
ã®ãšãªã¢ãæé€ã§ããã°ã**䞊å** ã«äœæ¥ã§ããããæ©ãçµããããŸãã
-ãã®ã·ããªãªã§ã¯ãæž
æå¡ (ããªããå«ã) ã®ãããããããã»ããµãšãªããããããã®åœ¹å²ãæãããŸãã
+ãã®ã·ããªãªã§ã¯ãåæž
æå¡ (ããªããå«ã) ãããã»ããµã§ããããããããèªåã®åœ¹å²ãæãããŸãã
-ãŸããå®è¡æéã®ã»ãšãã©ã¯ (åŸ
æ©ã§ã¯ãªã) å®éã®äœæ¥ã«è²»ããããã³ã³ãã¥ãŒã¿ã§ã®äœæ¥ã¯CPUã«ãã£ãŠè¡ãããŸãããããã®åé¡ã¯ãCPUããŠã³ãããšèšããŸãã
+ãããŠå®è¡æéã®å€§å㯠(åŸ
ã¡ã§ã¯ãªã) å®äœæ¥ãå ããã³ã³ãã¥ãŒã¿ã§ã®äœæ¥ã¯ CPU ã«ãã£ãŠè¡ãããŸãããããã®åé¡ã¯ãCPU ããŠã³ãããšåŒã°ããŸãã
---
-CPUããŠã³ãæäœã®äžè¬çãªäŸã¯ãè€éãªæ°åŠåŠçãå¿
èŠãªãã®ã§ãã
+CPU ããŠã³ããªæäœã®äžè¬çãªäŸã¯ãè€éãªæ°å€åŠçãå¿
èŠãªãã®ã§ãã
äŸãã°:
* **ãªãŒãã£ãª** ã **ç»ååŠç**ã
-* **ã³ã³ãã¥ãŒã¿ããžã§ã³**: ç»åã¯æ°çŸäžã®ãã¯ã»ã«ã§æ§æãããåãã¯ã»ã«ã«ã¯3ã€ã®å€/è²ããããéåžžããããã®ãã¯ã»ã«ã§äœããåæã«èšç®ããå¿
èŠãããåŠçã
-* **æ©æ¢°åŠç¿**: éåžžãå€ãã®ãè¡åããšããã¯ãã«ãã®ä¹ç®ãå¿
èŠã§ãã巚倧ãªã¹ãã¬ããã·ãŒãã«æ°åãå
¥ããŠããããåæã«å
šéšæãåãããããšãèããŠã¿ãŠãã ããã
-* **ãã£ãŒãã©ãŒãã³ã°**: ããã¯æ©æ¢°åŠç¿ã®ãµããã£ãŒã«ãã§ãããããåãããšãåœãŠã¯ãŸããŸããä¹ç®ããæ°åãããåäžã®ã¹ãã¬ããã·ãŒãã§ã¯ãªãããããã®èšå€§ãªéåã§ãå€ãã®å Žåããããã®ã¢ãã«ãæ§ç¯ããã³/ãŸãã¯äœ¿çšããããã«ç¹å¥ãªããã»ããµã䜿çšããŸãã
+* **ã³ã³ãã¥ãŒã¿ããžã§ã³**: ç»åã¯æ°çŸäžã®ãã¯ã»ã«ã§æ§æãããåãã¯ã»ã«ã«ã¯ 3 ã€ã®å€/è²ããããéåžžããããã®ãã¯ã»ã«äžã§åæã«äœããèšç®ããå¿
èŠããããŸãã
+* **æ©æ¢°åŠç¿**: å€ãã®ãè¡åããããã¯ãã«ãã®ä¹ç®ãå¿
èŠã«ãªããŸãã巚倧ãªã¹ãã¬ããã·ãŒãã«æ°åãå
¥ã£ãŠããŠãããããåæã«ãã¹ãŠæãåãããããšãæ³åããŠãã ããã
+* **ãã£ãŒãã©ãŒãã³ã°**: æ©æ¢°åŠç¿ã®ãµããã£ãŒã«ããªã®ã§åæ§ã§ããæãåãããæ°åã 1 ã€ã®ã¹ãã¬ããã·ãŒãã§ã¯ãªãèšå€§ãªéåã§ãããå€ãã®å Žåããããã®ã¢ãã«ãæ§ç¯/å©çšããããã®ç¹å¥ãªããã»ããµã䜿ããŸãã
-### 䞊è¡åŠç + 䞊ååŠç: Web + æ©æ¢°åŠç¿
+### 䞊è¡åŠç + 䞊ååŠç: Web + æ©æ¢°åŠç¿ { #concurrency-parallelism-web-machine-learning }
-**FastAPI**ã䜿çšãããšãWebéçºã§éåžžã«äžè¬çãªäžŠè¡åŠç (NodeJSã®äž»ãªé
åãšåããã®) ãå©çšã§ããŸãã
+**FastAPI** ã§ã¯ãWeb éçºã§éåžžã«äžè¬çãªäžŠè¡åŠç (NodeJS ã®äž»ãªé
åãšåã) ãæŽ»çšã§ããŸãã
-ãã ããæ©æ¢°åŠç¿ã·ã¹ãã ã®ãã㪠**CPUããŠã³ã** ã¯ãŒã¯ããŒãã«å¯ŸããŠã䞊ååŠçãšãã«ãããã»ãã·ã³ã° (è€æ°ã®ããã»ã¹ã䞊åã§å®è¡ããã) ã®å©ç¹ã掻çšããããšãã§ããŸãã
+åæã«ãæ©æ¢°åŠç¿ã·ã¹ãã ã®ãã㪠**CPU ããŠã³ã** ãªã¯ãŒã¯ããŒãã«å¯ŸããŠã䞊ååŠçããã«ãããã»ãã·ã³ã° (è€æ°ããã»ã¹ã®äžŠåå®è¡) ã®å©ç¹ã掻çšã§ããŸãã
-ããã«ãPythonã**ããŒã¿ãµã€ãšã³ã¹**ãæ©æ¢°åŠç¿ãç¹ã«ãã£ãŒãã©ãŒãã³ã°ã®äž»èŠèšèªã§ãããšããåçŽãªäºå®ã«ãããFastAPIã¯ããŒã¿ãµã€ãšã³ã¹/æ©æ¢°åŠç¿ã®Web APIããã³ã¢ããªã±ãŒã·ã§ã³ (ä»ã®å€ãã®ã¢ããªã±ãŒã·ã§ã³ãšã®) ã«éåžžã«ããé©åããŠããŸãã
+ããã«ãPython ã **ããŒã¿ãµã€ãšã³ã¹**ãæ©æ¢°åŠç¿ãç¹ã«ãã£ãŒãã©ãŒãã³ã°ã®äž»èŠèšèªã§ãããšããäºå®ãçžãŸã£ãŠãFastAPI ã¯ããŒã¿ãµã€ãšã³ã¹/æ©æ¢°åŠç¿ã® Web API ãã¢ããªã±ãŒã·ã§ã³ (ã»ã倿°) ã«éåžžã«é©ããŠããŸãã
-æ¬çªç°å¢ã§ãã®äžŠååŠçãå®çŸããæ¹æ³ã«ã€ããŠã¯ã[ãããã€](deployment/index.md){.internal-link target=_blank}ã«é¢ããã»ã¯ã·ã§ã³ãåç
§ããŠãã ããã
+æ¬çªç°å¢ã§ãã®äžŠåæ§ãå®çŸããæ¹æ³ã¯ã[ãããã€](deployment/index.md){.internal-link target=_blank} ã®ã»ã¯ã·ã§ã³ãåç
§ããŠãã ããã
-## `async` ãš `await`
+## `async` ãš `await` { #async-and-await }
-çŸä»£çãªããŒãžã§ã³ã®Pythonã«ã¯ãéåæã³ãŒããå®çŸ©ããéåžžã«çŽæçãªæ¹æ³ããããŸããããã«ãããéåžžã®ãã·ãŒã±ã³ã·ã£ã«ãã³ãŒãã®ããã«èŠããé©åãªã¿ã€ãã³ã°ã§ãåŸ
æ©ãããŸãã
+ã¢ãã³ãª Python ã«ã¯ãéåæã³ãŒãããšãŠãçŽæçã«å®çŸ©ããæ¹æ³ããããŸããããã«ãããéåžžã®ãã·ãŒã±ã³ã·ã£ã«ããªã³ãŒãã®ããã«æžããŠãé©åãªã¿ã€ãã³ã°ã§ãåŸ
ã¡ããè¡ã£ãŠãããŸãã
-çµæãè¿ãåã«åŸ
æ©ããå¿
èŠãããããããã®æ°ããPythonæ©èœããµããŒãããæäœãããå Žåã¯ã次ã®ããã«ã³ãŒãã£ã³ã°ã§ããŸãã
+çµæãè¿ãåã«åŸ
ã¡ãå¿
èŠã§ããããã®æ°ãã Python æ©èœããµããŒãããŠããæäœãããå Žåãæ¬¡ã®ããã«æžããŸãã
```Python
burgers = await get_burgers(2)
```
-ã«ã®ã¯ `await` ã§ããçµæã `burgers`ã«ä¿åããåã«ã`get_burgers(2)`ã®åŠçðã®å®äºãåŸ
ã€âžå¿
èŠãããããšãPythonã«äŒããŸããããã§Pythonã¯ããã®éã« (å¥ã®ãªã¯ãšã¹ããåä¿¡ãããªã©) äœãä»ã®ããšãã§ããðâ¯ããšãç¥ããŸãã
+ããã§ã®éµã¯ `await` ã§ãã`burgers` ã«çµæãä¿åããåã«ã`get_burgers(2)` ãããã¹ãããšãçµããã®ã âž åŸ
〠ð ããã« Python ã«äŒããŸããããã«ãã Python ã¯ããã®éã« (å¥ã®ãªã¯ãšã¹ããåãåããªã©) ã»ãã®ããšã ð ⯠ã§ãããšåãããŸãã
-`await` ãæ©èœããããã«ã¯ãéåæåŠçããµããŒããã颿°å
ã«ããå¿
èŠããããŸããããã¯ã`async def` ã§é¢æ°ã宣èšããã ãã§ããã§ã:
+`await` ãæ©èœããã«ã¯ããã®éåææ§ããµããŒããã颿°ã®å
éšã§ãªããã°ãªããŸããããã®ããã«ã¯ `async def` ã§å®£èšããŸã:
```Python hl_lines="1"
async def get_burgers(number: int):
- # ãã³ããŒã¬ãŒãäœæããããã«éåæåŠçãå®è¡
+ # ãã³ããŒã¬ãŒãäœãããã«éåæã®åŠçãè¡ã
return burgers
```
-...`def` ã®ãããã«:
+...`def` ã®ä»£ããã«:
```Python hl_lines="2"
-# éåæã§ã¯ãªã
+# ããã¯éåæã§ã¯ãªã
def get_sequential_burgers(number: int):
- # ãã³ããŒã¬ãŒãäœæããããã«ã·ãŒã±ã³ã·ã£ã«ãªåŠçãå®è¡
+ # ãã³ããŒã¬ãŒãäœãããã«ã·ãŒã±ã³ã·ã£ã«ãªåŠçãè¡ã
return burgers
```
-`async def` ã䜿çšãããšãPythonã«ãã®é¢æ°å
ã§ `await` åŒ (ãã®é¢æ°ã®å®è¡ããäžæåæ¢âžãããçµæãæ»ããŸã§ä»ã®äœããå®è¡ðãã) ãèªèããªããã°ãªããªããšäŒããããšãã§ããŸãã
-`async def` 颿°ãåŒã³åºããšãã¯ããawaitãããªããã°ãªããŸããããããã£ãŠãããã¯æ©èœããŸãã:
+`async def` ã䜿ããšãPython ã¯ãã®é¢æ°å
ã§ `await` åŒã«æ³šæãã颿°ã®å®è¡ããäžæåæ¢ãâž ããŠã»ãã®ããšããã«è¡ã ðãæ»ã£ãŠããããšãã§ãããšåãããŸãã
+
+`async def` ãªé¢æ°ãåŒã¶ãšãã¯ãawaitãããªããã°ãªããŸããããããã£ãŠã次ã¯åããŸãã:
```Python
-# get_burgersã¯async defã§å®çŸ©ãããŠããã®ã§åäœããªã
+# åããŸãããget_burgers 㯠async def ã§å®çŸ©ãããŠããŸã
burgers = get_burgers(2)
```
---
-ãããã£ãŠã `await` ã§åŒã³åºãããšãã§ããã©ã€ãã©ãªã䜿çšããŠããå Žåã¯ã次ã®ããã« `async def` ã䜿çšããŠãããã䜿çšãã*path operation 颿°*ãäœæããå¿
èŠããããŸã:
+ãã®ããã`await` ã§åŒã¹ããšè¬³ã£ãŠããã©ã€ãã©ãªã䜿ã£ãŠããå Žåã¯ãããã䜿ã *path operation 颿°* ã `async def` ã§äœãå¿
èŠããããŸããäŸãã°:
```Python hl_lines="2-3"
@app.get('/burgers')
@@ -314,86 +349,96 @@ async def read_burgers():
return burgers
```
-### ããçºå±çãªæè¡è©³çް
+### ããçºå±çãªæè¡è©³çް { #more-technical-details }
-`await` 㯠`async def` ã§å®çŸ©ããã颿°å
ã§ã®ã¿äœ¿çšã§ããããšãããã£ãããšæããŸãã
+`await` 㯠`async def` ã§å®çŸ©ããã颿°ã®å
éšã§ãã䜿ããªãããšã«æ°ã¥ãããããããŸããã
-ãããåæã«ã`async def` ã§å®çŸ©ããã颿°ã¯ãawaitããããå¿
èŠããããŸãããªã®ã§ã`async def` ãæã€é¢æ°ã¯ã`async def` ã§å®çŸ©ããã颿°å
ã§ã®ã¿åŒã³åºããŸãã
+åæã«ã`async def` ã§å®çŸ©ããã颿°ã¯ãawaitããããå¿
èŠããããŸããã€ãŸãã`async def` ãæã€é¢æ°ã¯ããã¯ã `async def` ã§å®çŸ©ããã颿°ã®å
éšããããåŒã¹ãŸããã
-ã§ã¯ããã®ãã¯ããªãšåµã®åé¡ã«ã€ããŠãæåã® `async` 颿°ãã©ã®ããã«åŒã³åºãã®ã§ããããïŒ
+ã§ã¯ããã¯ããªãšåµã®è©±ã®ããã«ãæåã® `async` 颿°ã¯ã©ãåŒã¶ã®ã§ããããïŒ
-**FastAPI**ã䜿çšããŠããå Žåããã®ãæåã®ã颿°ã*path operation 颿°*ã§ãããFastAPIãæ£ããå®è¡ããæ¹æ³ãç¥ã£ãŠããã®ã§ãå¿é
ããå¿
èŠã¯ãããŸããã
+**FastAPI** ã䜿ã£ãŠããå Žåã¯å¿é
ãããŸããããã®ãæåã®ã颿°ã¯ *path operation 颿°* ã§ãFastAPI ãé©åã«å®è¡ããŠãããŸãã
-ããããFastAPI以å€ã§ `async` / `await` ã䜿çšãããå Žåã¯ãå
¬åŒPythonããã¥ã¡ã³ããåç
§ããŠäžããã
+ããããFastAPI ã䜿ããã« `async` / `await` ã䜿ãããå ŽåããããŸãã
-### éåæã³ãŒãã®ä»ã®åœ¢åŒ
+### èªåã§ async ã³ãŒããæžã { #write-your-own-async-code }
-`async` ãš `await` ã䜿çšããã¹ã¿ã€ã«ã¯ããã®èšèªã§ã¯æ¯èŒçæ°ãããã®ã§ãã
+Starlette (**FastAPI** ã) 㯠AnyIO ã®äžã«æ§ç¯ãããŠãããæšæºã©ã€ãã©ãªã® asyncio ãš Trio ã®äž¡æ¹ã«å¯Ÿå¿ããŠããŸãã
-éåæã³ãŒãã®æäœãã¯ããã«ç°¡åã«ãªããŸãã
+ç¹ã«ãããªãèªèº«ã®ã³ãŒãå
ã§ãããé«åºŠãªãã¿ãŒã³ãå¿
èŠãšããçºå±çãªäžŠè¡åŠçã®ãŠãŒã¹ã±ãŒã¹ã«å¯ŸããŠãAnyIO ãçŽæ¥äœ¿ããŸãã
-ç䟡㪠(ãŸãã¯ã»ãšãã©åäžã®) æ§æããæè¿ã®ããŒãžã§ã³ã®JavaScript (ãã©ãŠã¶ããã³NodeJS) ã«ãæè¿çµã¿èŸŒãŸããŸããã
+仮㫠FastAPI ã䜿ã£ãŠããªããŠããAnyIO ã§ç¬èªã® async ã¢ããªã±ãŒã·ã§ã³ãæžãã°ãé«ãäºææ§ãšå©ç¹ (äŸ: æ§é åäžŠè¡æ§) ãåŸãããŸãã
-ãããããã®åã¯ãéåæã³ãŒãã®åŠçã¯ããªãè€éã§é£è§£ã§ããã
+ç§ã¯ AnyIO ã®äžã«èãå±€ãšããŠãåæ³šéãå°ãæ¹åããããè¯ã**è£å®**ã**ã€ã³ã©ã€ã³ãšã©ãŒ**ãªã©ãåŸãããã®å¥ã©ã€ãã©ãªãäœããŸããããŸãã**çè§£**ããŠ**èªåã§ async ã³ãŒããæžã**ã®ã«åœ¹ç«ã€ãã¬ã³ããªãŒãªã€ã³ãã/ãã¥ãŒããªã¢ã«ããããŸã: Asyncerãç¹ã«ã**async ã³ãŒããšéåžžã®** (ããããã³ã°/åæ) **ã³ãŒããçµã¿åããã**å¿
èŠãããå Žåã«æçšã§ãã
-以åã®ããŒãžã§ã³ã®Pythonã§ã¯ãã¹ã¬ãããGeventãå©çšã§ããŸãããããããã³ãŒãã¯çè§£ããããã¯ããããŠãèå¯ãã¯ããã«è€éã§ãã
+### éåæã³ãŒãã®ä»ã®åœ¢åŒ { #other-forms-of-asynchronous-code }
-以åã®ããŒãžã§ã³ã®NodeJS / ãã©ãŠã¶JavaScriptã§ã¯ããã³ãŒã«ããã¯ãã䜿çšããŠããŸãããããã¯ããã³ãŒã«ããã¯å°çãã«ã€ãªãããŸãã
+`async` ãš `await` ã䜿ããã®ã¹ã¿ã€ã«ã¯ãèšèªãšããŠã¯æ¯èŒçæ°ãããã®ã§ãã
-## ã³ã«ãŒãã³
+ããããããã«ããéåæã³ãŒãã®åãæ±ãã¯å€§å¹
ã«ç°¡åã«ãªããŸãã
-**ã³ã«ãŒãã³**ã¯ã`async def` 颿°ã«ãã£ãŠè¿ããããã®ãæãéåžžã«æŽèœãçšèªã§ããããã¯ãéå§ã§ããŠããã€ãçµäºãã颿°ã®ãããªãã®ã§ããããå
éšã« `await` ããããšãã¯å
éšçã«äžæåæ¢âžãããããšããããã®ã ãšPythonã¯èªèããŠããŸãã
+åç (ã»ãŒåäž) ã®æ§æãæè¿ã® JavaScript (ãã©ãŠã¶ãš NodeJS) ã«ãå°å
¥ãããŸããã
-`async` ãš `await` ãçšããéåæã³ãŒãã䜿çšãããã¹ãŠã®æ©èœã¯ããã³ã«ãŒãã³ãã䜿çšãããã®ãšããŠäœåºŠããŸãšããããŠããŸããGoã®äž»èŠæ©èœã§ããããŽã«ãŒãã³ãã«çžåœããŸãã
+ãã以åã¯ãéåæã³ãŒãã®æ±ãã¯ããªãè€éã§é£è§£ã§ããã
-## ãŸãšã
+以åã® Python ã§ã¯ã¹ã¬ããã Gevent ã䜿ããŸããããã³ãŒãã®çè§£ã»ãããã°ã»æèãã¯ããã«é£ãããªããŸãã
-äžè¿°ãããã¬ãŒãºãèŠãŠã¿ãŸããã:
+以åã® NodeJS / ãã©ãŠã¶ JavaScript ã§ã¯ãã³ãŒã«ããã¯ãã䜿ã£ãŠããããã³ãŒã«ããã¯å°çããæããŸããã
-> çŸä»£çã®Pythonã¯ã**éåæã³ãŒã**ãããã**ã³ã«ãŒãã³**ããšç§°ããããã®ãå©çšããŠãµããŒãããŠããŸãããã㯠**`async` ãš `await`** æ§æãçšããŸãã
+## ã³ã«ãŒãã³ { #coroutines }
-ä»ã§ã¯ããã®æå³ãããçè§£ã§ããã¯ãã§ããâš
+**ã³ã«ãŒãã³**ã¯ã`async def` 颿°ãè¿ããã®ãæããã¡ãã£ãšæŽèœãçšèªã§ããPython ã¯ããããéå§ã§ããŠãã€ãçµäºãã颿°ã®ãããªãã®ãšããŠæ±ããŸãããå
éšã« `await` ããããã³ã«å
éšçã«äžæåæ¢ âž ãããããããªããã®ãšããŠèªèããŸãã
-(Starletteãä»ããŠ) FastAPIã«åãäžããŠãå°è±¡çãªããã©ãŒãã³ã¹ãå®çŸããŠãããã®ã¯ããããã¹ãŠã§ãã
+`async` ãš `await` ãçšããéåæã³ãŒãã®æ©èœå
šäœã¯ããã°ãã°ãã³ã«ãŒãã³ã䜿ãããšèŠçŽãããŸãããã㯠Go ã®äž»èŠæ©èœãGoroutinesãã«çžåœããŸãã
-## éåžžã«çºå±çãªæè¡ç詳现
+## ãŸãšã { #conclusion }
+
+äžã®ãã¬ãŒãºãããäžåºŠèŠãŠã¿ãŸããã:
+
+> ã¢ãã³ãª Python 㯠**ãéåæã³ãŒãã** ã **ãã³ã«ãŒãã³ã** ãšåŒã°ããä»çµã¿ã§ãµããŒãããŠãããæ§æã¯ **`async` ãš `await`** ã§ãã
+
+ä»ãªããããæå³ãåããã¯ãã§ããâš
+
+ããããã¹ãŠã (Starlette ãéããŠ) FastAPI ãæ¯ããå°è±¡çãªããã©ãŒãã³ã¹ãå®çŸããŠããŸãã
+
+## éåžžã«çºå±çãªæè¡ç詳现 { #very-technical-details }
/// warning | 泚æ
-æããã¹ãããããŠãè¯ãã§ãããã
+ããããèªã¿é£ã°ããŠã倧äžå€«ã§ãã
-ãã®éšåã¯**FastAPI**ã®ä»çµã¿ã«é¢ããéåžžã«æè¡çãªè©³çްã§ãã
+ãã㯠**FastAPI** ã®å
éšåäœã«é¢ããããšãŠãæè¡çãªè©³çްã§ãã
-ããªãã®æè¡ç¥è (ã³ã«ãŒãã³ãã¹ã¬ãããããããã³ã°ãªã©) ããããFastAPIã `async def` ãšéåžžã® `def` ãã©ã®ããã«åŠçãããç¥ãããå Žåã¯ãå
ã«é²ãã§ãã ããã
+(ã³ã«ãŒãã³ãã¹ã¬ãããããããã³ã°çã®) æè¡ç¥èããããFastAPI ã `async def` ãšéåžžã® `def` ãã©ãæ±ããã«èå³ãããå Žåã¯ãèªã¿é²ããŠãã ããã
///
-### Path operation 颿°
+### Path operation 颿° { #path-operation-functions }
-*path operation 颿°*ã `async def` ã®ä»£ããã«éåžžã® `def` ã§å®£èšãããšã(ãµãŒããŒããããã¯ããã®ã§) çŽæ¥åŒã³åºã代ããã«å€éšã¹ã¬ããããŒã« (awaitããã) ã§å®è¡ãããŸãã
+*path operation 颿°* ã `async def` ã§ã¯ãªãéåžžã® `def` ã§å®£èšããå Žåã(ãµãŒãããããã¯ããŠããŸããã) çŽæ¥åŒã³åºãããã®ã§ã¯ãªããå€éšã®ã¹ã¬ããããŒã«ã§å®è¡ããããããåŸ
æ©ããŸãã
-äžèšã®æ¹æ³ãšéã£ãæ¹æ³ã®å¥ã®éåæãã¬ãŒã ã¯ãŒã¯ããæ¥ãŠãããå°ããªããã©ãŒãã³ã¹åäž (çŽ100ããç§) ã®ããã«éåžžã® `def` ã䜿çšããŠäºçŽ°ãªæŒç®ã®ã¿è¡ã *path operation 颿°* ãå®çŸ©ããã®ã«æ
£ããŠããå Žåã¯ã**FastAPI**ã§ã¯ãŸã£ããéã®å¹æã«ãªãããšã«æ³šæããŠãã ããããã®ãããªå Žåã*path operation 颿°* ãããããã³ã°I/Oãå®è¡ããªãã®ã§ããã°ã`async def` ã®äœ¿çšããå§ãããŸãã
+äžèšãšã¯ç°ãªãåäœã®å¥ã®éåæãã¬ãŒã ã¯ãŒã¯ããæ¥ãŠãããã»ãã®ããããªããã©ãŒãã³ã¹åäž (çŽ 100 ããç§) ãçã£ãŠãèšç®ã®ã¿ã®äºçŽ°ãª *path operation 颿°* ãçŽ ã® `def` ã§å®çŸ©ããããšã«æ
£ããŠããå Žåã**FastAPI** ã§ã¯å¹æããŸã£ããéã«ãªãç¹ã«æ³šæããŠãã ããããããã®å Žåã*path operation 颿°* ãããããã³ã°ãª I/O ãè¡ãã³ãŒãã䜿ã£ãŠããªãéãã`async def` ã䜿ã£ãæ¹ãè¯ãã§ãã
-ããã§ããã©ã¡ãã®ç¶æ³ã§ãã**FastAPI**ãéå»ã®ãã¬ãŒã ã¯ãŒã¯ããã (ãŸãã¯ããã«å¹æµããã»ã©) [é«éã«ãªã](index.md#_10){.internal-link target=_blank}å¯èœæ§ããããŸãã
+ããã§ããã©ã¡ãã®ç¶æ³ã§ãã**FastAPI** ã¯ããªãã以å䜿ã£ãŠãããã¬ãŒã ã¯ãŒã¯ããã (å°ãªããšãåçã«) [é«éã§ãã](index.md#performance){.internal-link target=_blank} å¯èœæ§ãé«ãã§ãã
-### äŸåé¢ä¿
+### äŸåé¢ä¿ { #dependencies }
-äŸåé¢ä¿ã«ã€ããŠãåæ§ã§ããäŸåé¢ä¿ã `async def` ã§ã¯ãªãæšæºã® `def` 颿°ã§ããå Žåãå€éšã¹ã¬ããããŒã«ã§å®è¡ãããŸãã
+[äŸåé¢ä¿](tutorial/dependencies/index.md){.internal-link target=_blank} ã«ã€ããŠãåæ§ã§ããäŸåé¢ä¿ã `async def` ã§ã¯ãªãæšæºã® `def` 颿°ã§ããå Žåãå€éšã®ã¹ã¬ããããŒã«ã§å®è¡ãããŸãã
-### ãµãäŸåé¢ä¿
+### ãµãäŸåé¢ä¿ { #sub-dependencies }
-(颿°å®çŸ©ã®ãã©ã¡ãŒã¿ãŒãšããŠ) çžäºã«å¿
èŠãªè€æ°ã®äŸåé¢ä¿ãšãµãäŸåé¢ä¿ãèšå®ã§ããŸããäžéšã¯ `async def` ã§äœæãããä»ã®äžéšã¯éåžžã® `def` ã§äœæãããŸããããã§ãåäœããéåžžã® `def`ã§äœæããããã®ã¯ããawaitãããã代ããã« (ã¹ã¬ããããŒã«ãã) å€éšã¹ã¬ããã§åŒã³åºãããŸãã
+è€æ°ã®äŸåé¢ä¿ã [ãµãäŸåé¢ä¿](tutorial/dependencies/sub-dependencies.md){.internal-link target=_blank} ã (颿°å®çŸ©ã®ãã©ã¡ãŒã¿ãšããŠ) çžäºã«èŠæ±ãããããŸãããã®äžéšã¯ `async def`ãä»ã¯éåžžã® `def` ã§äœãããŠããŠãåäœããŸããéåžžã® `def` ã§äœããããã®ã¯ãawaitãããã代ããã«ãå€éšã¹ã¬ããããŒã«ããã¹ã¬ããäžã§åŒã³åºãããŸãã
-### ãã®ä»ã®ãŠãŒãã£ãªãã£é¢æ°
+### ãã®ä»ã®ãŠãŒãã£ãªãã£é¢æ° { #other-utility-functions }
-ããªããçŽæ¥åŒã³åºããŠãŒãã£ãªãã£é¢æ°ã¯éåžžã® `def` ãŸã㯠`async def` ã§äœæã§ããFastAPIã¯åŒã³åºãæ¹æ³ã«åœ±é¿ãäžããŸããã
+ããªããçŽæ¥åŒã³åºããŠãŒãã£ãªãã£é¢æ°ã¯ãéåžžã® `def` ã§ã `async def` ã§ãæ§ããŸãããFastAPI ã¯ãã®åŒã³åºãæ¹ã«åœ±é¿ãäžããŸããã
-ããã¯ãFastAPIãåŒã³åºã颿°ãšå¯Ÿç
§çã§ã: *path operation 颿°*ãšäŸåé¢ä¿ã
+ããã¯ãFastAPI ãããªãã®ä»£ããã«åŒã³åºã颿° (ããªãã¡ *path operation 颿°* ãšäŸåé¢ä¿) ãšã¯å¯Ÿç
§çã§ãã
-ãŠãŒãã£ãªãã£é¢æ°ã `def` ã䜿çšããéåžžã®é¢æ°ã§ããå Žåãã¹ã¬ããããŒã«ã§ã¯ãªãçŽæ¥ (ã³ãŒãã§èšè¿°ãããšããã«) åŒã³åºãããŸãã颿°ã `async def` ã䜿çšããŠäœæãããŠããå Žåã¯ãåŒã³åºãéã« `await` ããå¿
èŠããããŸãã
+ãŠãŒãã£ãªãã£é¢æ°ã `def` ã®éåžžé¢æ°ã§ããã°ã(ããªãã®ã³ãŒãã«æžãããšããã«) çŽæ¥åŒã³åºãããã¹ã¬ããããŒã«ã§ã¯å®è¡ãããŸããã颿°ã `async def` ã§äœãããŠããå Žåã¯ããã®é¢æ°ãåŒã¶ãšãã« `await` ãã¹ãã§ãã
---
-ç¹°ãè¿ãã«ãªããŸããããããã¯éåžžã«æè¡çãªè©³çްã§ãããæ€çŽ¢ããŠèŸ¿ãçããå Žåã¯åœ¹ç«ã€ã§ãããã
+ç¹°ãè¿ãã«ãªããŸããããããã¯éåžžã«æè¡çãªè©³çްã§ã該åœäºé
ãæ€çŽ¢ããŠããã«ãã©ãçããå Žåã«ã¯åœ¹ç«ã€ã§ãããã
-ãã以å€ã®å Žåã¯ãäžèšã®ã»ã¯ã·ã§ã³ã®ã¬ã€ãã©ã€ã³ã§åé¡ãªãã¯ãã§ã: æ¥ãã§ããŸããïŒã
+ãã以å€ã®å Žåã¯ãäžã®ã»ã¯ã·ã§ã³ã®ã¬ã€ãã©ã€ã³ã«åŸãã°ååã§ã: æ¥ãã§ããŸããïŒã
diff --git a/docs/ja/docs/deployment/cloud.md b/docs/ja/docs/deployment/cloud.md
new file mode 100644
index 000000000..17699cdca
--- /dev/null
+++ b/docs/ja/docs/deployment/cloud.md
@@ -0,0 +1,24 @@
+# ã¯ã©ãŠããããã€ããžã® FastAPI ããã〠{ #deploy-fastapi-on-cloud-providers }
+
+FastAPI ã¢ããªã±ãŒã·ã§ã³ã¯ãå®è³ªçã«ã©ã®ãããªã¯ã©ãŠããããã€ãã§ããããã€ã§ããŸãã
+
+å€ãã®å Žåãäž»èŠãªã¯ã©ãŠããããã€ã㯠FastAPI ããããã€ããããã®ã¬ã€ããæäŸããŠããŸãã
+
+## FastAPI Cloud { #fastapi-cloud }
+
+**FastAPI Cloud** ã¯ã**FastAPI** ã®äœè
ãšåãããŒã ã«ãã£ãŠäœãããŠããŸãã
+
+API ã®**æ§ç¯**ã**ãããã€**ã**ã¢ã¯ã»ã¹**ãŸã§ã®ããã»ã¹ããæå°éã®æéã§å¹çåããŸãã
+
+FastAPI ã§ã¢ããªãéçºãããšããšåã**éçºè
äœéš**ããã¯ã©ãŠããžã®**ãããã€**ã«ããããããŸããð
+
+FastAPI Cloud ã¯ã*FastAPI and friends* ãªãŒãã³ãœãŒã¹ãããžã§ã¯ãã®äž»èŠãªã¹ãã³ãµãŒãã€è³éæäŸå
ã§ããâš
+
+## ã¯ã©ãŠããããã€ã - ã¹ãã³ãµãŒ { #cloud-providers-sponsors }
+
+ä»ã«ãããã€ãã®ã¯ã©ãŠããããã€ãã âš [**FastAPI ãã¹ãã³ãµãŒããŠããŸã**](../help-fastapi.md#sponsor-the-author){.internal-link target=_blank} âšãð
+
+ãããã®ã¬ã€ããåèã«ãããµãŒãã¹ã詊ããŠã¿ãã®ãããã§ããã:
+
+* Render
+* Railway
diff --git a/docs/ja/docs/deployment/concepts.md b/docs/ja/docs/deployment/concepts.md
index 787eb2e73..501a90bc9 100644
--- a/docs/ja/docs/deployment/concepts.md
+++ b/docs/ja/docs/deployment/concepts.md
@@ -29,7 +29,6 @@
## ã»ãã¥ãªã㣠- HTTPS { #security-https }
-
[åãã£ãã¿ãŒã®HTTPSã«ã€ããŠ](https.md){.internal-link target=_blank}ã§ã¯ãHTTPSãã©ã®ããã«APIãæå·åããã®ãã«ã€ããŠåŠã³ãŸããã
éåžžãã¢ããªã±ãŒã·ã§ã³ãµãŒãã«ãšã£ãŠ**å€éšã®**ã³ã³ããŒãã³ãã§ãã**TLS Termination Proxy**ã«ãã£ãŠæäŸãããããšãäžè¬çã§ãããã®ãããã·ã¯éä¿¡ã®æå·åãæ
åœããŸãã
@@ -193,7 +192,6 @@ FastAPI ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãUvicorn ãå®è¡ãã `fastapi` ã³
åãAPIããã°ã©ã ã®**è€æ°ã®ããã»ã¹**ãå®è¡ããå Žåããããã¯äžè¬çã«**WorkerïŒã¯ãŒã«ãŒ**ãšåŒã°ããŸãã
### ã¯ãŒã«ãŒã»ããã»ã¹ ãš ããŒã { #worker-processes-and-ports }
-
[HTTPSã«ã€ããŠ](https.md){.internal-link target=_blank}ã®ããã¥ã¡ã³ãã§ã1ã€ã®ãµãŒããŒã§1ã€ã®ããŒããšIPã¢ãã¬ã¹ã®çµã¿åããã§ãªãã¹ã³ã§ããã®ã¯1ã€ã®ããã»ã¹ã ãã§ããããšãèŠããŠããŸãã§ããããïŒ
diff --git a/docs/ja/docs/deployment/docker.md b/docs/ja/docs/deployment/docker.md
index 6c182448c..883f98c98 100644
--- a/docs/ja/docs/deployment/docker.md
+++ b/docs/ja/docs/deployment/docker.md
@@ -14,7 +14,7 @@ Linuxã³ã³ããã®äœ¿çšã«ã¯ã**ã»ãã¥ãªãã£**ã**å埩å¯èœæ§ïŒ
-**FastAPI**ã¯ã代æ¿ããŒã«ã®ãããŸã§ã®åãããªããã°ååšããªãã£ãã§ãããã +**FastAPI**ã¯ãä»ã®äººã ã®ãããŸã§ã®åãããªããã°ååšããªãã£ãã§ãããã 以åã«äœãããå€ãã®ããŒã«ããäœæã«ãããåºæ¿ãšããŠåœ¹ç«ã£ãŠããŸããã @@ -29,7 +28,7 @@-## èª¿æ» +## èª¿æ» { #investigation } ãã¹ãŠæ¢åã®ä»£æ¿ææ®µã䜿ãããšã§ããã®ãã¹ãŠãåŠã³ãã¢ã€ãã¢ãåŸãŠãèªåãäžç·ã«ä»äºãããŠããéçºè ã®ããŒã ã«ãšã£ãŠæè¯ã®æ¹æ³ã§çµã¿åãããæ©äŒãåŸãŸããã @@ -39,7 +38,7 @@ ããã§ã**FastAPI**ã®ã³ãŒããæžãå§ããåã«ãOpenAPIãJSON SchemaãOAuth2ãªã©ã®ä»æ§ãæ°ã¶æãããŠå匷ãããããã®é¢ä¿ãéè€ããç®æãçžéç¹ãçè§£ããŸããã -## èšèš +## èšèš { #design } ãã®åŸã (FastAPIã䜿ãéçºè ãšããŠ) ãŠãŒã¶ãŒã欲ãããAPIãã®èšèšã«æéãè²»ãããŸããã @@ -53,19 +52,19 @@ ãã¹ãŠã®ç®æã§ããã¹ãŠã®éçºè ã«æé«ã®éçºäœéšãæäŸããŸããã -## èŠä»¶ +## èŠä»¶ { #requirements } ããã€ãã®ä»£æ¿ææ³ã詊ããããšãç§ã¯**Pydantic**ã®åŒ·ã¿ãå©çšããããšã決ããŸããã ãããŠãJSON Schemaã«å®å šã«æºæ ããããã«ããããå¶çŽå®£èšãå®çŸ©ããããŸããŸãªæ¹æ³ããµããŒãããããããã€ãã®ãšãã£ã¿ãŒã§ã®ãã¹ãã«åºã¥ããŠãšãã£ã¿ãŒã®ãµããŒã (åãã§ãã¯ãèªåè£å®) ãæ¹åããããã«è²¢ç®ããŸããã -éçºäžããã1ã€ã®éèŠãªéµãšãªã**Starlette**ãã«ãè²¢ç®ããŸããã +éçºäžããã1ã€ã®éèŠãªéµãšãªã**Starlette**ã«ãè²¢ç®ããŸããã -## éçº +## éçº { #development } ç§ã**FastAPI**èªäœã®äœæãéå§ããæã«ã¯ãã»ãšãã©ã®éšåããã§ã«æºåãããŠãããèšèšãå®çŸ©ãããå¿ èŠãªæ¡ä»¶ãšããŒã«ã®æºåãã§ããŠããŸããããããŠèŠæ Œã仿§ã«é¢ããç¥èããæç¢ºã«ãªããæŽæ°ãããŠããŸããã -## ãããã +## ãããã { #future } ãã®æç¹ã§ãã§ã«ããããã®ã¢ã€ãã¢ãæã£ã**FastAPI**ãå€ãã®äººã®åœ¹ã«ç«ã£ãŠããããšã¯æããã§ãã diff --git a/docs/ja/docs/how-to/authentication-error-status-code.md b/docs/ja/docs/how-to/authentication-error-status-code.md new file mode 100644 index 000000000..9bef47644 --- /dev/null +++ b/docs/ja/docs/how-to/authentication-error-status-code.md @@ -0,0 +1,17 @@ +# å€ã 403 èªèšŒãšã©ãŒã®ã¹ããŒã¿ã¹ã³ãŒãã䜿ã { #use-old-403-authentication-error-status-codes } + +FastAPI ããŒãžã§ã³ `0.122.0` ããåã¯ãçµ±åãããã»ãã¥ãªãã£ãŠãŒãã£ãªãã£ãèªèšŒã«å€±æããŠã¯ã©ã€ã¢ã³ããžãšã©ãŒãè¿ãéãHTTP ã¹ããŒã¿ã¹ã³ãŒã `403 Forbidden` ã䜿çšããŠããŸããã + +FastAPI ããŒãžã§ã³ `0.122.0` 以éã§ã¯ãããé©å㪠HTTP ã¹ããŒã¿ã¹ã³ãŒã `401 Unauthorized` ã䜿çšããHTTP 仿§ã«åŸã£ãŠã¬ã¹ãã³ã¹ã«åŠ¥åœãª `WWW-Authenticate` ããããŒãå«ããŸããRFC 7235ãRFC 9110ã + +ããããäœããã®çç±ã§ã¯ã©ã€ã¢ã³ããåŸæ¥ã®æåã«äŸåããŠããå Žåã¯ãã»ãã¥ãªãã£ã¯ã©ã¹ã§ã¡ãœãã `make_not_authenticated_error` ããªãŒããŒã©ã€ãããããšã§ããã®æåã«æ»ããŸãã + +ããšãã°ãæ¢å®ã® `401 Unauthorized` ãšã©ãŒã®ä»£ããã« `403 Forbidden` ãšã©ãŒãè¿ã `HTTPBearer` ã®ãµãã¯ã©ã¹ãäœæã§ããŸã: + +{* ../../docs_src/authentication_error_status_code/tutorial001_an_py310.py hl[9:13] *} + +/// tip | è±ç¥è + +ãã®é¢æ°ã¯äŸå€ã€ã³ã¹ã¿ã³ã¹ãè¿ãç¹ã«æ³šæããŠãã ãããããã§ã¯äŸå€ãéåºããŸãããéåºã¯å éšã®ä»ã®ã³ãŒãã§è¡ãããŸãã + +/// diff --git a/docs/ja/docs/how-to/conditional-openapi.md b/docs/ja/docs/how-to/conditional-openapi.md index 9478f5c03..0febe1ef6 100644 --- a/docs/ja/docs/how-to/conditional-openapi.md +++ b/docs/ja/docs/how-to/conditional-openapi.md @@ -10,7 +10,7 @@ ããã»ãã¥ãªãã£äžã®æ¬ é¥ããœãŒã¹ã³ãŒãã«ãããªãã°ãããã¯ååšãããŸãŸã§ãã -ããã¥ã¡ã³ããŒã·ã§ã³ãé衚瀺ã«ããã®ã¯ãåã«ããªãã®APIãžã®ã¢ã¯ã»ã¹æ¹æ³ãé£è§£ã«ããã ãã§ãªããåæã«ããªãèªèº«ã®æ¬çªç°å¢ã§ã®APIã®ãããã°ãå°é£ã«ããŠããŸãå¯èœæ§ããããŸããåçŽã«ã Security through obscurity ã®äžã€ã®åœ¢æ ãšããŠèããããã§ãããã +ããã¥ã¡ã³ããŒã·ã§ã³ãé衚瀺ã«ããã®ã¯ãåã«ããªãã®APIãžã®ã¢ã¯ã»ã¹æ¹æ³ãé£è§£ã«ããã ãã§ãªããåæã«ããªãèªèº«ã®æ¬çªç°å¢ã§ã®APIã®ãããã°ãå°é£ã«ããŠããŸãå¯èœæ§ããããŸããåçŽã«ã ç§å¿ã«ããã»ãã¥ãªã㣠ã®äžã€ã®åœ¢æ ãšããŠèããããã§ãããã ããããªãã®APIã®ã»ãã¥ãªãã£ã匷åããããªããããã€ãã®ããããæ¹æ³ããããŸããäŸã瀺ããšã @@ -29,7 +29,7 @@ äŸãã°ã -{* ../../docs_src/conditional_openapi/tutorial001_py39.py hl[6,11] *} +{* ../../docs_src/conditional_openapi/tutorial001_py310.py hl[6,11] *} ããã§ã¯ `openapi_url` ã®èšå®ããããã©ã«ãã® `"/openapi.json"` ã®ãŸãŸå®£èšããŠããŸãã diff --git a/docs/ja/docs/how-to/configure-swagger-ui.md b/docs/ja/docs/how-to/configure-swagger-ui.md new file mode 100644 index 000000000..8be7adc84 --- /dev/null +++ b/docs/ja/docs/how-to/configure-swagger-ui.md @@ -0,0 +1,70 @@ +# Swagger UI ã®èšå® { #configure-swagger-ui } + +ããã€ãã®è¿œå ã® Swagger UI ãã©ã¡ãŒã¿ãèšå®ã§ããŸãã + +èšå®ããã«ã¯ã`FastAPI()` ã®ã¢ããªãªããžã§ã¯ããäœæãããšãããŸã㯠`get_swagger_ui_html()` 颿°ã« `swagger_ui_parameters` åŒæ°ãæž¡ããŸãã + +`swagger_ui_parameters` ã¯ãSwagger UI ã«çŽæ¥æž¡ãããèšå®ãå«ãèŸæžãåãåããŸãã + +FastAPI ã¯ãããã®èšå®ã **JSON** ã«å€æããJavaScript ãšäºæã«ããŸããSwagger UI ãå¿ èŠãšããã®ã¯ãã®åœ¢åŒã§ãã + +## ã·ã³ã¿ãã¯ã¹ãã€ã©ã€ããç¡å¹å { #disable-syntax-highlighting } + +äŸãã°ãSwagger UI ã®ã·ã³ã¿ãã¯ã¹ãã€ã©ã€ããç¡å¹åã§ããŸãã + +èšå®ã倿Žããªããã°ãã·ã³ã¿ãã¯ã¹ãã€ã©ã€ãã¯ããã©ã«ãã§æå¹ã§ã: + +
+
+ãããã`syntaxHighlight` ã `False` ã«èšå®ãããšç¡å¹åã§ããŸã:
+
+{* ../../docs_src/configure_swagger_ui/tutorial001_py310.py hl[3] *}
+
+...ãã®å ŽåãSwagger UI ã§ã¯ã·ã³ã¿ãã¯ã¹ãã€ã©ã€ãã衚瀺ãããªããªããŸã:
+
+
+
+## ããŒãã®å€æŽ { #change-the-theme }
+
+åæ§ã«ãã㌠`"syntaxHighlight.theme"`ïŒéäžã«ããããå«ãŸããŠããç¹ã«æ³šæïŒã§ã·ã³ã¿ãã¯ã¹ãã€ã©ã€ãã®ããŒããèšå®ã§ããŸã:
+
+{* ../../docs_src/configure_swagger_ui/tutorial002_py310.py hl[3] *}
+
+ãã®èšå®ã«ãããã·ã³ã¿ãã¯ã¹ãã€ã©ã€ãã®é
è²ããŒããå€ãããŸã:
+
+
+
+## æ¢å®ã® Swagger UI ãã©ã¡ãŒã¿ã®å€æŽ { #change-default-swagger-ui-parameters }
+
+FastAPI ã«ã¯ãå€ãã®ãŠãŒã¹ã±ãŒã¹ã«é©ããæ¢å®ã®èšå®ãã©ã¡ãŒã¿ãå«ãŸããŠããŸãã
+
+æ¢å®ã§ã¯æ¬¡ã®èšå®ãå«ãŸããŸã:
+
+{* ../../fastapi/openapi/docs.py ln[9:24] hl[18:24] *}
+
+åŒæ° `swagger_ui_parameters` ã«å¥ã®å€ãæå®ããããšã§ãããããäžæžãã§ããŸãã
+
+äŸãã°ã`deepLinking` ãç¡å¹åããã«ã¯ã次ã®èšå®ã `swagger_ui_parameters` ã«æž¡ããŸã:
+
+{* ../../docs_src/configure_swagger_ui/tutorial003_py310.py hl[3] *}
+
+## ãã®ä»ã® Swagger UI ãã©ã¡ãŒã¿ { #other-swagger-ui-parameters }
+
+å©çšå¯èœãªä»ã®ãã¹ãŠã®èšå®ã«ã€ããŠã¯ãå
¬åŒã® Swagger UI ãã©ã¡ãŒã¿ã®ããã¥ã¡ã³ããåç
§ããŠãã ããã
+
+## JavaScript å°çšã®èšå® { #javascript-only-settings }
+
+Swagger UI ã§ã¯ãä»ã«ã **JavaScript å°çš** ã®ãªããžã§ã¯ãïŒäŸ: JavaScript ã®é¢æ°ïŒã«ããèšå®ãå¯èœã§ãã
+
+FastAPI ã«ã¯ã次㮠JavaScript å°çšã® `presets` èšå®ãå«ãŸããŠããŸã:
+
+```JavaScript
+presets: [
+ SwaggerUIBundle.presets.apis,
+ SwaggerUIBundle.SwaggerUIStandalonePreset
+]
+```
+
+ãããã¯æååã§ã¯ãªã **JavaScript** ã®ãªããžã§ã¯ãã§ãããããPython ã®ã³ãŒãããçŽæ¥æž¡ãããšã¯ã§ããŸããã
+
+ãã®ãã㪠JavaScript å°çšã®èšå®ã䜿ãå¿
èŠãããå Žåã¯ãäžèšã®ããããã®æ¹æ³ã䜿çšããSwagger UI ã® path operation ããªãŒããŒã©ã€ãããŠãå¿
èŠãª JavaScript ãæåã§èšè¿°ããŠãã ããã
diff --git a/docs/ja/docs/how-to/custom-docs-ui-assets.md b/docs/ja/docs/how-to/custom-docs-ui-assets.md
new file mode 100644
index 000000000..c0c9745b2
--- /dev/null
+++ b/docs/ja/docs/how-to/custom-docs-ui-assets.md
@@ -0,0 +1,185 @@
+# ã«ã¹ã¿ã ããã¥ã¡ã³ã UI ã®éçã¢ã»ããïŒã»ã«ããã¹ãã£ã³ã°ïŒ { #custom-docs-ui-static-assets-self-hosting }
+
+API ããã¥ã¡ã³ã㯠**Swagger UI** ãš **ReDoc** ã䜿çšããŠãããããããã«ããã€ãã® JavaScript ãš CSS ãã¡ã€ã«ãå¿
èŠã§ãã
+
+æ¢å®ã§ã¯ããããã®ãã¡ã€ã«ã¯ CDN ããé
ä¿¡ãããŸãã
+
+ããããã«ã¹ã¿ãã€ãºããããšãå¯èœã§ãç¹å®ã® CDN ãæå®ããããèªåã§ãã¡ã€ã«ãé
ä¿¡ãããã§ããŸãã
+
+## JavaScript ãš CSS ã®ã«ã¹ã¿ã CDN { #custom-cdn-for-javascript-and-css }
+
+å¥ã® CDN ã䜿ããããšããŸããäŸãã° `https://unpkg.com/` ã䜿ãããå Žåã§ãã
+
+äŸãã°ãäžéšã® URL ãå¶éãããŠããåœã«äœãã§ããå Žåã«åœ¹ç«ã¡ãŸãã
+
+### èªåããã¥ã¡ã³ãã®ç¡å¹å { #disable-the-automatic-docs }
+
+æåã®æé ã¯èªåããã¥ã¡ã³ããç¡å¹åããããšã§ããããã©ã«ãã§ã¯ãããã¯æ¢å®ã® CDN ã䜿çšããŸãã
+
+ç¡å¹åããã«ã¯ã`FastAPI` ã¢ããªäœææã«ãããã® URL ã `None` ã«èšå®ããŸã:
+
+{* ../../docs_src/custom_docs_ui/tutorial001_py310.py hl[8] *}
+
+### ã«ã¹ã¿ã ããã¥ã¡ã³ãã®è¿œå { #include-the-custom-docs }
+
+ããã§ãã«ã¹ã¿ã ããã¥ã¡ã³ãçšã® *path operations* ãäœæã§ããŸãã
+
+FastAPI ã®å
éšé¢æ°ãåå©çšããŠããã¥ã¡ã³ãçšã® HTML ããŒãžãçæããå¿
èŠãªåŒæ°ãæž¡ããŸã:
+
+- `openapi_url`: ããã¥ã¡ã³ãã® HTML ããŒãžã API ã® OpenAPI ã¹ããŒããååŸãã URLãããã§ã¯å±æ§ `app.openapi_url` ã䜿çšã§ããŸãã
+- `title`: API ã®ã¿ã€ãã«ã
+- `oauth2_redirect_url`: æ¢å®å€ã䜿ãã«ã¯ããã§ `app.swagger_ui_oauth2_redirect_url` ã䜿çšã§ããŸãã
+- `swagger_js_url`: Swagger UI ããã¥ã¡ã³ãçšã® HTML ãååŸãã JavaScript ãã¡ã€ã«ã® URLãããã¯ã«ã¹ã¿ã CDN ã® URL ã§ãã
+- `swagger_css_url`: Swagger UI ããã¥ã¡ã³ãçšã® HTML ãååŸãã CSS ãã¡ã€ã«ã® URLãããã¯ã«ã¹ã¿ã CDN ã® URL ã§ãã
+
+ReDoc ã«ã€ããŠãåæ§ã§ã...
+
+{* ../../docs_src/custom_docs_ui/tutorial001_py310.py hl[2:6,11:19,22:24,27:33] *}
+
+/// tip | è±ç¥è
+
+`swagger_ui_redirect` çšã® *path operation* ã¯ãOAuth2 ã䜿çšããå Žåã®è£å©ã§ãã
+
+API ã OAuth2 ãããã€ããšçµ±åãããšãèªèšŒãå®è¡ããŠååŸããã¯ã¬ãã³ã·ã£ã«ãæã£ãç¶æ
ã§ API ããã¥ã¡ã³ãã«æ»ããŸãããããŠå®éã® OAuth2 èªèšŒãçšããŠããã¥ã¡ã³ãäžãã API ãšå¯Ÿè©±ã§ããŸãã
+
+Swagger UI ããã®åŠçãè£åŽã§è¡ããŸããããã®ããã«ãã®ãredirectãã®è£å©ãå¿
èŠã§ãã
+
+///
+
+### ãã¹ãçšã® *path operation* ãäœæ { #create-a-path-operation-to-test-it }
+
+ãã¹ãŠãåäœãããããã¹ãã§ããããã«ã*path operation* ãäœæããŸã:
+
+{* ../../docs_src/custom_docs_ui/tutorial001_py310.py hl[36:38] *}
+
+### ãã¹ã { #test-it }
+
+ããã§ãhttp://127.0.0.1:8000/docs ã«ã¢ã¯ã»ã¹ããŠããŒãžãåèªã¿èŸŒã¿ãããšãæ°ãã CDN ãããããã®ã¢ã»ãããèªã¿èŸŒãŸããã¯ãã§ãã
+
+## ããã¥ã¡ã³ãçš JavaScript ãš CSS ã®ã»ã«ããã¹ãã£ã³ã° { #self-hosting-javascript-and-css-for-docs }
+
+ãªãã©ã€ã³ïŒã€ã³ã¿ãŒããã鿥ç¶ïŒã§ãããããã¯ããŒã«ã«ãããã¯ãŒã¯ã§ãã¢ããªãåäœããããå Žåãªã©ã«ã¯ãJavaScript ãš CSS ãã»ã«ããã¹ãããã®ãæçšã§ãã
+
+ããã§ã¯ãåã FastAPI ã¢ããªå
ã§ãããã®ãã¡ã€ã«ãé
ä¿¡ããããã¥ã¡ã³ãã§ãããã䜿çšããããã«èšå®ããæ¹æ³ã瀺ããŸãã
+
+### ãããžã§ã¯ãã®ãã¡ã€ã«æ§æ { #project-file-structure }
+
+ãããžã§ã¯ãã®ãã¡ã€ã«æ§æã次ã®ããã«ãªã£ãŠãããšããŸã:
+
+```
+.
+âââ app
+â âââ __init__.py
+â âââ main.py
+```
+
+ãããã®éçãã¡ã€ã«ãä¿åããããã®ãã£ã¬ã¯ããªãäœæããŸãã
+
+æ°ãããã¡ã€ã«æ§æã¯æ¬¡ã®ããã«ãªããŸã:
+
+```
+.
+âââ app
+â  âââ __init__.py
+â  âââ main.py
+âââ static/
+```
+
+### ãã¡ã€ã«ã®ããŠã³ããŒã { #download-the-files }
+
+ããã¥ã¡ã³ãã«å¿
èŠãªéçãã¡ã€ã«ãããŠã³ããŒããã`static/` ãã£ã¬ã¯ããªã«é
眮ããŸãã
+
+åãªã³ã¯ãå³ã¯ãªãã¯ããŠããªã³ã¯å
ãå¥åã§ä¿å...ãã®ãããªãªãã·ã§ã³ãéžã¹ãŸãã
+
+**Swagger UI** ã§ã¯æ¬¡ã®ãã¡ã€ã«ã䜿çšããŸã:
+
+- `swagger-ui-bundle.js`
+- `swagger-ui.css`
+
+ãã㊠**ReDoc** ã§ã¯æ¬¡ã®ãã¡ã€ã«ã䜿çšããŸã:
+
+- `redoc.standalone.js`
+
+ãã®åŸããã¡ã€ã«æ§æã¯æ¬¡ã®ããã«ãªããŸã:
+
+```
+.
+âââ app
+â  âââ __init__.py
+â  âââ main.py
+âââ static
+ âââ redoc.standalone.js
+ âââ swagger-ui-bundle.js
+ âââ swagger-ui.css
+```
+
+### éçãã¡ã€ã«ã®é
ä¿¡ { #serve-the-static-files }
+
+- `StaticFiles` ãã€ã³ããŒãããŸãã
+- ç¹å®ã®ãã¹ã« `StaticFiles()` ã€ã³ã¹ã¿ã³ã¹ããããŠã³ããããŸãã
+
+{* ../../docs_src/custom_docs_ui/tutorial002_py310.py hl[7,11] *}
+
+### éçãã¡ã€ã«ã®ãã¹ã { #test-the-static-files }
+
+ã¢ããªã±ãŒã·ã§ã³ãèµ·åããhttp://127.0.0.1:8000/static/redoc.standalone.js ã«ã¢ã¯ã»ã¹ããŸãã
+
+**ReDoc** çšã®éåžžã«é·ã JavaScript ãã¡ã€ã«ã衚瀺ãããã¯ãã§ãã
+
+å
é ã¯æ¬¡ã®ããã«ãªã£ãŠãããããããŸãã:
+
+```JavaScript
+/*! For license information please see redoc.standalone.js.LICENSE.txt */
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("null")):
+...
+```
+
+ããã§ãã¢ããªããéçãã¡ã€ã«ãé
ä¿¡ã§ããŠããããšããããŠããã¥ã¡ã³ãçšã®éçãã¡ã€ã«ãæ£ããå Žæã«é
眮ã§ããŠããããšã確èªã§ããŸãã
+
+次ã«ãããã¥ã¡ã³ãã§ãããã®éçãã¡ã€ã«ã䜿çšããããã«ã¢ããªãèšå®ããŸãã
+
+### éçãã¡ã€ã«çšã«èªåããã¥ã¡ã³ããç¡å¹å { #disable-the-automatic-docs-for-static-files }
+
+ã«ã¹ã¿ã CDN ã䜿ãå Žåãšåæ§ãæåã®æé ã¯èªåããã¥ã¡ã³ããç¡å¹åããããšã§ããæ¢å®ã§ã¯ CDN ã䜿çšããŸãã
+
+ç¡å¹åããã«ã¯ã`FastAPI` ã¢ããªäœææã«ãããã® URL ã `None` ã«èšå®ããŸã:
+
+{* ../../docs_src/custom_docs_ui/tutorial002_py310.py hl[9] *}
+
+### éçãã¡ã€ã«çšã®ã«ã¹ã¿ã ããã¥ã¡ã³ãã远å { #include-the-custom-docs-for-static-files }
+
+ã«ã¹ã¿ã CDN ãšåæ§ã®æ¹æ³ã§ãã«ã¹ã¿ã ããã¥ã¡ã³ãçšã® *path operations* ãäœæã§ããŸãã
+
+åã³ãFastAPI ã®å
éšé¢æ°ãåå©çšããŠããã¥ã¡ã³ãçšã® HTML ããŒãžãçæããå¿
èŠãªåŒæ°ãæž¡ããŸã:
+
+- `openapi_url`: ããã¥ã¡ã³ãã® HTML ããŒãžã API ã® OpenAPI ã¹ããŒããååŸãã URLãããã§ã¯å±æ§ `app.openapi_url` ã䜿çšã§ããŸãã
+- `title`: API ã®ã¿ã€ãã«ã
+- `oauth2_redirect_url`: æ¢å®å€ã䜿ãã«ã¯ããã§ `app.swagger_ui_oauth2_redirect_url` ã䜿çšã§ããŸãã
+- `swagger_js_url`: Swagger UI ããã¥ã¡ã³ãçšã® HTML ãååŸãã **JavaScript** ãã¡ã€ã«ã® URLã**ããã¯ããªãã®ã¢ããªèªèº«ãããŸé
ä¿¡ããŠãããã®ã§ã**ã
+- `swagger_css_url`: Swagger UI ããã¥ã¡ã³ãçšã® HTML ãååŸãã **CSS** ãã¡ã€ã«ã® URLã**ããã¯ããªãã®ã¢ããªèªèº«ãããŸé
ä¿¡ããŠãããã®ã§ã**ã
+
+ReDoc ã«ã€ããŠãåæ§ã§ã...
+
+{* ../../docs_src/custom_docs_ui/tutorial002_py310.py hl[2:6,14:22,25:27,30:36] *}
+
+/// tip | è±ç¥è
+
+`swagger_ui_redirect` çšã® *path operation* ã¯ãOAuth2 ã䜿çšããå Žåã®è£å©ã§ãã
+
+API ã OAuth2 ãããã€ããšçµ±åãããšãèªèšŒãå®è¡ããŠååŸããã¯ã¬ãã³ã·ã£ã«ãæã£ãç¶æ
ã§ API ããã¥ã¡ã³ãã«æ»ããŸãããããŠå®éã® OAuth2 èªèšŒãçšããŠããã¥ã¡ã³ãäžãã API ãšå¯Ÿè©±ã§ããŸãã
+
+Swagger UI ããã®åŠçãè£åŽã§è¡ããŸããããã®ããã«ãã®ãredirectãã®è£å©ãå¿
èŠã§ãã
+
+///
+
+### éçãã¡ã€ã«ããã¹ãããããã® *path operation* ãäœæ { #create-a-path-operation-to-test-static-files }
+
+ãã¹ãŠãåäœãããããã¹ãã§ããããã«ã*path operation* ãäœæããŸã:
+
+{* ../../docs_src/custom_docs_ui/tutorial002_py310.py hl[39:41] *}
+
+### éçãã¡ã€ã« UI ã®ãã¹ã { #test-static-files-ui }
+
+ããã§ãWiFi ãåæã㊠http://127.0.0.1:8000/docs ã«ã¢ã¯ã»ã¹ããããŒãžãåèªã¿èŸŒã¿ã§ããã¯ãã§ãã
+
+ã€ã³ã¿ãŒãããã«æ¥ç¶ããŠããªããŠããAPI ã®ããã¥ã¡ã³ãã衚瀺ããAPI ãšå¯Ÿè©±ã§ããŸãã
diff --git a/docs/ja/docs/how-to/custom-request-and-route.md b/docs/ja/docs/how-to/custom-request-and-route.md
new file mode 100644
index 000000000..ae64f3109
--- /dev/null
+++ b/docs/ja/docs/how-to/custom-request-and-route.md
@@ -0,0 +1,109 @@
+# ã«ã¹ã¿ã Request ãš APIRoute ã¯ã©ã¹ { #custom-request-and-apiroute-class }
+
+å Žåã«ãã£ãŠã¯ã`Request` ã `APIRoute` ã¯ã©ã¹ã§äœ¿ãããããžãã¯ãäžæžããããããšããããŸãã
+
+ç¹ã«ãããã«ãŠã§ã¢ã§ã®ããžãã¯ã®ä»£æ¿ãšããŠæå¹ãªå ŽåããããŸãã
+
+ããšãã°ãã¢ããªã±ãŒã·ã§ã³ã§åŠçãããåã«ãªã¯ãšã¹ãããã£ãèªã¿åã£ããæäœããããããå Žåã§ãã
+
+/// danger | èŠå
+
+ããã¯ãäžçŽãæ©èœã§ãã
+
+FastAPI ãå§ããã°ããã®å Žåã¯ããã®ã»ã¯ã·ã§ã³ã¯èªã¿é£ã°ããŠãããã§ãããã
+
+///
+
+## ãŠãŒã¹ã±ãŒã¹ { #use-cases }
+
+ãŠãŒã¹ã±ãŒã¹ã®äŸ:
+
+* JSON ã§ã¯ãªããªã¯ãšã¹ãããã£ã JSON ã«å€æããïŒäŸ: `msgpack`ïŒã
+* gzip å§çž®ããããªã¯ãšã¹ãããã£ã®è§£åã
+* ãã¹ãŠã®ãªã¯ãšã¹ãããã£ã®èªåãã®ã³ã°ã
+
+## ã«ã¹ã¿ã ãªã¯ãšã¹ãããã£ã®ãšã³ã³ãŒãã£ã³ã°ã®åŠç { #handling-custom-request-body-encodings }
+
+gzip ã®ãªã¯ãšã¹ããè§£åããããã«ãã«ã¹ã¿ã ã® `Request` ãµãã¯ã©ã¹ãäœ¿ãæ¹æ³ãèŠãŠãããŸãã
+
+ãããŠããã®ã«ã¹ã¿ã ãªã¯ãšã¹ãã¯ã©ã¹ã䜿ãããã® `APIRoute` ãµãã¯ã©ã¹ãçšæããŸãã
+
+### ã«ã¹ã¿ã `GzipRequest` ã¯ã©ã¹ã®äœæ { #create-a-custom-gziprequest-class }
+
+/// tip | è±ç¥è
+
+ããã¯ä»çµã¿ã瀺ãããã®ãµã³ãã«ã§ããGzip 察å¿ãå¿
èŠãªå Žåã¯ãçšæãããŠãã [`GzipMiddleware`](../advanced/middleware.md#gzipmiddleware){.internal-link target=_blank} ã䜿çšã§ããŸãã
+
+///
+
+ãŸãã`GzipRequest` ã¯ã©ã¹ãäœæããŸããããã¯é©åãªããããŒãããå Žåã«æ¬äœãè§£åããããã`Request.body()` ã¡ãœãããäžæžãããŸãã
+
+ããããŒã« `gzip` ããªããã°ãè§£åã¯è©Šã¿ãŸããã
+
+ãã®æ¹æ³ã«ãããåãã«ãŒãã¯ã©ã¹ã§ gzip å§çž®æžã¿ïŒæªå§çž®ã®ãªã¯ãšã¹ãã®äž¡æ¹ãæ±ããŸãã
+
+{* ../../docs_src/custom_request_and_route/tutorial001_an_py310.py hl[9:16] *}
+
+### ã«ã¹ã¿ã `GzipRoute` ã¯ã©ã¹ã®äœæ { #create-a-custom-gziproute-class }
+
+次ã«ã`GzipRequest` ãå©çšãã `fastapi.routing.APIRoute` ã®ã«ã¹ã¿ã ãµãã¯ã©ã¹ãäœæããŸãã
+
+ããã§ã¯ `APIRoute.get_route_handler()` ã¡ãœãããäžæžãããŸãã
+
+ãã®ã¡ãœããã¯é¢æ°ãè¿ããŸãããããŠãã®é¢æ°ããªã¯ãšã¹ããåãåããã¬ã¹ãã³ã¹ãè¿ããŸãã
+
+ããã§ã¯ãå
ã®ãªã¯ãšã¹ããã `GzipRequest` ãäœæããããã«å©çšããŸãã
+
+{* ../../docs_src/custom_request_and_route/tutorial001_an_py310.py hl[19:27] *}
+
+/// note | æè¡è©³çް
+
+`Request` ã«ã¯ `request.scope` 屿§ããããããã¯ãªã¯ãšã¹ãã«é¢ããã¡ã¿ããŒã¿ãå«ã Python ã® `dict` ã§ãã
+
+`Request` ã«ã¯ `request.receive` ããããããã¯ãªã¯ãšã¹ãã®æ¬äœããåä¿¡ãããããã®é¢æ°ã§ãã
+
+`scope` ã® `dict` ãš `receive` 颿°ã¯ãããã ASGI 仿§ã®äžéšã§ãã
+
+ãããŠãã® 2 ã€ïŒ`scope` ãš `receive`ïŒããæ°ãã `Request` ã€ã³ã¹ã¿ã³ã¹ãäœæããããã«å¿
èŠãªãã®ã§ãã
+
+`Request` ã«ã€ããŠè©³ããã¯ãStarlette ã® Requests ã«é¢ããããã¥ã¡ã³ã ãåç
§ããŠãã ããã
+
+///
+
+`GzipRequest.get_route_handler` ãè¿ã颿°ãç°ãªãã®ã¯ã`Request` ã `GzipRequest` ã«å€æããç¹ã ãã§ãã
+
+ããã«ããã`GzipRequest` ã¯å¿
èŠã«å¿ããŠããŒã¿ãè§£åããŠãã *path operations* ã«æž¡ããŸãã
+
+ãã以éã®åŠçããžãã¯ã¯ãã¹ãŠåãã§ãã
+
+ãã ãã`GzipRequest.body` ã倿ŽããŠãããããå¿
èŠã«å¿ã㊠**FastAPI** ã«ãã£ãŠèªã¿èŸŒãŸããéã«ãªã¯ãšã¹ãããã£ãèªåçã«è§£åãããŸãã
+
+## äŸå€ãã³ãã©ã§ã®ãªã¯ãšã¹ãããã£ãžã®ã¢ã¯ã»ã¹ { #accessing-the-request-body-in-an-exception-handler }
+
+/// tip | è±ç¥è
+
+åãåé¡ã解決ããã«ã¯ã`RequestValidationError` çšã®ã«ã¹ã¿ã ãã³ãã©ã§ `body` ãäœ¿ãæ¹ããã£ãšç°¡åã§ãããïŒ[ãšã©ãŒåŠç](../tutorial/handling-errors.md#use-the-requestvalidationerror-body){.internal-link target=_blank}ïŒã
+
+ãã ãããã®äŸãæå¹ã§ãå
éšã³ã³ããŒãã³ããšã©ã®ããã«ããåããããã瀺ããŠããŸãã
+
+///
+
+åãã¢ãããŒãã䜿ã£ãŠãäŸå€ãã³ãã©å
ã§ãªã¯ãšã¹ãããã£ã«ã¢ã¯ã»ã¹ããããšãã§ããŸãã
+
+ããããšã¯ã`try`/`except` ãããã¯ã®äžã§ãªã¯ãšã¹ããåŠçããã ãã§ãïŒ
+
+{* ../../docs_src/custom_request_and_route/tutorial002_an_py310.py hl[14,16] *}
+
+äŸå€ãçºçããŠãã`Request` ã€ã³ã¹ã¿ã³ã¹ã¯ã¹ã³ãŒãå
ã«æ®ãããããšã©ãŒåŠçæã«ãªã¯ãšã¹ãããã£ãèªã¿åããæŽ»çšã§ããŸãïŒ
+
+{* ../../docs_src/custom_request_and_route/tutorial002_an_py310.py hl[17:19] *}
+
+## ã«ãŒã¿ãŒã§ã®ã«ã¹ã¿ã `APIRoute` ã¯ã©ã¹ { #custom-apiroute-class-in-a-router }
+
+`APIRouter` ã® `route_class` ãã©ã¡ãŒã¿ãèšå®ããããšãã§ããŸãïŒ
+
+{* ../../docs_src/custom_request_and_route/tutorial003_py310.py hl[26] *}
+
+ãã®äŸã§ã¯ã`router` é
äžã® *path operations* ã¯ã«ã¹ã¿ã ã® `TimedRoute` ã¯ã©ã¹ã䜿çšããã¬ã¹ãã³ã¹ã®çæã«ããã£ãæéã瀺ã远å ã® `X-Response-Time` ããããŒãã¬ã¹ãã³ã¹ã«å«ãŸããŸãïŒ
+
+{* ../../docs_src/custom_request_and_route/tutorial003_py310.py hl[13:20] *}
diff --git a/docs/ja/docs/how-to/extending-openapi.md b/docs/ja/docs/how-to/extending-openapi.md
new file mode 100644
index 000000000..df5b3cd35
--- /dev/null
+++ b/docs/ja/docs/how-to/extending-openapi.md
@@ -0,0 +1,80 @@
+# OpenAPI ã®æ¡åŒµ { #extending-openapi }
+
+çæããã OpenAPI ã¹ããŒãã倿Žããå¿
èŠãããå ŽåããããŸãã
+
+ãã®ã»ã¯ã·ã§ã³ã§ã¯ãã®æ¹æ³ã説æããŸãã
+
+## éåžžã®ããã»ã¹ { #the-normal-process }
+
+éåžžïŒããã©ã«ãïŒã®ããã»ã¹ã¯æ¬¡ã®ãšããã§ãã
+
+`FastAPI` ã¢ããªã±ãŒã·ã§ã³ïŒã€ã³ã¹ã¿ã³ã¹ïŒã«ã¯ãOpenAPI ã¹ããŒããè¿ãããšãæåŸ
ããã `.openapi()` ã¡ãœããããããŸãã
+
+ã¢ããªã±ãŒã·ã§ã³ãªããžã§ã¯ãã®äœææã«ã`/openapi.json`ïŒãŸã㯠`openapi_url` ã«èšå®ãããã¹ïŒãžã® path operation ãç»é²ãããŸãã
+
+ããã¯åã«ãã¢ããªã±ãŒã·ã§ã³ã® `.openapi()` ã¡ãœããã®çµæãå«ã JSON ã¬ã¹ãã³ã¹ãè¿ããŸãã
+
+ããã©ã«ãã§ã¯ã`.openapi()` ã¡ãœããã¯ãããã㣠`.openapi_schema` ã«å
容ããããã確èªããããã°ãããè¿ããŸãã
+
+ãªããã°ã`fastapi.openapi.utils.get_openapi` ã«ãããŠãŒãã£ãªãã£é¢æ°ã䜿ã£ãŠçæããŸãã
+
+ãã®é¢æ° `get_openapi()` ã¯æ¬¡ã®åŒæ°ãåãåããŸã:
+
+- `title`: ããã¥ã¡ã³ãã«è¡šç€ºããã OpenAPI ã®ã¿ã€ãã«ã
+- `version`: API ã®ããŒãžã§ã³ãäŸ: `2.5.0`ã
+- `openapi_version`: 䜿çšãã OpenAPI 仿§ã®ããŒãžã§ã³ãããã©ã«ãã¯ææ°ã® `3.1.0`ã
+- `summary`: API ã®çãæŠèŠã
+- `description`: API ã®èª¬æãMarkdown ãå«ããããšãã§ããããã¥ã¡ã³ãã«è¡šç€ºãããŸãã
+- `routes`: ã«ãŒãã®ãªã¹ããç»é²æžã¿ã®å path operation ã§ãã`app.routes` ããååŸãããŸãã
+
+/// info | æ
å ±
+
+ãã©ã¡ãŒã¿ `summary` 㯠OpenAPI 3.1.0 以éã§å©çšå¯èœã§ãFastAPI 0.99.0 以éã察å¿ããŠããŸãã
+
+///
+
+## ããã©ã«ãã®äžæžã { #overriding-the-defaults }
+
+äžèšã®æ
å ±ã䜿ã£ãŠãåããŠãŒãã£ãªãã£é¢æ°ã§ OpenAPI ã¹ããŒããçæããå¿
èŠãªéšåãäžæžãã§ããŸãã
+
+ããšãã°ãã«ã¹ã¿ã ããŽãå«ããããã® ReDoc ã® OpenAPI æ¡åŒµã远å ããŠã¿ãŸãããã
+
+### éåžžã® **FastAPI** { #normal-fastapi }
+
+ãŸããéåžžã©ããã« **FastAPI** ã¢ããªã±ãŒã·ã§ã³ãå®è£
ããŸã:
+
+{* ../../docs_src/extending_openapi/tutorial001_py310.py hl[1,4,7:9] *}
+
+### OpenAPI ã¹ããŒãã®çæ { #generate-the-openapi-schema }
+
+次ã«ã`custom_openapi()` 颿°å
ã§åããŠãŒãã£ãªãã£é¢æ°ã䜿ã£ãŠ OpenAPI ã¹ããŒããçæããŸã:
+
+{* ../../docs_src/extending_openapi/tutorial001_py310.py hl[2,15:21] *}
+
+### OpenAPI ã¹ããŒãã®å€æŽ { #modify-the-openapi-schema }
+
+OpenAPI ã¹ããŒãã® `info`ããªããžã§ã¯ããã«ã«ã¹ã¿ã ã® `x-logo` ã远å ããŠãReDoc æ¡åŒµãå ããŸã:
+
+{* ../../docs_src/extending_openapi/tutorial001_py310.py hl[22:24] *}
+
+### OpenAPI ã¹ããŒãã®ãã£ãã·ã¥ { #cache-the-openapi-schema }
+
+çæããã¹ããŒããä¿æããããã£ãã·ã¥ããšã㊠`.openapi_schema` ããããã£ãå©çšã§ããŸãã
+
+ããããããšã§ããŠãŒã¶ãŒã API ããã¥ã¡ã³ããéããã³ã«ã¹ããŒããçæããå¿
èŠããªããªããŸãã
+
+æåã®1åã ãçæããããã®åŸã¯åããã£ãã·ã¥æžã¿ã¹ããŒãã以éã®ãªã¯ãšã¹ãã§äœ¿ãããŸãã
+
+{* ../../docs_src/extending_openapi/tutorial001_py310.py hl[13:14,25:26] *}
+
+### ã¡ãœããã®äžæžã { #override-the-method }
+
+ããã§ã`.openapi()` ã¡ãœãããæ°ãã颿°ã«çœ®ãæããããŸãã
+
+{* ../../docs_src/extending_openapi/tutorial001_py310.py hl[29] *}
+
+### ç¢ºèª { #check-it }
+
+http://127.0.0.1:8000/redoc ã«ã¢ã¯ã»ã¹ãããšãã«ã¹ã¿ã ããŽïŒãã®äŸã§ã¯ **FastAPI** ã®ããŽïŒã䜿ãããŠããããšã確èªã§ããŸã:
+
+
diff --git a/docs/ja/docs/how-to/general.md b/docs/ja/docs/how-to/general.md
new file mode 100644
index 000000000..8879c68eb
--- /dev/null
+++ b/docs/ja/docs/how-to/general.md
@@ -0,0 +1,39 @@
+# äžè¬ - ããŠã㌠- ã¬ã·ã { #general-how-to-recipes }
+
+ããã§ã¯ãäžè¬çãŸãã¯ãããã質åã«å¯ŸããŠãããã¥ã¡ã³ãå
ã®ä»ã®ç®æãžã®åç
§ãããã€ã瀺ããŸãã
+
+## ããŒã¿ã®ãã£ã«ã¿ãªã³ã° - ã»ãã¥ãªã㣠{ #filter-data-security }
+
+è¿ãã¹ã以äžã®ããŒã¿ãè¿ããªãããã«ããã«ã¯ã[ãã¥ãŒããªã¢ã« - ã¬ã¹ãã³ã¹ã¢ãã« - æ»ãå€ã®å](../tutorial/response-model.md){.internal-link target=_blank} ãåç
§ããŠãã ããã
+
+## ããã¥ã¡ã³ãã®ã¿ã° - OpenAPI { #documentation-tags-openapi }
+
+*path operations* ã«ã¿ã°ã远å ããããã¥ã¡ã³ã UI ã§ã°ã«ãŒãåããã«ã¯ã[ãã¥ãŒããªã¢ã« - path operation ã®èšå® - ã¿ã°](../tutorial/path-operation-configuration.md#tags){.internal-link target=_blank} ãåç
§ããŠãã ããã
+
+## ããã¥ã¡ã³ãã®æŠèŠãšèª¬æ - OpenAPI { #documentation-summary-and-description-openapi }
+
+*path operations* ã«æŠèŠãšèª¬æã远å ããããã¥ã¡ã³ã UI ã«è¡šç€ºããã«ã¯ã[ãã¥ãŒããªã¢ã« - path operation ã®èšå® - æŠèŠãšèª¬æ](../tutorial/path-operation-configuration.md#summary-and-description){.internal-link target=_blank} ãåç
§ããŠãã ããã
+
+## ããã¥ã¡ã³ãã®ã¬ã¹ãã³ã¹èª¬æ - OpenAPI { #documentation-response-description-openapi }
+
+ããã¥ã¡ã³ã UI ã«è¡šç€ºãããã¬ã¹ãã³ã¹ã®èª¬æãå®çŸ©ããã«ã¯ã[ãã¥ãŒããªã¢ã« - path operation ã®èšå® - ã¬ã¹ãã³ã¹ã®èª¬æ](../tutorial/path-operation-configuration.md#response-description){.internal-link target=_blank} ãåç
§ããŠãã ããã
+
+## *Path Operation* ã®éæšå¥šå - OpenAPI { #documentation-deprecate-a-path-operation-openapi }
+
+*path operation* ãéæšå¥šã«ããããã¥ã¡ã³ã UI ã«è¡šç€ºããã«ã¯ã[ãã¥ãŒããªã¢ã« - path operation ã®èšå® - éæšå¥š](../tutorial/path-operation-configuration.md#deprecate-a-path-operation){.internal-link target=_blank} ãåç
§ããŠãã ããã
+
+## ä»»æã®ããŒã¿ã JSON äºæã«å€æ { #convert-any-data-to-json-compatible }
+
+ä»»æã®ããŒã¿ã JSON äºæã«å€æããã«ã¯ã[ãã¥ãŒããªã¢ã« - JSON äºæãšã³ã³ãŒã](../tutorial/encoder.md){.internal-link target=_blank} ãåç
§ããŠãã ããã
+
+## OpenAPI ã¡ã¿ããŒã¿ - ããã¥ã¡ã³ã { #openapi-metadata-docs }
+
+ã©ã€ã»ã³ã¹ãããŒãžã§ã³ãé£çµ¡å
ãªã©ãå«ãã¡ã¿ããŒã¿ã OpenAPI ã¹ããŒãã«è¿œå ããã«ã¯ã[ãã¥ãŒããªã¢ã« - ã¡ã¿ããŒã¿ãšããã¥ã¡ã³ãã® URL](../tutorial/metadata.md){.internal-link target=_blank} ãåç
§ããŠãã ããã
+
+## OpenAPI ã®ã«ã¹ã¿ã URL { #openapi-custom-url }
+
+OpenAPI ã® URL ãã«ã¹ã¿ãã€ãºïŒãŸãã¯åé€ïŒããã«ã¯ã[ãã¥ãŒããªã¢ã« - ã¡ã¿ããŒã¿ãšããã¥ã¡ã³ãã® URL](../tutorial/metadata.md#openapi-url){.internal-link target=_blank} ãåç
§ããŠãã ããã
+
+## OpenAPI ããã¥ã¡ã³ãã® URL { #openapi-docs-urls }
+
+èªåçæãããããã¥ã¡ã³ã UI ã䜿çšãã URL ã倿Žããã«ã¯ã[ãã¥ãŒããªã¢ã« - ã¡ã¿ããŒã¿ãšããã¥ã¡ã³ãã® URL](../tutorial/metadata.md#docs-urls){.internal-link target=_blank} ãåç
§ããŠãã ããã
diff --git a/docs/ja/docs/how-to/graphql.md b/docs/ja/docs/how-to/graphql.md
new file mode 100644
index 000000000..bd0d22349
--- /dev/null
+++ b/docs/ja/docs/how-to/graphql.md
@@ -0,0 +1,60 @@
+# GraphQL { #graphql }
+
+**FastAPI** 㯠**ASGI** æšæºã«åºã¥ããŠãããããASGI ã«å¯Ÿå¿ããä»»æã® **GraphQL** ã©ã€ãã©ãªãç°¡åã«çµ±åã§ããŸãã
+
+åãã¢ããªã±ãŒã·ã§ã³å
ã§éåžžã® FastAPI ã® *path operation* ãš GraphQL ãçµã¿åãããŠäœ¿ããŸãã
+
+/// tip | è±ç¥è
+
+**GraphQL** ã¯éåžžã«ç¹å®ã®ãŠãŒã¹ã±ãŒã¹ã解決ããŸãã
+
+äžè¬ç㪠**Web API** ãšæ¯ã¹ããšã**é·æ** ãš **çæ** ããããŸãã
+
+ãèªèº«ã®ãŠãŒã¹ã±ãŒã¹ã§åŸããã **å©ç¹** ã **æ¬ ç¹** ãè£ããã©ãããè©äŸ¡ããŠãã ããã ð€
+
+///
+
+## GraphQL ã©ã€ãã©ãª { #graphql-libraries }
+
+**ASGI** ããµããŒããã **GraphQL** ã©ã€ãã©ãªã®äžéšã以äžã«ç€ºããŸãã**FastAPI** ãšçµã¿åãããŠäœ¿çšã§ããŸã:
+
+* Strawberry ð
+ * FastAPI åãããã¥ã¡ã³ããã
+* Ariadne
+ * FastAPI åãããã¥ã¡ã³ããã
+* Tartiflette
+ * ASGI 飿ºçšã® Tartiflette ASGI ãã
+* Graphene
+ * starlette-graphene3 ãã
+
+## Strawberry ã§ GraphQL { #graphql-with-strawberry }
+
+**GraphQL** ãå¿
èŠããŸãã¯å©çšãããå Žåã¯ã**Strawberry** ã**æšå¥š**ããŸãã**FastAPI** ã®èšèšã«æãè¿ãããã¹ãŠã**åã¢ãããŒã·ã§ã³**ã«åºã¥ããŠããŸãã
+
+ãŠãŒã¹ã±ãŒã¹ã«ãã£ãŠã¯ä»ã®ã©ã€ãã©ãªãéžã¶æ¹ãããå ŽåããããŸãããç§ã«å°ããããã°ããããã **Strawberry** ã詊ãããšãå§ããã§ãããã
+
+FastAPI ãš Strawberry ãçµ±åããæ¹æ³ã®ç°¡åãªãã¬ãã¥ãŒã§ã:
+
+{* ../../docs_src/graphql_/tutorial001_py310.py hl[3,22,25] *}
+
+詳现㯠Strawberry ã®ããã¥ã¡ã³ããã芧ãã ããã
+
+ãŸããStrawberry ãš FastAPI ã®é£æºã«é¢ããããã¥ã¡ã³ãããããŸãã
+
+## Starlette ã®æ§ `GraphQLApp` { #older-graphqlapp-from-starlette }
+
+以åã® Starlette ã«ã¯ãGraphene ãšçµ±åããããã® `GraphQLApp` ã¯ã©ã¹ãå«ãŸããŠããŸããã
+
+ãã㯠Starlette ããã¯éæšå¥šã«ãªããŸããããããããã䜿çšããŠããã³ãŒããããå Žåã¯ãåããŠãŒã¹ã±ãŒã¹ãã«ããŒãã**ã»ãŒåäžã®ã€ã³ã¿ãŒãã§ãŒã¹**ãæã€ starlette-graphene3 ãžå®¹æã«**ç§»è¡**ã§ããŸãã
+
+/// tip | è±ç¥è
+
+GraphQL ãå¿
èŠã§ããã°ãäŸç¶ãšã㊠Strawberry ã®å©çšãæšå¥šããŸããç¬èªã®ã¯ã©ã¹ãåã§ã¯ãªããåã¢ãããŒã·ã§ã³ã«åºã¥ããŠããããã§ãã
+
+///
+
+## ããã«åŠã¶ { #learn-more }
+
+**GraphQL** ã«ã€ããŠã¯ãå
¬åŒ GraphQL ããã¥ã¡ã³ãã§ããã«åŠã¹ãŸãã
+
+äžèšã®åã©ã€ãã©ãªã«ã€ããŠã¯ããªã³ã¯å
ã®ããã¥ã¡ã³ãããåç
§ãã ããã
diff --git a/docs/ja/docs/how-to/index.md b/docs/ja/docs/how-to/index.md
new file mode 100644
index 000000000..b1cd17785
--- /dev/null
+++ b/docs/ja/docs/how-to/index.md
@@ -0,0 +1,13 @@
+# ããŠã㌠- ã¬ã·ã { #how-to-recipes }
+
+ããã§ã¯ã**è€æ°ã®ãããã¯**ã«é¢ããããŸããŸãªã¬ã·ãããããŠããŒãã¬ã€ãã玹ä»ããŸãã
+
+ãããã®ã¢ã€ãã¢ã®å€ãã¯ãããã**ç¬ç«**ããŠãããã»ãšãã©ã®å Žåã**ããªãã®ãããžã§ã¯ã**ã«çŽæ¥åœãŠã¯ãŸããã®ã ããèªãã°ååã§ãã
+
+ãããžã§ã¯ãã«ãšã£ãŠè峿·±ãæçšã ãšæããã®ãããã°ããã²ç¢ºèªããŠãã ãããããã§ãªããã°ãèªã¿é£ã°ããŠãåé¡ãããŸããã
+
+/// tip | è±ç¥è
+
+**FastAPI ãåŠã¶**ããšãäœç³»çã«é²ãããå ŽåïŒæšå¥šïŒã代ããã« [ãã¥ãŒããªã¢ã« - ãŠãŒã¶ãŒã¬ã€ã](../tutorial/index.md){.internal-link target=_blank} ãç« ããšã«èªãã§ãã ããã
+
+///
diff --git a/docs/ja/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md b/docs/ja/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md
new file mode 100644
index 000000000..f1414ac28
--- /dev/null
+++ b/docs/ja/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md
@@ -0,0 +1,135 @@
+# Pydantic v1 ãã Pydantic v2 ãžã®ç§»è¡ { #migrate-from-pydantic-v1-to-pydantic-v2 }
+
+å€ã FastAPI ã¢ããªãããå ŽåãPydantic v1 ã䜿ã£ãŠãããããããŸããã
+
+FastAPI 0.100.0 㯠Pydantic v1 / v2 ã®ã©ã¡ãã«ã察å¿ããŠãããã€ã³ã¹ããŒã«ãããŠããæ¹ã䜿çšããŸããã
+
+FastAPI 0.119.0 ã§ã¯ãPydantic v2 å
ããã® Pydantic v1 ã®éšåçãµããŒãïŒ`pydantic.v1`ïŒãå°å
¥ãããv2 ãžã®ç§»è¡ã容æã«ãªããŸããã
+
+FastAPI 0.126.0 ã§ Pydantic v1 ã®ãµããŒãã¯çµäºããŸãããããã°ããã®é㯠`pydantic.v1` ã¯å©çšå¯èœã§ããã
+
+/// warning | 泚æ
+
+Pydantic ããŒã 㯠Python ã®ææ°ããŒãžã§ã³ãã€ãŸã **Python 3.14** ãããPydantic v1 ã®ãµããŒããçµäºããŸããã
+
+ããã«ã¯ `pydantic.v1` ãå«ãŸããPython 3.14 以äžã§ã¯ãµããŒããããŸããã
+
+Python ã®ææ°æ©èœã䜿ãããå Žåã¯ãPydantic v2 ã䜿çšããŠããããšã確èªããå¿
èŠããããŸãã
+
+///
+
+å€ã FastAPI ã¢ããªã§ Pydantic v1 ã䜿ã£ãŠããå Žåãããã§ã¯ Pydantic v2 ãžã®ç§»è¡æ¹æ³ãšã段éçç§»è¡ãå©ãã **FastAPI 0.119.0 ã®æ©èœ** ã玹ä»ããŸãã
+
+## å
Œ΋‹ۋ { #official-guide }
+
+Pydantic ã«ã¯ v1 ãã v2 ãžã®å
¬åŒã® ç§»è¡ã¬ã€ã ããããŸãã
+
+倿Žç¹ãæ€èšŒãããæ£ç¢ºã§å³å¯ã«ãªã£ãç¹ã泚æäºé
ãªã©ãå«ãŸããŸãã
+
+äœãå€ãã£ãããããããçè§£ããããã«åç
§ããŠãã ããã
+
+## ãã¹ã { #tests }
+
+ã¢ããªã«å¯Ÿãã[ãã¹ã](../tutorial/testing.md){.internal-link target=_blank}ãçšæããç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ïŒCIïŒã§å®è¡ããããã«ããŠãã ããã
+
+ããã«ãããã¢ããã°ã¬ãŒãåŸãæåŸ
ã©ããåäœããŠããããšã確èªã§ããŸãã
+
+## `bump-pydantic` { #bump-pydantic }
+
+å€ãã®å Žåãã«ã¹ã¿ãã€ãºã®ãªãéåžžã® Pydantic ã¢ãã«ã䜿ã£ãŠããã°ãv1 ãã v2 ãžã®ç§»è¡äœæ¥ã®å€§åãèªååã§ããŸãã
+
+åã Pydantic ããŒã ãæäŸãã `bump-pydantic` ã䜿çšã§ããŸãã
+
+ãã®ããŒã«ã¯å¿
èŠãªã³ãŒã倿Žã®ã»ãšãã©ãèªåã§è¡ããŸãã
+
+ãã®åŸãã¹ããå®è¡ããåé¡ãªããã°å®äºã§ããð
+
+## v2 ã«ããã Pydantic v1 { #pydantic-v1-in-v2 }
+
+Pydantic v2 ã«ã¯ãPydantic v1 ããµãã¢ãžã¥ãŒã« `pydantic.v1` ãšããŠå梱ãããŠããŸãããã ãããã㯠Python 3.13 ãè¶
ããããŒãžã§ã³ã§ã¯ãµããŒããããŸããã
+
+ã€ãŸããPydantic v2 ã®ææ°ããŒãžã§ã³ãã€ã³ã¹ããŒã«ãããã®ãµãã¢ãžã¥ãŒã«ããæ§ Pydantic v1 ã®ã³ã³ããŒãã³ããã€ã³ããŒãããŠããããã v1 ãã€ã³ã¹ããŒã«ããŠãããã®ããã«äœ¿çšã§ããŸãã
+
+{* ../../docs_src/pydantic_v1_in_v2/tutorial001_an_py310.py hl[1,4] *}
+
+### v2 å
ã® Pydantic v1 ã«å¯Ÿãã FastAPI ã®ãµããŒã { #fastapi-support-for-pydantic-v1-in-v2 }
+
+FastAPI 0.119.0 以éã§ã¯ãç§»è¡ã容æã«ãããããPydantic v2 å
ã® Pydantic v1 ã«å¯ŸããéšåçãµããŒãããããŸãã
+
+ãã®ãããPydantic ã v2 ã®ææ°ã«äžããã€ã³ããŒãã `pydantic.v1` ãµãã¢ãžã¥ãŒã«ã«åãæ¿ããã ãã§ãå€ãã®å Žåãã®ãŸãŸåäœããŸãã
+
+{* ../../docs_src/pydantic_v1_in_v2/tutorial002_an_py310.py hl[2,5,15] *}
+
+/// warning | 泚æ
+
+åè¿°ã®ãšãããPython ã®æè¿ã®ããŒãžã§ã³ïŒPython 3.14 以éïŒã§ã¯ Pydantic v1 ããµããŒããããªãããã`pydantic.v1` ã®äœ¿çšã Python 3.14 以äžã§ã¯ãµããŒããããŸããã
+
+///
+
+### åäžã¢ããªã§ã® Pydantic v1 ãš v2 { #pydantic-v1-and-v2-on-the-same-app }
+
+Pydantic v2 ã®ã¢ãã«ã®ãã£ãŒã«ãã« Pydantic v1 ã®ã¢ãã«ãïŒãŸãã¯ãã®éãïŒåã蟌ãããšã¯ãPydantic ã§ã¯ããµããŒããããŠããŸãããã
+
+```mermaid
+graph TB
+ subgraph "â Not Supported"
+ direction TB
+ subgraph V2["Pydantic v2 Model"]
+ V1Field["Pydantic v1 Model"]
+ end
+ subgraph V1["Pydantic v1 Model"]
+ V2Field["Pydantic v2 Model"]
+ end
+ end
+
+ style V2 fill:#f9fff3
+ style V1 fill:#fff6f0
+ style V1Field fill:#fff6f0
+ style V2Field fill:#f9fff3
+```
+
+...but, you can have separated models using Pydantic v1 and v2 in the same app.
+
+```mermaid
+graph TB
+ subgraph "â
Supported"
+ direction TB
+ subgraph V2["Pydantic v2 Model"]
+ V2Field["Pydantic v2 Model"]
+ end
+ subgraph V1["Pydantic v1 Model"]
+ V1Field["Pydantic v1 Model"]
+ end
+ end
+
+ style V2 fill:#f9fff3
+ style V1 fill:#fff6f0
+ style V1Field fill:#fff6f0
+ style V2Field fill:#f9fff3
+```
+
+å Žåã«ãã£ãŠã¯ãåã FastAPI ã® path operation å
ã§ãPydantic v1 ãš v2 ã®äž¡æ¹ã®ã¢ãã«ãæ±ãããšãå¯èœã§ã:
+
+{* ../../docs_src/pydantic_v1_in_v2/tutorial003_an_py310.py hl[2:3,6,12,21:22] *}
+
+äžã®äŸã§ã¯ãå
¥åã¢ãã«ã¯ Pydantic v1ãåºåã¢ãã«ïŒ`response_model=ItemV2` ã§å®çŸ©ïŒã¯ Pydantic v2 ã§ãã
+
+### Pydantic v1 ã®ãã©ã¡ãŒã¿ { #pydantic-v1-parameters }
+
+Pydantic v1 ã®ã¢ãã«ã§ `Body`ã`Query`ã`Form` ãªã©ã® FastAPI åºæã®ãã©ã¡ãŒã¿ãŠãŒãã£ãªãã£ã䜿ãå¿
èŠãããå Žåãv2 ãžã®ç§»è¡ãå®äºãããŸã§ã®é㯠`fastapi.temp_pydantic_v1_params` ããã€ã³ããŒãã§ããŸã:
+
+{* ../../docs_src/pydantic_v1_in_v2/tutorial004_an_py310.py hl[4,18] *}
+
+### 段éçã«ç§»è¡ { #migrate-in-steps }
+
+/// tip | è±ç¥è
+
+ãŸã㯠`bump-pydantic` ã詊ããŠãã ããããã¹ããéããåé¡ãªããã°ã³ãã³ãäžçºã§å®äºã§ããâš
+
+///
+
+`bump-pydantic` ãé©çšã§ããªãå Žåã¯ãåäžã¢ããªã§ v1 ãš v2 ã®ã¢ãã«ã䜵çšã§ãããµããŒããå©çšããŠãåŸã
ã« v2 ãžç§»è¡ã§ããŸãã
+
+ãŸã Pydantic ã v2 ã®ææ°ã«ã¢ããã°ã¬ãŒããããã¹ãŠã®ã¢ãã«ã®ã€ã³ããŒãã `pydantic.v1` ã«åãæ¿ããŸãã
+
+ãã®åŸãã¢ãã«ãã°ã«ãŒãããšã«å°ãã〠Pydantic v1 ãã v2 ãžç§»è¡ããŠãããŸããð¶
diff --git a/docs/ja/docs/how-to/separate-openapi-schemas.md b/docs/ja/docs/how-to/separate-openapi-schemas.md
new file mode 100644
index 000000000..46df2aafb
--- /dev/null
+++ b/docs/ja/docs/how-to/separate-openapi-schemas.md
@@ -0,0 +1,102 @@
+# å
¥åãšåºåã§OpenAPIã®ã¹ããŒããåãããã©ãã { #separate-openapi-schemas-for-input-and-output-or-not }
+
+**Pydantic v2** ã®ãªãªãŒã¹ä»¥éãçæããã OpenAPI ã¯ä»¥åããå°ãæ£ç¢ºã§ãããæ£ãããã®ã«ãªããŸãããð
+
+å®éã«ã¯ãå Žåã«ãã£ãŠã¯åã Pydantic ã¢ãã«ã«å¯ŸããŠãå
¥åçšãšåºåçšã§ OpenAPI ã« **2 ã€ã® JSON Schema** ãå«ãŸããããšããããŸãããã㯠**ããã©ã«ãå€** ã®æç¡ã«äŸåããŸãã
+
+ãã®åäœãšãå¿
èŠã«å¿ããŠã®å€æŽæ¹æ³ãèŠãŠãããŸãã
+
+## å
¥åºåã®Pydanticã¢ãã« { #pydantic-models-for-input-and-output }
+
+次ã®ããã«ããã©ã«ãå€ãæã€ Pydantic ã¢ãã«ããããšããŸãã
+
+{* ../../docs_src/separate_openapi_schemas/tutorial001_py310.py ln[1:7] hl[7] *}
+
+### å
¥åçšã¢ãã« { #model-for-input }
+
+ãã®ã¢ãã«ã次ã®ããã«å
¥åãšããŠäœ¿ããš:
+
+{* ../../docs_src/separate_openapi_schemas/tutorial001_py310.py ln[1:15] hl[14] *}
+
+...`description` ãã£ãŒã«ã㯠**å¿
é ã§ã¯ãããŸãã**ãããã©ã«ãå€ã `None` ã ããã§ãã
+
+### ããã¥ã¡ã³ãã§ã®å
¥åã¢ãã« { #input-model-in-docs }
+
+ããã¥ã¡ã³ãã§ç¢ºèªãããšã`description` ãã£ãŒã«ãã«ã¯ **èµ€ãã¢ã¹ã¿ãªã¹ã¯** ãä»ããŠããããå¿
é ãšããŠã¯ããŒã¯ãããŠããŸãã:
+
+
+
+
+
+
+httpx - `TestClient` ã䜿çšãããå Žåã«å¿
èŠã§ãã
* jinja2 - ããã©ã«ãã®ãã³ãã¬ãŒãèšå®ã䜿çšãããå Žåã«å¿
èŠã§ãã
-* python-multipart - `request.form()` ãšãšãã«ããã©ãŒã ã® ãparsingã ããµããŒããããå Žåã«å¿
èŠã§ãã
+* python-multipart - `request.form()` ãšãšãã«ããã©ãŒã ã® ãparsingã ããµããŒããããå Žåã«å¿
èŠã§ãã
FastAPI ã«ãã£ãŠäœ¿çšããããã®:
diff --git a/docs/ja/docs/python-types.md b/docs/ja/docs/python-types.md
index 26a9e2193..a6b46c256 100644
--- a/docs/ja/docs/python-types.md
+++ b/docs/ja/docs/python-types.md
@@ -1,12 +1,12 @@
# Pythonã®åã®çŽ¹ä» { #python-types-intro }
-Pythonã§ã¯ãªãã·ã§ã³ã®ãåãã³ããïŒãåã¢ãããŒã·ã§ã³ããšãåŒã°ããŸãïŒããµããŒããããŠããŸãã
+Python ã«ã¯ãªãã·ã§ã³ã®ãåãã³ããïŒãåã¢ãããŒã·ã§ã³ããšãåŒã°ããŸãïŒããµããŒããããŠããŸãã
-ãããã® **ãåãã³ãã** ãŸãã¯ã¢ãããŒã·ã§ã³ã¯ã倿°ã®åã宣èšã§ããç¹å¥ãªæ§æã§ãã
+ãããã® **ãåãã³ãã** ãã¢ãããŒã·ã§ã³ã¯ã倿°ã®åã宣èšã§ããç¹å¥ãªæ§æã§ãã
倿°ã«åã宣èšããããšã§ããšãã£ã¿ãŒãããŒã«ãããè¯ããµããŒããæäŸã§ããŸãã
-ããã¯Pythonã®åãã³ãã«ã€ããŠã® **ã¯ã€ãã¯ãã¥ãŒããªã¢ã«/ãªãã¬ãã·ã¥** ã«ãããŸããã**FastAPI** ã§äœ¿çšããããã«å¿
èŠãªæäœéã®ããšã ããã«ããŒããŠããŸãã...å®éã«ã¯æ¬åœã«å°ãªãã§ãã
+ãã㯠Python ã®åãã³ãã«ã€ããŠã® **ã¯ã€ãã¯ãã¥ãŒããªã¢ã«/ãªãã¬ãã·ã¥** ã«ãããŸããã**FastAPI** ã§äœ¿ãããã«å¿
èŠãªæäœéã®ããšã ããã«ããŒããŠããŸãã...å®éã«ã¯æ¬åœã«å°ãªãã§ãã
**FastAPI** ã¯ãã¹ãŠãããã®åãã³ãã«åºã¥ããŠãããå€ãã®åŒ·ã¿ãšå©ç¹ãäžããŠãããŸãã
@@ -14,7 +14,7 @@ Pythonã§ã¯ãªãã·ã§ã³ã®ãåãã³ããïŒãåã¢ãããŒã·ã§ã³
/// note | åè
-ããããªããPythonã®å°éå®¶ã§ããã§ã«åãã³ãã«ã€ããŠãã¹ãŠç¥ã£ãŠããã®ã§ããã°ã次ã®ç« ãŸã§èªã¿é£ã°ããŠãã ããã
+ããããªãã Python ã®å°éå®¶ã§ããã§ã«åãã³ãã«ã€ããŠãã¹ãŠç¥ã£ãŠããã®ã§ããã°ã次ã®ç« ãŸã§èªã¿é£ã°ããŠãã ããã
///
@@ -22,7 +22,7 @@ Pythonã§ã¯ãªãã·ã§ã³ã®ãåãã³ããïŒãåã¢ãããŒã·ã§ã³
ç°¡åãªäŸããå§ããŠã¿ãŸããã:
-{* ../../docs_src/python_types/tutorial001_py39.py *}
+{* ../../docs_src/python_types/tutorial001_py310.py *}
ãã®ããã°ã©ã ãåŒã³åºããšã以äžãåºåãããŸã:
@@ -32,11 +32,11 @@ John Doe
ãã®é¢æ°ã¯ä»¥äžã®ãããªããšãè¡ããŸã:
-* `first_name`ãš`last_name`ãååŸããŸãã
-* `title()`ãçšããŠãããããã®æåã®æåã倧æåã«å€æããŸãã
-* çãäžã«ã¹ããŒã¹ãå
¥ããŠé£çµããŸãã
+* `first_name` ãš `last_name` ãååŸããŸãã
+* `title()` ãçšããŠãããããã®æåã®æåã倧æåã«å€æããŸãã
+* çãäžã«ã¹ããŒã¹ãå
¥ããŠé£çµããŸãã
-{* ../../docs_src/python_types/tutorial001_py39.py hl[2] *}
+{* ../../docs_src/python_types/tutorial001_py310.py hl[2] *}
### ç·šé { #edit-it }
@@ -48,11 +48,11 @@ John Doe
ãããããããããšãæåã®æåã倧æåã«å€æãããã®ã¡ãœããããåŒã³åºãå¿
èŠããããŸãã
-ããã¯`upper`ã§ãããïŒ`uppercase`ã§ãããïŒ`first_uppercase`ïŒ`capitalize`ïŒ
+ãã㯠`upper` ã§ãããïŒ`uppercase` ã§ãããïŒ`first_uppercase`ïŒ`capitalize`ïŒ
ãããŠãå€ãããããã°ã©ããŒã®å人ã§ãããšãã£ã¿ã§èªåè£å®ã詊ããŠã¿ãŸãã
-颿°ã®æåã®ãã©ã¡ãŒã¿`first_name`ãå
¥åããããã(`.`)ãå
¥åããŠããã`Ctrl+Space`ãæŒããšè£å®ãå®è¡ãããŸãã
+颿°ã®æåã®ãã©ã¡ãŒã¿ `first_name` ãå
¥åãããããïŒ`.`ïŒãå
¥åããŠããã`Ctrl+Space` ãæŒããšè£å®ãå®è¡ãããŸãã
ããããæ²ããããšã«ãããã¯ãªãã®åœ¹ã«ãç«ã¡ãŸãã:
@@ -78,7 +78,7 @@ John Doe
ããããåãã³ããã§ã:
-{* ../../docs_src/python_types/tutorial002_py39.py hl[1] *}
+{* ../../docs_src/python_types/tutorial002_py310.py hl[1] *}
ããã¯ã以äžã®ããã«ããã©ã«ãå€ã宣èšããã®ãšåãã§ã¯ãããŸãã:
@@ -94,7 +94,7 @@ John Doe
ãããä»ãããªããåã³ãã®é¢æ°ãäœæããŠããæäžã«ãåãã³ãã䜿ã£ãŠãããšæ³åããŠã¿ãŠãã ããã
-åãã¿ã€ãã³ã°ã§`Ctrl+Space`ã§èªåè£å®ãå®è¡ãããšã以äžã®ããã«ãªããŸã:
+åãã¿ã€ãã³ã°ã§ `Ctrl+Space` ã§èªåè£å®ãå®è¡ãããšã以äžã®ããã«ãªããŸã:
@@ -106,15 +106,15 @@ John Doe
ãã®é¢æ°ãèŠãŠãã ããããã§ã«åãã³ããæã£ãŠããŸã:
-{* ../../docs_src/python_types/tutorial003_py39.py hl[1] *}
+{* ../../docs_src/python_types/tutorial003_py310.py hl[1] *}
ãšãã£ã¿ã¯å€æ°ã®åãç¥ã£ãŠããã®ã§ãè£å®ã ãã§ãªãããšã©ãŒãã§ãã¯ãããããšãã§ããŸã:
-ããã§`age`ã`str(age)`ã§æååã«å€æããŠä¿®æ£ããå¿
èŠãããããšãããããŸã:
+ããã§ `age` ã `str(age)` ã§æååã«å€æããŠä¿®æ£ããå¿
èŠãããããšãããããŸã:
-{* ../../docs_src/python_types/tutorial004_py39.py hl[2] *}
+{* ../../docs_src/python_types/tutorial004_py310.py hl[2] *}
## åã®å®£èš { #declaring-types }
@@ -124,7 +124,7 @@ John Doe
### åçŽãªå { #simple-types }
-`str`ã ãã§ãªããPythonã®æšæºçãªåãã¹ãŠã宣èšã§ããŸãã
+`str` ã ãã§ãªããPython ã®æšæºçãªåãã¹ãŠã宣èšã§ããŸãã
äŸãã°ã以äžã䜿çšå¯èœã§ã:
@@ -133,51 +133,54 @@ John Doe
* `bool`
* `bytes`
-{* ../../docs_src/python_types/tutorial005_py39.py hl[1] *}
+{* ../../docs_src/python_types/tutorial005_py310.py hl[1] *}
-### åãã©ã¡ãŒã¿ãæã€ãžã§ããªãã¯å { #generic-types-with-type-parameters }
+### `typing` ã¢ãžã¥ãŒã« { #typing-module }
-ããŒã¿æ§é ã®äžã«ã¯ã`dict`ã`list`ã`set`ã`tuple`ã®ããã«ä»ã®å€ãå«ãããšãã§ãããã®ããããŸãããŸãå
éšã®å€ãç¬èªã®åãæã€ããšãã§ããŸãã
+ããã€ãã®è¿œå ã®ãŠãŒã¹ã±ãŒã¹ã§ã¯ãæšæºã©ã€ãã©ãªã® `typing` ã¢ãžã¥ãŒã«ããäœããã€ã³ããŒãããå¿
èŠããããããããŸãããäŸãã°ãä»»æã®åããåãä»ããããšã宣èšãããå Žåã`typing` ã® `Any` ã䜿ããŸã:
-å
éšã®åãæã€ãããã®åã¯ã**generic**ãåãšåŒã°ããŸãããããŠãå
éšã®åãå«ããŠå®£èšããããšãå¯èœã§ãã
+```python
+from typing import Any
-ãããã®åãå
éšã®åã宣èšããã«ã¯ãPythonã®æšæºã¢ãžã¥ãŒã«`typing`ã䜿çšã§ããŸãããããã®åãã³ãããµããŒãããããã«ç¹å¥ã«ååšããŠããŸãã
-#### æ°ããPythonããŒãžã§ã³ { #newer-versions-of-python }
+def some_function(data: Any):
+ print(data)
+```
-`typing`ãäœ¿ãæ§æã¯ãPython 3.6ããææ°ããŒãžã§ã³ãŸã§ïŒPython 3.9ãPython 3.10ãªã©ãå«ãïŒãã¹ãŠã®ããŒãžã§ã³ãš **äºææ§** ããããŸãã
+### ãžã§ããªãã¯å { #generic-types }
-Pythonãé²åããã«ã€ãã**æ°ããããŒãžã§ã³** ã§ã¯ãããã®åã¢ãããŒã·ã§ã³ãžã®ãµããŒããæ¹åãããå€ãã®å Žåãåã¢ãããŒã·ã§ã³ã宣èšããããã«`typing`ã¢ãžã¥ãŒã«ãã€ã³ããŒãããŠäœ¿ãå¿
èŠãããªããªããŸãã
+äžéšã®åã¯ãè§æ¬åŒ§å
ã§ãåãã©ã¡ãŒã¿ããåãåããå
éšã®åãå®çŸ©ã§ããŸããäŸãã°ãæååã®ãªã¹ãã㯠`list[str]` ãšããŠå®£èšããŸãã
-ãããžã§ã¯ãã§ããæ°ããPythonããŒãžã§ã³ãéžã¹ããªãããã®è¿œå ã®ã·ã³ãã«ããæŽ»çšã§ããŸãã
+ãã®ããã«åãã©ã¡ãŒã¿ãåããå㯠**Generic types**ïŒãžã§ããªã¯ã¹ïŒãšåŒã°ããŸãã
-ããã¥ã¡ã³ãå
šäœã§ãPythonã®åããŒãžã§ã³ãšäºææ§ã®ããäŸïŒå·®åãããå ŽåïŒã瀺ããŠããŸãã
+次ã®çµã¿èŸŒã¿åããžã§ããªã¯ã¹ãšããŠïŒè§æ¬åŒ§ãšå
éšã®åã§ïŒäœ¿ããŸã:
-äŸãã°ã**Python 3.6+**ãã¯Python 3.6以äžïŒ3.7ã3.8ã3.9ã3.10ãªã©ãå«ãïŒãšäºææ§ãããããšãæå³ããŸãããŸãã**Python 3.9+**ãã¯Python 3.9以äžïŒ3.10ãªã©ãå«ãïŒãšäºææ§ãããããšãæå³ããŸãã
-
-**ææ°ã®PythonããŒãžã§ã³** ã䜿ãããªããææ°ããŒãžã§ã³åãã®äŸã䜿ã£ãŠãã ãããäŸãã°ã**Python 3.10+**ãã®ããã«ãããã㯠**æè¯ãã€æãã·ã³ãã«ãªæ§æ** ã«ãªããŸãã
+* `list`
+* `tuple`
+* `set`
+* `dict`
#### List { #list }
-äŸãã°ã`str`ã®`list`ã®å€æ°ãå®çŸ©ããŠã¿ãŸãããã
+äŸãã°ã`str` ã® `list` ã®å€æ°ãå®çŸ©ããŠã¿ãŸãããã
åãã³ãã³ïŒ`:`ïŒã®æ§æã§å€æ°ã宣èšããŸãã
-åãšããŠã`list`ãæå®ããŸãã
+åãšããŠã`list` ãæå®ããŸãã
ãªã¹ãã¯ããã€ãã®å
éšã®åãå«ãåãªã®ã§ãããããè§æ¬åŒ§ã§å²ã¿ãŸã:
-{* ../../docs_src/python_types/tutorial006_py39.py hl[1] *}
+{* ../../docs_src/python_types/tutorial006_py310.py hl[1] *}
/// info | æ
å ±
è§æ¬åŒ§å
ã®å
éšã®åã¯ãåãã©ã¡ãŒã¿ããšåŒã°ããŠããŸãã
-ãã®å Žåã`str`ã¯`list`ã«æž¡ãããåãã©ã¡ãŒã¿ã§ãã
+ãã®å Žåã`str` 㯠`list` ã«æž¡ãããåãã©ã¡ãŒã¿ã§ãã
///
-ã€ãŸã: 倿°`items`ã¯`list`ã§ããããã®ãªã¹ãã®åé
ç®ã¯`str`ã§ãã
+ã€ãŸã: 倿° `items` 㯠`list` ã§ããããã®ãªã¹ãã®åé
ç®ã¯ `str` ã§ãã
ããããããšã§ããšãã£ã¿ã¯ãªã¹ãã®é
ç®ãåŠçããŠããéã«ããµããŒããæäŸã§ããŸãã
@@ -185,78 +188,54 @@ Pythonãé²åããã«ã€ãã**æ°ããããŒãžã§ã³** ã§ã¯ãããã®
åããªããã°ãããã¯ã»ãŒäžå¯èœã§ãã
-倿°`item`ã¯ãªã¹ã`items`ã®èŠçŽ ã®äžã€ã§ããããšã«æ³šæããŠãã ããã
+倿° `item` ã¯ãªã¹ã `items` ã®èŠçŽ ã®äžã€ã§ããããšã«æ³šæããŠãã ããã
-ããã§ãããšãã£ã¿ã¯ããã`str`ã§ããããšãç¥ã£ãŠããŠããã®ããã®ãµããŒããæäŸããŠããŸãã
+ããã§ãããšãã£ã¿ã¯ããã `str` ã§ããããšãç¥ã£ãŠããŠããã®ããã®ãµããŒããæäŸããŠããŸãã
#### Tuple ãš Set { #tuple-and-set }
-`tuple`ãš`set`ã®å®£èšãåæ§ã§ã:
+`tuple` ãš `set` ã®å®£èšãåæ§ã§ã:
-{* ../../docs_src/python_types/tutorial007_py39.py hl[1] *}
+{* ../../docs_src/python_types/tutorial007_py310.py hl[1] *}
ã€ãŸã:
-* 倿°`items_t`ã¯`int`ãå¥ã®`int`ã`str`ã®3ã€ã®é
ç®ãæã€`tuple`ã§ãã
-* 倿°`items_s`ã¯`set`ã§ããããã®åé
ç®ã¯`bytes`åã§ãã
+* 倿° `items_t` 㯠`int`ãå¥ã® `int`ã`str` ã® 3 ã€ã®é
ç®ãæã€ `tuple` ã§ãã
+* 倿° `items_s` 㯠`set` ã§ããããã®åé
ç®ã¯ `bytes` åã§ãã
#### Dict { #dict }
-`dict`ãå®çŸ©ããã«ã¯ãã«ã³ãåºåãã§2ã€ã®åãã©ã¡ãŒã¿ãæž¡ããŸãã
+`dict` ãå®çŸ©ããã«ã¯ãã«ã³ãåºåãã§ 2 ã€ã®åãã©ã¡ãŒã¿ãæž¡ããŸãã
-æåã®åãã©ã¡ãŒã¿ã¯`dict`ã®ããŒã§ãã
+æåã®åãã©ã¡ãŒã¿ã¯ `dict` ã®ããŒã§ãã
-2çªç®ã®åãã©ã¡ãŒã¿ã¯`dict`ã®å€ã§ã:
+2 çªç®ã®åãã©ã¡ãŒã¿ã¯ `dict` ã®å€ã§ã:
-{* ../../docs_src/python_types/tutorial008_py39.py hl[1] *}
+{* ../../docs_src/python_types/tutorial008_py310.py hl[1] *}
ã€ãŸã:
-* 倿°`prices`ã¯`dict`ã§ã:
- * ãã®`dict`ã®ããŒã¯`str`åã§ãïŒäŸãã°ãåé
ç®ã®ååïŒã
- * ãã®`dict`ã®å€ã¯`float`åã§ãïŒäŸãã°ãåé
ç®ã®äŸ¡æ ŒïŒã
+* 倿° `prices` 㯠`dict` ã§ã:
+ * ãã® `dict` ã®ããŒã¯ `str` åã§ãïŒäŸãã°ãåé
ç®ã®ååïŒã
+ * ãã® `dict` ã®å€ã¯ `float` åã§ãïŒäŸãã°ãåé
ç®ã®äŸ¡æ ŒïŒã
#### Union { #union }
-倿°ã**è€æ°ã®åã®ãããã**ã«ãªãåŸãããšã宣èšã§ããŸããäŸãã°ã`int`ãŸãã¯`str`ã§ãã
+倿°ã **è€æ°ã®åã®ãããã** ã«ãªãåŸãããšã宣èšã§ããŸããäŸãã°ã`int` ãŸã㯠`str` ã§ãã
-Python 3.6以äžïŒPython 3.10ãå«ãïŒã§ã¯ã`typing`ã®`Union`åã䜿ããè§æ¬åŒ§ã®äžã«åãä»ããå¯èœæ§ã®ããåãå
¥ããããŸãã
+ãããå®çŸ©ããã«ã¯ãäž¡æ¹ã®åãåºåããã㫠瞊æ£ïŒ`|`ïŒ ã䜿ããŸãã
-Python 3.10ã§ã¯ãåãä»ããå¯èœæ§ã®ããåã瞊æ£ïŒ`|`ïŒã§åºåã£ãŠæžãã **æ°ããæ§æ** ããããŸãã
-
-//// tab | Python 3.10+
+ããã¯ããŠããªã³ïŒunionïŒããšåŒã°ããŸãã倿°ãããã 2 ã€ã®åã®éåã®åéåã®ããããã«ãªãåŸãããã§ãã
```Python hl_lines="1"
{!> ../../docs_src/python_types/tutorial008b_py310.py!}
```
-////
+ãã㯠`item` ã `int` ãŸã㯠`str` ã«ãªãåŸãããšãæå³ããŸã.
-//// tab | Python 3.9+
+#### `None` ã®å¯èœæ§ { #possibly-none }
-```Python hl_lines="1 4"
-{!> ../../docs_src/python_types/tutorial008b_py39.py!}
-```
-
-////
-
-ã©ã¡ãã®å Žåãã`item`ã¯`int`ãŸãã¯`str`ã«ãªãåŸãããšãæå³ããŸãã
-
-#### `None`ã®å¯èœæ§ { #possibly-none }
-
-å€ã`str`ã®ãããªåãæã€å¯èœæ§ãããäžæ¹ã§ã`None`ã«ããªãåŸãããšã宣èšã§ããŸãã
-
-Python 3.6以äžïŒPython 3.10ãå«ãïŒã§ã¯ã`typing`ã¢ãžã¥ãŒã«ãã`Optional`ãã€ã³ããŒãããŠäœ¿ãããšã§å®£èšã§ããŸãã
-
-```Python hl_lines="1 4"
-{!../../docs_src/python_types/tutorial009_py39.py!}
-```
-
-ãã ã®`str`ã®ä»£ããã«`Optional[str]`ã䜿çšããããšã§ãå€ãåžžã«`str`ã§ãããšä»®å®ããŠãããšãã«ãå®éã«ã¯`None`ã§ããå¯èœæ§ããããšãããšã©ãŒããšãã£ã¿ãæ€åºããã®ã«åœ¹ç«ã¡ãŸãã
-
-`Optional[Something]`ã¯å®éã«ã¯`Union[Something, None]`ã®ã·ã§ãŒãã«ããã§ãäž¡è
ã¯ç䟡ã§ãã
-
-ããã¯ãPython 3.10ã§ã¯`Something | None`ã䜿ããããšãæå³ããŸã:
+å€ã `str` ã®ãããªåãæã€å¯èœæ§ãããäžæ¹ã§ã`None` ã«ããªãåŸãããšã宣èšã§ããŸãã
//// tab | Python 3.10+
@@ -266,120 +245,31 @@ Python 3.6以äžïŒPython 3.10ãå«ãïŒã§ã¯ã`typing`ã¢ãžã¥ãŒã«ãã
////
-//// tab | Python 3.9+
-
-```Python hl_lines="1 4"
-{!> ../../docs_src/python_types/tutorial009_py39.py!}
-```
-
-////
-
-//// tab | Python 3.9+ alternative
-
-```Python hl_lines="1 4"
-{!> ../../docs_src/python_types/tutorial009b_py39.py!}
-```
-
-////
-
-#### `Union`ãŸãã¯`Optional`ã®äœ¿çš { #using-union-or-optional }
-
-Python 3.10æªæºã®ããŒãžã§ã³ã䜿ã£ãŠããå Žåãããã¯ç§ã®ãšãŠã **䞻芳ç** ãªèгç¹ããã®ãã³ãã§ã:
-
-* ðš `Optional[SomeType]`ã¯é¿ããŠãã ãã
-* 代ããã« âš **`Union[SomeType, None]`ã䜿ã£ãŠãã ãã** âš
-
-ã©ã¡ããç䟡ã§ãå
éšçã«ã¯åãã§ããã`Optional`ãã`Union`ãããããããŸãããšããã®ãã**optional**ããšããåèªã¯å€ããªãã·ã§ã³ã§ããããšã瀺åããããã«èŠããŸãããå®éã«ã¯ã`None`ã«ãªãåŸãããšããæå³ã§ããããªãã·ã§ã³ã§ã¯ãªãå¿
é ã§ããå Žåã§ãããã ããã§ãã
-
-`Union[SomeType, None]`ã®ã»ããæå³ãããæç€ºçã ãšæããŸãã
-
-ããã¯èšèãååã®è©±ã«ãããŸããããããããã®èšèã¯ããªããããŒã ã¡ã€ããã³ãŒããã©ãèãããã«åœ±é¿ãåŸãŸãã
-
-äŸãšããŠããã®é¢æ°ãèŠãŠã¿ãŸããã:
-
-{* ../../docs_src/python_types/tutorial009c_py39.py hl[1,4] *}
-
-ãã©ã¡ãŒã¿`name`ã¯`Optional[str]`ãšããŠå®çŸ©ãããŠããŸããã**ãªãã·ã§ã³ã§ã¯ãããŸãã**ããã®ãã©ã¡ãŒã¿ãªãã§é¢æ°ãåŒã³åºããŸãã:
-
-```Python
-say_hi() # Oh, no, this throws an error! ð±
-```
-
-`name`ãã©ã¡ãŒã¿ã¯ããã©ã«ãå€ããªãããã**äŸç¶ãšããŠå¿
é **ïŒ*optional*ã§ã¯ãªãïŒã§ããããã§ãã`name`ã¯å€ãšããŠ`None`ãåãä»ããŸã:
-
-```Python
-say_hi(name=None) # This works, None is valid ð
-```
-
-è¯ãç¥ãããšããŠãPython 3.10ã«ãªãã°ãã®å¿é
ã¯äžèŠã§ããåã®ãŠããªã³ãå®çŸ©ããããã«`|`ãåçŽã«äœ¿ããããã§ã:
-
-{* ../../docs_src/python_types/tutorial009c_py310.py hl[1,4] *}
-
-ãããŠã`Optional`ã`Union`ã®ãããªååã«ã€ããŠå¿é
ããå¿
èŠããªããªããŸããð
-
-#### ãžã§ããªãã¯å { #generic-types }
-
-è§æ¬åŒ§ã§åãã©ã¡ãŒã¿ãåããããã®åã¯ãäŸãã°æ¬¡ã®ããã« **Generic types** ãŸã㯠**Generics** ãšåŒã°ããŸã:
-
-//// tab | Python 3.10+
-
-åãçµã¿èŸŒã¿åããžã§ããªã¯ã¹ãšããŠïŒè§æ¬åŒ§ãšå
éšã®åã§ïŒäœ¿ããŸã:
-
-* `list`
-* `tuple`
-* `set`
-* `dict`
-
-ãŸãããããŸã§ã®PythonããŒãžã§ã³ãšåæ§ã«ã`typing`ã¢ãžã¥ãŒã«ãã:
-
-* `Union`
-* `Optional`
-* ...and others.
-
-Python 3.10ã§ã¯ããžã§ããªã¯ã¹ã®`Union`ã`Optional`ã䜿ã代æ¿ãšããŠãåã®ãŠããªã³ã宣èšããããã«çžŠæ£ïŒ`|`ïŒã䜿ããŸããããã¯ãã£ãšè¯ããããã·ã³ãã«ã§ãã
-
-////
-
-//// tab | Python 3.9+
-
-åãçµã¿èŸŒã¿åããžã§ããªã¯ã¹ãšããŠïŒè§æ¬åŒ§ãšå
éšã®åã§ïŒäœ¿ããŸã:
-
-* `list`
-* `tuple`
-* `set`
-* `dict`
-
-ãããŠ`typing`ã¢ãžã¥ãŒã«ã®ãžã§ããªã¯ã¹:
-
-* `Union`
-* `Optional`
-* ...and others.
-
-////
+ãã ã® `str` ã®ä»£ããã« `str | None` ã䜿çšããããšã§ãå€ãåžžã« `str` ã§ãããšä»®å®ããŠãããšãã«ãå®éã«ã¯ `None` ã§ããå¯èœæ§ããããšãããšã©ãŒããšãã£ã¿ãæ€åºããã®ã«åœ¹ç«ã¡ãŸãã
### åãšããŠã®ã¯ã©ã¹ { #classes-as-types }
倿°ã®åãšããŠã¯ã©ã¹ã宣èšããããšãã§ããŸãã
-ååãæã€`Person`ã¯ã©ã¹ããããšããŸããã:
+ååãæã€ `Person` ã¯ã©ã¹ããããšããŸããã:
-{* ../../docs_src/python_types/tutorial010_py39.py hl[1:3] *}
+{* ../../docs_src/python_types/tutorial010_py310.py hl[1:3] *}
-倿°ã`Person`åãšããŠå®£èšã§ããŸã:
+倿°ã `Person` åãšããŠå®£èšã§ããŸã:
-{* ../../docs_src/python_types/tutorial010_py39.py hl[6] *}
+{* ../../docs_src/python_types/tutorial010_py310.py hl[6] *}
ãããŠãåã³ããã¹ãŠã®ãšãã£ã¿ã®ãµããŒããåŸãããšãã§ããŸã:
-ããã¯ã`one_person`ã¯ã¯ã©ã¹`Person`ã®**ã€ã³ã¹ã¿ã³ã¹**ã§ãããããšãæå³ããŸãã
+ããã¯ã`one_person` ã¯ã¯ã©ã¹ `Person` ã® **ã€ã³ã¹ã¿ã³ã¹** ã§ãããããšãæå³ããŸãã
-ã`one_person`ã¯`Person`ãšããååã®**ã¯ã©ã¹**ã§ããããšããæå³ã§ã¯ãããŸããã
+ã`one_person` 㯠`Person` ãšããååã® **ã¯ã©ã¹** ã§ããããšããæå³ã§ã¯ãããŸããã
-## Pydanticã®ã¢ãã« { #pydantic-models }
+## Pydantic ã®ã¢ãã« { #pydantic-models }
-Pydantic ã¯ããŒã¿æ€èšŒãè¡ãããã®Pythonã©ã€ãã©ãªã§ãã
+Pydantic ã¯ããŒã¿æ€èšŒãè¡ãããã® Python ã©ã€ãã©ãªã§ãã
ããŒã¿ã®ã圢ãã屿§ä»ãã®ã¯ã©ã¹ãšããŠå®£èšããŸãã
@@ -389,53 +279,47 @@ Python 3.10ã§ã¯ããžã§ããªã¯ã¹ã®`Union`ã`Optional`ã䜿ã代æ¿ãš
ãŸãããã®çµæã®ãªããžã§ã¯ãã§ãã¹ãŠã®ãšãã£ã¿ã®ãµããŒããåããããšãã§ããŸãã
-Pydanticã®å
¬åŒããã¥ã¡ã³ãããã®äŸ:
+Pydantic ã®å
¬åŒããã¥ã¡ã³ãããã®äŸ:
{* ../../docs_src/python_types/tutorial011_py310.py *}
/// info | æ
å ±
-Pydanticã®è©³çްã¯ããã¥ã¡ã³ããåç
§ããŠãã ããã
+Pydantic ã®è©³çްã¯ããã¥ã¡ã³ããåç
§ããŠãã ããã
///
-**FastAPI** ã¯ãã¹ãŠPydanticãããŒã¹ã«ããŠããŸãã
+**FastAPI** ã¯ãã¹ãŠ Pydantic ãããŒã¹ã«ããŠããŸãã
-ãã¹ãŠã®ããšã¯[ãã¥ãŒããªã¢ã« - ãŠãŒã¶ãŒã¬ã€ã](tutorial/index.md){.internal-link target=_blank}ã§å®éã«èŠãããšãã§ããŸãã
-
-/// tip | è±ç¥è
-
-Pydanticã«ã¯ãããã©ã«ãå€ãªãã§`Optional`ãŸãã¯`Union[Something, None]`ã䜿ã£ãå Žåã®ç¹å¥ãªæåããããŸãã詳现ã¯Pydanticããã¥ã¡ã³ãã®Required Optional fieldsãåç
§ããŠãã ããã
-
-///
+ãã¹ãŠã®ããšã¯ [ãã¥ãŒããªã¢ã« - ãŠãŒã¶ãŒã¬ã€ã](tutorial/index.md){.internal-link target=_blank} ã§å®éã«èŠãããšãã§ããŸãã
## ã¡ã¿ããŒã¿ã¢ãããŒã·ã§ã³ä»ãåãã³ã { #type-hints-with-metadata-annotations }
-Pythonã«ã¯ã`Annotated`ã䜿ã£ãŠåãã³ãã«**远å ã®ã¡ã¿ããŒã¿**ãä»äžã§ããæ©èœããããŸãã
+Python ã«ã¯ã`Annotated` ã䜿ã£ãŠåãã³ãã« **远å ã® ã¡ã¿ããŒã¿** ãä»äžã§ããæ©èœããããŸãã
-Python 3.9以éã`Annotated`ã¯æšæºã©ã€ãã©ãªã®äžéšãªã®ã§ã`typing`ããã€ã³ããŒãã§ããŸãã
+`Annotated` 㯠`typing` ããã€ã³ããŒãã§ããŸãã
-{* ../../docs_src/python_types/tutorial013_py39.py hl[1,4] *}
+{* ../../docs_src/python_types/tutorial013_py310.py hl[1,4] *}
-Pythonèªäœã¯ããã®`Annotated`ã§äœããããããã§ã¯ãããŸããããŸãããšãã£ã¿ãä»ã®ããŒã«ã«ãšã£ãŠããåã¯äŸç¶ãšããŠ`str`ã§ãã
+Python èªäœã¯ããã® `Annotated` ã§äœããããããã§ã¯ãããŸããããŸãããšãã£ã¿ãä»ã®ããŒã«ã«ãšã£ãŠããåã¯äŸç¶ãšã㊠`str` ã§ãã
-ãããã`Annotated`å
ã®ãã®ã¹ããŒã¹ã䜿ã£ãŠãã¢ããªã±ãŒã·ã§ã³ãã©ã®ããã«åäœãããããã«ã€ããŠã®è¿œå ã¡ã¿ããŒã¿ã **FastAPI** ã«æäŸã§ããŸãã
+ãããã`Annotated` å
ã®ãã®ã¹ããŒã¹ã䜿ã£ãŠãã¢ããªã±ãŒã·ã§ã³ãã©ã®ããã«åäœãããããã«ã€ããŠã®è¿œå ã¡ã¿ããŒã¿ã **FastAPI** ã«æäŸã§ããŸãã
-èŠããŠããã¹ãéèŠãªç¹ã¯ã`Annotated`ã«æž¡ã**æåã®*åãã©ã¡ãŒã¿***ã**å®éã®å**ã§ããããšã§ããæ®ãã¯ãä»ã®ããŒã«åãã®ã¡ã¿ããŒã¿ã«ãããŸããã
+èŠããŠããã¹ãéèŠãªç¹ã¯ã`Annotated` ã«æž¡ã **æåã®ãåãã©ã¡ãŒã¿ã** ã **å®éã®å** ã§ããããšã§ããæ®ãã¯ãä»ã®ããŒã«åãã®ã¡ã¿ããŒã¿ã«ãããŸããã
-ä»ã®ãšããã¯ã`Annotated`ãååšãããããæšæºã®Pythonã§ããããšãç¥ã£ãŠããã°ååã§ããð
+ä»ã®ãšããã¯ã`Annotated` ãååšãããããæšæºã® Python ã§ããããšãç¥ã£ãŠããã°ååã§ããð
-åŸã§ããããã©ãã»ã©**匷å**ã«ãªãåŸãããèŠãããšã«ãªããŸãã
+åŸã§ããããã©ãã»ã© **匷å** ã«ãªãåŸãããèŠãããšã«ãªããŸãã
/// tip | è±ç¥è
-ããã **æšæºã®Python** ã§ãããšããäºå®ã¯ããšãã£ã¿ã§ã䜿çšããŠããããŒã«ïŒã³ãŒãã®è§£æããªãã¡ã¯ã¿ãªã³ã°ãªã©ïŒãšãšãã«ã**å¯èœãªéãæé«ã®éçºäœéš**ãåŸãããããšãæå³ããŸãã âš
+ããã **æšæºã® Python** ã§ãããšããäºå®ã¯ããšãã£ã¿ã§ã䜿çšããŠããããŒã«ïŒã³ãŒãã®è§£æããªãã¡ã¯ã¿ãªã³ã°ãªã©ïŒãšãšãã«ã**å¯èœãªéãæé«ã®éçºäœéš** ãåŸãããããšãæå³ããŸãã âš
-ãŸããããªãã®ã³ãŒããä»ã®å€ãã®PythonããŒã«ãã©ã€ãã©ãªãšãéåžžã«äºææ§ãé«ãããšãæå³ããŸãã ð
+ãŸããããªãã®ã³ãŒããä»ã®å€ãã® Python ããŒã«ãã©ã€ãã©ãªãšãéåžžã«äºææ§ãé«ãããšãæå³ããŸãã ð
///
-## **FastAPI**ã§ã®åãã³ã { #type-hints-in-fastapi }
+## **FastAPI** ã§ã®åãã³ã { #type-hints-in-fastapi }
**FastAPI** ã¯ãããã®åãã³ããå©çšããŠããã€ãã®ããšãè¡ããŸãã
@@ -450,15 +334,15 @@ Pythonèªäœã¯ããã®`Annotated`ã§äœããããããã§ã¯ãããŸãã
* **ããŒã¿ã®å€æ**: ãªã¯ãšã¹ãããå¿
èŠãªåã«ããŒã¿ã倿ããŸãã
* **ããŒã¿ã®æ€èšŒ**: åãªã¯ãšã¹ãããæ¥ãããŒã¿ã«ã€ããŠ:
* ããŒã¿ãç¡å¹ãªå Žåã«ã¯ã©ã€ã¢ã³ãã«è¿ããã **èªåãšã©ãŒ** ãçæããŸãã
-* OpenAPIã䜿çšããŠAPIã**ããã¥ã¡ã³ãå**ããŸã:
+* OpenAPI ã䜿çšã㊠API ã **ããã¥ã¡ã³ãå** ããŸã:
* ããã¯èªåã®å¯Ÿè©±åããã¥ã¡ã³ãã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã§äœ¿ãããŸãã
-ãã¹ãŠãæœè±¡çã«èããããããããŸãããå¿é
ããªãã§ãã ããã ãã®å
šãŠã®åäœã¯ [ãã¥ãŒããªã¢ã« - ãŠãŒã¶ãŒã¬ã€ã](tutorial/index.md){.internal-link target=_blank}ã§èŠãããšãã§ããŸãã
+ãã¹ãŠãæœè±¡çã«èããããããããŸãããå¿é
ããªãã§ãã ããã ãã®å
šãŠã®åäœã¯ [ãã¥ãŒããªã¢ã« - ãŠãŒã¶ãŒã¬ã€ã](tutorial/index.md){.internal-link target=_blank} ã§èŠãããšãã§ããŸãã
-éèŠãªã®ã¯ãPythonã®æšæºçãªåã䜿ãããšã§ãïŒã¯ã©ã¹ããã³ã¬ãŒã¿ãªã©ã远å ããã®ã§ã¯ãªãïŒ1ã€ã®å Žæã§ **FastAPI** ãå€ãã®äœæ¥ã代ããã«ãã£ãŠãããŠãããšããããšã§ãã
+éèŠãªã®ã¯ãPython ã®æšæºçãªåã䜿ãããšã§ãïŒã¯ã©ã¹ããã³ã¬ãŒã¿ãªã©ã远å ããã®ã§ã¯ãªãïŒ1 ã€ã®å Žæã§ **FastAPI** ãå€ãã®äœæ¥ã代ããã«ãã£ãŠãããŠãããšããããšã§ãã
/// info | æ
å ±
-ãã§ã«ãã¹ãŠã®ãã¥ãŒããªã¢ã«ãçµããŠãåã«ã€ããŠã®è©³çްãèŠãããã«ãã®ããŒãžã«æ»ã£ãŠããå Žåã¯ãè¯ããªãœãŒã¹ãšããŠ`mypy`ã®ãããŒãã·ãŒããããããŸãã
+ãã§ã«ãã¹ãŠã®ãã¥ãŒããªã¢ã«ãçµããŠãåã«ã€ããŠã®è©³çްãèŠãããã«ãã®ããŒãžã«æ»ã£ãŠããå Žåã¯ãè¯ããªãœãŒã¹ãšã㊠`mypy` ã®ãããŒãã·ãŒãã ããããŸãã
///
diff --git a/docs/ja/docs/resources/index.md b/docs/ja/docs/resources/index.md
new file mode 100644
index 000000000..15a949e01
--- /dev/null
+++ b/docs/ja/docs/resources/index.md
@@ -0,0 +1,3 @@
+# ãªãœãŒã¹ { #resources }
+
+远å ãªãœãŒã¹ãå€éšãªã³ã¯ãªã©ãâïž
diff --git a/docs/ja/docs/translation-banner.md b/docs/ja/docs/translation-banner.md
new file mode 100644
index 000000000..351a82a35
--- /dev/null
+++ b/docs/ja/docs/translation-banner.md
@@ -0,0 +1,11 @@
+/// details | ð AI ãšäººéã«ãã翻蚳
+
+ãã®ç¿»èš³ã¯ã人éã®ã¬ã€ãã«åºã¥ã㊠AI ã«ãã£ãŠäœæãããŸãããð€
+
+åæã®æå³ãåãéããŠããããäžèªç¶ãªè¡šçŸã«ãªã£ãŠããå¯èœæ§ããããŸããð€
+
+[AI LLM ãããé©åã«èªå°ããã®ãæäŒã](https://fastapi.tiangolo.com/ja/contributing/#translations) ããšã§ããã®ç¿»èš³ãæ¹åã§ããŸãã
+
+[è±èªç](ENGLISH_VERSION_URL)
+
+///
diff --git a/docs/ja/docs/tutorial/background-tasks.md b/docs/ja/docs/tutorial/background-tasks.md
index 0ed41ce11..d32c141b5 100644
--- a/docs/ja/docs/tutorial/background-tasks.md
+++ b/docs/ja/docs/tutorial/background-tasks.md
@@ -15,7 +15,7 @@
ãŸãåãã«ã`BackgroundTasks` ãã€ã³ããŒããã`BackgroundTasks` ã®å宣èšãšå
±ã«ã*path operation function* ã®ãã©ã¡ãŒã¿ãŒãå®çŸ©ããŸã:
-{* ../../docs_src/background_tasks/tutorial001_py39.py hl[1,13] *}
+{* ../../docs_src/background_tasks/tutorial001_py310.py hl[1,13] *}
**FastAPI** ã¯ã`BackgroundTasks` åã®ãªããžã§ã¯ããäœæãããã®ãã©ã¡ãŒã¿ãŒã«æž¡ããŸãã
@@ -31,13 +31,13 @@
ãŸããæžãèŸŒã¿æäœã§ã¯ `async` ãš `await` ã䜿çšããªããããéåžžã® `def` ã§é¢æ°ãå®çŸ©ããŸãã
-{* ../../docs_src/background_tasks/tutorial001_py39.py hl[6:9] *}
+{* ../../docs_src/background_tasks/tutorial001_py310.py hl[6:9] *}
## ããã¯ã°ã©ãŠã³ãã¿ã¹ã¯ã®è¿œå { #add-the-background-task }
*path operation function* å
ã§ã`.add_task()` ã¡ãœããã䜿çšããŠã¿ã¹ã¯é¢æ°ã *background tasks* ãªããžã§ã¯ãã«æž¡ããŸãã
-{* ../../docs_src/background_tasks/tutorial001_py39.py hl[14] *}
+{* ../../docs_src/background_tasks/tutorial001_py310.py hl[14] *}
`.add_task()` ã¯ä»¥äžã®åŒæ°ãåãåããŸã:
diff --git a/docs/ja/docs/tutorial/bigger-applications.md b/docs/ja/docs/tutorial/bigger-applications.md
new file mode 100644
index 000000000..9c1cc0fe6
--- /dev/null
+++ b/docs/ja/docs/tutorial/bigger-applications.md
@@ -0,0 +1,504 @@
+# å€§èŠæš¡ã¢ããªã±ãŒã·ã§ã³ - è€æ°ãã¡ã€ã« { #bigger-applications-multiple-files }
+
+ã¢ããªã±ãŒã·ã§ã³ã Web API ãäœãå Žåããã¹ãŠã1ã€ã®ãã¡ã€ã«ã«åããããããšã¯ã»ãšãã©ãããŸããã
+
+**FastAPI** ã¯ãæè»æ§ãä¿ã£ããŸãŸã¢ããªã±ãŒã·ã§ã³ãæ§é åã§ãã䟿å©ãªããŒã«ãæäŸããŸãã
+
+/// info | æ
å ±
+
+Flask åºèº«ã§ããã°ãFlask ã® Blueprint ã«çžåœããŸãã
+
+///
+
+## äŸã®ãã¡ã€ã«æ§æ { #an-example-file-structure }
+
+次ã®ãããªãã¡ã€ã«æ§æããããšããŸã:
+
+```
+.
+âââ app
+â  âââ __init__.py
+â  âââ main.py
+â  âââ dependencies.py
+â  âââ routers
+â  â âââ __init__.py
+â  â âââ items.py
+â  â âââ users.py
+â  âââ internal
+â  âââ __init__.py
+â  âââ admin.py
+```
+
+/// tip | è±ç¥è
+
+è€æ°ã® `__init__.py` ãã¡ã€ã«ããããŸã: åãã£ã¬ã¯ããªããµããã£ã¬ã¯ããªã«1ã€ãã€ã§ãã
+
+ããã«ããããããã¡ã€ã«ããå¥ã®ãã¡ã€ã«ãžã³ãŒããã€ã³ããŒãã§ããŸãã
+
+äŸãã°ã`app/main.py` ã§ã¯æ¬¡ã®ããã«æžããŸã:
+
+```
+from app.routers import items
+```
+
+///
+
+* `app` ãã£ã¬ã¯ããªã¯ãã¹ãŠãå«ã¿ãŸãããããŠç©ºã®ãã¡ã€ã« `app/__init__.py` ãããããPython ããã±ãŒãžãïŒãPython ã¢ãžã¥ãŒã«ãã®éåïŒ: `app` ã§ãã
+* `app/main.py` ãã¡ã€ã«ããããŸããPython ããã±ãŒãžïŒ`__init__.py` ã®ãããã£ã¬ã¯ããªïŒã®äžã«ããããããã®ããã±ãŒãžã®ãã¢ãžã¥ãŒã«ã: `app.main` ã§ãã
+* `app/dependencies.py` ãã¡ã€ã«ãããã`app/main.py` ãšåæ§ã«ãã¢ãžã¥ãŒã«ã: `app.dependencies` ã§ãã
+* `app/routers/` ãµããã£ã¬ã¯ããªã«å¥ã® `__init__.py` ãããã®ã§ããPython ãµãããã±ãŒãžã: `app.routers` ã§ãã
+* `app/routers/items.py` ã¯ããã±ãŒãž `app/routers/` å
ã®ãã¡ã€ã«ãªã®ã§ããµãã¢ãžã¥ãŒã«: `app.routers.items` ã§ãã
+* `app/routers/users.py` ãåæ§ã§ãå¥ã®ãµãã¢ãžã¥ãŒã«: `app.routers.users` ã§ãã
+* `app/internal/` ãµããã£ã¬ã¯ããªã«ã `__init__.py` ãããã®ã§ãå¥ã®ãPython ãµãããã±ãŒãžã: `app.internal` ã§ãã
+* `app/internal/admin.py` ã¯å¥ã®ãµãã¢ãžã¥ãŒã«: `app.internal.admin` ã§ãã
+
+
+
+## åãã«ãŒã¿ãŒãç°ãªã `prefix` ã§è€æ°ååã蟌ã { #include-the-same-router-multiple-times-with-different-prefix }
+
+åãã«ãŒã¿ãŒã«å¯ŸããŠãç°ãªã prefix ã§ `.include_router()` ãè€æ°å䜿ãããšãã§ããŸãã
+
+äŸãã°ãåã API ã `/api/v1` ãš `/api/latest` ã®ããã«ç°ãªã prefix ã§å
¬éããå Žåã«åœ¹ç«ã¡ãŸãã
+
+é«åºŠãªäœ¿ãæ¹ãªã®ã§äžèŠãããããŸããããå¿
èŠãªå Žåã«åããŠçšæãããŠããŸãã
+
+## `APIRouter` ãå¥ã® `APIRouter` ã«åã蟌ã { #include-an-apirouter-in-another }
+
+`APIRouter` ã `FastAPI` ã¢ããªã±ãŒã·ã§ã³ã«åã蟌ããã®ãšåãããã«ã`APIRouter` ãå¥ã® `APIRouter` ã«åã蟌ãããšãã§ããŸã:
+
+```Python
+router.include_router(other_router)
+```
+
+`router` ã `FastAPI` ã¢ããªã«åã蟌ãåã«ãããå®è¡ããŠã`other_router` ã® *path operations* ãå«ãŸããããã«ããŠãã ããã
diff --git a/docs/ja/docs/tutorial/body-multiple-params.md b/docs/ja/docs/tutorial/body-multiple-params.md
index 4ce77cc0d..0f81f4c46 100644
--- a/docs/ja/docs/tutorial/body-multiple-params.md
+++ b/docs/ja/docs/tutorial/body-multiple-params.md
@@ -106,12 +106,6 @@
q: str | None = None
```
-ãŸãã¯Python 3.10以äžã§ã¯:
-
-```Python
-q: Union[str, None] = None
-```
-
äŸãã°:
{* ../../docs_src/body_multiple_params/tutorial004_an_py310.py hl[28] *}
diff --git a/docs/ja/docs/tutorial/body-nested-models.md b/docs/ja/docs/tutorial/body-nested-models.md
index 24eb30208..ab78b8f86 100644
--- a/docs/ja/docs/tutorial/body-nested-models.md
+++ b/docs/ja/docs/tutorial/body-nested-models.md
@@ -164,7 +164,7 @@ images: list[Image]
以äžã®ããã«:
-{* ../../docs_src/body_nested_models/tutorial008_py39.py hl[13] *}
+{* ../../docs_src/body_nested_models/tutorial008_py310.py hl[13] *}
## ããããå Žæã§ã®ãšãã£ã¿ãµããŒã { #editor-support-everywhere }
@@ -194,7 +194,7 @@ Pydanticã¢ãã«ã§ã¯ãªãã`dict`ãçŽæ¥äœ¿çšããŠããå Žåã¯ãã®
ãã®å Žåã`int`ã®ããŒãš`float`ã®å€ãæã€ãã®ã§ããã°ãã©ããª`dict`ã§ãåãå
¥ããããšãã§ããŸã:
-{* ../../docs_src/body_nested_models/tutorial009_py39.py hl[7] *}
+{* ../../docs_src/body_nested_models/tutorial009_py310.py hl[7] *}
/// tip | è±ç¥è
diff --git a/docs/ja/docs/tutorial/body-updates.md b/docs/ja/docs/tutorial/body-updates.md
index e888d5a0d..310530c69 100644
--- a/docs/ja/docs/tutorial/body-updates.md
+++ b/docs/ja/docs/tutorial/body-updates.md
@@ -68,7 +68,7 @@
ãŸãšãããšãéšåçãªæŽæ°ãé©çšããã«ã¯ã次ã®ããã«ããŸã:
-* (ãªãã·ã§ã³ã§)`PUT`ã®ä»£ããã«`PATCH`ã䜿çšããŸãã
+* (ãªãã·ã§ã³ã§)`PATCH`ã®ä»£ããã«`PUT`ã䜿çšããŸãã
* ä¿åãããŠããããŒã¿ãååŸããŸãã
* ãã®ããŒã¿ãPydanticã¢ãã«ã«ãããŸãã
* å
¥åã¢ãã«ããããã©ã«ãå€ãå«ãŸãªã`dict`ãçæããŸãïŒ`exclude_unset`ã䜿çšããŸãïŒã
diff --git a/docs/ja/docs/tutorial/body.md b/docs/ja/docs/tutorial/body.md
index a219faed0..7c939bdfa 100644
--- a/docs/ja/docs/tutorial/body.md
+++ b/docs/ja/docs/tutorial/body.md
@@ -74,7 +74,7 @@ APIã¯ã»ãšãã©ã®å Žå **ã¬ã¹ãã³ã¹** ããã£ãéä¿¡ããå¿
èŠ
* åãåã£ãããŒã¿ããã©ã¡ãŒã¿ `item` ã«æž¡ããŸãã
* 颿°å
ã§ `Item` åãšããŠå®£èšããããããã¹ãŠã®å±æ§ãšãã®åã«ã€ããŠããšãã£ã¿ãµããŒãïŒè£å®ãªã©ïŒãå©çšã§ããŸãã
* ã¢ãã«åãã® JSON Schema å®çŸ©ãçæããŸãããããžã§ã¯ãã«ãšã£ãŠæå³ããããªããä»ã®å Žæã§ã奜ããªããã«å©çšã§ããŸãã
-* ãããã®ã¹ããŒãã¯çæãããOpenAPIã¹ããŒãã®äžéšãšãªããèªåããã¥ã¡ã³ãã® UIs ã§äœ¿çšãããŸãã
+* ãããã®ã¹ããŒãã¯çæãããOpenAPIã¹ããŒãã®äžéšãšãªããèªåããã¥ã¡ã³ãã® UIs ã§äœ¿çšãããŸãã
## èªåããã¥ã¡ã³ã { #automatic-docs }
@@ -155,7 +155,7 @@ APIã¯ã»ãšãã©ã®å Žå **ã¬ã¹ãã³ã¹** ããã£ãéä¿¡ããå¿
èŠ
FastAPIã¯ãããã©ã«ãå€ `= None` ãããããã`q` ã®å€ãå¿
é ã§ã¯ãªãããšãèªèããŸãã
-`str | None`ïŒPython 3.10+ïŒã `Union[str, None]`ïŒPython 3.9+ïŒã® `Union` ã¯ãå€ãå¿
é ã§ã¯ãªãããšã倿ããããã«FastAPIã§ã¯äœ¿çšãããŸããã`= None` ãšããããã©ã«ãå€ããããããå¿
é ã§ã¯ãªãããšãèªèããŸãã
+`str | None` ã¯ãå€ãå¿
é ã§ã¯ãªãããšã倿ããããã«FastAPIã§ã¯äœ¿çšãããŸããã`= None` ãšããããã©ã«ãå€ããããããå¿
é ã§ã¯ãªãããšãèªèããŸãã
ããããåã¢ãããŒã·ã§ã³ã远å ãããšããšãã£ã¿ãããè¯ããµããŒããæäŸãããšã©ãŒãæ€åºã§ããããã«ãªããŸãã
diff --git a/docs/ja/docs/tutorial/cookie-param-models.md b/docs/ja/docs/tutorial/cookie-param-models.md
index 10ffb2566..89ae42438 100644
--- a/docs/ja/docs/tutorial/cookie-param-models.md
+++ b/docs/ja/docs/tutorial/cookie-param-models.md
@@ -46,7 +46,7 @@
ç¹å®ã®ïŒããŸãäžè¬çã§ã¯ãªããããããªãïŒã±ãŒã¹ã§ãåãä»ããã¯ãããŒã**å¶é**ããå¿
èŠããããããããŸããã
-ããªãã®APIã¯ç¬èªã® ã¯ãããŒåæ ã管çããèœåãæã£ãŠããŸãã ð€ªðª
+ããªãã®APIã¯ç¬èªã® ã¯ãããŒåæ ã管çããèœåãæã£ãŠããŸãã ð€ªðª
Pydanticã®ã¢ãã«ã® Configuration ãå©çšããŠã `extra` ãã£ãŒã«ãã `forbid` ãšããããšãã§ããŸãã
@@ -54,9 +54,9 @@ Pydanticã®ã¢ãã«ã® Configuration ãå©çšããŠã `extra` ãã£ãŒã«ã
ããã¯ã©ã€ã¢ã³ãã**äœåãªã¯ãããŒ**ãéãããšãããšã**ãšã©ãŒ**ã¬ã¹ãã³ã¹ãè¿ãããŸãã
-ã©ããAPIã«æåŠãããã®ã«ããªãã®åæãåŸãããšç²Ÿäžæ¯åªåããå¯åæ³ãªã¯ãããŒãããŒãã¡... ðª
+ã©ããAPIã«æåŠãããã®ã«ããªãã®åæãåŸãããšç²Ÿäžæ¯åªåããå¯åæ³ãªã¯ãããŒãããŒãã¡... ðª
-äŸãã°ãã¯ã©ã€ã¢ã³ããã¯ãã㌠`santa_tracker` ã `good-list-please` ãšããå€ã§éãããšãããšã`santa_tracker` ãšãã ã¯ãããŒãèš±å¯ãããŠããªã ããšãéç¥ãã**ãšã©ãŒ**ã¬ã¹ãã³ã¹ãè¿ãããŸã:
+äŸãã°ãã¯ã©ã€ã¢ã³ããã¯ãã㌠`santa_tracker` ã `good-list-please` ãšããå€ã§éãããšãããšã`santa_tracker` ãšãã ã¯ãããŒãèš±å¯ãããŠããªã ããšãéç¥ãã**ãšã©ãŒ**ã¬ã¹ãã³ã¹ãè¿ãããŸã:
```json
{
@@ -73,4 +73,4 @@ Pydanticã®ã¢ãã«ã® Configuration ãå©çšããŠã `extra` ãã£ãŒã«ã
## ãŸãšã { #summary }
-**FastAPI**ã§ã¯ã**ã¯ãããŒ**ã宣èšããããã«ã**Pydanticã¢ãã«**ã䜿çšã§ããŸããð
+**FastAPI**ã§ã¯ã**ã¯ãããŒ**ã宣èšããããã«ã**Pydanticã¢ãã«**ã䜿çšã§ããŸããð
diff --git a/docs/ja/docs/tutorial/cors.md b/docs/ja/docs/tutorial/cors.md
index a1dfe8e62..5136a7fd5 100644
--- a/docs/ja/docs/tutorial/cors.md
+++ b/docs/ja/docs/tutorial/cors.md
@@ -46,7 +46,7 @@
* ç¹å®ã®HTTPã¡ãœãã (`POST`ã`PUT`) ãŸãã¯ã¯ã€ã«ãã«ãŒã `"*"` ã䜿çšããŠãã¹ãŠèš±å¯ã
* ç¹å®ã®HTTPããããŒããŸãã¯ã¯ã€ã«ãã«ãŒã `"*"`ã䜿çšããŠãã¹ãŠèš±å¯ã
-{* ../../docs_src/cors/tutorial001_py39.py hl[2,6:11,13:19] *}
+{* ../../docs_src/cors/tutorial001_py310.py hl[2,6:11,13:19] *}
`CORSMiddleware` å®è£
ã§äœ¿çšãããããã©ã«ãã®ãã©ã¡ãŒã¿ã¯ããã©ã«ãã§å¶éãå³ããããããã©ãŠã¶ãã¯ãã¹ãã¡ã€ã³ã®ã³ã³ããã¹ãã§ãããã䜿çšã§ããããã«ããã«ã¯ãç¹å®ã®ãªãªãžã³ãã¡ãœããããŸãã¯ããããŒãæç€ºçã«æå¹ã«ããå¿
èŠããããŸãã
diff --git a/docs/ja/docs/tutorial/debugging.md b/docs/ja/docs/tutorial/debugging.md
index 8fe5b2d5d..9d88ba42b 100644
--- a/docs/ja/docs/tutorial/debugging.md
+++ b/docs/ja/docs/tutorial/debugging.md
@@ -6,7 +6,7 @@ Visual Studio CodeãPyCharmãªã©ã䜿çšããŠããšãã£ã¿ãŒäžã§ãã
FastAPIã¢ããªã±ãŒã·ã§ã³äžã§ã`uvicorn` ãçŽæ¥ã€ã³ããŒãããŠå®è¡ããŸã:
-{* ../../docs_src/debugging/tutorial001_py39.py hl[1,15] *}
+{* ../../docs_src/debugging/tutorial001_py310.py hl[1,15] *}
### `__name__ == "__main__"` ã«ã€ã㊠{ #about-name-main }
diff --git a/docs/ja/docs/tutorial/dependencies/classes-as-dependencies.md b/docs/ja/docs/tutorial/dependencies/classes-as-dependencies.md
index 3cb1fe73d..21de5b978 100644
--- a/docs/ja/docs/tutorial/dependencies/classes-as-dependencies.md
+++ b/docs/ja/docs/tutorial/dependencies/classes-as-dependencies.md
@@ -101,7 +101,7 @@ FastAPIãå®éã«ãã§ãã¯ããŠããã®ã¯ãããããåŒã³åºãå¯
äžã®ã³ãŒãã§ã¯`CommonQueryParams`ãïŒåæžããŠããããšã«æ³šç®ããŠãã ãã:
-//// tab | Python 3.9+
+//// tab | Python 3.10+
```Python
commons: Annotated[CommonQueryParams, Depends(CommonQueryParams)]
@@ -109,7 +109,7 @@ commons: Annotated[CommonQueryParams, Depends(CommonQueryParams)]
////
-//// tab | Python 3.9+ 泚éãªã
+//// tab | Python 3.10+ 泚éãªã
/// tip | è±ç¥è
@@ -137,7 +137,7 @@ commons: CommonQueryParams = Depends(CommonQueryParams)
ãã®å Žåã以äžã«ããæåã®`CommonQueryParams`:
-//// tab | Python 3.9+
+//// tab | Python 3.10+
```Python
commons: Annotated[CommonQueryParams, ...
@@ -145,7 +145,7 @@ commons: Annotated[CommonQueryParams, ...
////
-//// tab | Python 3.9+ 泚éãªã
+//// tab | Python 3.10+ 泚éãªã
/// tip | è±ç¥è
@@ -163,7 +163,7 @@ commons: CommonQueryParams ...
å®éã«ã¯ä»¥äžã®ããã«æžãã°ããã ãã§ã:
-//// tab | Python 3.9+
+//// tab | Python 3.10+
```Python
commons: Annotated[Any, Depends(CommonQueryParams)]
@@ -171,7 +171,7 @@ commons: Annotated[Any, Depends(CommonQueryParams)]
////
-//// tab | Python 3.9+ 泚éãªã
+//// tab | Python 3.10+ 泚éãªã
/// tip | è±ç¥è
@@ -197,7 +197,7 @@ commons = Depends(CommonQueryParams)
ããããããã§ã¯`CommonQueryParams`ãïŒåæžããšããã³ãŒãã®ç¹°ãè¿ããçºçããŠããããšãããããŸã:
-//// tab | Python 3.9+
+//// tab | Python 3.10+
```Python
commons: Annotated[CommonQueryParams, Depends(CommonQueryParams)]
@@ -205,7 +205,7 @@ commons: Annotated[CommonQueryParams, Depends(CommonQueryParams)]
////
-//// tab | Python 3.9+ 泚éãªã
+//// tab | Python 3.10+ 泚éãªã
/// tip | è±ç¥è
@@ -225,7 +225,7 @@ commons: CommonQueryParams = Depends(CommonQueryParams)
以äžã®ããã«æžã代ããã«:
-//// tab | Python 3.9+
+//// tab | Python 3.10+
```Python
commons: Annotated[CommonQueryParams, Depends(CommonQueryParams)]
@@ -233,7 +233,7 @@ commons: Annotated[CommonQueryParams, Depends(CommonQueryParams)]
////
-//// tab | Python 3.9+ 泚éãªã
+//// tab | Python 3.10+ 泚éãªã
/// tip | è±ç¥è
@@ -249,7 +249,7 @@ commons: CommonQueryParams = Depends(CommonQueryParams)
...以äžã®ããã«æžããŸã:
-//// tab | Python 3.9+
+//// tab | Python 3.10+
```Python
commons: Annotated[CommonQueryParams, Depends()]
@@ -257,7 +257,7 @@ commons: Annotated[CommonQueryParams, Depends()]
////
-//// tab | Python 3.9+ 泚éãªã
+//// tab | Python 3.10+ 泚éãªã
/// tip | è±ç¥è
diff --git a/docs/ja/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md b/docs/ja/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md
index 2051afc05..d0a2b1672 100644
--- a/docs/ja/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md
+++ b/docs/ja/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md
@@ -14,7 +14,7 @@
ããã¯`Depends()`ã®`list`ã§ããã¹ãã§ã:
-{* ../../docs_src/dependencies/tutorial006_an_py39.py hl[19] *}
+{* ../../docs_src/dependencies/tutorial006_an_py310.py hl[19] *}
ãããã®äŸåé¢ä¿ã¯ãéåžžã®äŸåé¢ä¿ãšåæ§ã«å®è¡ã»è§£æ±ºãããŸãããããããããã®å€ïŒäœããè¿ãå ŽåïŒã¯*path operation 颿°*ã«ã¯æž¡ãããŸããã
@@ -44,13 +44,13 @@
ãããã¯ãªã¯ãšã¹ãã®èŠä»¶ïŒããããŒã®ãããªãã®ïŒããã®ä»ã®ãµãäŸåé¢ä¿ã宣èšã§ããŸã:
-{* ../../docs_src/dependencies/tutorial006_an_py39.py hl[8,13] *}
+{* ../../docs_src/dependencies/tutorial006_an_py310.py hl[8,13] *}
### äŸå€ã®çºç { #raise-exceptions }
ãããã®äŸåé¢ä¿ã¯ãéåžžã®äŸåé¢ä¿ãšåãããã«äŸå€ã`raise`ã§ããŸã:
-{* ../../docs_src/dependencies/tutorial006_an_py39.py hl[10,15] *}
+{* ../../docs_src/dependencies/tutorial006_an_py310.py hl[10,15] *}
### æ»ãå€ { #return-values }
@@ -58,7 +58,7 @@
ã€ãŸãããã§ã«ã©ããã§äœ¿ã£ãŠããéåžžã®äŸåé¢ä¿ïŒå€ãè¿ããã®ïŒãåå©çšã§ããå€ã¯äœ¿ãããªããŠãäŸåé¢ä¿ã¯å®è¡ãããŸã:
-{* ../../docs_src/dependencies/tutorial006_an_py39.py hl[11,16] *}
+{* ../../docs_src/dependencies/tutorial006_an_py310.py hl[11,16] *}
## *path operation*ã®ã°ã«ãŒãã«å¯ŸããäŸåé¢ä¿ { #dependencies-for-a-group-of-path-operations }
diff --git a/docs/ja/docs/tutorial/dependencies/dependencies-with-yield.md b/docs/ja/docs/tutorial/dependencies/dependencies-with-yield.md
index 8095114c3..380dcb536 100644
--- a/docs/ja/docs/tutorial/dependencies/dependencies-with-yield.md
+++ b/docs/ja/docs/tutorial/dependencies/dependencies-with-yield.md
@@ -1,6 +1,6 @@
# `yield`ãæã€äŸåé¢ä¿ { #dependencies-with-yield }
-FastAPIã¯ãããã€ãã®çµäºåŸã®è¿œå ã®ã¹ããããè¡ãäŸåé¢ä¿ããµããŒãããŠããŸãã
+FastAPIã¯ãããã€ãã®çµäºåŸã®è¿œå ã®ã¹ããããè¡ãäŸåé¢ä¿ããµããŒãããŠããŸãã
ãããè¡ãã«ã¯ã`return`ã®ä»£ããã«`yield`ã䜿ãããã®åŸã«è¿œå ã®ã¹ãããïŒã³ãŒãïŒãæžããŸãã
@@ -29,15 +29,15 @@ FastAPIã¯ãããã€ãã®
+
+
+
+## äœåãªããããŒãçŠæ¢ { #forbid-extra-headers }
+
+ç¹æ®ãªãŠãŒã¹ã±ãŒã¹ïŒããŸãäžè¬çã§ã¯ãããŸããïŒã§ã¯ãåãä»ããããããŒã**å¶é**ãããå ŽåããããŸãã
+
+Pydantic ã®ã¢ãã«èšå®ã§ `extra` ãã£ãŒã«ãã `forbid` ã«ããŠçŠæ¢ã§ããŸã:
+
+{* ../../docs_src/header_param_models/tutorial002_an_py310.py hl[10] *}
+
+ã¯ã©ã€ã¢ã³ãã**äœåãªããããŒ**ãéä¿¡ããããšãããšã**ãšã©ãŒ**ã¬ã¹ãã³ã¹ãè¿ãããŸãã
+
+äŸãã°ãã¯ã©ã€ã¢ã³ããå€ `plumbus` ã® `tool` ããããŒãéãããšãããšãããããŒãã©ã¡ãŒã¿ `tool` ã¯èš±å¯ãããŠããªãæšã®**ãšã©ãŒ**ã¬ã¹ãã³ã¹ãè¿ãããŸã:
+
+```json
+{
+ "detail": [
+ {
+ "type": "extra_forbidden",
+ "loc": ["header", "tool"],
+ "msg": "Extra inputs are not permitted",
+ "input": "plumbus",
+ }
+ ]
+}
+```
+
+## ã¢ã³ããŒã¹ã³ã¢å€æã®ç¡å¹å { #disable-convert-underscores }
+
+éåžžã®ããããŒãã©ã¡ãŒã¿ãšåæ§ã«ããã©ã¡ãŒã¿åã«ã¢ã³ããŒã¹ã³ã¢ãããå Žåã¯**èªåçã«ãã€ãã³ã«å€æ**ãããŸãã
+
+äŸãã°ãã³ãŒãäžã§ããããŒãã©ã¡ãŒã¿ `save_data` ãå®çŸ©ãããšãæ³å®ããã HTTP ããããŒã¯ `save-data` ãšãªããããã¥ã¡ã³ãäžã«ããã®ããã«è¡šç€ºãããŸãã
+
+äœããã®çç±ã§ãã®èªå倿ãç¡å¹åããå¿
èŠãããå ŽåãããããŒãã©ã¡ãŒã¿çšã® Pydantic ã¢ãã«ã§ãç¡å¹åã§ããŸãã
+
+{* ../../docs_src/header_param_models/tutorial003_an_py310.py hl[19] *}
+
+/// warning | 泚æ
+
+`convert_underscores` ã `False` ã«èšå®ããåã«ãã¢ã³ããŒã¹ã³ã¢ãå«ãããããŒã®äœ¿çšãçŠæ¢ããŠãã HTTP ãããã·ããµãŒããŒãããããšã«çæããŠãã ããã
+
+///
+
+## ãŸãšã { #summary }
+
+**Pydantic ã¢ãã«**ã䜿ã£ãŠ **FastAPI** ã§ **ããããŒ**ã宣èšã§ããŸããð
diff --git a/docs/ja/docs/tutorial/metadata.md b/docs/ja/docs/tutorial/metadata.md
index 0ffb8f350..3b70bf2f4 100644
--- a/docs/ja/docs/tutorial/metadata.md
+++ b/docs/ja/docs/tutorial/metadata.md
@@ -18,7 +18,7 @@ OpenAPI仿§ããã³èªåAPIããã¥ã¡ã³ãUIã§äœ¿çšãããæ¬¡ã®ã
以äžã®ããã«èšå®ã§ããŸã:
-{* ../../docs_src/metadata/tutorial001_py39.py hl[3:16, 19:32] *}
+{* ../../docs_src/metadata/tutorial001_py310.py hl[3:16, 19:32] *}
/// tip | è±ç¥è
@@ -36,7 +36,7 @@ OpenAPI 3.1.0 ããã³ FastAPI 0.99.0 以éã§ã¯ã`license_info` ã `url`
äŸ:
-{* ../../docs_src/metadata/tutorial001_1_py39.py hl[31] *}
+{* ../../docs_src/metadata/tutorial001_1_py310.py hl[31] *}
## ã¿ã°ã®ã¡ã¿ããŒã¿ { #metadata-for-tags }
@@ -58,7 +58,7 @@ OpenAPI 3.1.0 ããã³ FastAPI 0.99.0 以éã§ã¯ã`license_info` ã `url`
ã¿ã°ã®ã¡ã¿ããŒã¿ãäœæããããã `openapi_tags` ãã©ã¡ãŒã¿ã«æž¡ããŸã:
-{* ../../docs_src/metadata/tutorial004_py39.py hl[3:16,18] *}
+{* ../../docs_src/metadata/tutorial004_py310.py hl[3:16,18] *}
説æã®äžã§Markdownã䜿çšã§ããããšã«æ³šæããŠãã ãããããšãã°ãloginãã¯å€ªå (**login**) ã§è¡šç€ºããããfancyãã¯æäœ (_fancy_) ã§è¡šç€ºãããŸãã
@@ -72,7 +72,7 @@ OpenAPI 3.1.0 ããã³ FastAPI 0.99.0 以éã§ã¯ã`license_info` ã `url`
*path operation*ïŒããã³ `APIRouter`ïŒã® `tags` ãã©ã¡ãŒã¿ã䜿çšããŠãããããç°ãªãã¿ã°ã«å²ãåœãŠãŸã:
-{* ../../docs_src/metadata/tutorial004_py39.py hl[21,26] *}
+{* ../../docs_src/metadata/tutorial004_py310.py hl[21,26] *}
/// info | æ
å ±
@@ -100,7 +100,7 @@ OpenAPI 3.1.0 ããã³ FastAPI 0.99.0 以éã§ã¯ã`license_info` ã `url`
ããšãã°ã`/api/v1/openapi.json` ã§æäŸãããããã«èšå®ããã«ã¯:
-{* ../../docs_src/metadata/tutorial002_py39.py hl[3] *}
+{* ../../docs_src/metadata/tutorial002_py310.py hl[3] *}
OpenAPIã¹ããŒããå®å
šã«ç¡å¹ã«ããå Žåã¯ã`openapi_url=None` ãèšå®ã§ããŸããããã«ãããããã䜿çšããããã¥ã¡ã³ãUIãç¡å¹ã«ãªããŸãã
@@ -117,4 +117,4 @@ OpenAPIã¹ããŒããå®å
šã«ç¡å¹ã«ããå Žåã¯ã`openapi_url=None` ã
ããšãã°ã`/documentation` ã§Swagger UIãæäŸãããããã«èšå®ããReDocãç¡å¹ã«ããã«ã¯:
-{* ../../docs_src/metadata/tutorial003_py39.py hl[3] *}
+{* ../../docs_src/metadata/tutorial003_py310.py hl[3] *}
diff --git a/docs/ja/docs/tutorial/middleware.md b/docs/ja/docs/tutorial/middleware.md
index 12fb57a64..103d6e2c0 100644
--- a/docs/ja/docs/tutorial/middleware.md
+++ b/docs/ja/docs/tutorial/middleware.md
@@ -31,7 +31,7 @@
* 次ã«ã察å¿ãã*path operation*ã«ãã£ãŠçæããã `response` ãè¿ããŸãã
* ãã®åŸã`response` ãè¿ãåã«ããã« `response` ã倿Žããããšãã§ããŸãã
-{* ../../docs_src/middleware/tutorial001_py39.py hl[8:9,11,14] *}
+{* ../../docs_src/middleware/tutorial001_py310.py hl[8:9,11,14] *}
/// tip | è±ç¥è
@@ -57,7 +57,7 @@
äŸãã°ããªã¯ãšã¹ãã®åŠçãšã¬ã¹ãã³ã¹ã®çæã«ããã£ãç§æ°ãå«ãã«ã¹ã¿ã ããã㌠`X-Process-Time` ã远å ã§ããŸã:
-{* ../../docs_src/middleware/tutorial001_py39.py hl[10,12:13] *}
+{* ../../docs_src/middleware/tutorial001_py310.py hl[10,12:13] *}
/// tip | è±ç¥è
@@ -92,4 +92,4 @@ app.add_middleware(MiddlewareB)
ä»ã®ããã«ãŠã§ã¢ã®è©³çްã«ã€ããŠã¯ã[é«åºŠãªãŠãŒã¶ãŒã¬ã€ã: é«åºŠãªããã«ãŠã§ã¢](../advanced/middleware.md){.internal-link target=_blank}ãåç
§ããŠãã ããã
-次ã®ã»ã¯ã·ã§ã³ã§ã¯ãããã«ãŠã§ã¢ã䜿çšã㊠CORS ãåŠçããæ¹æ³ã«ã€ããŠèª¬æããŸãã
+次ã®ã»ã¯ã·ã§ã³ã§ã¯ãããã«ãŠã§ã¢ã䜿çšã㊠CORS ãåŠçããæ¹æ³ã«ã€ããŠèª¬æããŸãã
diff --git a/docs/ja/docs/tutorial/path-operation-configuration.md b/docs/ja/docs/tutorial/path-operation-configuration.md
index eb6b6b11a..556cc6b14 100644
--- a/docs/ja/docs/tutorial/path-operation-configuration.md
+++ b/docs/ja/docs/tutorial/path-operation-configuration.md
@@ -46,7 +46,7 @@
**FastAPI** ã¯ããã¬ãŒã³ãªæååã®å Žåãšåãæ¹æ³ã§ããããµããŒãããŠããŸã:
-{* ../../docs_src/path_operation_configuration/tutorial002b_py39.py hl[1,8:10,13,18] *}
+{* ../../docs_src/path_operation_configuration/tutorial002b_py310.py hl[1,8:10,13,18] *}
## æŠèŠãšèª¬æ { #summary-and-description }
@@ -56,7 +56,7 @@
## docstringãçšãã説æ { #description-from-docstring }
-説ææã¯é·ããŠè€æ°è¡ã«ããã¶åŸåãããã®ã§ã颿°docstringå
ã«*path operation*ã®èª¬ææã宣èšã§ããŸãããããšã**FastAPI** ã¯èª¬ææãèªã¿èŸŒãã§ãããŸãã
+説ææã¯é·ããŠè€æ°è¡ã«ããã¶åŸåãããã®ã§ã颿°docstringå
ã«*path operation*ã®èª¬ææã宣èšã§ããŸãããããšã**FastAPI** ã¯èª¬ææãèªã¿èŸŒãã§ãããŸãã
docstringã«Markdownãèšè¿°ããã°ãæ£ããè§£éãããŠè¡šç€ºãããŸããïŒdocstringã®ã€ã³ãã³ããèæ
®ããŠïŒ
@@ -90,9 +90,9 @@ OpenAPIã¯*path operation*ããšã«ã¬ã¹ãã³ã¹ã®èª¬æãå¿
èŠãšããŠã
## *path operation*ãéæšå¥šã«ãã { #deprecate-a-path-operation }
-*path operation*ãdeprecatedãšããŠããŒã¯ããå¿
èŠããããããããåé€ããªãå Žåã¯ã`deprecated`ãã©ã¡ãŒã¿ãæž¡ããŸã:
+*path operation*ãdeprecatedãšããŠããŒã¯ããå¿
èŠããããããããåé€ããªãå Žåã¯ã`deprecated`ãã©ã¡ãŒã¿ãæž¡ããŸã:
-{* ../../docs_src/path_operation_configuration/tutorial006_py39.py hl[16] *}
+{* ../../docs_src/path_operation_configuration/tutorial006_py310.py hl[16] *}
察話çããã¥ã¡ã³ãã§ã¯éæšå¥šãšæèšãããŸã:
diff --git a/docs/ja/docs/tutorial/path-params-numeric-validations.md b/docs/ja/docs/tutorial/path-params-numeric-validations.md
index 6a9ecc4e7..ab3240f04 100644
--- a/docs/ja/docs/tutorial/path-params-numeric-validations.md
+++ b/docs/ja/docs/tutorial/path-params-numeric-validations.md
@@ -54,11 +54,11 @@ Pythonã¯ãããã©ã«ãããæã€å€ããããã©ã«ãããæããª
ãã®ããã以äžã®ããã«é¢æ°ã宣èšããããšãã§ããŸã:
-{* ../../docs_src/path_params_numeric_validations/tutorial002_py39.py hl[7] *}
+{* ../../docs_src/path_params_numeric_validations/tutorial002_py310.py hl[7] *}
ãã ãã`Annotated`ã䜿ãå Žåã¯ãã®åé¡ã¯èµ·ããªãããšãèŠããŠãããŠãã ããã`Query()`ã`Path()`ã«é¢æ°ãã©ã¡ãŒã¿ã®ããã©ã«ãå€ã䜿ããªãããã§ãã
-{* ../../docs_src/path_params_numeric_validations/tutorial002_an_py39.py *}
+{* ../../docs_src/path_params_numeric_validations/tutorial002_an_py310.py *}
## å¿
èŠã«å¿ããŠãã©ã¡ãŒã¿ãäžŠã³æ¿ããããªã㯠{ #order-the-parameters-as-you-need-tricks }
@@ -81,15 +81,15 @@ Pythonã¯ãããã©ã«ãããæã€å€ããããã©ã«ãããæããª
颿°ã®æåã®ãã©ã¡ãŒã¿ãšããŠ`*`ãæž¡ããŸãã
-Pythonã¯ãã®`*`ã§äœããããããšã¯ãããŸãããããã以éã®ãã¹ãŠã®ãã©ã¡ãŒã¿ãããŒã¯ãŒãåŒæ°ïŒããŒãšå€ã®ãã¢ïŒãšããŠåŒã°ããã¹ããã®ã§ãããšç¥ã£ãŠããã§ããããããã¯kwargsãšããŠãç¥ãããŠããŸããããšãããã©ã«ãå€ããªããŠãã
+Pythonã¯ãã®`*`ã§äœããããããšã¯ãããŸãããããã以éã®ãã¹ãŠã®ãã©ã¡ãŒã¿ãããŒã¯ãŒãåŒæ°ïŒããŒãšå€ã®ãã¢ïŒãšããŠåŒã°ããã¹ããã®ã§ãããšç¥ã£ãŠããã§ããããããã¯kwargsãšããŠãç¥ãããŠããŸããããšãããã©ã«ãå€ããªããŠãã
-{* ../../docs_src/path_params_numeric_validations/tutorial003_py39.py hl[7] *}
+{* ../../docs_src/path_params_numeric_validations/tutorial003_py310.py hl[7] *}
### `Annotated`ã®ã»ãããã { #better-with-annotated }
`Annotated`ã䜿ãå Žåã¯ã颿°ãã©ã¡ãŒã¿ã®ããã©ã«ãå€ã䜿ããªãããããã®åé¡ã¯èµ·ããããããã`*`ã䜿ãå¿
èŠããããŸããã
-{* ../../docs_src/path_params_numeric_validations/tutorial003_an_py39.py hl[10] *}
+{* ../../docs_src/path_params_numeric_validations/tutorial003_an_py310.py hl[10] *}
## æ°å€ã®æ€èšŒ: ä»¥äž { #number-validations-greater-than-or-equal }
@@ -97,7 +97,7 @@ Pythonã¯ãã®`*`ã§äœããããããšã¯ãããŸãããããã以é
ããã§ã`ge=1`ã®å Žåã`item_id`ã¯`1`ããã倧ãã`g`ããåã`e`ãæŽæ°ã§ãªããã°ãªããŸããã
-{* ../../docs_src/path_params_numeric_validations/tutorial004_an_py39.py hl[10] *}
+{* ../../docs_src/path_params_numeric_validations/tutorial004_an_py310.py hl[10] *}
## æ°å€ã®æ€èšŒ: ãã倧ãããšå°ãªãã€ã³ãŒã« { #number-validations-greater-than-and-less-than-or-equal }
@@ -106,7 +106,7 @@ Pythonã¯ãã®`*`ã§äœããããããšã¯ãããŸãããããã以é
* `gt`: `g`reater `t`han
* `le`: `l`ess than or `e`qual
-{* ../../docs_src/path_params_numeric_validations/tutorial005_an_py39.py hl[10] *}
+{* ../../docs_src/path_params_numeric_validations/tutorial005_an_py310.py hl[10] *}
## æ°å€ã®æ€èšŒ: æµ®åå°æ°ç¹ã 倧ãªãå°ãªã { #number-validations-floats-greater-than-and-less-than }
@@ -118,7 +118,7 @@ Pythonã¯ãã®`*`ã§äœããããããšã¯ãããŸãããããã以é
ããã¯ltãåãã§ãã
-{* ../../docs_src/path_params_numeric_validations/tutorial006_an_py39.py hl[13] *}
+{* ../../docs_src/path_params_numeric_validations/tutorial006_an_py310.py hl[13] *}
## ãŸãšã { #recap }
diff --git a/docs/ja/docs/tutorial/path-params.md b/docs/ja/docs/tutorial/path-params.md
index 96a1fe9d1..5b78eb7b1 100644
--- a/docs/ja/docs/tutorial/path-params.md
+++ b/docs/ja/docs/tutorial/path-params.md
@@ -2,7 +2,7 @@
Pythonã®formatæååãšåæ§ã®ã·ã³ã¿ãã¯ã¹ã§ããã¹ãã©ã¡ãŒã¿ããããã¹å€æ°ãã宣èšã§ããŸã:
-{* ../../docs_src/path_params/tutorial001_py39.py hl[6:7] *}
+{* ../../docs_src/path_params/tutorial001_py310.py hl[6:7] *}
ãã¹ãã©ã¡ãŒã¿ `item_id` ã®å€ã¯ãåŒæ° `item_id` ãšããŠé¢æ°ã«æž¡ãããŸãã
@@ -16,7 +16,7 @@ Pythonã®formatæååãšåæ§ã®ã·ã³ã¿ãã¯ã¹ã§ããã¹ãã©ã¡ãŒ
æšæºã®Pythonã®åã¢ãããŒã·ã§ã³ã䜿çšããŠã颿°å
ã®ãã¹ãã©ã¡ãŒã¿ã®åã宣èšã§ããŸã:
-{* ../../docs_src/path_params/tutorial002_py39.py hl[7] *}
+{* ../../docs_src/path_params/tutorial002_py310.py hl[7] *}
ããã§ã¯ã `item_id` 㯠`int` ãšããŠå®£èšãããŠããŸãã
@@ -26,7 +26,7 @@ Pythonã®formatæååãšåæ§ã®ã·ã³ã¿ãã¯ã¹ã§ããã¹ãã©ã¡ãŒ
///
-## ããŒã¿å€æ { #data-conversion }
+## ããŒã¿å€æ { #data-conversion }
ãã®äŸãå®è¡ãããã©ãŠã¶ã§ http://127.0.0.1:8000/items/3 ãéããšã次ã®ã¬ã¹ãã³ã¹ã衚瀺ãããŸã:
@@ -38,7 +38,7 @@ Pythonã®formatæååãšåæ§ã®ã·ã³ã¿ãã¯ã¹ã§ããã¹ãã©ã¡ãŒ
颿°ãåãåã£ãïŒããã³è¿ããïŒå€ã¯ãæååã® `"3"` ã§ã¯ãªããPythonã® `int` ãšããŠã® `3` ã§ããããšã«æ³šæããŠãã ããã
-ãããã£ãŠããã®å宣èšã䜿ããšã**FastAPI**ã¯èªåãªã¯ãšã¹ã "è§£æ" ãè¡ããŸãã
+ãããã£ãŠããã®å宣èšã䜿ããšã**FastAPI**ã¯èªåãªã¯ãšã¹ã "è§£æ" ãè¡ããŸãã
///
@@ -118,13 +118,13 @@ Pythonã®formatæååãšåæ§ã®ã·ã³ã¿ãã¯ã¹ã§ããã¹ãã©ã¡ãŒ
*path operations* ã¯é ã«è©äŸ¡ãããã®ã§ã `/users/me` ã `/users/{user_id}` ãããå
ã«å®£èšãããŠããã確èªããå¿
èŠããããŸã:
-{* ../../docs_src/path_params/tutorial003_py39.py hl[6,11] *}
+{* ../../docs_src/path_params/tutorial003_py310.py hl[6,11] *}
ãã以å€ã®å Žåã `/users/{user_id}` 㯠`/users/me` ãšããŠããããããŸããå€ã `"me"` ã§ãããã©ã¡ãŒã¿ `user_id` ãåãåããšãèãããŸãã
åæ§ã«ãpath operation ãåå®çŸ©ããããšã¯ã§ããŸãã:
-{* ../../docs_src/path_params/tutorial003b_py39.py hl[6,11] *}
+{* ../../docs_src/path_params/tutorial003b_py310.py hl[6,11] *}
ãã¹ã¯æåã«ããããããã®ãåžžã«äœ¿ããããããæåã®ãã®ãåžžã«äœ¿çšãããŸãã
@@ -140,11 +140,11 @@ Pythonã®formatæååãšåæ§ã®ã·ã³ã¿ãã¯ã¹ã§ããã¹ãã©ã¡ãŒ
ãããŠãåºå®å€ã®ã¯ã©ã¹å±æ§ãäœããŸãããããšããã®å€ã䜿çšå¯èœãªå€ãšãªããŸã:
-{* ../../docs_src/path_params/tutorial005_py39.py hl[1,6:9] *}
+{* ../../docs_src/path_params/tutorial005_py310.py hl[1,6:9] *}
/// tip | è±ç¥è
-"AlexNet"ã"ResNet"ãããŠ"LeNet"ã¯æ©æ¢°åŠç¿ã¢ãã«ã®ååã§ãã
+"AlexNet"ã"ResNet"ãããŠ"LeNet"ã¯æ©æ¢°åŠç¿ã¢ãã«ã®ååã§ãã
///
@@ -152,7 +152,7 @@ Pythonã®formatæååãšåæ§ã®ã·ã³ã¿ãã¯ã¹ã§ããã¹ãã©ã¡ãŒ
次ã«ãäœæããenumã¯ã©ã¹ã§ãã`ModelName`ã䜿çšããåã¢ãããŒã·ã§ã³ããã€*ãã¹ãã©ã¡ãŒã¿*ãäœæããŸã:
-{* ../../docs_src/path_params/tutorial005_py39.py hl[16] *}
+{* ../../docs_src/path_params/tutorial005_py310.py hl[16] *}
### ããã¥ã¡ã³ãã®ç¢ºèª { #check-the-docs }
@@ -168,13 +168,13 @@ Pythonã®formatæååãšåæ§ã®ã·ã³ã¿ãã¯ã¹ã§ããã¹ãã©ã¡ãŒ
ããã¯ãäœæããåæå `ModelName` ã®*åæåã¡ã³ã*ãšæ¯èŒã§ããŸã:
-{* ../../docs_src/path_params/tutorial005_py39.py hl[17] *}
+{* ../../docs_src/path_params/tutorial005_py310.py hl[17] *}
#### *åæå€*ã®ååŸ { #get-the-enumeration-value }
`model_name.value` ããããã¯äžè¬ã«ã `your_enum_member.value` ã䜿çšããŠå®éã®å€ (ãã®å Žå㯠`str`) ãååŸã§ããŸãã
-{* ../../docs_src/path_params/tutorial005_py39.py hl[20] *}
+{* ../../docs_src/path_params/tutorial005_py310.py hl[20] *}
/// tip | è±ç¥è
@@ -188,7 +188,7 @@ Pythonã®formatæååãšåæ§ã®ã·ã³ã¿ãã¯ã¹ã§ããã¹ãã©ã¡ãŒ
ãããã¯ã¯ã©ã€ã¢ã³ãã«è¿ãããåã«é©åãªå€ (ãã®å Žåã¯æåå) ã«å€æãããŸãã
-{* ../../docs_src/path_params/tutorial005_py39.py hl[18,21,23] *}
+{* ../../docs_src/path_params/tutorial005_py310.py hl[18,21,23] *}
ã¯ã©ã€ã¢ã³ãã¯ä»¥äžã®æ§ãªJSONã¬ã¹ãã³ã¹ãåŸãŸã:
@@ -227,7 +227,7 @@ Starletteã®ãªãã·ã§ã³ãçŽæ¥äœ¿çšããããšã§ã以äžã®URLã®æ§
ãããã£ãŠã以äžã®æ§ã«äœ¿çšã§ããŸã:
-{* ../../docs_src/path_params/tutorial004_py39.py hl[6] *}
+{* ../../docs_src/path_params/tutorial004_py310.py hl[6] *}
/// tip | è±ç¥è
@@ -242,7 +242,7 @@ Starletteã®ãªãã·ã§ã³ãçŽæ¥äœ¿çšããããšã§ã以äžã®URLã®æ§
ç°¡æœã§ãæ¬è³ªçã§ãæšæºçãªPythonã®å宣èšã䜿çšããããšã§ã**FastAPI**ã¯ä»¥äžãè¡ããŸã:
* ãšãã£ã¿ãŒãµããŒã: ãšã©ãŒãã§ãã¯ãèªåè£å®ããªã©
-* ããŒã¿ãè§£æã
+* ããŒã¿ãè§£æã
* ããŒã¿ããªããŒã·ã§ã³
* APIã¢ãããŒã·ã§ã³ãšèªåããã¥ã¡ã³ãçæ
diff --git a/docs/ja/docs/tutorial/query-params-str-validations.md b/docs/ja/docs/tutorial/query-params-str-validations.md
index e230ef29a..dda4e120b 100644
--- a/docs/ja/docs/tutorial/query-params-str-validations.md
+++ b/docs/ja/docs/tutorial/query-params-str-validations.md
@@ -47,40 +47,16 @@ FastAPI ã¯ããŒãžã§ã³ 0.95.0 ã§ `Annotated` ã®ãµããŒãã远å ãïŒ
次ã®åã¢ãããŒã·ã§ã³ããããŸãã:
-//// tab | Python 3.10+
-
```Python
q: str | None = None
```
-////
-
-//// tab | Python 3.9+
-
-```Python
-q: Union[str, None] = None
-```
-
-////
-
ããã `Annotated` ã§å
ãã§ã次ã®ããã«ããŸã:
-//// tab | Python 3.10+
-
```Python
q: Annotated[str | None] = None
```
-////
-
-//// tab | Python 3.9+
-
-```Python
-q: Annotated[Union[str, None]] = None
-```
-
-////
-
ã©ã¡ããåãæå³ã§ã`q` 㯠`str` ãŸã㯠`None` ã«ãªãåŸããã©ã¡ãŒã¿ã§ãããã©ã«ãã§ã¯ `None` ã§ãã
ã§ã¯ãé¢çœããšããã«é²ã¿ãŸãããã ð
@@ -109,7 +85,7 @@ FastAPI ã¯æ¬¡ãè¡ããŸã:
## 代æ¿ïŒå€ãæ¹æ³ïŒ: ããã©ã«ãå€ãšããŠã® `Query` { #alternative-old-query-as-the-default-value }
-FastAPI ã®ä»¥åã®ããŒãžã§ã³ïŒ0.95.0 ããåïŒã§ã¯ããã©ã¡ãŒã¿ã®ããã©ã«ãå€ãšã㊠`Query` ã䜿ãå¿
èŠãããã`Annotated` ã®äžã«å
¥ããã®ã§ã¯ãããŸããã§ãããããã䜿ã£ãã³ãŒããèŠãããå¯èœæ§ãé«ãã®ã§ã説æããŸãã
+FastAPI ã®ä»¥åã®ããŒãžã§ã³ïŒ0.95.0 ããåïŒã§ã¯ããã©ã¡ãŒã¿ã®ããã©ã«ãå€ãšã㊠`Query` ã䜿ãå¿
èŠãããã`Annotated` ã®äžã«å
¥ããã®ã§ã¯ãããŸããã§ãããããã䜿ã£ãã³ãŒããèŠãããå¯èœæ§ãé«ãã®ã§ã説æããŸãã
/// tip | è±ç¥è
@@ -192,7 +168,7 @@ FastAPI ãªãã§åã颿°ã **å¥ã®å Žæ** ãã **åŒã³åºããŠã**
## æ£èŠè¡šçŸã®è¿œå { #add-regular-expressions }
-ãã©ã¡ãŒã¿ãäžèŽããã¹ã æ£èŠè¡šçŸ `pattern` ãå®çŸ©ããããšãã§ããŸã:
+ãã©ã¡ãŒã¿ãäžèŽããã¹ã æ£èŠè¡šçŸ `pattern` ãå®çŸ©ããããšãã§ããŸã:
{* ../../docs_src/query_params_str_validations/tutorial004_an_py310.py hl[11] *}
@@ -212,7 +188,7 @@ FastAPI ãªãã§åã颿°ã **å¥ã®å Žæ** ãã **åŒã³åºããŠã**
ã¯ãšãªãã©ã¡ãŒã¿ `q` ã® `min_length` ã `3` ãšããããã©ã«ãå€ã `"fixedquery"` ãšããŠå®£èšããããšããŸã:
-{* ../../docs_src/query_params_str_validations/tutorial005_an_py39.py hl[9] *}
+{* ../../docs_src/query_params_str_validations/tutorial005_an_py310.py hl[9] *}
/// note | åè
@@ -242,7 +218,7 @@ q: Annotated[str | None, Query(min_length=3)] = None
ãã®ããã`Query` ã䜿ããªããå€ãå¿
é ãšããŠå®£èšãããå Žåã¯ãåã«ããã©ã«ãå€ã宣èšããŸãã:
-{* ../../docs_src/query_params_str_validations/tutorial006_an_py39.py hl[9] *}
+{* ../../docs_src/query_params_str_validations/tutorial006_an_py310.py hl[9] *}
### å¿
é ã`None` ã«ã§ãã { #required-can-be-none }
@@ -293,7 +269,7 @@ http://localhost:8000/items/?q=foo&q=bar
ãŸããå€ãæå®ãããŠããªãå Žåã¯ããã©ã«ãã® `list` ãå®çŸ©ããããšãã§ããŸãã
-{* ../../docs_src/query_params_str_validations/tutorial012_an_py39.py hl[9] *}
+{* ../../docs_src/query_params_str_validations/tutorial012_an_py310.py hl[9] *}
以äžã«ã¢ã¯ã»ã¹ãããš:
@@ -316,7 +292,7 @@ http://localhost:8000/items/
`list[str]` ã®ä»£ããã«çŽæ¥ `list` ã䜿ãããšãã§ããŸã:
-{* ../../docs_src/query_params_str_validations/tutorial013_an_py39.py hl[9] *}
+{* ../../docs_src/query_params_str_validations/tutorial013_an_py310.py hl[9] *}
/// note | åè
@@ -372,7 +348,7 @@ http://127.0.0.1:8000/items/?item-query=foobaritems
ããŠããã®ãã©ã¡ãŒã¿ãæ°ã«å
¥ããªããªã£ããšããŸãããã
-ããã䜿ã£ãŠããã¯ã©ã€ã¢ã³ããããã®ã§ããã°ããã¯æ®ããŠããå¿
èŠããããŸãããããã¥ã¡ã³ãã«ã¯deprecatedãšæèšããŠããããã§ãã
+ããã䜿ã£ãŠããã¯ã©ã€ã¢ã³ããããã®ã§ããã°ããã¯æ®ããŠããå¿
èŠããããŸãããããã¥ã¡ã³ãã«ã¯deprecatedãšæèšããŠããããã§ãã
ãã®å Žåã`Query`ã«ãã©ã¡ãŒã¿`deprecated=True`ãæž¡ããŸã:
@@ -402,7 +378,7 @@ Pydantic ã«ã¯ ISBN ã®æžç±çªå·ãªã item ID ã `isbn-` ã§å§ãŸãããšãIMDB ã® movie URL ID ãªã `imdb-` ã§å§ãŸãããšããã§ãã¯ããŸã:
+äŸãã°ããã®ã«ã¹ã¿ã ããªããŒã¿ã¯ãISBN ã®æžç±çªå·ãªã item ID ã `isbn-` ã§å§ãŸãããšãIMDB ã® movie URL ID ãªã `imdb-` ã§å§ãŸãããšããã§ãã¯ããŸã:
{* ../../docs_src/query_params_str_validations/tutorial015_an_py310.py hl[5,16:19,24] *}
@@ -436,7 +412,7 @@ Pydantic ã«ã¯ å埩å¯èœãªããžã§ã¯ã ãååŸããŸãã
+`data.items()` ã§ãèŸæžã®åã¢ã€ãã ã®ããŒãšå€ãå«ãã¿ãã«ãæã€ å埩å¯èœãªããžã§ã¯ã ãååŸããŸãã
ãã®å埩å¯èœãªããžã§ã¯ãã `list(data.items())` ã§é©å㪠`list` ã«å€æããŸãã
diff --git a/docs/ja/docs/tutorial/query-params.md b/docs/ja/docs/tutorial/query-params.md
index 41e51ed78..d32c9822b 100644
--- a/docs/ja/docs/tutorial/query-params.md
+++ b/docs/ja/docs/tutorial/query-params.md
@@ -2,7 +2,7 @@
ãã¹ãã©ã¡ãŒã¿ã§ã¯ãªã颿°ãã©ã¡ãŒã¿ã宣èšãããšããããã¯èªåçã«ãã¯ãšãªããã©ã¡ãŒã¿ãšããŠè§£éãããŸãã
-{* ../../docs_src/query_params/tutorial001_py39.py hl[9] *}
+{* ../../docs_src/query_params/tutorial001_py310.py hl[9] *}
ã¯ãšãªã¯URLå
ã§ `?` ã®åŸã«ç¶ãããŒãšããªã¥ãŒã®çµã§ã `&` ã§åºåãããŠããŸãã
@@ -24,7 +24,7 @@ http://127.0.0.1:8000/items/?skip=0&limit=10
ãã¹ãã©ã¡ãŒã¿ã«é©çšãããåŠçãšå®å
šã«åæ§ãªåŠçãã¯ãšãªãã©ã¡ãŒã¿ã«ãæœãããŸã:
* ãšãã£ã¿ãŒãµããŒã (æããã«)
-* ããŒã¿ ãè§£æã
+* ããŒã¿ ãè§£æã
* ããŒã¿ããªããŒã·ã§ã³
* èªåããã¥ã¡ã³ãçæ
@@ -128,7 +128,7 @@ http://127.0.0.1:8000/items/foo?short=yes
ãããã¯ãšãªãã©ã¡ãŒã¿ãå¿
é ã«ãããå Žåã¯ããã ããã©ã«ãå€ã宣èšããªããã°ããã§ã:
-{* ../../docs_src/query_params/tutorial005_py39.py hl[6:7] *}
+{* ../../docs_src/query_params/tutorial005_py310.py hl[6:7] *}
ããã§ãã¯ãšãªãã©ã¡ãŒã¿ `needy` 㯠`str` åã®å¿
é ã®ã¯ãšãªãã©ã¡ãŒã¿ã§ãã
diff --git a/docs/ja/docs/tutorial/request-files.md b/docs/ja/docs/tutorial/request-files.md
new file mode 100644
index 000000000..538cf6474
--- /dev/null
+++ b/docs/ja/docs/tutorial/request-files.md
@@ -0,0 +1,176 @@
+# ãªã¯ãšã¹ããã¡ã€ã« { #request-files }
+
+`File` ã䜿ã£ãŠãã¯ã©ã€ã¢ã³ããã¢ããããŒããããã¡ã€ã«ãå®çŸ©ã§ããŸãã
+
+/// info | æ
å ±
+
+ã¢ããããŒãããããã¡ã€ã«ãåãåãã«ã¯ããŸã `python-multipart` ãã€ã³ã¹ããŒã«ããŸãã
+
+[ä»®æ³ç°å¢](../virtual-environments.md){.internal-link target=_blank}ãäœæããŠæå¹åããæ¬¡ã®ããã«ã€ã³ã¹ããŒã«ããŠãã ãã:
+
+```console
+$ pip install python-multipart
+```
+
+ã¢ããããŒãããããã¡ã€ã«ã¯ãform dataããšããŠéä¿¡ãããããã§ãã
+
+///
+
+## `File` ãã€ã³ããŒã { #import-file }
+
+`fastapi` ãã `File` ãš `UploadFile` ãã€ã³ããŒãããŸã:
+
+{* ../../docs_src/request_files/tutorial001_an_py310.py hl[3] *}
+
+## `File` ãã©ã¡ãŒã¿ã®å®çŸ© { #define-file-parameters }
+
+`Body` ã `Form` ãšåæ§ã®æ¹æ³ã§ãã¡ã€ã«ã®ãã©ã¡ãŒã¿ãäœæããŸã:
+
+{* ../../docs_src/request_files/tutorial001_an_py310.py hl[9] *}
+
+/// info | æ
å ±
+
+`File` 㯠`Form` ãçŽæ¥ç¶æ¿ããã¯ã©ã¹ã§ãã
+
+ãã ãã`fastapi` ãã `Query`ã`Path`ã`File` ãªã©ãã€ã³ããŒããããšãããããã¯å®éã«ã¯ç¹æ®ãªã¯ã©ã¹ãè¿ã颿°ã§ããããšã«æ³šæããŠãã ããã
+
+///
+
+/// tip | è±ç¥è
+
+ãã¡ã€ã«ã®ããã£ã宣èšããã«ã¯ `File` ã䜿ãå¿
èŠããããŸããããããªããšããã©ã¡ãŒã¿ã¯ã¯ãšãªãã©ã¡ãŒã¿ãããã£ïŒJSONïŒãã©ã¡ãŒã¿ãšããŠè§£éãããŸãã
+
+///
+
+ãã¡ã€ã«ã¯ãform dataããšããŠã¢ããããŒããããŸãã
+
+*path operation 颿°* ã®ãã©ã¡ãŒã¿ã®åã `bytes` ãšããŠå®£èšãããšã**FastAPI** ããã¡ã€ã«ãèªã¿åããå
容ã `bytes` ãšããŠåãåããŸãã
+
+ããã¯å
容å
šäœãã¡ã¢ãªã«ä¿æãããããšãæå³ããŸããå°ããªãã¡ã€ã«ã«ã¯æå¹ã§ãã
+
+ããããå€ãã®å Žå㯠`UploadFile` ãäœ¿ãæ¹ãæå©ã§ãã
+
+## `UploadFile` ã«ãããã¡ã€ã«ãã©ã¡ãŒã¿ { #file-parameters-with-uploadfile }
+
+åã `UploadFile` ã«ããŠãã¡ã€ã«ãã©ã¡ãŒã¿ãå®çŸ©ããŸã:
+
+{* ../../docs_src/request_files/tutorial001_an_py310.py hl[14] *}
+
+`UploadFile` ã䜿ãããšã«ã¯ `bytes` ã«å¯Ÿããæ¬¡ã®å©ç¹ããããŸã:
+
+- ãã©ã¡ãŒã¿ã®ããã©ã«ãå€ã« `File()` ã䜿ãå¿
èŠããããŸããã
+- ãspooledããã¡ã€ã«ã䜿ããŸã:
+ - æå€§ãµã€ãºãŸã§ã¯ã¡ã¢ãªã«ä¿æãããããè¶
ãããšãã£ã¹ã¯ã«æ ŒçŽããããã¡ã€ã«ã§ãã
+- ãã®ãããç»åã»åç»ã»å€§ããªãã€ããªãªã©ã®å€§ããªãã¡ã€ã«ã§ããã¡ã¢ãªã䜿ãæããããšãªãããŸãåäœããŸãã
+- ã¢ããããŒãããããã¡ã€ã«ããã¡ã¿ããŒã¿ãååŸã§ããŸãã
+- file-like 㪠`async` ã€ã³ã¿ãŒãã§ãŒã¹ãæã¡ãŸãã
+- å®éã® Python ã® `SpooledTemporaryFile` ãªããžã§ã¯ããå
¬éããŠãããfile-like ãªããžã§ã¯ããæåŸ
ããä»ã®ã©ã€ãã©ãªã«ãã®ãŸãŸæž¡ããŸãã
+
+### `UploadFile` { #uploadfile }
+
+`UploadFile` ã«ã¯æ¬¡ã®å±æ§ããããŸã:
+
+- `filename`: ã¢ããããŒãæã®å
ã®ãã¡ã€ã«åã衚ã `str`ïŒäŸ: `myimage.jpg`ïŒ
+- `content_type`: ã³ã³ãã³ãã¿ã€ãïŒMIME ã¿ã€ã / ã¡ãã£ã¢ã¿ã€ãïŒã衚ã `str`ïŒäŸ: `image/jpeg`ïŒ
+- `file`: `SpooledTemporaryFile`ïŒfile-like ãªãªããžã§ã¯ãïŒãããã¯å®éã® Python ã®ãã¡ã€ã«ãªããžã§ã¯ãã§ããfile-likeããªããžã§ã¯ããæåŸ
ãã颿°ãã©ã€ãã©ãªã«çŽæ¥æž¡ããŸãã
+
+`UploadFile` ã«ã¯æ¬¡ã® `async` ã¡ãœããããããŸããããããå
éšã§å¯Ÿå¿ãããã¡ã€ã«ã¡ãœããïŒå
éšã® `SpooledTemporaryFile`ïŒãåŒã³åºããŸãã
+
+- `write(data)`: `data`ïŒ`str` ãŸã㯠`bytes`ïŒãæžã蟌ã¿ãŸãã
+- `read(size)`: `size`ïŒ`int`ïŒãã€ã/æåãèªã¿èŸŒã¿ãŸãã
+- `seek(offset)`: ãã¡ã€ã«å
ã®ãã€ãäœçœ® `offset`ïŒ`int`ïŒã«ç§»åããŸãã
+ - äŸ: `await myfile.seek(0)` ã¯ãã¡ã€ã«ã®å
é ã«ç§»åããŸãã
+ - äžåºŠ `await myfile.read()` ãå®è¡ããŠãããäžåºŠå
容ãèªã¿ããå Žåã«ç¹ã«äŸ¿å©ã§ãã
+- `close()`: ãã¡ã€ã«ãéããŸãã
+
+ãããã¯ãã¹ãŠ `async` ã¡ãœãããªã®ã§ã`await` ããå¿
èŠããããŸãã
+
+äŸãã°ã`async` ã® *path operation 颿°* å
ã§ã¯æ¬¡ã®ããã«å
容ãååŸã§ããŸã:
+
+```Python
+contents = await myfile.read()
+```
+
+éåžžã® `def` ã® *path operation 颿°* å
ã«ããå Žåã¯ã`UploadFile.file` ã«çŽæ¥ã¢ã¯ã»ã¹ã§ããŸããäŸãã°:
+
+```Python
+contents = myfile.file.read()
+```
+
+/// note | `async` ã®æè¡è©³çް
+
+`async` ã¡ãœããã䜿ããšã**FastAPI** ã¯ãã¡ã€ã«ã¡ãœãããã¹ã¬ããããŒã«ã§å®è¡ãããã®å®äºãåŸ
æ©ããŸãã
+
+///
+
+/// note | Starlette ã®æè¡è©³çް
+
+**FastAPI** ã® `UploadFile` 㯠**Starlette** ã® `UploadFile` ãçŽæ¥ç¶æ¿ããŠããŸããã**Pydantic** ã FastAPI ã®ä»ã®éšåãšäºæã«ããããã«å¿
èŠãªèŠçŽ ã远å ããŠããŸãã
+
+///
+
+## ãForm Dataããšã¯ { #what-is-form-data }
+
+HTML ãã©ãŒã ïŒ``ïŒããµãŒããŒã«ããŒã¿ãéãæ¹æ³ã¯ããã®ããŒã¿ã«å¯ŸããŠéåžžãç¹å¥ãªããšã³ã³ãŒãã£ã³ã°ãçšããJSON ãšã¯ç°ãªããŸãã
+
+**FastAPI** 㯠JSON ã§ã¯ãªããé©åãªå Žæãããã®ããŒã¿ãèªã¿åãããã«ããŸãã
+
+/// note | æè¡è©³çް
+
+ãã¡ã€ã«ãå«ãŸãªãå Žåããã©ãŒã ããã®ããŒã¿ã¯éåžžãã¡ãã£ã¢ã¿ã€ãã`application/x-www-form-urlencoded` ã§ãšã³ã³ãŒããããŸãã
+
+ãã ããã©ãŒã ã«ãã¡ã€ã«ãå«ãŸããå Žåã¯ã`multipart/form-data` ãšããŠãšã³ã³ãŒããããŸãã`File` ã䜿ããšã**FastAPI** ã¯ããã£å
ã®æ£ããéšåãããã¡ã€ã«ãååŸãã¹ãã§ãããšèªèããŸãã
+
+ãããã®ãšã³ã³ãŒãã£ã³ã°ããã©ãŒã ãã£ãŒã«ãã®è©³çްã¯ãMDN Web Docs ã® POST ãåç
§ããŠãã ããã
+
+///
+
+/// warning | 泚æ
+
+1 ã€ã® *path operation* ã«è€æ°ã® `File` ããã³ `Form` ãã©ã¡ãŒã¿ã宣èšã§ããŸãããåæã« JSON ãšããŠåãåãããšãæåŸ
ãã `Body` ãã£ãŒã«ãã宣èšããããšã¯ã§ããŸããããªã¯ãšã¹ãã®ããã£ã¯ `application/json` ã§ã¯ãªã `multipart/form-data` ã§ãšã³ã³ãŒããããããã§ãã
+
+ãã㯠**FastAPI** ã®å¶éã§ã¯ãªããHTTP ãããã³ã«ã®ä»æ§ã§ãã
+
+///
+
+## ä»»æã®ãã¡ã€ã«ã¢ããããŒã { #optional-file-upload }
+
+æšæºã®åã¢ãããŒã·ã§ã³ã䜿ããããã©ã«ãå€ã `None` ã«èšå®ããããšã§ããã¡ã€ã«ãä»»æã«ã§ããŸã:
+
+{* ../../docs_src/request_files/tutorial001_02_an_py310.py hl[9,17] *}
+
+## 远å ã¡ã¿ããŒã¿ã€ãã® `UploadFile` { #uploadfile-with-additional-metadata }
+
+äŸãã°è¿œå ã®ã¡ã¿ããŒã¿ãèšå®ããããã«ã`UploadFile` ãšäœµã㊠`File()` ã䜿ãããšãã§ããŸã:
+
+{* ../../docs_src/request_files/tutorial001_03_an_py310.py hl[9,15] *}
+
+## è€æ°ãã¡ã€ã«ã®ã¢ããããŒã { #multiple-file-uploads }
+
+åæã«è€æ°ã®ãã¡ã€ã«ãã¢ããããŒãã§ããŸãã
+
+ãããã¯ãform dataãã§éä¿¡ãããåãããã©ãŒã ãã£ãŒã«ããã«é¢é£ä»ããããŸãã
+
+ãã®ããã«ã¯ã`bytes` ãŸã㯠`UploadFile` ã®ãªã¹ãã宣èšããŸã:
+
+{* ../../docs_src/request_files/tutorial002_an_py310.py hl[10,15] *}
+
+宣èšã©ããã`bytes` ãŸã㯠`UploadFile` ã® `list` ãåãåããŸãã
+
+/// note | æè¡è©³çް
+
+`from starlette.responses import HTMLResponse` ã䜿ãããšãã§ããŸãã
+
+**FastAPI** ã¯å©äŸ¿æ§ã®ããã`starlette.responses` ãšåããã®ã `fastapi.responses` ãšããŠæäŸããŠããŸãããã ããå©çšå¯èœãªã¬ã¹ãã³ã¹ã®å€ã㯠Starlette ããçŽæ¥æäŸãããŠããŸãã
+
+///
+
+### 远å ã¡ã¿ããŒã¿ã€ãã®è€æ°ãã¡ã€ã«ã¢ããããŒã { #multiple-file-uploads-with-additional-metadata }
+
+å
ã»ã©ãšåæ§ã«ã`UploadFile` ã«å¯ŸããŠã `File()` ã䜿ã£ãŠè¿œå ã®ãã©ã¡ãŒã¿ãèšå®ã§ããŸã:
+
+{* ../../docs_src/request_files/tutorial003_an_py310.py hl[11,18:20] *}
+
+## ãŸãšã { #recap }
+
+ãªã¯ãšã¹ãã§ãã©ãŒã ããŒã¿ãšããŠéä¿¡ãããã¢ããããŒããã¡ã€ã«ã宣èšããã«ã¯ã`File`ã`bytes`ã`UploadFile` ã䜿ããŸãã
diff --git a/docs/ja/docs/tutorial/request-form-models.md b/docs/ja/docs/tutorial/request-form-models.md
new file mode 100644
index 000000000..071867964
--- /dev/null
+++ b/docs/ja/docs/tutorial/request-form-models.md
@@ -0,0 +1,78 @@
+# ãã©ãŒã ã¢ãã« { #form-models }
+
+FastAPI ã§ã¯ããã©ãŒã ãã£ãŒã«ãã宣èšããããã« Pydantic ã¢ãã«ã䜿çšã§ããŸãã
+
+/// info | æ
å ±
+
+ãã©ãŒã ã䜿ãã«ã¯ããŸã `python-multipart` ãã€ã³ã¹ããŒã«ããŸãã
+
+ãŸã [ä»®æ³ç°å¢](../virtual-environments.md){.internal-link target=_blank} ãäœæããŠæå¹åãããã®ããã§ã€ã³ã¹ããŒã«ããŠãã ãããäŸãã°:
+
+```console
+$ pip install python-multipart
+```
+
+///
+
+/// note | åè
+
+ãã㯠FastAPI ããŒãžã§ã³ `0.113.0` 以éã§ãµããŒããããŠããŸããð€
+
+///
+
+## ãã©ãŒã çšã® Pydantic ã¢ãã« { #pydantic-models-for-forms }
+
+åãåããããã£ãŒã«ãã **ãã©ãŒã ãã£ãŒã«ã** ãšããŠæã€ **Pydantic ã¢ãã«** ã宣èšãããã©ã¡ãŒã¿ã `Form` ãšããŠå®£èšããã ãã§ã:
+
+{* ../../docs_src/request_form_models/tutorial001_an_py310.py hl[9:11,15] *}
+
+**FastAPI** ã¯ãªã¯ãšã¹ãã® **ãã©ãŒã ããŒã¿** ãã **åãã£ãŒã«ã** ã®ããŒã¿ã **æœåº** ããå®çŸ©ãã Pydantic ã¢ãã«ãšããŠæž¡ããŸãã
+
+## ããã¥ã¡ã³ãã§ç¢ºèª { #check-the-docs }
+
+`/docs` ã®ããã¥ã¡ã³ã UI ã§ç¢ºèªã§ããŸã:
+
+
+POSTã®ãŠã§ãããã¥ã¡ã³ããåç
§ããŠãã ããã
+ãããã®ãšã³ã³ãŒãã£ã³ã°ããã©ãŒã ãã£ãŒã«ãã®è©³çްã«ã€ããŠã¯ãMDNã®POSTã®ãŠã§ãããã¥ã¡ã³ããåç
§ããŠãã ããã
///
/// warning | 泚æ
-*path operation*ã§è€æ°ã®`Form`ãã©ã¡ãŒã¿ã宣èšããããšãã§ããŸãããJSONãšããŠåãåãããšãæåŸ
ããŠãã`Body`ãã£ãŒã«ãã宣èšããããšã¯ã§ããŸããããªããªãããªã¯ãšã¹ãã¯`application/json`ã®ä»£ããã«`application/x-www-form-urlencoded`ã䜿ã£ãŠããã£ããšã³ã³ãŒãããããã§ãã
+*path operation*ã§è€æ°ã®`Form`ãã©ã¡ãŒã¿ã宣èšããããšãã§ããŸãããJSONãšããŠåãåãããšãæåŸ
ããŠãã`Body`ãã£ãŒã«ãã宣èšããããšã¯ã§ããŸããããªããªãããªã¯ãšã¹ãã¯`application/x-www-form-urlencoded`ã®ä»£ããã«`application/json`ã䜿ã£ãŠããã£ããšã³ã³ãŒãããããã§ãã
ãã㯠**FastAPI**ã®å¶éã§ã¯ãªããHTTPãããã³ã«ã®äžéšã§ãã
diff --git a/docs/ja/docs/tutorial/response-model.md b/docs/ja/docs/tutorial/response-model.md
index 258eac8e6..07dc20123 100644
--- a/docs/ja/docs/tutorial/response-model.md
+++ b/docs/ja/docs/tutorial/response-model.md
@@ -41,7 +41,7 @@ FastAPIã¯ãã®æ»ãå€ã®åã䜿ã£ãŠä»¥äžãè¡ããŸã:
/// note | åè
-`response_model`ã¯ããã³ã¬ãŒã¿ãã¡ãœããïŒ`get`ã`post`ãªã©ïŒã®ãã©ã¡ãŒã¿ã§ããããšã«æ³šæããŠãã ããããã¹ãŠã®ãã©ã¡ãŒã¿ãããã£ã®ããã«ã*path operation 颿°* ã®ãã©ã¡ãŒã¿ã§ã¯ãããŸããã
+`response_model`ã¯ããã³ã¬ãŒã¿ãã¡ãœããïŒ`get`ã`post`ãªã©ïŒã®ãã©ã¡ãŒã¿ã§ãã颿°ã®ãã©ã¡ãŒã¿ãããã£ãªã©ãšã¯éãã*path operation 颿°*ã®ãã©ã¡ãŒã¿ã§ã¯ãããŸããã
///
@@ -183,7 +183,7 @@ Pydanticãã£ãŒã«ããšããŠæå¹ã§ã¯ãªããã®ãè¿ããããŒã«ïŒ
æãäžè¬çãªã±ãŒã¹ã¯ã[é«åºŠãªããã¥ã¡ã³ãã§åŸè¿°ãããResponseãçŽæ¥è¿ãã](../advanced/response-directly.md){.internal-link target=_blank}å Žåã§ãã
-{* ../../docs_src/response_model/tutorial003_02_py39.py hl[8,10:11] *}
+{* ../../docs_src/response_model/tutorial003_02_py310.py hl[8,10:11] *}
ãã®ã·ã³ãã«ãªã±ãŒã¹ã¯ãæ»ãå€ã®åã¢ãããŒã·ã§ã³ã `Response` ã®ã¯ã©ã¹ïŒãŸãã¯ãµãã¯ã©ã¹ïŒã§ãããããFastAPIãèªåçã«åŠçããŸãã
@@ -193,7 +193,7 @@ Pydanticãã£ãŒã«ããšããŠæå¹ã§ã¯ãªããã®ãè¿ããããŒã«ïŒ
åã¢ãããŒã·ã§ã³ã§ `Response` ã®ãµãã¯ã©ã¹ã䜿ãããšãã§ããŸã:
-{* ../../docs_src/response_model/tutorial003_03_py39.py hl[8:9] *}
+{* ../../docs_src/response_model/tutorial003_03_py310.py hl[8:9] *}
ãã㯠`RedirectResponse` ã `Response` ã®ãµãã¯ã©ã¹ã§ãããFastAPIããã®ã·ã³ãã«ãªã±ãŒã¹ãèªååŠçãããããåæ§ã«åäœããŸãã
@@ -201,7 +201,7 @@ Pydanticãã£ãŒã«ããšããŠæå¹ã§ã¯ãªããã®ãè¿ããããŒã«ïŒ
ããããPydanticåãšããŠæå¹ã§ã¯ãªãå¥ã®ä»»æã®ãªããžã§ã¯ãïŒäŸ: ããŒã¿ããŒã¹ãªããžã§ã¯ãïŒãè¿ãã颿°ã§ãã®ããã«ã¢ãããŒã·ã§ã³ãããšãFastAPIã¯ãã®åã¢ãããŒã·ã§ã³ããPydanticã¬ã¹ãã³ã¹ã¢ãã«ãäœæããããšããŠå€±æããŸãã
-åæ§ã«ãunionã®ããã«ãè€æ°ã®åã®ãã¡1ã€ä»¥äžãPydanticåãšããŠæå¹ã§ãªããã®ãå«ãå Žåãèµ·ãããŸããäŸãã°æ¬¡ã¯å€±æããŸã ð¥:
+åæ§ã«ããŠããªã³ã®ããã«ãè€æ°ã®åã®ãã¡1ã€ä»¥äžãPydanticåãšããŠæå¹ã§ãªããã®ãå«ãå Žåãèµ·ãããŸããäŸãã°æ¬¡ã¯å€±æããŸã ð¥:
{* ../../docs_src/response_model/tutorial003_04_py310.py hl[8] *}
diff --git a/docs/ja/docs/tutorial/response-status-code.md b/docs/ja/docs/tutorial/response-status-code.md
index d3c219416..d4ac45da6 100644
--- a/docs/ja/docs/tutorial/response-status-code.md
+++ b/docs/ja/docs/tutorial/response-status-code.md
@@ -8,7 +8,7 @@
* `@app.delete()`
* etc.
-{* ../../docs_src/response_status_code/tutorial001_py39.py hl[6] *}
+{* ../../docs_src/response_status_code/tutorial001_py310.py hl[6] *}
/// note | åè
@@ -74,7 +74,7 @@ HTTPã§ã¯ãã¬ã¹ãã³ã¹ã®äžéšãšããŠ3æ¡ã®æ°åã®ã¹ããŒã¿ã¹ã³
å
ã»ã©ã®äŸãããäžåºŠèŠãŠã¿ãŸããã:
-{* ../../docs_src/response_status_code/tutorial001_py39.py hl[6] *}
+{* ../../docs_src/response_status_code/tutorial001_py310.py hl[6] *}
`201`ã¯ãäœæå®äºãã®ããã®ã¹ããŒã¿ã¹ã³ãŒãã§ãã
@@ -82,7 +82,7 @@ HTTPã§ã¯ãã¬ã¹ãã³ã¹ã®äžéšãšããŠ3æ¡ã®æ°åã®ã¹ããŒã¿ã¹ã³
`fastapi.status`ã®äŸ¿å©ãªå€æ°ãå©çšããããšãã§ããŸãã
-{* ../../docs_src/response_status_code/tutorial002_py39.py hl[1,6] *}
+{* ../../docs_src/response_status_code/tutorial002_py310.py hl[1,6] *}
ãããã¯åãªã䟿å©ãªãã®ã§ãããåãçªå·ãä¿æããŠããŸãããããããã®æ¹æ³ã§ã¯ãšãã£ã¿ã®èªåè£å®ã䜿çšããŠããããèŠã€ããããšãã§ããŸãã
diff --git a/docs/ja/docs/tutorial/schema-extra-example.md b/docs/ja/docs/tutorial/schema-extra-example.md
index e526685c2..76a6b0f94 100644
--- a/docs/ja/docs/tutorial/schema-extra-example.md
+++ b/docs/ja/docs/tutorial/schema-extra-example.md
@@ -74,7 +74,7 @@ Pydanticã¢ãã«ã§`Field()`ã䜿ãå Žåã远å ã®`examples`ã宣èšã§
ãã®å Žåãexamplesã¯ãã®ããã£ããŒã¿ã®å
éš**JSON Schema**ã®äžéšã«ãªããŸãã
-ããã§ããå·çæç¹ã§ã¯ãããã¥ã¡ã³ãUIã®è¡šç€ºãæ
åœããããŒã«ã§ããSwagger UIã¯ã**JSON Schema**å
ã®ããŒã¿ã«å¯ŸããŠè€æ°ã®äŸã衚瀺ããããšããµããŒãããŠããŸãããããããåé¿çã«ã€ããŠã¯ä»¥äžãèªãã§ãã ããã
+ããã§ããå·çæç¹ã§ã¯ãããã¥ã¡ã³ãUIã®è¡šç€ºãæ
åœããããŒã«ã§ããSwagger UIã¯ã**JSON Schema**å
ã®ããŒã¿ã«å¯ŸããŠè€æ°ã®äŸã衚瀺ããããšããµããŒãããŠããŸãããããããåé¿çã«ã€ããŠã¯ä»¥äžãèªãã§ãã ããã
### OpenAPIåºæã®`examples` { #openapi-specific-examples }
diff --git a/docs/ja/docs/tutorial/security/first-steps.md b/docs/ja/docs/tutorial/security/first-steps.md
index 76ef04db8..5bf04386a 100644
--- a/docs/ja/docs/tutorial/security/first-steps.md
+++ b/docs/ja/docs/tutorial/security/first-steps.md
@@ -20,7 +20,7 @@
`main.py`ã«ãäžèšã®äŸãã³ããŒããŸã:
-{* ../../docs_src/security/tutorial001_an_py39.py *}
+{* ../../docs_src/security/tutorial001_an_py310.py *}
## å®è¡ { #run-it }
@@ -132,7 +132,7 @@ OAuth2ã¯ãããã¯ãšã³ããAPIããŠãŒã¶ãŒãèªèšŒãããµãŒããŒ
`OAuth2PasswordBearer` ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãäœæããæã«ããã©ã¡ãŒã¿ãŒ`tokenUrl`ãæž¡ããŸãããã®ãã©ã¡ãŒã¿ãŒã«ã¯ãã¯ã©ã€ã¢ã³ã (ãŠãŒã¶ãŒã®ãã©ãŠã¶ã§åäœããããã³ããšã³ã) ãããŒã¯ã³ãååŸããããã«`username`ãš`password`ãéä¿¡ããURLãæå®ããŸãã
-{* ../../docs_src/security/tutorial001_an_py39.py hl[8] *}
+{* ../../docs_src/security/tutorial001_an_py310.py hl[8] *}
/// tip | è±ç¥è
@@ -150,7 +150,7 @@ OAuth2ã¯ãããã¯ãšã³ããAPIããŠãŒã¶ãŒãèªèšŒãããµãŒããŒ
/// info | æ
å ±
-éåžžã«å³æ ŒãªãPythonistaãã§ããã°ããã©ã¡ãŒã¿ãŒåã®ã¹ã¿ã€ã«ã`token_url`ã§ã¯ãªã`tokenUrl`ã§ããããšãæ°ã«å
¥ããªããããããŸããã
+éåžžã«å³æ ŒãªãPythonistaãã§ããã°ããã©ã¡ãŒã¿ãŒåã®ã¹ã¿ã€ã«ã`tokenUrl`ã§ã¯ãªã`token_url`ã§ããããšãæ°ã«å
¥ããªããããããŸããã
ããã¯OpenAPI仿§ãšåãååã䜿çšããŠããããã§ãããã®ããããããã®ã»ãã¥ãªãã£ã¹ããŒã ã«ã€ããŠãã£ãšèª¿ã¹ãå¿
èŠãããå Žåã¯ããããã³ããŒããŠè²Œãä»ããã°ãããã«ã€ããŠã®è©³çŽ°ãªæ
å ±ãèŠã€ããããšãã§ããŸãã
@@ -170,7 +170,7 @@ oauth2_scheme(some, parameters)
ããã§`oauth2_scheme`ã`Depends`ã§äŸåé¢ä¿ã«æž¡ãããšãã§ããŸãã
-{* ../../docs_src/security/tutorial001_an_py39.py hl[12] *}
+{* ../../docs_src/security/tutorial001_an_py310.py hl[12] *}
ãã®äŸåé¢ä¿ã¯ã*path operation 颿°*ã®ãã©ã¡ãŒã¿ãŒ`token`ã«ä»£å
¥ããã`str`ãæäŸããŸãã
diff --git a/docs/ja/docs/tutorial/security/get-current-user.md b/docs/ja/docs/tutorial/security/get-current-user.md
index 39b97cca5..60378fd98 100644
--- a/docs/ja/docs/tutorial/security/get-current-user.md
+++ b/docs/ja/docs/tutorial/security/get-current-user.md
@@ -2,7 +2,7 @@
äžã€åã®ç« ã§ã¯ãïŒäŸåæ§æ³šå
¥ã·ã¹ãã ã«åºã¥ããïŒã»ãã¥ãªãã£ã·ã¹ãã ã¯ã *path operation 颿°* ã« `str` ãšã㊠`token` ãäžããŠããŸãã:
-{* ../../docs_src/security/tutorial001_an_py39.py hl[12] *}
+{* ../../docs_src/security/tutorial001_an_py310.py hl[12] *}
ããããããã¯ãŸã ãããªã«æçšã§ã¯ãããŸããã
diff --git a/docs/ja/docs/tutorial/security/index.md b/docs/ja/docs/tutorial/security/index.md
index 14f2c8f44..b96021b7f 100644
--- a/docs/ja/docs/tutorial/security/index.md
+++ b/docs/ja/docs/tutorial/security/index.md
@@ -1,4 +1,4 @@
-# ã»ãã¥ãªãã£å
¥é
+# ã»ãã¥ãªãã£å
¥é { #security }
ã»ãã¥ãªãã£ãèªèšŒãèªå¯ãæ±ãã«ã¯å€ãã®æ¹æ³ããããŸãã
@@ -10,11 +10,11 @@
ãããããã®åã«ãããã€ãã®å°ããªæŠå¿µã確èªããŸãããã
-## ãæ¥ãã§ããïŒ
+## ãæ¥ãã§ããïŒ { #in-a-hurry }
ããããããã®çšèªã«èå³ããªãããŠãŒã¶ãŒåãšãã¹ã¯ãŒãã«åºã¥ãèªèšŒã§ã»ãã¥ãªãã£ã**ä»ãã**確ä¿ããå¿
èŠãããå Žåã¯ã次ã®ç« ã«é²ãã§ãã ããã
-## OAuth2
+## OAuth2 { #oauth2 }
OAuth2ã¯ãèªèšŒãšèªå¯ãåŠçããããã®ããã€ãã®æ¹æ³ãå®çŸ©ãã仿§ã§ãã
@@ -24,7 +24,7 @@ OAuth2ã¯ãèªèšŒãšèªå¯ãåŠçããããã®ããã€ãã®æ¹æ³ãå®
ãããããFacebookãGoogleãX (Twitter)ãGitHubã䜿ã£ãŠãã°ã€ã³ãã䜿çšãããã¹ãŠã®ã·ã¹ãã ã®èåŸã§äœ¿ãããŠããä»çµã¿ã§ãã
-### OAuth 1
+### OAuth 1 { #oauth-1 }
OAuth 1ãšãããã®ããããŸããããããã¯OAuth2ãšã¯å
šãç°ãªããéä¿¡ãã©ã®ããã«æå·åããããšãã仿§ãçŽæ¥çã«å«ãŸããŠãããããè€éãªãã®ãšãªã£ãŠããŸãã
@@ -38,7 +38,7 @@ OAuth2ã¯ãéä¿¡ãæå·åããæ¹æ³ãæå®ãããã¢ããªã±ãŒã·
///
-## OpenID Connect
+## OpenID Connect { #openid-connect }
OpenID Connectã¯ã**OAuth2**ãããŒã¹ã«ããå¥ã®ä»æ§ã§ãã
@@ -48,7 +48,7 @@ OpenID Connectã¯ã**OAuth2**ãããŒã¹ã«ããå¥ã®ä»æ§ã§ãã
ããããFacebookã®ãã°ã€ã³ã¯OpenID ConnectããµããŒãããŠããŸãããOAuth2ãç¬èªã«ã¢ã¬ã³ãžããŠããŸãã
-### OpenID (ãOpenID Connectãã§ã¯ãªã)
+### OpenID (ãOpenID Connectãã§ã¯ãªã) { #openid-not-openid-connect }
ãŸãããOpenIDããšãã仿§ããããŸãããããã¯ã**OpenID Connect**ãšåãããšã解決ããããšãããã®ã§ãããOAuth2ã«åºã¥ããŠããããã§ã¯ãããŸããã§ããã
@@ -56,7 +56,7 @@ OpenID Connectã¯ã**OAuth2**ãããŒã¹ã«ããå¥ã®ä»æ§ã§ãã
çŸåšã§ã¯ããŸãæ®åããŠããŸãããã䜿ãããŠãããŸããã
-## OpenAPI
+## OpenAPI { #openapi }
OpenAPIïŒä»¥åã¯SwaggerãšããŠç¥ãããŠããŸããïŒã¯ãAPIãæ§ç¯ããããã®ãªãŒãã³ãªä»æ§ã§ãïŒçŸåšã¯Linux Foundationã®äžéšã«ãªã£ãŠããŸãïŒã
@@ -97,7 +97,7 @@ GoogleãFacebookãX (Twitter)ãGitHubãªã©ãä»ã®èªèšŒ/èªå¯ãããã€
///
-## **FastAPI** ãŠãŒãã£ãªãã£
+## **FastAPI** ãŠãŒãã£ãªã㣠{ #fastapi-utilities }
FastAPI㯠`fastapi.security` ã¢ãžã¥ãŒã«ã®äžã§ããããã®ã»ãã¥ãªãã£ã¹ããŒã ããšã«ããã€ãã®ããŒã«ãæäŸãããããã®ã»ãã¥ãªãã£ã¡ã«ããºã ãç°¡åã«äœ¿çšã§ããããã«ããŸãã
diff --git a/docs/ja/docs/tutorial/security/oauth2-jwt.md b/docs/ja/docs/tutorial/security/oauth2-jwt.md
index 186936f1b..0d6be90a2 100644
--- a/docs/ja/docs/tutorial/security/oauth2-jwt.md
+++ b/docs/ja/docs/tutorial/security/oauth2-jwt.md
@@ -1,6 +1,6 @@
# ãã¹ã¯ãŒãïŒããã³ããã·ã¥åïŒã«ããOAuth2ãJWTããŒã¯ã³ã«ããBearer { #oauth2-with-password-and-hashing-bearer-with-jwt-tokens }
-ããã§ã»ãã¥ãªãã£ã®æµããå
šãŠããã£ãã®ã§ãJWTããŒã¯ã³ãšå®å
šãªãã¹ã¯ãŒãã®ããã·ã¥åã䜿çšããŠãå®éã«ã¢ããªã±ãŒã·ã§ã³ãå®å
šã«ããŠã¿ãŸãããã
+ããã§ã»ãã¥ãªãã£ã®æµããå
šãŠããã£ãã®ã§ãJWTããŒã¯ã³ãšå®å
šãªãã¹ã¯ãŒãã®ããã·ã¥åã䜿çšããŠãå®éã«ã¢ããªã±ãŒã·ã§ã³ãå®å
šã«ããŠã¿ãŸãããã
ãã®ã³ãŒãã¯ãã¢ããªã±ãŒã·ã§ã³ã§å®éã«äœ¿çšãããããã¹ã¯ãŒãããã·ã¥ãããŒã¿ããŒã¹ã«ä¿åãããšãã£ãçšéã«å©çšã§ããŸãã
@@ -116,7 +116,11 @@ pwdlibã¯bcryptããã·ã¥ã¢ã«ãŽãªãºã ããµããŒãããŠããŸãã
ããã«ããŠãŒã¶ãŒãèªèšŒããŠè¿ã颿°ãäœæããŸãã
-{* ../../docs_src/security/tutorial004_an_py310.py hl[8,49,56:57,60:61,70:76] *}
+{* ../../docs_src/security/tutorial004_an_py310.py hl[8,49,51,58:59,62:63,72:79] *}
+
+`authenticate_user` ãããŒã¿ããŒã¹ã«ååšããªããŠãŒã¶ãŒåã§åŒã³åºãããå Žåã§ãããããŒã®ããã·ã¥ã䜿ã£ãŠ `verify_password` ãå®è¡ããŸãã
+
+ããã«ããããŠãŒã¶ãŒåãæå¹ãã©ããã«é¢ããããšã³ããã€ã³ãã®å¿çæéãããããåãã«ãªããæ¢åã®ãŠãŒã¶ãŒåãåæããããã«æªçšãããããã¿ã€ãã³ã°æ»æãã鲿¢ã§ããŸãã
/// note | åè
@@ -152,7 +156,7 @@ JWTããŒã¯ã³ã®çœ²åã«äœ¿çšããã¢ã«ãŽãªãºã `"HS256"`ãæå®ã
æ°ããã¢ã¯ã»ã¹ããŒã¯ã³ãçæãããŠãŒãã£ãªãã£é¢æ°ãäœæããŸãã
-{* ../../docs_src/security/tutorial004_an_py310.py hl[4,7,13:15,29:31,79:87] *}
+{* ../../docs_src/security/tutorial004_an_py310.py hl[4,7,13:15,29:31,82:90] *}
## äŸåé¢ä¿ã®æŽæ° { #update-the-dependencies }
@@ -162,7 +166,7 @@ JWTããŒã¯ã³ã®çœ²åã«äœ¿çšããã¢ã«ãŽãªãºã `"HS256"`ãæå®ã
ããŒã¯ã³ãç¡å¹ãªå Žåã¯ãããã«HTTPãšã©ãŒãè¿ããŸãã
-{* ../../docs_src/security/tutorial004_an_py310.py hl[90:107] *}
+{* ../../docs_src/security/tutorial004_an_py310.py hl[93:110] *}
## `/token` *path operation* ã®æŽæ° { #update-the-token-path-operation }
@@ -170,7 +174,7 @@ JWTããŒã¯ã³ã®çœ²åã«äœ¿çšããã¢ã«ãŽãªãºã `"HS256"`ãæå®ã
å®éã®JWTã¢ã¯ã»ã¹ããŒã¯ã³ãäœæãããããè¿ããŸãã
-{* ../../docs_src/security/tutorial004_an_py310.py hl[118:133] *}
+{* ../../docs_src/security/tutorial004_an_py310.py hl[121:136] *}
### JWTã®ãsubjectã`sub` ã«ã€ããŠã®æè¡çãªè©³çް { #technical-details-about-the-jwt-subject-sub }
diff --git a/docs/ja/docs/tutorial/security/simple-oauth2.md b/docs/ja/docs/tutorial/security/simple-oauth2.md
new file mode 100644
index 000000000..c371b0acf
--- /dev/null
+++ b/docs/ja/docs/tutorial/security/simple-oauth2.md
@@ -0,0 +1,289 @@
+# ãã¹ã¯ãŒããšBearerã«ããã·ã³ãã«ãªOAuth2 { #simple-oauth2-with-password-and-bearer }
+
+åç« ããçºå±ãããŠãå®å
šãªã»ãã¥ãªãã£ãããŒã«å¿
èŠãªäžè¶³éšåã远å ããŠãããŸãã
+
+## `username` ãš `password` ãååŸãã { #get-the-username-and-password }
+
+`username` ãš `password` ãååŸããããã« **FastAPI** ã®ã»ãã¥ãªãã£ãŠãŒãã£ãªãã£ã䜿ããŸãã
+
+OAuth2 ã§ã¯ããpassword flowãïŒããã§äœ¿çšãããããŒïŒã䜿ãå Žåãã¯ã©ã€ã¢ã³ã/ãŠãŒã¶ãŒã¯ãã©ãŒã ããŒã¿ãšã㊠`username` ãš `password` ãã£ãŒã«ããéä¿¡ããå¿
èŠããããŸãã
+
+ãããããã£ãŒã«ãåã¯ãã®éãã§ãªããã°ãªããŸãããã€ãŸãã`user-name` ã `email` ã§ã¯åäœããŸããã
+
+ãã ããããã³ããšã³ãã§æçµãŠãŒã¶ãŒã«ã©ã衚瀺ãããã¯èªç±ã§ãã
+
+ãŸããããŒã¿ããŒã¹ã®ã¢ãã«ã§ã¯ä»»æã®å¥åã䜿ã£ãŠæ§ããŸããã
+
+ãããããã°ã€ã³çšã® path operation ã§ã¯ã仿§ãšã®äºææ§ãä¿ã€ïŒããšãã°çµã¿èŸŒã¿ã®APIããã¥ã¡ã³ãã·ã¹ãã ã䜿ããããã«ããïŒããã«ããããã®ååã䜿ãå¿
èŠããããŸãã
+
+ãŸãã仿§ã§ã¯ `username` ãš `password` ã¯ãã©ãŒã ããŒã¿ãšããŠéããªããã°ãªããªãïŒã€ãŸããããã§ã¯JSONã¯äœ¿ããªãïŒããšãå®ããããŠããŸãã
+
+### `scope` { #scope }
+
+仿§ã§ã¯ãã¯ã©ã€ã¢ã³ãã¯è¿œå ã®ãã©ãŒã ãã£ãŒã«ãã`scope`ããéãããšãã§ãããšãæžãããŠããŸãã
+
+ãã©ãŒã ãã£ãŒã«ãå㯠`scope`ïŒåæ°åœ¢ïŒã§ããã宿
ã¯ã¹ããŒã¹åºåãã®ãã¹ã³ãŒããæååã䞊ã¹ãé·ãæååã§ãã
+
+åãã¹ã³ãŒããã¯ïŒã¹ããŒã¹ãå«ãŸãªãïŒåãªãæååã§ãã
+
+éåžžãç¹å®ã®ã»ãã¥ãªãã£æš©éã宣èšããããã«äœ¿ãããŸããäŸãã°:
+
+- `users:read` ã `users:write` ã¯ããããäŸã§ãã
+- `instagram_basic` 㯠Facebook / Instagram ã§äœ¿ãããŸãã
+- `https://www.googleapis.com/auth/drive` 㯠Google ã§äœ¿ãããŸãã
+
+/// info | æ
å ±
+
+OAuth2 ã«ããããã¹ã³ãŒããã¯ãèŠæ±ãããç¹å®ã®æš©éã衚ãåãªãæååã§ãã
+
+`:` ã®ãããªä»ã®æåãå«ãã§ããŠããURL ã§ãã£ãŠãæ§ããŸããã
+
+ãããã®è©³çްã¯å®è£
äŸåã§ãã
+
+OAuth2 ã«ãšã£ãŠã¯åãªãæååã§ãã
+
+///
+
+## `username` ãš `password` ãååŸããã³ãŒã { #code-to-get-the-username-and-password }
+
+ã§ã¯ããããåŠçããããã« **FastAPI** ãæäŸãããŠãŒãã£ãªãã£ã䜿ããŸãããã
+
+### `OAuth2PasswordRequestForm` { #oauth2passwordrequestform }
+
+ãŸãã`OAuth2PasswordRequestForm` ãã€ã³ããŒããã`/token` ã® path operation ã« `Depends` ã§äŸåé¢ä¿ãšããŠäœ¿ããŸã:
+
+{* ../../docs_src/security/tutorial003_an_py310.py hl[4,78] *}
+
+`OAuth2PasswordRequestForm` ã¯æ¬¡ã®ãã©ãŒã ããã£ã宣èšããã¯ã©ã¹äŸåé¢ä¿ã§ã:
+
+- `username`
+- `password`
+- ã¹ããŒã¹åºåãã®æååã§æ§æãããããªãã·ã§ã³ã® `scope` ãã£ãŒã«ã
+- ãªãã·ã§ã³ã® `grant_type`
+
+/// tip | è±ç¥è
+
+OAuth2 ã®ä»æ§ã§ã¯ãåºå®å€ `password` ãæã€ãã£ãŒã«ã `grant_type` ãå®éã«ã¯å¿
é ã§ããã`OAuth2PasswordRequestForm` ã¯ããã匷å¶ããŸããã
+
+匷å¶ãããå Žåã¯ã`OAuth2PasswordRequestForm` ã®ä»£ããã« `OAuth2PasswordRequestFormStrict` ã䜿ã£ãŠãã ããã
+
+///
+
+- ãªãã·ã§ã³ã® `client_id`ïŒãã®äŸã§ã¯äžèŠïŒ
+- ãªãã·ã§ã³ã® `client_secret`ïŒãã®äŸã§ã¯äžèŠïŒ
+
+/// info | æ
å ±
+
+`OAuth2PasswordRequestForm` ã¯ã`OAuth2PasswordBearer` ã®ããã« **FastAPI** ã«ãšã£ãŠç¹å¥ãªã¯ã©ã¹ã§ã¯ãããŸããã
+
+`OAuth2PasswordBearer` 㯠**FastAPI** ã«ã»ãã¥ãªãã£ã¹ããŒã ã§ããããšãèªèãããŸãããã®ãã OpenAPI ã«ãã®ããã«è¿œå ãããŸãã
+
+äžæ¹ã`OAuth2PasswordRequestForm` ã¯ãããªãèªèº«ã§ãæžãããããªåãªãã¯ã©ã¹äŸåé¢ä¿ã§ãããçŽæ¥ `Form` ãã©ã¡ãŒã¿ã宣èšããããšãã§ããŸãã
+
+ãã ãäžè¬çãªãŠãŒã¹ã±ãŒã¹ãªã®ã§ãç°¡åã«äœ¿ãããã **FastAPI** ãçŽæ¥æäŸããŠããŸãã
+
+///
+
+### ãã©ãŒã ããŒã¿ã®å©çš { #use-the-form-data }
+
+/// tip | è±ç¥è
+
+äŸåé¢ä¿ã¯ã©ã¹ `OAuth2PasswordRequestForm` ã®ã€ã³ã¹ã¿ã³ã¹ã¯ãã¹ããŒã¹åºåãã®é·ãæååãæã€ `scope` 屿§ã¯æã¡ãŸããã代ããã«ãéãããŠããåã¹ã³ãŒãã®å®éã®æååãªã¹ããæ ŒçŽãã `scopes` 屿§ãæã¡ãŸãã
+
+ãã®äŸã§ã¯ `scopes` ã¯äœ¿ããŸããããå¿
èŠãªããã®æ©èœãå©çšã§ããŸãã
+
+///
+
+次ã«ããã©ãŒã ãã£ãŒã«ãã® `username` ã䜿ã£ãŠïŒç䌌ã®ïŒããŒã¿ããŒã¹ãããŠãŒã¶ãŒããŒã¿ãååŸããŸãã
+
+ãã®ãŠãŒã¶ãŒãååšããªãå Žåã¯ããIncorrect username or passwordããšãããšã©ãŒãè¿ããŸãã
+
+ãšã©ãŒã«ã¯ `HTTPException` äŸå€ã䜿ããŸã:
+
+{* ../../docs_src/security/tutorial003_an_py310.py hl[3,79:81] *}
+
+### ãã¹ã¯ãŒãã®ãã§ã㯠{ #check-the-password }
+
+ãã®æç¹ã§ããŒã¿ããŒã¹ãããŠãŒã¶ãŒããŒã¿ã¯ååŸã§ããŸãããããŸã ãã¹ã¯ãŒãã確èªããŠããŸããã
+
+ãŸãããã®ããŒã¿ã Pydantic ã® `UserInDB` ã¢ãã«ã«å
¥ããŸãã
+
+ãã¬ãŒã³ããã¹ãã®ãã¹ã¯ãŒããä¿åããŠã¯ãããªãã®ã§ãïŒç䌌ã®ïŒãã¹ã¯ãŒãããã·ã¥åã·ã¹ãã ã䜿ããŸãã
+
+ãã¹ã¯ãŒããäžèŽããªããã°ãåããšã©ãŒãè¿ããŸãã
+
+#### ãã¹ã¯ãŒãããã·ã¥å { #password-hashing }
+
+ãããã·ã¥åããšã¯ãããå
容ïŒããã§ã¯ãã¹ã¯ãŒãïŒããä¹±éã«èŠãããã€ãåïŒåãªãæååïŒã«å€æããããšãæããŸãã
+
+ãŸã£ããåãå
容ïŒãŸã£ããåããã¹ã¯ãŒãïŒãæž¡ããšãæ¯åãŸã£ããåãä¹±éãªæååãåŸãããŸãã
+
+ãããããã®ä¹±éãªæååããå
ã®ãã¹ã¯ãŒãã«æ»ãããšã¯ã§ããŸããã
+
+##### ãªããã¹ã¯ãŒããããã·ã¥åããã®ã { #why-use-password-hashing }
+
+ããããŒã¿ããŒã¹ãçãŸããŠããçãã åŽãæã«ããã®ã¯ãŠãŒã¶ãŒã®ãã¬ãŒã³ããã¹ãã®ãã¹ã¯ãŒãã§ã¯ãªããããã·ã¥ã ãã§ãã
+
+ãããã£ãŠãçãã åŽã¯åããã¹ã¯ãŒããå¥ã®ã·ã¹ãã ã§è©Šãããšãã§ããŸããïŒå€ãã®ãŠãŒã¶ãŒãããããå Žæã§åããã¹ã¯ãŒãã䜿ã£ãŠãããããããã¯å±éºã«ãªãåŸãŸãïŒã
+
+{* ../../docs_src/security/tutorial003_an_py310.py hl[82:85] *}
+
+#### `**user_dict` ã«ã€ã㊠{ #about-user-dict }
+
+`UserInDB(**user_dict)` ã¯æ¬¡ãæå³ããŸã:
+
+`user_dict` ã®ããŒãšå€ãããã®ãŸãŸããŒã¯ãŒãåŒæ°ãšããŠæž¡ããŸããã€ãŸã次ãšåçã§ã:
+
+```Python
+UserInDB(
+ username = user_dict["username"],
+ email = user_dict["email"],
+ full_name = user_dict["full_name"],
+ disabled = user_dict["disabled"],
+ hashed_password = user_dict["hashed_password"],
+)
+```
+
+/// info | æ
å ±
+
+`**user_dict` ã®ããå®å
šãªè§£èª¬ã¯ã[**远å ã¢ãã«**ã®ããã¥ã¡ã³ã](../extra-models.md#about-user-in-dict){.internal-link target=_blank}ãåç
§ããŠãã ããã
+
+///
+
+## ããŒã¯ã³ãè¿ã { #return-the-token }
+
+`token` ãšã³ããã€ã³ãã®ã¬ã¹ãã³ã¹ã¯ JSON ãªããžã§ã¯ãã§ãªããã°ãªããŸããã
+
+`token_type` ãå«ããå¿
èŠããããŸããããã§ã¯ãBearerãããŒã¯ã³ã䜿ãã®ã§ãããŒã¯ã³ã¿ã€ãã¯ã`bearer`ãã§ãã
+
+ãã㊠`access_token` ãå«ãããã®äžã«ã¢ã¯ã»ã¹ããŒã¯ã³ã®æååãå
¥ããŸãã
+
+ãã®åçŽãªäŸã§ã¯ãå®å
šã«å®å
šã§ã¯ãããŸããããããŒã¯ã³ãšããŠåã `username` ããã®ãŸãŸè¿ããŸãã
+
+/// tip | è±ç¥è
+
+次ã®ç« ã§ã¯ããã¹ã¯ãŒãããã·ã¥åãš JWT ããŒã¯ã³ã䜿ã£ãæ¬åœã«å®å
šãªå®è£
ãèŠãŸãã
+
+ãããä»ã¯ãå¿
èŠãªç¹å®ã®è©³çްã«éäžããŸãããã
+
+///
+
+{* ../../docs_src/security/tutorial003_an_py310.py hl[87] *}
+
+/// tip | è±ç¥è
+
+仿§ã«åŸããšããã®äŸãšåãã `access_token` ãš `token_type` ãå«ã JSON ãè¿ãå¿
èŠããããŸãã
+
+ããã¯ããªãèªèº«ã®ã³ãŒãã§å®è£
ããå¿
èŠãããããããã®JSONããŒã䜿ã£ãŠããããšã確èªããŠãã ããã
+
+仿§ã«æºæ ããããã«ãããªãèªèº«ãæ£ããèŠããŠå®è£
ãã¹ãããšã¯ãã»ãŒããã ãã§ãã
+
+ãã以å€ã¯ **FastAPI** ãé¢åãèŠãŠãããŸãã
+
+///
+
+## äŸåé¢ä¿ã®æŽæ° { #update-the-dependencies }
+
+ããã§äŸåé¢ä¿ãæŽæ°ããŸãã
+
+ã¢ã¯ãã£ããªãŠãŒã¶ãŒã®å Žåã«ã®ã¿ `current_user` ãååŸããããšããŸãã
+
+ããã§ã`get_current_user` ãäŸåé¢ä¿ãšããŠå©çšãã远å ã®äŸåé¢ä¿ `get_current_active_user` ãäœæããŸãã
+
+ããã2ã€ã®äŸåé¢ä¿ã¯ããŠãŒã¶ãŒãååšããªãããŸãã¯éã¢ã¯ãã£ãã§ããå Žåã«ãHTTPãšã©ãŒãè¿ãã ãã§ãã
+
+ãããã£ãŠããšã³ããã€ã³ãã§ã¯ããŠãŒã¶ãŒãååšããæ£ããèªèšŒããããã€ã¢ã¯ãã£ãã§ããå Žåã«ã®ã¿ããŠãŒã¶ãŒãååŸããŸã:
+
+{* ../../docs_src/security/tutorial003_an_py310.py hl[58:66,69:74,94] *}
+
+/// info | æ
å ±
+
+ããã§è¿ããŠããå€ã `Bearer` ã®è¿œå ããã㌠`WWW-Authenticate` ã仿§ã®äžéšã§ãã
+
+HTTPïŒãšã©ãŒïŒã¹ããŒã¿ã¹ã³ãŒã 401ãUNAUTHORIZEDãã¯ã`WWW-Authenticate` ããããŒãè¿ãããšã«ãªã£ãŠããŸãã
+
+ãã¢ã©ãŒããŒã¯ã³ïŒä»åã®ã±ãŒã¹ïŒã®å Žåããã®ããããŒã®å€ã¯ `Bearer` ã§ããã¹ãã§ãã
+
+å®éã®ãšããããã®è¿œå ããããŒãçç¥ããŠãåäœã¯ããŸãã
+
+ãããã仿§ã«æºæ ããããã«ããã§ã¯ä»äžããŠããŸãã
+
+ãŸããïŒä»ãŸãã¯å°æ¥ïŒãããæ³å®ããŠå©çšããããŒã«ãããããããããããªãããŠãŒã¶ãŒã«ãšã£ãŠæçšã«ãªãå¯èœæ§ããããŸãã
+
+ãããæšæºã®å©ç¹ã§ãâŠã
+
+///
+
+## åäœç¢ºèª { #see-it-in-action }
+
+ã€ã³ã¿ã©ã¯ãã£ãããã¥ã¡ã³ããéããŸã: http://127.0.0.1:8000/docsã
+
+### èªèšŒ { #authenticate }
+
+ãAuthorizeããã¿ã³ãã¯ãªãã¯ããŸãã
+
+次ã®èªèšŒæ
å ±ã䜿ããŸã:
+
+User: `johndoe`
+
+Password: `secret`
+
+
+
+ã·ã¹ãã ã§èªèšŒããããšã次ã®ããã«è¡šç€ºãããŸã:
+
+
+
+### èªåã®ãŠãŒã¶ãŒããŒã¿ãååŸ { #get-your-own-user-data }
+
+`GET` ã® path `/users/me` ã䜿ããŸãã
+
+次ã®ãããªãŠãŒã¶ãŒããŒã¿ãååŸã§ããŸã:
+
+```JSON
+{
+ "username": "johndoe",
+ "email": "johndoe@example.com",
+ "full_name": "John Doe",
+ "disabled": false,
+ "hashed_password": "fakehashedsecret"
+}
+```
+
+
+
+é åã¢ã€ã³ã³ãã¯ãªãã¯ããŠãã°ã¢ãŠãããåãæäœãå床詊ããšã次ã®ãã㪠HTTP 401 ãšã©ãŒã«ãªããŸã:
+
+```JSON
+{
+ "detail": "Not authenticated"
+}
+```
+
+### éã¢ã¯ãã£ããŠãŒã¶ãŒ { #inactive-user }
+
+ä»åºŠã¯éã¢ã¯ãã£ããªãŠãŒã¶ãŒã§è©ŠããŠã¿ãŸããæ¬¡ã§èªèšŒããŠãã ãã:
+
+User: `alice`
+
+Password: `secret2`
+
+ãã㊠`GET` ã® path `/users/me` ã䜿ããŸãã
+
+次ã®ãããªãInactive userããšã©ãŒã«ãªããŸã:
+
+```JSON
+{
+ "detail": "Inactive user"
+}
+```
+
+## ãŸãšã { #recap }
+
+ããã§ãAPI ã®ããã« `username` ãš `password` ã«åºã¥ãå®å
šãªã»ãã¥ãªãã£ã·ã¹ãã ãå®è£
ããããã®éå
·ãæããŸããã
+
+ãããã®éå
·ã䜿ãã°ãä»»æã®ããŒã¿ããŒã¹ãä»»æã®ãŠãŒã¶ãŒ/ããŒã¿ã¢ãã«ãšäºææ§ã®ããã»ãã¥ãªãã£ã·ã¹ãã ãæ§ç¯ã§ããŸãã
+
+ãã ããå®éã«ã¯ãŸã ãå®å
šãã§ã¯ãããŸããã
+
+次ã®ç« ã§ã¯ãå®å
šãªãã¹ã¯ãŒãããã·ã¥ã©ã€ãã©ãªãš JWT ããŒã¯ã³ã®äœ¿ãæ¹ãèŠãŠãããŸãã
diff --git a/docs/ja/docs/tutorial/sql-databases.md b/docs/ja/docs/tutorial/sql-databases.md
new file mode 100644
index 000000000..930e433de
--- /dev/null
+++ b/docs/ja/docs/tutorial/sql-databases.md
@@ -0,0 +1,357 @@
+# SQLïŒãªã¬ãŒã·ã§ãã«ïŒããŒã¿ããŒã¹ { #sql-relational-databases }
+
+FastAPI 㯠SQLïŒãªã¬ãŒã·ã§ãã«ïŒããŒã¿ããŒã¹ã®äœ¿çšãå¿
é ã«ã¯ããŸãããå¿
èŠã§ããã°ãä»»æã®ããŒã¿ããŒã¹ã䜿çšã§ããŸãã
+
+ããã§ã¯ SQLModel ã䜿ã£ãäŸãèŠãŠãããŸãã
+
+SQLModel 㯠SQLAlchemy ãš Pydantic ã®äžã«æ§ç¯ãããŠããŸããFastAPI ãšåãäœè
ã«ãããSQL ããŒã¿ããŒã¹ã䜿ãå¿
èŠããã FastAPI ã¢ããªã«æé©ã«ãªãããã«äœãããŠããŸãã
+
+/// tip | è±ç¥è
+
+ä»ã®ä»»æã® SQL ããã㯠NoSQL ã®ããŒã¿ããŒã¹ã©ã€ãã©ãªïŒå Žåã«ãã£ãŠã¯ "ORMs" ãšåŒã°ããŸãïŒã䜿ãããšãã§ããŸããFastAPI ã¯äœã匷å¶ããŸãããð
+
+///
+
+SQLModel 㯠SQLAlchemy ãããŒã¹ã«ããŠãããããSQLAlchemy ããµããŒãããä»»æã®ããŒã¿ããŒã¹ïŒSQLModel ããããµããŒããããŸãïŒãç°¡åã«äœ¿ããŸããäŸãã°:
+
+* PostgreSQL
+* MySQL
+* SQLite
+* Oracle
+* Microsoft SQL Server ãªã©
+
+ãã®äŸã§ã¯ãåäžãã¡ã€ã«ã§åäœããPython ã«çµ±åãµããŒãããããããSQLite ã䜿ããŸããã€ãŸãããã®äŸããã®ãŸãŸã³ããŒããŠå®è¡ã§ããŸãã
+
+æ¬çªã¢ããªã§ã¯ãPostgreSQL ã®ãããªããŒã¿ããŒã¹ãµãŒããŒã䜿ããããªããããããŸããã
+
+/// tip | è±ç¥è
+
+ããã³ããšã³ãããã®ä»ã®ããŒã«ãå«ããFastAPI ãš PostgreSQL ã®å
¬åŒãããžã§ã¯ããžã§ãã¬ãŒã¿ãŒããããŸã: https://github.com/fastapi/full-stack-fastapi-template
+
+///
+
+ããã¯ãšãŠãã·ã³ãã«ã§çããã¥ãŒããªã¢ã«ã§ããããŒã¿ããŒã¹ã SQLãããé«åºŠãªæ©èœã«ã€ããŠåŠã³ããå Žåã¯ãSQLModel ã®ããã¥ã¡ã³ããã芧ãã ããã
+
+## `SQLModel` ã®ã€ã³ã¹ããŒã« { #install-sqlmodel }
+
+ãŸã㯠[ä»®æ³ç°å¢](../virtual-environments.md){.internal-link target=_blank} ãäœæã»æå¹åãã`sqlmodel` ãã€ã³ã¹ããŒã«ããŸã:
+
+
+
+