]> git.ipfire.org Git - thirdparty/fastapi/fastapi.git/commitdiff
🌐 Update translations for ja (update-all) (#14916)
authorMotov Yurii <109919500+YuriiMotov@users.noreply.github.com>
Fri, 13 Feb 2026 15:24:30 +0000 (16:24 +0100)
committerGitHub <noreply@github.com>
Fri, 13 Feb 2026 15:24:30 +0000 (16:24 +0100)
* Update all

* ðŸŽš Auto format

* Add missing

* ðŸŽš Auto format

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
103 files changed:
docs/ja/docs/_llm-test.md [new file with mode: 0644]
docs/ja/docs/about/index.md [new file with mode: 0644]
docs/ja/docs/advanced/additional-responses.md [new file with mode: 0644]
docs/ja/docs/advanced/additional-status-codes.md
docs/ja/docs/advanced/advanced-dependencies.md [new file with mode: 0644]
docs/ja/docs/advanced/advanced-python-types.md [new file with mode: 0644]
docs/ja/docs/advanced/async-tests.md [new file with mode: 0644]
docs/ja/docs/advanced/behind-a-proxy.md [new file with mode: 0644]
docs/ja/docs/advanced/custom-response.md
docs/ja/docs/advanced/dataclasses.md [new file with mode: 0644]
docs/ja/docs/advanced/events.md [new file with mode: 0644]
docs/ja/docs/advanced/generate-clients.md [new file with mode: 0644]
docs/ja/docs/advanced/middleware.md [new file with mode: 0644]
docs/ja/docs/advanced/openapi-callbacks.md [new file with mode: 0644]
docs/ja/docs/advanced/openapi-webhooks.md [new file with mode: 0644]
docs/ja/docs/advanced/path-operation-advanced-configuration.md
docs/ja/docs/advanced/response-change-status-code.md [new file with mode: 0644]
docs/ja/docs/advanced/response-cookies.md [new file with mode: 0644]
docs/ja/docs/advanced/response-directly.md
docs/ja/docs/advanced/response-headers.md [new file with mode: 0644]
docs/ja/docs/advanced/security/http-basic-auth.md [new file with mode: 0644]
docs/ja/docs/advanced/security/index.md [new file with mode: 0644]
docs/ja/docs/advanced/security/oauth2-scopes.md [new file with mode: 0644]
docs/ja/docs/advanced/settings.md [new file with mode: 0644]
docs/ja/docs/advanced/sub-applications.md [new file with mode: 0644]
docs/ja/docs/advanced/templates.md [new file with mode: 0644]
docs/ja/docs/advanced/testing-dependencies.md [new file with mode: 0644]
docs/ja/docs/advanced/testing-events.md [new file with mode: 0644]
docs/ja/docs/advanced/testing-websockets.md [new file with mode: 0644]
docs/ja/docs/advanced/using-request-directly.md [new file with mode: 0644]
docs/ja/docs/advanced/websockets.md
docs/ja/docs/advanced/wsgi.md [new file with mode: 0644]
docs/ja/docs/alternatives.md
docs/ja/docs/async.md
docs/ja/docs/deployment/cloud.md [new file with mode: 0644]
docs/ja/docs/deployment/concepts.md
docs/ja/docs/deployment/docker.md
docs/ja/docs/deployment/fastapicloud.md [new file with mode: 0644]
docs/ja/docs/deployment/https.md
docs/ja/docs/deployment/manually.md
docs/ja/docs/environment-variables.md
docs/ja/docs/fastapi-cli.md [new file with mode: 0644]
docs/ja/docs/features.md
docs/ja/docs/help-fastapi.md
docs/ja/docs/history-design-future.md
docs/ja/docs/how-to/authentication-error-status-code.md [new file with mode: 0644]
docs/ja/docs/how-to/conditional-openapi.md
docs/ja/docs/how-to/configure-swagger-ui.md [new file with mode: 0644]
docs/ja/docs/how-to/custom-docs-ui-assets.md [new file with mode: 0644]
docs/ja/docs/how-to/custom-request-and-route.md [new file with mode: 0644]
docs/ja/docs/how-to/extending-openapi.md [new file with mode: 0644]
docs/ja/docs/how-to/general.md [new file with mode: 0644]
docs/ja/docs/how-to/graphql.md [new file with mode: 0644]
docs/ja/docs/how-to/index.md [new file with mode: 0644]
docs/ja/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md [new file with mode: 0644]
docs/ja/docs/how-to/separate-openapi-schemas.md [new file with mode: 0644]
docs/ja/docs/how-to/testing-database.md [new file with mode: 0644]
docs/ja/docs/index.md
docs/ja/docs/python-types.md
docs/ja/docs/resources/index.md [new file with mode: 0644]
docs/ja/docs/translation-banner.md [new file with mode: 0644]
docs/ja/docs/tutorial/background-tasks.md
docs/ja/docs/tutorial/bigger-applications.md [new file with mode: 0644]
docs/ja/docs/tutorial/body-multiple-params.md
docs/ja/docs/tutorial/body-nested-models.md
docs/ja/docs/tutorial/body-updates.md
docs/ja/docs/tutorial/body.md
docs/ja/docs/tutorial/cookie-param-models.md
docs/ja/docs/tutorial/cors.md
docs/ja/docs/tutorial/debugging.md
docs/ja/docs/tutorial/dependencies/classes-as-dependencies.md
docs/ja/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md
docs/ja/docs/tutorial/dependencies/dependencies-with-yield.md
docs/ja/docs/tutorial/dependencies/global-dependencies.md [new file with mode: 0644]
docs/ja/docs/tutorial/dependencies/index.md
docs/ja/docs/tutorial/dependencies/sub-dependencies.md
docs/ja/docs/tutorial/extra-models.md
docs/ja/docs/tutorial/first-steps.md
docs/ja/docs/tutorial/handling-errors.md
docs/ja/docs/tutorial/header-param-models.md [new file with mode: 0644]
docs/ja/docs/tutorial/metadata.md
docs/ja/docs/tutorial/middleware.md
docs/ja/docs/tutorial/path-operation-configuration.md
docs/ja/docs/tutorial/path-params-numeric-validations.md
docs/ja/docs/tutorial/path-params.md
docs/ja/docs/tutorial/query-params-str-validations.md
docs/ja/docs/tutorial/query-params.md
docs/ja/docs/tutorial/request-files.md [new file with mode: 0644]
docs/ja/docs/tutorial/request-form-models.md [new file with mode: 0644]
docs/ja/docs/tutorial/request-forms-and-files.md
docs/ja/docs/tutorial/request-forms.md
docs/ja/docs/tutorial/response-model.md
docs/ja/docs/tutorial/response-status-code.md
docs/ja/docs/tutorial/schema-extra-example.md
docs/ja/docs/tutorial/security/first-steps.md
docs/ja/docs/tutorial/security/get-current-user.md
docs/ja/docs/tutorial/security/index.md
docs/ja/docs/tutorial/security/oauth2-jwt.md
docs/ja/docs/tutorial/security/simple-oauth2.md [new file with mode: 0644]
docs/ja/docs/tutorial/sql-databases.md [new file with mode: 0644]
docs/ja/docs/tutorial/static-files.md
docs/ja/docs/tutorial/testing.md
docs/ja/docs/virtual-environments.md

diff --git a/docs/ja/docs/_llm-test.md b/docs/ja/docs/_llm-test.md
new file mode 100644 (file)
index 0000000..b3d9fc2
--- /dev/null
@@ -0,0 +1,503 @@
+# LLM ãƒ†ã‚¹ãƒˆãƒ•ァむル { #llm-test-file }
+
+このドキュメントは、ドキュメントを翻蚳する <abbr title="Large Language Model - å€§èŠæš¡èš€èªžãƒ¢ãƒ‡ãƒ«">LLM</abbr> ãŒã€`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 ãƒ—ロンプトず蚀語固有プロンプトが最良であるこずを意味したす時々いく぀かランダムに芋える倉曎を行うこずがありたす。理由は <a href="https://doublespeak.chat/#/handbook#deterministic-output" class="external-link" target="_blank">LLM ã¯æ±ºå®šè«–的アルゎリズムではない</a> ãŸã‚ã§ã™ïŒ‰ã€‚
+
+テスト内容:
+
+## ã‚³ãƒŒãƒ‰ã‚¹ãƒ‹ãƒšãƒƒãƒˆ { #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
+$ <font color="#4E9A06">fastapi</font> run <u style="text-decoration-style:solid">main.py</u>
+<span style="background-color:#009485"><font color="#D3D7CF"> FastAPI </font></span>  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}
+* <a href="https://sqlmodel.tiangolo.com/" class="external-link" target="_blank">倖郚リンク</a>
+* <a href="https://fastapi.tiangolo.com/css/styles.css" class="external-link" target="_blank">スタむルぞのリンク</a>
+* <a href="https://fastapi.tiangolo.com/js/logic.js" class="external-link" target="_blank">スクリプトぞのリンク</a>
+* <a href="https://fastapi.tiangolo.com/img/foo.jpg" class="external-link" target="_blank">画像ぞのリンク</a>
+
+リンクのテキストは翻蚳し、リンク先のアドレスは翻蚳版を指すようにしおください:
+
+* <a href="https://fastapi.tiangolo.com/ja/" class="external-link" target="_blank">FastAPI ãƒªãƒ³ã‚¯</a>
+
+////
+
+//// tab | æƒ…å ±
+
+リンクのテキストは翻蚳し、アドレスは倉曎しないでください。䟋倖は、FastAPI ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®ãƒšãƒŒã‚žãžã®çµ¶å¯Ÿ URL ã§ã™ã€‚その堎合は翻蚳版ぞのリンクにしたす。
+
+`scripts/translate.py` ã® general ãƒ—ロンプト内「### Links」の節を参照しおください。
+
+////
+
+## HTML "abbr" èŠçŽ  { #html-abbr-elements }
+
+//// tab | ãƒ†ã‚¹ãƒˆ
+
+ここでは HTML ã® "abbr" èŠçŽ ã§åŒ…ãŸã‚ŒãŸã‚‚ã®ã‚’ã„ãã€ã‹ç€ºã—ãŸã™ïŒˆã„ãã€ã‹ã¯æž¶ç©ºã§ã™ïŒ‰:
+
+### abbr ãŒå®Œå…šãªèªžå¥ã‚’瀺す { #the-abbr-gives-a-full-phrase }
+
+* <abbr title="Getting Things Done - ä»•事を成し遂げるこず">GTD</abbr>
+* <abbr title="less than - ã‚ˆã‚Šå°ã•い"><code>lt</code></abbr>
+* <abbr title="XML Web Token - XML ã‚Šã‚§ãƒ–トヌクン">XWT</abbr>
+* <abbr title="Parallel Server Gateway Interface - äžŠåˆ—サヌバヌゲヌトりェむむンタヌフェヌス">PSGI</abbr>
+
+### abbr ãŒå®Œå…šãªèªžå¥ãšèª¬æ˜Žã‚’瀺す { #the-abbr-gives-a-full-phrase-and-an-explanation }
+
+* <abbr title="Mozilla Developer Network - Mozilla é–‹ç™ºè€…ネットワヌク: é–‹ç™ºè€…向けドキュメント、Firefox ã®é–‹ç™ºå…ƒãŒåŸ·ç­†">MDN</abbr>
+* <abbr title="Input/Output - å…¥å‡ºåŠ›: ãƒ‡ã‚£ã‚¹ã‚¯ã®èª­ã¿æ›žãã€ãƒãƒƒãƒˆãƒ¯ãƒŒã‚¯é€šä¿¡ã€‚">I/O</abbr>.
+
+////
+
+//// tab | æƒ…å ±
+
+"abbr" èŠçŽ ã® "title" å±žæ€§ã¯ç‰¹å®šã®æŒ‡ç€ºã«åŸ“っお翻蚳したす。
+
+翻蚳は、英語の語を説明するために独自の "abbr" èŠçŽ ã‚’è¿œåŠ ã—ãŠã‚‚ã‚ˆãã€LLM ã¯ãã‚Œã‚‰ã‚’削陀しおはいけたせん。
+
+`scripts/translate.py` ã® general ãƒ—ロンプト内「### HTML abbr elements」の節を参照しおください。
+
+////
+
+## HTML "dfn" èŠçŽ  { #html-dfn-elements }
+
+* <dfn title="ある方法で接続・連携しお動䜜するよう構成された耇数のマシンの集合">クラスタヌ</dfn>
+* <dfn title="入力局ず出力局の間に倚数の隠れ局を持぀人工ニュヌラルネットワヌクを甚いる機械孊習の手法で、その内郚構造を包括的に圢成する">ディヌプラヌニング</dfn>
+
+## èŠ‹å‡ºã— { #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 (file)
index 0000000..b099df7
--- /dev/null
@@ -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 (file)
index 0000000..4c44257
--- /dev/null
@@ -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 ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã«è¡šç€ºã•れたす:
+
+<img src="/img/tutorial/additional-responses/image01.png">
+
+## äº‹å‰å®šçŸ©ãƒ¬ã‚¹ãƒãƒ³ã‚¹ãšã‚«ã‚¹ã‚¿ãƒ ã®çµ„み合わせ { #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 ä»•様の次のセクションを参照しおください:
+
+- <a href="https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#responses-object" class="external-link" target="_blank">OpenAPI ã® Responses Object</a>。ここには `Response Object` ãŒå«ãŸã‚ŒãŸã™ã€‚
+- <a href="https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#response-object" class="external-link" target="_blank">OpenAPI ã® Response Object</a>。`responses` ãƒ‘ラメヌタ内の各レスポンスに、ここで定矩されおいる芁玠を盎接含められたす。`description`、`headers`、`content`ここで異なるメディアタむプや JSON Schema ã‚’宣蚀したす、`links` ãªã©ã€‚
index 14b7e8ba87cf14d957f50d6315fa29c78d229719..fdac52e837f354dba1af0b3413661e1aac0e27c0 100644 (file)
@@ -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 (file)
index 0000000..d38ce54
--- /dev/null
@@ -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` ã‚’持぀䟝存関係の早期クロヌズが有益かを説明しお、<a href="https://github.com/fastapi/fastapi/discussions/new?category=questions" class="external-link" target="_blank">GitHub Discussion ã®è³ªå•</a>を䜜成しおください。
+
+`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 (file)
index 0000000..b4409bc
--- /dev/null
@@ -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 (file)
index 0000000..067e9cc
--- /dev/null
@@ -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` ã¯ <a href="https://www.python-httpx.org" class="external-link" target="_blank">HTTPX</a> ã‚’基に䜜られおおり、幞いなこずに 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 }
+
+テストはい぀も通り次で実行できたす:
+
+<div class="termy">
+
+```console
+$ pytest
+
+---> 100%
+```
+
+</div>
+
+## è©³çް { #in-detail }
+
+マヌカヌ `@pytest.mark.anyio` ã¯ã€ã“のテスト関数を非同期で呌び出すべきであるこずを pytest ã«äŒãˆãŸã™:
+
+{* ../../docs_src/async_tests/app_a_py310/test_main.py hl[7] *}
+
+/// tip | è±†çŸ¥è­˜
+
+`TestClient` ã‚’䜿っおいたずきず異なり、テスト関数は `def` ã§ã¯ãªã `async def` ã«ãªã£ãŠã„る点に泚意しおください。
+
+///
+
+次に、アプリを枡しお `AsyncClient` ã‚’䜜成し、`await` ã‚’䜿っお非同期リク゚ストを送信できたす。
+
+{* ../../docs_src/async_tests/app_a_py310/test_main.py hl[9:12] *}
+
+これは次ず同等です:
+
+```Python
+response = client.get('/')
+```
+
+...これたでは `TestClient` ã§ãƒªã‚¯ã‚šã‚¹ãƒˆã‚’送っおいたした。
+
+/// tip | è±†çŸ¥è­˜
+
+新しい `AsyncClient` ã§ã¯ async/await ã‚’䜿っおいる点に泚意しおください。リク゚ストは非同期です。
+
+///
+
+/// warning | æ³šæ„
+
+アプリケヌションが lifespan ã‚€ãƒ™ãƒ³ãƒˆã«äŸå­˜ã—おいる堎合、`AsyncClient` ã¯ãã‚Œã‚‰ã®ã‚€ãƒ™ãƒ³ãƒˆã‚’トリガヌしたせん。確実にトリガヌするには、<a href="https://github.com/florimondmanca/asgi-lifespan#usage" class="external-link" target="_blank">florimondmanca/asgi-lifespan</a> ã® `LifespanManager` ã‚’䜿甚しおください。
+
+///
+
+## ãã®ä»–の非同期関数呌び出し { #other-asynchronous-function-calls }
+
+テスト関数が非同期になったので、FastAPI ã‚¢ãƒ—リぞのリク゚スト送信以倖の `async` é–¢æ•°ã‚‚、コヌドの他の堎所ず同様に呌び出しお`await` ã—お䜿えたす。
+
+/// tip | è±†çŸ¥è­˜
+
+テストに非同期関数呌び出しを統合した際に䟋: <a href="https://stackoverflow.com/questions/41584243/runtimeerror-task-attached-to-a-different-loop" class="external-link" target="_blank">MongoDB ã® MotorClient</a> äœ¿ç”šæ™‚ïŒ‰ã€`RuntimeError: Task attached to a different loop` ã«é­é‡ã—た堎合は、むベントルヌプを必芁ずするオブゞェクトは非同期関数内でのみむンスタンス化するようにしおください。䟋えば `@app.on_event("startup")` ã‚³ãƒŒãƒ«ãƒãƒƒã‚¯å†…で行いたす。
+
+///
diff --git a/docs/ja/docs/advanced/behind-a-proxy.md b/docs/ja/docs/advanced/behind-a-proxy.md
new file mode 100644 (file)
index 0000000..67eaa99
--- /dev/null
@@ -0,0 +1,466 @@
+# ãƒ—ロキシの背埌 { #behind-a-proxy }
+
+倚くの状況で、FastAPI ã‚¢ãƒ—リの前段に **Traefik** ã‚„ **Nginx** ã®ã‚ˆã†ãª**プロキシ**を眮きたす。
+
+これらのプロキシは HTTPS èšŒæ˜Žæ›žãªã©ã®å‡Šç†ã‚’担いたす。
+
+## ãƒ—ロキシの転送ヘッダヌ { #proxy-forwarded-headers }
+
+アプリケヌションの前段にある **プロキシ** ã¯é€šåžžã€ãƒªã‚¯ã‚šã‚¹ãƒˆã‚’ **サヌバヌ** ã«é€ã‚‹å‰ã«ã€ãã®ãƒªã‚¯ã‚šã‚¹ãƒˆãŒãƒ—ロキシによっお転送されたこずを知らせるためのヘッダヌを動的に付䞎し、䜿甚䞭の元の公開URLドメむンを含むや HTTPS äœ¿ç”šãªã©ã®æƒ…報を䌝えたす。
+
+**サヌバヌ** ãƒ—ログラム䟋えば **FastAPI CLI** çµŒç”±ã® **Uvicorn**はこれらのヘッダヌを解釈し、その情報をアプリケヌションに枡すこずができたす。
+
+しかしセキュリティ䞊、サヌバヌは自分が信頌できるプロキシの背埌にあるず分からないため、これらのヘッダヌを解釈したせん。
+
+/// note | æŠ€è¡“詳çް
+
+プロキシのヘッダヌは次のずおりです:
+
+* <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-For" class="external-link" target="_blank">X-Forwarded-For</a>
+* <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Proto" class="external-link" target="_blank">X-Forwarded-Proto</a>
+* <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Host" class="external-link" target="_blank">X-Forwarded-Host</a>
+
+///
+
+### ãƒ—ロキシ転送ヘッダヌを有効化 { #enable-proxy-forwarded-headers }
+
+FastAPI CLI ã‚’ *CLI ã‚ªãƒ—ション* `--forwarded-allow-ips` ä»˜ãã§èµ·å‹•し、転送ヘッダヌを信頌しお読んでよい IP ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’指定できたす。
+
+`--forwarded-allow-ips="*"` ãšã™ã‚‹ãšã€ã™ã¹ãŠã®é€ä¿¡å…ƒ IP ã‚’信頌したす。
+
+**サヌバヌ** ãŒä¿¡é Œã§ãã‚‹ **プロキシ** ã®èƒŒåŸŒã«ã‚り、そのプロキシからのみ接続される堎合、プロキシの IP ã‚’受け入れるようになりたす。
+
+<div class="termy">
+
+```console
+$ fastapi run --forwarded-allow-ips="*"
+
+<span style="color: green;">INFO</span>:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+```
+
+</div>
+
+### HTTPS ã‚’䌎うリダむレクト { #redirects-with-https }
+
+䟋えば、*path operation* `/items/` ã‚’定矩しおいるずしたす:
+
+{* ../../docs_src/behind_a_proxy/tutorial001_01_py310.py hl[6] *}
+
+クラむアントが `/items` ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãšã€æ—¢å®šã§ã¯ `/items/` ã«ãƒªãƒ€ã‚€ãƒ¬ã‚¯ãƒˆã•れたす。
+
+しかし、*CLI ã‚ªãƒ—ション* `--forwarded-allow-ips` ã‚’蚭定する前は、`http://localhost:8000/items/` ã«ãƒªãƒ€ã‚€ãƒ¬ã‚¯ãƒˆã•れる堎合がありたす。
+
+ですが、アプリケヌションは `https://mysuperapp.com` ã§å…¬é–‹ã•れおおり、`https://mysuperapp.com/items/` ã«ãƒªãƒ€ã‚€ãƒ¬ã‚¯ãƒˆã•れるべきかもしれたせん。
+
+`--proxy-headers` ã‚’蚭定するず、FastAPI ã¯æ­£ã—い堎所にリダむレクトできるようになりたす。😎
+
+```
+https://mysuperapp.com/items/
+```
+
+/// tip | è±†çŸ¥è­˜
+
+HTTPS ã«ã€ã„お詳しく知りたい堎合は、[HTTPS ã«ã€ã„お](../deployment/https.md){.internal-link target=_blank} ã‚’参照しおください。
+
+///
+
+### ãƒ—ロキシ転送ヘッダヌの仕組み { #how-proxy-forwarded-headers-work }
+
+クラむアントず **アプリケヌションサヌバヌ** ã®é–“で、**プロキシ** ãŒã©ã®ã‚ˆã†ã«è»¢é€ãƒ˜ãƒƒãƒ€ãƒŒã‚’远加するかを図瀺したす:
+
+```mermaid
+sequenceDiagram
+    participant Client
+    participant Proxy as Proxy/Load Balancer
+    participant Server as FastAPI Server
+
+    Client->>Proxy: HTTPS Request<br/>Host: mysuperapp.com<br/>Path: /items
+
+    Note over Proxy: Proxy adds forwarded headers
+
+    Proxy->>Server: HTTP Request<br/>X-Forwarded-For: [client IP]<br/>X-Forwarded-Proto: https<br/>X-Forwarded-Host: mysuperapp.com<br/>Path: /items
+
+    Note over Server: Server interprets headers<br/>(if --forwarded-allow-ips is set)
+
+    Server->>Proxy: HTTP Response<br/>with correct HTTPS URLs
+
+    Proxy->>Client: HTTPS Response
+```
+
+**プロキシ** ã¯å…ƒã®ã‚¯ãƒ©ã‚€ã‚¢ãƒ³ãƒˆãƒªã‚¯ã‚šã‚¹ãƒˆã‚’受け取り、**アプリケヌションサヌバヌ** ã«æž¡ã™å‰ã«ç‰¹åˆ¥ãªã€Œè»¢é€ã€ãƒ˜ãƒƒãƒ€ãƒŒïŒˆ`X-Forwarded-*`を远加したす。
+
+これらのヘッダヌは、通垞は倱われる元のリク゚ストの情報を保持したす:
+
+* **X-Forwarded-For**: å…ƒã®ã‚¯ãƒ©ã‚€ã‚¢ãƒ³ãƒˆã® IP ã‚¢ãƒ‰ãƒ¬ã‚¹
+* **X-Forwarded-Proto**: å…ƒã®ãƒ—ロトコル`https`
+* **X-Forwarded-Host**: å…ƒã®ãƒ›ã‚¹ãƒˆïŒˆ`mysuperapp.com`
+
+**FastAPI CLI** ã‚’ `--forwarded-allow-ips` ã§èš­å®šã™ã‚‹ãšã€ã“れらのヘッダヌを信頌しお䜿甚し、たずえばリダむレクトで正しい URL ã‚’生成したす。
+
+## ãƒ‘スプレフィックスを削陀するプロキシ { #proxy-with-a-stripped-path-prefix }
+
+アプリケヌションにパスプレフィックスを付䞎するプロキシを䜿う堎合がありたす。
+
+そのような堎合は `root_path` ã§ã‚¢ãƒ—リケヌションを蚭定できたす。
+
+`root_path` ã¯ïŒˆFastAPI ãŒ Starlette ã‚’通しお基づいおいるASGI ä»•様で提䟛されおいる仕組みです。
+
+`root_path` ã¯ã“の皮のケヌスを扱うために䜿われたす。
+
+これはサブアプリケヌションをマりントする際にも内郚的に䜿甚されたす。
+
+ここでいう「パスプレフィックスを削陀するプロキシ」ずは、コヌド䞊では `/app` ãšã„うパスを宣蚀しおいおも、その䞊にプロキシ局を远加しお **FastAPI** ã‚¢ãƒ—リケヌションを `/api/v1` ã®ã‚ˆã†ãªãƒ‘スの䞋に配眮するこずを指したす。
+
+この堎合、元のパス `/app` ã¯å®Ÿéš›ã«ã¯ `/api/v1/app` ã§æäŸ›ã•れたす。
+
+すべおのコヌドは `/app` ã ã‘を前提に曞かれおいるにもかかわらず、です。
+
+{* ../../docs_src/behind_a_proxy/tutorial001_py310.py hl[6] *}
+
+そしおプロキシは、アプリサヌバヌおそらく FastAPI CLI çµŒç”±ã® Uvicornに転送する前に、その堎で **パスプレフィックス** ã‚’**「削陀」**し、アプリケヌション偎には自分が `/app` ã§æäŸ›ã•れおいるように芋せかけたす。これにより、コヌドのすべおを `/api/v1` ã®ãƒ—レフィックス付きに曞き換える必芁がありたせん。
+
+ここたでは通垞どおりに動䜜したす。
+
+しかし、統合ドキュメント UIフロント゚ンドを開くず、OpenAPI ã‚¹ã‚­ãƒŒãƒžã‚’ `/api/v1/openapi.json` ã§ã¯ãªã `/openapi.json` ã‹ã‚‰å–埗しようずしたす。
+
+そのため、フロント゚ンドブラりザで動䜜は `/openapi.json` ã«ã‚¢ã‚¯ã‚»ã‚¹ã—ようずしお、OpenAPI ã‚¹ã‚­ãƒŒãƒžã‚’取埗できたせん。
+
+このアプリには `/api/v1` ã®ãƒ‘スプレフィックスを付䞎するプロキシがあるため、フロント゚ンドは `/api/v1/openapi.json` ã‹ã‚‰å–埗する必芁がありたす。
+
+```mermaid
+graph LR
+
+browser("Browser")
+proxy["Proxy on http://0.0.0.0:9999/api/v1/app"]
+server["Server on http://127.0.0.1:8000/app"]
+
+browser --> proxy
+proxy --> server
+```
+
+/// tip | è±†çŸ¥è­˜
+
+IP `0.0.0.0` ã¯ã€ãã®ãƒžã‚·ãƒ³/サヌバヌで利甚可胜なすべおの IP ã§åŸ…ち受けるこずを意味する衚珟ずしお䞀般的に䜿われたす。
+
+///
+
+ドキュメント UI ã§ã¯ã€ã“の API ã® `server` ãŒïŒˆãƒ—ロキシの背埌で`/api/v1` ã«ã‚るこずを宣蚀する OpenAPI ã‚¹ã‚­ãƒŒãƒžã‚‚必芁です。䟋えば:
+
+```JSON hl_lines="4-8"
+{
+    "openapi": "3.1.0",
+    // ã»ã‹ã®é …ç›®
+    "servers": [
+        {
+            "url": "/api/v1"
+        }
+    ],
+    "paths": {
+            // ã»ã‹ã®é …ç›®
+    }
+}
+```
+
+この䟋では「Proxy」は **Traefik** ã®ã‚ˆã†ãªã‚‚の、サヌバヌは **Uvicorn** ãš FastAPI CLI ã§ FastAPI ã‚¢ãƒ—リケヌションを実行しおいるものを想定しおいたす。
+
+### `root_path` ã®æŒ‡å®š { #providing-the-root-path }
+
+これを実珟するには、次のようにコマンドラむンオプション `--root-path` ã‚’䜿甚したす:
+
+<div class="termy">
+
+```console
+$ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1
+
+<span style="color: green;">INFO</span>:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+```
+
+</div>
+
+Hypercorn ã‚’䜿う堎合も、同様に `--root-path` ã‚ªãƒ—ションがありたす。
+
+/// note | æŠ€è¡“詳çް
+
+このナヌスケヌス向けに、ASGI ä»•様は `root_path` ã‚’定矩しおいたす。
+
+そしお `--root-path` ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚€ãƒ³ã‚ªãƒ—ションは、その `root_path` ã‚’提䟛したす。
+
+///
+
+### çŸåœšã® `root_path` ã®ç¢ºèª { #checking-the-current-root-path }
+
+各リク゚ストでアプリケヌションが䜿甚しおいる珟圚の `root_path` ã¯å–埗できたす。これはASGI ä»•様の䞀郚である`scope` èŸžæ›žã«å«ãŸã‚ŒãŸã™ã€‚
+
+ここではデモのため、メッセヌゞに含めおいたす。
+
+{* ../../docs_src/behind_a_proxy/tutorial001_py310.py hl[8] *}
+
+そのうえで、次のように Uvicorn ã‚’起動するず:
+
+<div class="termy">
+
+```console
+$ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1
+
+<span style="color: green;">INFO</span>:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+```
+
+</div>
+
+レスポンスは次のようになりたす:
+
+```JSON
+{
+    "message": "Hello World",
+    "root_path": "/api/v1"
+}
+```
+
+### FastAPI ã‚¢ãƒ—リでの `root_path` èš­å®š { #setting-the-root-path-in-the-fastapi-app }
+
+あるいは、`--root-path` ã®ã‚ˆã†ãªã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚€ãƒ³ã‚ªãƒ—ションを枡せない堎合は、FastAPI ã‚¢ãƒ—リ䜜成時にパラメヌタ `root_path` ã‚’蚭定できたす:
+
+{* ../../docs_src/behind_a_proxy/tutorial002_py310.py hl[3] *}
+
+`FastAPI` ã« `root_path` ã‚’枡すのは、Uvicorn ã‚„ Hypercorn ã«ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚€ãƒ³ã‚ªãƒ—ション `--root-path` ã‚’枡すのず同等です。
+
+### `root_path` ã«ã€ã„お { #about-root-path }
+
+サヌバヌUvicornは、その `root_path` ã‚’アプリに枡す以倖の甚途では䜿甚しない点に泚意しおください。
+
+しかし、ブラりザで <a href="http://127.0.0.1:8000/app" class="external-link" target="_blank">http://127.0.0.1:8000/app</a> ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãšã€é€šåžžã©ãŠã‚Šã®ãƒ¬ã‚¹ãƒãƒ³ã‚¹ãŒè¡šç€ºã•れたす:
+
+```JSON
+{
+    "message": "Hello World",
+    "root_path": "/api/v1"
+}
+```
+
+぀たり、`http://127.0.0.1:8000/api/v1/app` ã§ã‚¢ã‚¯ã‚»ã‚¹ã•れるこずは想定しおいたせん。
+
+Uvicorn ã¯ã€ãƒ—ロキシが `http://127.0.0.1:8000/app` ã«ã‚¢ã‚¯ã‚»ã‚¹ã—おくるこずを想定しおおり、その䞊に远加の `/api/v1` ãƒ—レフィックスを付けるのはプロキシの責務です。
+
+## ãƒ‘スプレフィックスを削陀するプロキシに぀いお { #about-proxies-with-a-stripped-path-prefix }
+
+パスプレフィックスを削陀するプロキシは、蚭定方法の䞀䟋にすぎない点に泚意しおください。
+
+倚くの堎合、プロキシはパスプレフィックスを削陀しない蚭定が既定でしょう。
+
+そのような堎合パスプレフィックスを削陀しない堎合は、プロキシは `https://myawesomeapp.com` ã®ã‚ˆã†ãªã‚¢ãƒ‰ãƒ¬ã‚¹ã§åŸ…ち受け、ブラりザが `https://myawesomeapp.com/api/v1/app` ã«ã‚¢ã‚¯ã‚»ã‚¹ã—、サヌバヌ䟋: Uvicornが `http://127.0.0.1:8000` ã§åŸ…ち受けおいるなら、プロキシプレフィックスを削陀しないは同じパス `http://127.0.0.1:8000/api/v1/app` ã§ Uvicorn ã«ã‚¢ã‚¯ã‚»ã‚¹ã—たす。
+
+## Traefik ã‚’䜿ったロヌカル怜蚌 { #testing-locally-with-traefik }
+
+<a href="https://docs.traefik.io/" class="external-link" target="_blank">Traefik</a> ã‚’䜿えば、パスプレフィックスを削陀する構成をロヌカルで簡単に詊せたす。
+
+<a href="https://github.com/containous/traefik/releases" class="external-link" target="_blank">Traefik ã‚’ダりンロヌド</a> ã—おください。単䞀バむナリなので、圧瞮ファむルを展開しお端末から盎接実行できたす。
+
+次の内容で `traefik.toml` ãšã„うファむルを䜜成したす:
+
+```TOML hl_lines="3"
+[entryPoints]
+  [entryPoints.http]
+    address = ":9999"
+
+[providers]
+  [providers.file]
+    filename = "routes.toml"
+```
+
+これは Traefik ã«ãƒãƒŒãƒˆ 9999 ã§åŸ…ち受け、別のファむル `routes.toml` ã‚’䜿甚するよう指瀺したす。
+
+/// tip | è±†çŸ¥è­˜
+
+暙準の HTTP ãƒãƒŒãƒˆ 80 ã§ã¯ãªã 9999 ã‚’䜿うのは、管理者`sudo`暩限で実行する必芁をなくすためです。
+
+///
+
+次に、その `routes.toml` ãƒ•ァむルを䜜成したす:
+
+```TOML hl_lines="5  12  20"
+[http]
+  [http.middlewares]
+
+    [http.middlewares.api-stripprefix.stripPrefix]
+      prefixes = ["/api/v1"]
+
+  [http.routers]
+
+    [http.routers.app-http]
+      entryPoints = ["http"]
+      service = "app"
+      rule = "PathPrefix(`/api/v1`)"
+      middlewares = ["api-stripprefix"]
+
+  [http.services]
+
+    [http.services.app]
+      [http.services.app.loadBalancer]
+        [[http.services.app.loadBalancer.servers]]
+          url = "http://127.0.0.1:8000"
+```
+
+このファむルは Traefik ã« `/api/v1` ã®ãƒ‘スプレフィックスを䜿うよう蚭定したす。
+
+そしお Traefik ã¯ã€`http://127.0.0.1:8000` ã§å‹•䜜しおいる Uvicorn ãžãƒªã‚¯ã‚šã‚¹ãƒˆã‚’転送したす。
+
+では Traefik ã‚’起動したす:
+
+<div class="termy">
+
+```console
+$ ./traefik --configFile=traefik.toml
+
+INFO[0000] Configuration loaded from file: /home/user/awesomeapi/traefik.toml
+```
+
+</div>
+
+次に、`--root-path` ã‚ªãƒ—ションを指定しおアプリを起動したす:
+
+<div class="termy">
+
+```console
+$ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1
+
+<span style="color: green;">INFO</span>:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+```
+
+</div>
+
+### ãƒ¬ã‚¹ãƒãƒ³ã‚¹ã®ç¢ºèª { #check-the-responses }
+
+ここで、Uvicorn ã®ãƒãƒŒãƒˆã® URL <a href="http://127.0.0.1:8000/app" class="external-link" target="_blank">http://127.0.0.1:8000/app</a> ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãšã€é€šåžžã©ãŠã‚Šã®ãƒ¬ã‚¹ãƒãƒ³ã‚¹ãŒè¡šç€ºã•れたす:
+
+```JSON
+{
+    "message": "Hello World",
+    "root_path": "/api/v1"
+}
+```
+
+/// tip | è±†çŸ¥è­˜
+
+`http://127.0.0.1:8000/app` ã«ã‚¢ã‚¯ã‚»ã‚¹ã—おいるにもかかわらず、オプション `--root-path` ã‹ã‚‰å–埗した `root_path` ãŒ `/api/v1` ãšè¡šç€ºã•れおいる点に泚目しおください。
+
+///
+
+次に、Traefik ã®ãƒãƒŒãƒˆã§ãƒ—レフィックス付きの URL <a href="http://127.0.0.1:9999/api/v1/app" class="external-link" target="_blank">http://127.0.0.1:9999/api/v1/app</a> ã‚’開きたす。
+
+同じレスポンスが埗られたす:
+
+```JSON
+{
+    "message": "Hello World",
+    "root_path": "/api/v1"
+}
+```
+
+ただし今回は、プロキシが付䞎したプレフィックス `/api/v1` ã®ä»˜ã„た URL ã§ã™ã€‚
+
+もちろん、ここでの想定は党員がプロキシ経由でアプリにアクセスするこずです。したがっお、パスプレフィックス `/api/v1` ã®ã‚る版が「正しい」アクセス方法になりたす。
+
+䞀方、プレフィックスのない版`http://127.0.0.1:8000/app`。Uvicorn ãŒç›ŽæŽ¥æäŸ›ïŒ‰ã¯ã€_プロキシ_Traefik専甚の接続先になりたす。
+
+これにより、プロキシTraefikがパスプレフィックスをどのように甚い、サヌバヌUvicornが `--root-path` ã® `root_path` ã‚’どのように利甚するかが分かりたす。
+
+### ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ UI ã®ç¢ºèª { #check-the-docs-ui }
+
+ここがポむントです。✚
+
+「公匏な」アクセス方法は、定矩したパスプレフィックス付きのプロキシ経由です。したがっお想定どおり、プレフィックスなしの URL ã§ Uvicorn ãŒç›ŽæŽ¥æäŸ›ã™ã‚‹ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ UI ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãšå‹•䜜したせん。プロキシ経由でアクセスされるこずを前提ずしおいるためです。
+
+<a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a> ã‚’確認しおください:
+
+<img src="/img/tutorial/behind-a-proxy/image01.png">
+
+しかし、プロキシポヌト `9999`を䜿った「公匏」URL `/api/v1/docs` ã§ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ UI ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãšã€æ­£ã—く動䜜したす🎉
+
+<a href="http://127.0.0.1:9999/api/v1/docs" class="external-link" target="_blank">http://127.0.0.1:9999/api/v1/docs</a> ã‚’確認しおください:
+
+<img src="/img/tutorial/behind-a-proxy/image02.png">
+
+ねらいどおりです。✔
+
+これは、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<a href="http://127.0.0.1:9999/api/v1/docs" class="external-link" target="_blank">http://127.0.0.1:9999/api/v1/docs</a>では次のように衚瀺されたす:
+
+<img src="/img/tutorial/behind-a-proxy/image03.png">
+
+/// 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` ã‚’適切に扱うため、そのたた動䜜したす。✚
index 9d881c013c9e55b364f4eb81d92eaeba44d55934..50a78916588818f9dfca8d9d54f8ab30f0ea378c 100644 (file)
@@ -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` ã‚’生成しお返しおいたす。
 
 
 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 (file)
index 0000000..74f479f
--- /dev/null
@@ -0,0 +1,95 @@
+# Dataclasses ã®äœ¿ç”š { #using-dataclasses }
+
+FastAPI ã¯ **Pydantic** ã®äžŠã«æ§‹ç¯‰ã•れおおり、これたでにリク゚ストやレスポンスを宣蚀するために Pydantic ãƒ¢ãƒ‡ãƒ«ã‚’䜿う方法を玹介しおきたした。
+
+しかし FastAPI ã¯ã€åŒæ§˜ã®æ–¹æ³•で <a href="https://docs.python.org/3/library/dataclasses.html" class="external-link" target="_blank">`dataclasses`</a> ã‚‚サポヌトしたす:
+
+{* ../../docs_src/dataclasses_/tutorial001_py310.py hl[1,6:11,18:19] *}
+
+これは **Pydantic** ã«ã‚ˆã£ãŠåŒ•き続きサポヌトされおいたす。Pydantic ã«ã¯ <a href="https://docs.pydantic.dev/latest/concepts/dataclasses/#use-of-stdlib-dataclasses-with-basemodel" class="external-link" target="_blank">`dataclasses` ã®å†…郚サポヌト</a> ãŒã‚るためです。
+
+そのため、䞊蚘のように明瀺的に 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 ã«è¡šç€ºã•れたす:
+
+<img src="/img/tutorial/dataclasses/image01.png">
+
+## ãƒã‚¹ãƒˆã—たデヌタ構造での 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 ã« <dfn title="送信可胜な圢匏にデヌタを倉換するこず">シリアラむズ</dfn> ã§ããŸã™ã€‚
+
+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 ãƒ¢ãƒ‡ãƒ«ãšçµ„み合わせたり、継承したり、自分のモデルに含めたりもできたす。
+
+詳しくは、<a href="https://docs.pydantic.dev/latest/concepts/dataclasses/" class="external-link" target="_blank">dataclasses ã«é–¢ã™ã‚‹ Pydantic ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ</a> ã‚’参照しおください。
+
+## ãƒãƒŒã‚žãƒ§ãƒ³ { #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 (file)
index 0000000..fb79062
--- /dev/null
@@ -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 ã®æŠ€è¡“仕様においお、これは <a href="https://asgi.readthedocs.io/en/latest/specs/lifespan.html" class="external-link" target="_blank">Lifespan ãƒ—ロトコル</a> ã®äž€éƒšã§ã‚り、`startup` ãš `shutdown` ãšã„うむベントが定矩されおいたす。
+
+/// info | æƒ…å ±
+
+Starlette ã® `lifespan` ãƒãƒ³ãƒ‰ãƒ©ã«ã€ã„おは、<a href="https://www.starlette.dev/lifespan/" class="external-link" target="_blank">Starlette ã® Lifespan ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ</a>で詳しく読むこずができたす。
+
+コヌドの他の領域で䜿える 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 (file)
index 0000000..7b9f820
--- /dev/null
@@ -0,0 +1,208 @@
+# SDK ã®ç”Ÿæˆ { #generating-sdks }
+
+**FastAPI** ã¯ **OpenAPI** ä»•様に基づいおいるため、その API ã¯å€šãã®ãƒ„ヌルが理解できる暙準圢匏で蚘述できたす。
+
+これにより、最新の**ドキュメント**、耇数蚀語のクラむアントラむブラリ<abbr title="Software Development Kits - ã‚œãƒ•トりェア開発キット">**SDKs**</abbr>、そしおコヌドず同期し続ける**テスト**や**自動化ワヌクフロヌ**を容易に生成できたす。
+
+本ガむドでは、FastAPI ãƒãƒƒã‚¯ã‚šãƒ³ãƒ‰å‘けの **TypeScript SDK** ã‚’生成する方法を説明したす。
+
+## ã‚ªãƒŒãƒ—゜ヌスの SDK ã‚žã‚§ãƒãƒ¬ãƒŒã‚¿ { #open-source-sdk-generators }
+
+倚甚途な遞択肢ずしお <a href="https://openapi-generator.tech/" class="external-link" target="_blank">OpenAPI Generator</a> ãŒã‚りたす。これは**倚数のプログラミング蚀語**をサポヌトし、OpenAPI ä»•様から SDK ã‚’生成できたす。
+
+**TypeScript ã‚¯ãƒ©ã‚€ã‚¢ãƒ³ãƒˆ**向けには、<a href="https://heyapi.dev/" class="external-link" target="_blank">Hey API</a> ãŒç›®çš„特化の゜リュヌションで、TypeScript ã‚šã‚³ã‚·ã‚¹ãƒ†ãƒ ã«æœ€é©åŒ–された䜓隓を提䟛したす。
+
+他の SDK ã‚žã‚§ãƒãƒ¬ãƒŒã‚¿ã¯ <a href="https://openapi.tools/#sdk" class="external-link" target="_blank">OpenAPI.Tools</a> ã§ã‚‚芋぀けられたす。
+
+/// 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 ã‚’支える姿勢を瀺しおいたす。🙇
+
+䟋えば、次のようなものがありたす:
+
+* <a href="https://speakeasy.com/editor?utm_source=fastapi+repo&utm_medium=github+sponsorship" class="external-link" target="_blank">Speakeasy</a>
+* <a href="https://www.stainless.com/?utm_source=fastapi&utm_medium=referral" class="external-link" target="_blank">Stainless</a>
+* <a href="https://developers.liblab.com/tutorials/sdk-for-fastapi?utm_source=fastapi" class="external-link" target="_blank">liblab</a>
+
+これらの゜リュヌションの䞭にはオヌプン゜ヌスや無料枠を提䟛するものもあり、金銭的コミットメントなしで詊すこずができたす。他の商甚 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` ã«ç§»å‹•するず、リク゚ストで送信・レスポンスで受信するデヌタの**スキヌマ**が衚瀺されたす:
+
+<img src="/img/tutorial/generate-clients/image01.png">
+
+これらのスキヌマは、アプリ内でモデルずしお宣蚀されおいるため衚瀺されたす。
+
+その情報はアプリの **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` ã«ç”Ÿæˆã•れたす。
+
+<a href="https://heyapi.dev/openapi-ts/get-started" class="external-link" target="_blank">`@hey-api/openapi-ts` ã®ã‚€ãƒ³ã‚¹ãƒˆãƒŒãƒ«æ–¹æ³•</a>や、<a href="https://heyapi.dev/openapi-ts/output" class="external-link" target="_blank">生成物の詳现</a>は公匏サむトを参照しおください。
+
+### SDK ã®åˆ©ç”š { #using-the-sdk }
+
+これでクラむアントコヌドを import ã—お利甚できたす。䟋えば次のようになり、メ゜ッドに察しお補完が効きたす:
+
+<img src="/img/tutorial/generate-clients/image02.png">
+
+送信するペむロヌドにも補完が適甚されたす:
+
+<img src="/img/tutorial/generate-clients/image03.png">
+
+/// tip | è±†çŸ¥è­˜
+
+FastAPI ã‚¢ãƒ—リの `Item` ãƒ¢ãƒ‡ãƒ«ã§å®šçŸ©ã—た `name` ãš `price` ã«è£œå®ŒãŒåŠ¹ã„ãŠã„ã‚‹ç‚¹ã«æ³šç›®ã—ãŠãã ã•ã„ã€‚
+
+///
+
+送信デヌタに察するむンラむン゚ラヌも衚瀺されたす:
+
+<img src="/img/tutorial/generate-clients/image04.png">
+
+レスポンスオブゞェクトにも補完がありたす:
+
+<img src="/img/tutorial/generate-clients/image05.png">
+
+## ã‚¿ã‚°ä»˜ãã® 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 ã‚¢ãƒ—リからクラむアントを生成するず、通垞クラむアント偎のコヌドもタグごずに分割されたす。
+
+これにより、クラむアントコヌドも正しく敎理・グルヌピングされたす:
+
+<img src="/img/tutorial/generate-clients/image06.png">
+
+この䟋では次のようになりたす:
+
+* `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 }
+
+この状態でクラむアントを再生成するず、メ゜ッド名が改善されおいたす:
+
+<img src="/img/tutorial/generate-clients/image07.png">
+
+ご芧のずおり、メ゜ッド名はタグ名ず関数名のみになり、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
+```
+
+新しいクラむアントを生成するず、**クリヌンなメ゜ッド名**になり、**補完**や**むンラむン゚ラヌ**などもそのたた利甚できたす:
+
+<img src="/img/tutorial/generate-clients/image08.png">
+
+## åˆ©ç‚¹ { #benefits }
+
+自動生成されたクラむアントを䜿うず、次のような察象で**補完**が埗られたす:
+
+* ãƒ¡ã‚œãƒƒãƒ‰
+* æœ¬äœ“のリク゚ストペむロヌド、ク゚リパラメヌタ等
+* ãƒ¬ã‚¹ãƒãƒ³ã‚¹ã®ãƒšã‚€ãƒ­ãƒŒãƒ‰
+
+たた、あらゆる箇所で**むンラむン゚ラヌ**も埗られたす。
+
+バック゚ンドコヌドを曎新しおフロント゚ンドを**再生成**すれば、新しい *path operation* ã¯ãƒ¡ã‚œãƒƒãƒ‰ãšã—お远加され、叀いものは削陀され、その他の倉曎も生成コヌドに反映されたす。🀓
+
+぀たり、倉曎があれば自動的にクラむアントコヌドに**反映**されたす。クラむアントを**ビルド**すれば、䜿甚デヌタに**䞍敎合**があれば゚ラヌになりたす。
+
+その結果、倚くの゚ラヌを開発の初期段階で**早期発芋**でき、本番で最終ナヌザヌに䞍具合が珟れおから原因をデバッグする必芁がなくなりたす。✚
diff --git a/docs/ja/docs/advanced/middleware.md b/docs/ja/docs/advanced/middleware.md
new file mode 100644 (file)
index 0000000..2883d53
--- /dev/null
@@ -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 ã‚’基盀ずしおおり、<abbr title="Asynchronous Server Gateway Interface - éžåŒæœŸã‚µãƒŒãƒãƒŒã‚²ãƒŒãƒˆã‚Šã‚§ã‚€ã‚€ãƒ³ã‚¿ãƒŒãƒ•ェヌス">ASGI</abbr> ä»•様を実装しおいるため、任意の 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 ãƒŸãƒ‰ãƒ«ã‚Šã‚§ã‚¢ãŒã‚りたす。
+
+䟋えば:
+
+- <a href="https://github.com/encode/uvicorn/blob/master/uvicorn/middleware/proxy_headers.py" class="external-link" target="_blank">Uvicorn ã® `ProxyHeadersMiddleware`</a>
+- <a href="https://github.com/florimondmanca/msgpack-asgi" class="external-link" target="_blank">MessagePack</a>
+
+他に利甚可胜なミドルりェアに぀いおは、<a href="https://www.starlette.dev/middleware/" class="external-link" target="_blank">Starlette ã®ãƒŸãƒ‰ãƒ«ã‚Šã‚§ã‚¢ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ</a>や <a href="https://github.com/florimondmanca/awesome-asgi" class="external-link" target="_blank">ASGI Awesome List</a> ã‚’参照しおください。
diff --git a/docs/ja/docs/advanced/openapi-callbacks.md b/docs/ja/docs/advanced/openapi-callbacks.md
new file mode 100644 (file)
index 0000000..283a80b
--- /dev/null
@@ -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 ã® <a href="https://docs.pydantic.dev/latest/api/networks/" class="external-link" target="_blank">Url</a> åž‹ã‚’䜿甚したす。
+
+///
+
+唯䞀の新しい点は、*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 ãƒªã‚¯ã‚šã‚¹ãƒˆã§ã™ã€‚
+
+自分でコヌルバックを実装する堎合は、<a href="https://www.python-httpx.org" class="external-link" target="_blank">HTTPX</a> ã‚„ <a href="https://requests.readthedocs.io/" class="external-link" target="_blank">Requests</a> ã®ã‚ˆã†ãªã‚‚のを䜿えたす。
+
+///
+
+## ã‚³ãƒŒãƒ«ãƒãƒƒã‚¯ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆç”šã‚³ãƒŒãƒ‰ã‚’曞く { #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* ã«é€ã‚‰ã‚ŒãŸå…ƒã®ãƒªã‚¯ã‚šã‚¹ãƒˆã®ãƒ‘ラメヌタや䞀郚を倉数ずしお䜿える <a href="https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#key-expression" class="external-link" target="_blank">OpenAPI 3 ã®åŒ</a>埌述を含められたす。
+
+### ã‚³ãƒŒãƒ«ãƒãƒƒã‚¯ã®ãƒ‘ス匏 { #the-callback-path-expression }
+
+コヌルバックの *パス* ã«ã¯ã€*あなたの API* ã«é€ã‚‰ã‚ŒãŸå…ƒã®ãƒªã‚¯ã‚šã‚¹ãƒˆã®äž€éƒšã‚’含められる <a href="https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#key-expression" class="external-link" target="_blank">OpenAPI 3 ã®åŒ</a>を䜿甚できたす。
+
+この䟋では、`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 }
+
+アプリを起動しお <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a> ã«ã‚¢ã‚¯ã‚»ã‚¹ã—たす。
+
+あなたの *path operation* ã«ã€ŒCallbacks」セクションが含たれ、*倖郚 API* ãŒã©ã†ã‚るべきかが衚瀺されおいるのが確認できたす:
+
+<img src="/img/tutorial/openapi-callbacks/image01.png">
diff --git a/docs/ja/docs/advanced/openapi-webhooks.md b/docs/ja/docs/advanced/openapi-webhooks.md
new file mode 100644 (file)
index 0000000..368cfdd
--- /dev/null
@@ -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 }
+
+アプリを起動し、<a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a> ã«ã‚¢ã‚¯ã‚»ã‚¹ã—たす。
+
+ドキュメントには通垞の *path operations* ã«åŠ ãˆãŠã€**webhooks** ã‚‚衚瀺されたす:
+
+<img src="/img/tutorial/openapi-webhooks/image01.png">
index a78c3cb026ae93de38bcd8f1d297ee9293144f16..f7e3406171a9d6b0bbbdca03661ad0077fb19769 100644 (file)
@@ -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仕様では <a href="https://github.com/OAI/OpenAPI-Specification/blob/m
 
 ã“の `openapi_extra` ã¯ã€äŸ‹ãˆã° [OpenAPI Extensions](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#specificationExtensions) ã‚’宣蚀するのに圹立ちたす。
 
-{* ../../docs_src/path_operation_advanced_configuration/tutorial005_py39.py hl[6] *}
+{* ../../docs_src/path_operation_advanced_configuration/tutorial005_py310.py hl[6] *}
 
 è‡ªå‹•APIドキュメントを開くず、その拡匵は特定の *path operation* ã®äž‹éƒšã«è¡šç€ºã•れたす。
 
@@ -139,9 +139,9 @@ OpenAPI仕様では <a href="https://github.com/OAI/OpenAPI-Specification/blob/m
 
 ãã‚Œã¯ `openapi_extra` ã§è¡ŒãˆãŸã™ã€‚
 
-{* ../../docs_src/path_operation_advanced_configuration/tutorial006_py39.py hl[19:36, 39:40] *}
+{* ../../docs_src/path_operation_advanced_configuration/tutorial006_py310.py hl[19:36, 39:40] *}
 
-この䟋では、Pydanticモデルを䞀切宣蚀しおいたせん。実際、リク゚ストボディはJSONずしお <abbr title="converted from some plain format, like bytes, into Python objects â€“ bytesなどのプレヌンな圢匏からPythonオブゞェクトに倉換するこず">parsed</abbr> ã•れず、盎接 `bytes` ãšã—お読み取られたす。そしお `magic_data_reader()` é–¢æ•°ãŒã€äœ•らかの方法でそれをパヌスする責務を担いたす。
+この䟋では、Pydanticモデルを䞀切宣蚀しおいたせん。実際、リク゚ストボディはJSONずしお <dfn title="bytes ãªã©ã®ãƒ—レヌンな圢匏から Python ã‚ªãƒ–ゞェクトに倉換される">パヌス</dfn> ã•れず、盎接 `bytes` ãšã—お読み取られたす。そしお `magic_data_reader()` é–¢æ•°ãŒã€äœ•らかの方法でそれをパヌスする責務を担いたす。
 
 ãã‚Œã§ã‚‚、リク゚ストボディに期埅されるスキヌマを宣蚀できたす。
 
@@ -153,7 +153,7 @@ OpenAPI仕様では <a href="https://github.com/OAI/OpenAPI-Specification/blob/m
 
 äŸ‹ãˆã°ã“のアプリケヌションでは、PydanticモデルからJSON Schemaを抜出するFastAPIの統合機胜や、JSONの自動バリデヌションを䜿っおいたせん。実際、リク゚ストのcontent typeをJSONではなくYAMLずしお宣蚀しおいたす。
 
-{* ../../docs_src/path_operation_advanced_configuration/tutorial007_py39.py hl[15:20, 22] *}
+{* ../../docs_src/path_operation_advanced_configuration/tutorial007_py310.py hl[15:20, 22] *}
 
 ãã‚Œã§ã‚‚、デフォルトの統合機胜を䜿っおいないにもかかわらず、YAMLで受け取りたいデヌタのために、Pydanticモデルを䜿っお手動でJSON Schemaを生成しおいたす。
 
@@ -161,7 +161,7 @@ OpenAPI仕様では <a href="https://github.com/OAI/OpenAPI-Specification/blob/m
 
 ãã®åŸŒã€ã‚³ãƒŒãƒ‰å†…でそのYAMLコンテンツを盎接パヌスし、さらに同じPydanticモデルを䜿っおYAMLコンテンツを怜蚌しおいたす。
 
-{* ../../docs_src/path_operation_advanced_configuration/tutorial007_py39.py hl[24:31] *}
+{* ../../docs_src/path_operation_advanced_configuration/tutorial007_py310.py hl[24:31] *}
 
 /// tip | è±†çŸ¥è­˜
 
diff --git a/docs/ja/docs/advanced/response-change-status-code.md b/docs/ja/docs/advanced/response-change-status-code.md
new file mode 100644 (file)
index 0000000..1dfeae5
--- /dev/null
@@ -0,0 +1,31 @@
+# ãƒ¬ã‚¹ãƒãƒ³ã‚¹ - ã‚¹ãƒ†ãƒŒã‚¿ã‚¹ã‚³ãƒŒãƒ‰ã®å€‰æ›Ž { #response-change-status-code }
+
+すでに、デフォルトの[レスポンスのステヌタスコヌド](../tutorial/response-status-code.md){.internal-link target=_blank}を蚭定できるこずをご存知かもしれたせん。
+
+しかし堎合によっおは、デフォルトずは異なるステヌタスコヌドを返す必芁がありたす。
+
+## ãƒŠãƒŒã‚¹ã‚±ãƒŒã‚¹ { #use-case }
+
+たずえば、デフォルトでは HTTP ã‚¹ãƒ†ãƒŒã‚¿ã‚¹ã‚³ãƒŒãƒ‰ "OK" `200` ã‚’返したいずしたす。
+
+しかし、デヌタが存圚しなければそれを䜜成し、HTTP ã‚¹ãƒ†ãƒŒã‚¿ã‚¹ã‚³ãƒŒãƒ‰ "CREATED" `201` ã‚’返したい。
+
+それでも、返すデヌタは `response_model` ã§ãƒ•ィルタ・倉換できるようにしおおきたい。
+
+そのような堎合は `Response` ãƒ‘ラメヌタを䜿えたす。
+
+## `Response` ãƒ‘ラメヌタを䜿う { #use-a-response-parameter }
+
+*path operation* é–¢æ•°ã§ `Response` åž‹ã®ãƒ‘ラメヌタを宣蚀できたすCookie ã‚„ヘッダヌず同様です。
+
+そしお、その*䞀時的な*レスポンスオブゞェクトに `status_code` ã‚’蚭定できたす。
+
+{* ../../docs_src/response_change_status_code/tutorial001_py310.py hl[1,9,12] *}
+
+その埌は通垞どおり、必芁な任意のオブゞェクト`dict`、デヌタベヌスモデルなどを返せたす。
+
+そしお `response_model` ã‚’宣蚀しおいれば、返したオブゞェクトのフィルタず倉換には匕き続きそれが䜿われたす。
+
+FastAPI ã¯ãã®*䞀時的な*レスポンスからステヌタスコヌドおよび Cookie ãšãƒ˜ãƒƒãƒ€ãƒŒïŒ‰ã‚’取り出し、`response_model` ã«ã‚ˆã£ãŠãƒ•ィルタ枈みの返华倀を含む最終的なレスポンスに反映したす。
+
+たた、`Response` ãƒ‘ラメヌタは䟝存関係内に宣蚀しおステヌタスコヌドを蚭定するこずもできたす。ただし、最埌に蚭定されたものが優先される点に泚意しおください。
diff --git a/docs/ja/docs/advanced/response-cookies.md b/docs/ja/docs/advanced/response-cookies.md
new file mode 100644 (file)
index 0000000..f7e5c00
--- /dev/null
@@ -0,0 +1,51 @@
+# ãƒ¬ã‚¹ãƒãƒ³ã‚¹ã® Cookie { #response-cookies }
+
+## `Response` ãƒ‘ラメヌタを䜿う { #use-a-response-parameter }
+
+*path operation é–¢æ•°*で `Response` åž‹ã®ãƒ‘ラメヌタを宣蚀できたす。
+
+そしお、その*䞀時的*なレスポンスオブゞェクトに Cookie ã‚’蚭定できたす。
+
+{* ../../docs_src/response_cookies/tutorial002_py310.py hl[1, 8:9] *}
+
+その埌は通垞どおり、必芁な任意のオブゞェクト`dict`、デヌタベヌスモデルなどを返せたす。
+
+`response_model` ã‚’宣蚀しおいる堎合でも、返したオブゞェクトは匕き続きフィルタおよび倉換されたす。
+
+**FastAPI** ã¯ãã®*䞀時的*なレスポンスから Cookieおよびヘッダヌやステヌタスコヌドを取り出し、`response_model` ã«ã‚ˆã£ãŠãƒ•ィルタされた返华倀を含む最終的なレスポンスに蚭定したす。
+
+`Response` ãƒ‘ラメヌタは䟝存関係でも宣蚀でき、そこで Cookieやヘッダヌを蚭定するこずも可胜です。
+
+## `Response` ã‚’盎接返す { #return-a-response-directly }
+
+コヌドで `Response` ã‚’盎接返すずきに、Cookie ã‚’䜜成するこずもできたす。
+
+そのためには、[Response ã‚’盎接返す](response-directly.md){.internal-link target=_blank} ã§èª¬æ˜Žã•れおいるずおりにレスポンスを䜜成したす。
+
+そのレスポンスに Cookie ã‚’蚭定しおから返したす:
+
+{* ../../docs_src/response_cookies/tutorial001_py310.py hl[10:12] *}
+
+/// tip | è±†çŸ¥è­˜
+
+`Response` ãƒ‘ラメヌタを䜿わずにレスポンスを盎接返す堎合、FastAPI ã¯ãã®ãƒ¬ã‚¹ãƒãƒ³ã‚¹ã‚’そのたた返したす。
+
+そのため、デヌタの型が正しいこずを確認する必芁がありたす。䟋えば、`JSONResponse` ã‚’返すなら、JSON ãšäº’換性がある必芁がありたす。
+
+たた、`response_model` ã«ã‚ˆã£ãŠãƒ•ィルタされるべきデヌタを送っおいないこずも確認しおください。
+
+///
+
+### è©³çŽ°æƒ…å ± { #more-info }
+
+/// note | æŠ€è¡“詳çް
+
+`from starlette.responses import Response` ã‚„ `from starlette.responses import JSONResponse` ã‚’䜿うこずもできたす。
+
+**FastAPI** ã¯é–‹ç™ºè€…の利䟿性のために、`starlette.responses` ãšåŒã˜ã‚‚のを `fastapi.responses` ãšã—お提䟛しおいたす。ただし、利甚可胜なレスポンスの倧半は Starlette ã‹ã‚‰ç›ŽæŽ¥æäŸ›ã•れおいたす。
+
+たた、`Response` ã¯ãƒ˜ãƒƒãƒ€ãƒŒã‚„ Cookie ã®èš­å®šã«é »ç¹ã«äœ¿ã‚ã‚Œã‚‹ãŸã‚ã€`fastapi.Response` ãšã—おも提䟛されおいたす。
+
+///
+
+利甚可胜なすべおのパラメヌタやオプションに぀いおは、<a href="https://www.starlette.dev/responses/#set-cookie" class="external-link" target="_blank">Starlette ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ</a>を参照しおください。
index 7e83b9ffb2a33c63e3ddbe60ddd93cdc77f57c44..103e84c385754940de845155aed5a574021a3fb8 100644 (file)
@@ -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 (file)
index 0000000..10aec78
--- /dev/null
@@ -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 }
+
+独自のカスタムヘッダヌは、<a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers" class="external-link" target="_blank">`X-` ãƒ—レフィックスを䜿っお</a>远加できるこずに泚意しおください。
+
+ただし、ブラりザのクラむアントに芋えるようにしたいカスタムヘッダヌがある堎合は、CORS èš­å®šã«ãã‚Œã‚‰ã‚’远加する必芁がありたす[CORS (Cross-Origin Resource Sharing)](../tutorial/cors.md){.internal-link target=_blank} ã‚’参照。このずき、<a href="https://www.starlette.dev/middleware/#corsmiddleware" class="external-link" target="_blank">Starlette ã® CORS ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ</a>に蚘茉の `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 (file)
index 0000000..7ee56a0
--- /dev/null
@@ -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」ボタンをクリックしたずき、ブラりザはナヌザヌ名ずパスワヌドの入力を求めたす:
+
+<img src="/img/tutorial/security/image12.png">
+
+## ãƒŠãƒŒã‚¶ãƒŒåã®ç¢ºèª { #check-the-username }
+
+より完党な䟋です。
+
+䟝存関係を䜿っおナヌザヌ名ずパスワヌドが正しいかを確認したす。
+
+これには、Python æš™æº–モゞュヌル <a href="https://docs.python.org/3/library/secrets.html" class="external-link" target="_blank">`secrets`</a> ã‚’甚いおナヌザヌ名ずパスワヌドを怜蚌したす。
+
+`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 (file)
index 0000000..069e268
--- /dev/null
@@ -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 (file)
index 0000000..7c6cfdb
--- /dev/null
@@ -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 ãªã©ã§ãƒ­ã‚°ã‚€ãƒ³æ™‚に暩限を付䞎する際ず同じ仕組みです:
+
+<img src="/img/tutorial/security/image11.png">
+
+## ã‚¹ã‚³ãƒŒãƒ—付きの 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 ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’開くず、認蚌しお、蚱可するスコヌプを指定できたす。
+
+<img src="/img/tutorial/security/image11.png">
+
+どのスコヌプも遞択しない堎合は「認蚌枈み」にはなりたすが、`/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 (file)
index 0000000..5508ad6
--- /dev/null
@@ -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 ã«ã¯ç’°å¢ƒå€‰æ•°ã‹ã‚‰æ¥ã‚‹èš­å®šã‚’扱うための優れたナヌティリティがあり、<a href="https://docs.pydantic.dev/latest/concepts/pydantic_settings/" class="external-link" target="_blank">Pydantic: Settings management</a> ã§æäŸ›ã•れおいたす。
+
+### `pydantic-settings` ã®ã‚€ãƒ³ã‚¹ãƒˆãƒŒãƒ« { #install-pydantic-settings }
+
+たず、[仮想環境](../virtual-environments.md){.internal-link target=_blank}を䜜成しお有効化し、`pydantic-settings` ãƒ‘ッケヌゞをむンストヌルしたす:
+
+<div class="termy">
+
+```console
+$ pip install pydantic-settings
+---> 100%
+```
+
+</div>
+
+たた、次のように `all` ã‚šã‚¯ã‚¹ãƒˆãƒ©ã‚’むンストヌルするず付属したす:
+
+<div class="termy">
+
+```console
+$ pip install "fastapi[all]"
+---> 100%
+```
+
+</div>
+
+### `Settings` ã‚ªãƒ–ゞェクトを䜜成 { #create-the-settings-object }
+
+Pydantic ã‹ã‚‰ `BaseSettings` ã‚’むンポヌトしお、そのサブクラスを䜜成したす。これは Pydantic ãƒ¢ãƒ‡ãƒ«ãšã»ãŒåŒã˜ã§ã™ã€‚
+
+Pydantic ãƒ¢ãƒ‡ãƒ«ãšåŒæ§˜ã«ã€åž‹ã‚¢ãƒŽãƒ†ãƒŒã‚·ãƒ§ãƒ³ãšïŒˆå¿…芁ならデフォルト倀を持぀クラス属性を宣蚀したす。
+
+`Field()` ã«ã‚ˆã‚‹è¿œåŠ ãƒãƒªãƒ‡ãƒŒã‚·ãƒ§ãƒ³ãªã©ã€Pydantic ãƒ¢ãƒ‡ãƒ«ã§äœ¿ãˆã‚‹ã®ãšåŒã˜ãƒãƒªãƒ‡ãƒŒã‚·ãƒ§ãƒ³æ©Ÿèƒœã‚’すべお利甚できたす。
+
+{* ../../docs_src/settings/tutorial001_py310.py hl[2,5:8,11] *}
+
+/// tip | è±†çŸ¥è­˜
+
+コピペ甚に手早く䜿いたい堎合は、この䟋ではなく、䞋の最埌の䟋を䜿っおください。
+
+///
+
+その埌、その `Settings` ã‚¯ãƒ©ã‚¹ã®ã‚€ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ïŒˆã“の䟋では `settings` ã‚ªãƒ–ゞェクトを䜜成するず、Pydantic ã¯ç’°å¢ƒå€‰æ•°ã‚’倧文字小文字を区別せずに読み取りたす。぀たり、倧文字の `APP_NAME` ãšã„う倉数は、属性 `app_name` ã«å¯Ÿã—おも読み取られたす。
+
+次に、デヌタが倉換・バリデヌションされたす。したがっお、`settings` ã‚ªãƒ–ゞェクトを䜿うず、宣蚀した型のデヌタ䟋: `items_per_user` ã¯ `int`が埗られたす。
+
+### `settings` ã®äœ¿ç”š { #use-the-settings }
+
+次に、アプリケヌションで新しい `settings` ã‚ªãƒ–ゞェクトを䜿甚できたす:
+
+{* ../../docs_src/settings/tutorial001_py310.py hl[18:20] *}
+
+### ã‚µãƒŒãƒãƒŒã‚’実行 { #run-the-server }
+
+次に、蚭定を環境倉数ずしお枡しおサヌバヌを実行したす。たずえば、`ADMIN_EMAIL` ãš `APP_NAME` ã‚’次のように蚭定できたす:
+
+<div class="termy">
+
+```console
+$ ADMIN_EMAIL="deadpool@example.com" APP_NAME="ChimichangApp" fastapi run main.py
+
+<span style="color: green;">INFO</span>:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+```
+
+</div>
+
+/// tip | è±†çŸ¥è­˜
+
+1぀のコマンドに耇数の環境倉数を蚭定するには、スペヌスで区切っおコマンドの前に䞊べたす。
+
+///
+
+するず、`admin_email` ã®èš­å®šã¯ `"deadpool@example.com"` ã«èš­å®šã•れたす。
+
+`app_name` ã¯ `"ChimichangApp"` ã«ãªã‚ŠãŸã™ã€‚
+
+`items_per_user` ã¯ãƒ‡ãƒ•ォルト倀の `50` ã®ãŸãŸã§ã™ã€‚
+
+## åˆ¥ãƒ¢ã‚žãƒ¥ãƒŒãƒ«ã§ã®èš­å®š { #settings-in-another-module }
+
+[倧芏暡アプリケヌション - è€‡æ•°ãƒ•ァむル](../tutorial/bigger-applications.md){.internal-link target=_blank} ã§èŠ‹ãŸã‚ˆã†ã«ã€ã“ã‚Œã‚‰ã®èš­å®šã‚’åˆ¥ã®ãƒ¢ã‚žãƒ¥ãƒŒãƒ«ãƒ•ã‚¡ã‚€ãƒ«ã«çœ®ãã“ãšã‚‚ã§ããŸã™ã€‚
+
+たずえば、`config.py` ãšã„うファむルに次のように曞けたす:
+
+{* ../../docs_src/settings/app01_py310/config.py *}
+
+そしお、`main.py` ãšã„うファむルでそれを䜿いたす:
+
+{* ../../docs_src/settings/app01_py310/main.py hl[3,11:13] *}
+
+/// tip | è±†çŸ¥è­˜
+
+[倧芏暡アプリケヌション - è€‡æ•°ãƒ•ァむル](../tutorial/bigger-applications.md){.internal-link target=_blank} ã§èŠ‹ãŸã‚ˆã†ã«ã€`__init__.py` ãƒ•ァむルも必芁です。
+
+///
+
+## äŸå­˜é–¢ä¿‚での蚭定 { #settings-in-a-dependency }
+
+堎合によっおは、どこでも䜿うグロヌバルな `settings` ã‚ªãƒ–ゞェクトを持぀代わりに、䟝存関係から蚭定を提䟛するず䟿利なこずがありたす。
+
+これは特にテスト時に有甚で、䟝存関係を独自のカスタム蚭定で簡単にオヌバヌラむドできるからです。
+
+### èš­å®šãƒ•ァむル { #the-config-file }
+
+前の䟋から続けるず、`config.py` ãƒ•ァむルは次のようになりたす:
+
+{* ../../docs_src/settings/app02_an_py310/config.py hl[10] *}
+
+ここでは、デフォルトのむンスタンス `settings = Settings()` ã‚’䜜成しおいないこずに泚意しおください。
+
+### ãƒ¡ã‚€ãƒ³ã‚¢ãƒ—リファむル { #the-main-app-file }
+
+ここでは、新しい `config.Settings()` ã‚’返す䟝存関係を䜜成したす。
+
+{* ../../docs_src/settings/app02_an_py310/main.py hl[6,12:13] *}
+
+/// tip | è±†çŸ¥è­˜
+
+`@lru_cache` ã«ã€ã„おは埌で説明したす。
+
+今は `get_settings()` ãŒæ™®é€šã®é–¢æ•°ã ãšè€ƒãˆãŠãã ã•い。
+
+///
+
+そしお、*path operation é–¢æ•°*から䟝存関係ずしお芁求し、必芁な堎所でどこでも䜿えたす。
+
+{* ../../docs_src/settings/app02_an_py310/main.py hl[17,19:21] *}
+
+### èš­å®šãšãƒ†ã‚¹ãƒˆ { #settings-and-testing }
+
+次に、`get_settings` ã®äŸå­˜é–¢ä¿‚オヌバヌラむドを䜜るこずで、テスト䞭に別の蚭定オブゞェクトを提䟛するのがずおも簡単になりたす:
+
+{* ../../docs_src/settings/app02_an_py310/test_main.py hl[9:10,13,21] *}
+
+䟝存関係オヌバヌラむドでは、新しい `Settings` ã‚ªãƒ–ゞェクトを䜜る際に `admin_email` ã«æ–°ã—い倀を蚭定し、その新しいオブゞェクトを返したす。
+
+そしお、それが䜿甚されおいるこずをテストできたす。
+
+## `.env` ãƒ•ァむルの読み蟌み { #reading-a-env-file }
+
+倉曎が倚くなりそうな蚭定が倚数ある堎合、環境ごずにファむルに入れお、環境倉数ずしおそこから読み蟌むず䟿利なこずがありたす。
+
+このプラクティスは十分に䞀般的で名前もあり、これらの環境倉数は通垞 `.env` ãšã„うファむルに眮かれ、そのファむルは「dotenv」ず呌ばれたす。
+
+/// tip | è±†çŸ¥è­˜
+
+ドット`.`で始たるファむルは、Linux ã‚„ macOS ã®ã‚ˆã†ãª Unix ç³»ã‚·ã‚¹ãƒ†ãƒ ã§ã¯éš ã—ファむルです。
+
+ただし、dotenv ãƒ•ァむルは必ずしもその正確なファむル名である必芁はありたせん。
+
+///
+
+Pydantic ã¯å€–郚ラむブラリを䜿っおこの皮のファむルからの読み蟌みをサポヌトしおいたす。詳现は <a href="https://docs.pydantic.dev/latest/concepts/pydantic_settings/#dotenv-env-support" class="external-link" target="_blank">Pydantic Settings: Dotenv (.env) support</a> ã‚’参照しおください。
+
+/// tip | è±†çŸ¥è­˜
+
+これを機胜させるには、`pip install python-dotenv` ãŒå¿…芁です。
+
+///
+
+### `.env` ãƒ•ァむル { #the-env-file }
+
+次のような `.env` ãƒ•ァむルを甚意できたす:
+
+```bash
+ADMIN_EMAIL="deadpool@example.com"
+APP_NAME="ChimichangApp"
+```
+
+### `.env` ã‹ã‚‰èš­å®šã‚’読む { #read-settings-from-env }
+
+そしお、`config.py` ã‚’次のように曎新したす:
+
+{* ../../docs_src/settings/app03_an_py310/config.py hl[9] *}
+
+/// tip | è±†çŸ¥è­˜
+
+`model_config` å±žæ€§ã¯ Pydantic ã®èš­å®šå°‚甚です。詳しくは <a href="https://docs.pydantic.dev/latest/concepts/config/" class="external-link" target="_blank">Pydantic: Concepts: Configuration</a> ã‚’参照しおください。
+
+///
+
+ここでは、Pydantic ã® `Settings` ã‚¯ãƒ©ã‚¹å†…で蚭定 `env_file` ã‚’定矩し、䜿甚したい dotenv ãƒ•ァむルのファむル名を指定しおいたす。
+
+### `lru_cache` ã§ `Settings` ã‚’䞀床だけ䜜成 { #creating-the-settings-only-once-with-lru-cache }
+
+ディスクからファむルを読むのは通垞コスト遅延が高い凊理なので、1回だけ実行しお同じ蚭定オブゞェクトを再利甚し、各リク゚ストごずに読み盎さないのが望たしいです。
+
+しかし、次のようにするたびに:
+
+```Python
+Settings()
+```
+
+新しい `Settings` ã‚ªãƒ–ゞェクトが䜜成され、その䜜成時に `.env` ãƒ•ァむルが再床読み蟌たれたす。
+
+䟝存関数が次のようであれば:
+
+```Python
+def get_settings():
+    return Settings()
+```
+
+各リク゚ストごずにそのオブゞェクトを䜜成し、各リク゚ストごずに `.env` ãƒ•ァむルを読み蟌むこずになりたす。⚠
+
+しかし、䞊に `@lru_cache` ãƒ‡ã‚³ãƒ¬ãƒŒã‚¿ã‚’䜿っおいるので、`Settings` ã‚ªãƒ–ゞェクトは最初に呌び出されたずきに䞀床だけ䜜成されたす。✔
+
+{* ../../docs_src/settings/app03_an_py310/main.py hl[1,11] *}
+
+その埌のリク゚スト甚の䟝存関係で `get_settings()` ãŒå‘Œã°ã‚Œã‚‹ãŸã³ã«ã€`get_settings()` ã®å†…郚コヌドを実行しお新しい `Settings` ã‚ªãƒ–ゞェクトを䜜るのではなく、最初の呌び出しで返されたのず同じオブゞェクトを䜕床でも返したす。
+
+#### `lru_cache` ã®æŠ€è¡“詳çް { #lru-cache-technical-details }
+
+`@lru_cache` ã¯ã€æ¯Žå›žé–¢æ•°ã®ã‚³ãƒŒãƒ‰ã‚’実行しお再蚈算するのではなく、最初に返した倀を返すように、修食する関数を倉曎したす。
+
+したがっお、その䞋の関数は匕数の組み合わせごずに䞀床だけ実行されたす。そしお、その各匕数の組み合わせで返された倀は、たったく同じ匕数の組み合わせで呌び出されたずきに䜕床でも再利甚されたす。
+
+たずえば、次のような関数があるずしたす:
+
+```Python
+@lru_cache
+def say_hi(name: str, salutation: str = "Ms."):
+    return f"Hello {salutation} {name}"
+```
+
+プログラムは次のように実行されたす:
+
+```mermaid
+sequenceDiagram
+
+participant code as Code
+participant function as say_hi()
+participant execute as Execute function
+
+    rect rgba(0, 255, 0, .1)
+        code ->> function: say_hi(name="Camila")
+        function ->> execute: execute function code
+        execute ->> code: return the result
+    end
+
+    rect rgba(0, 255, 255, .1)
+        code ->> function: say_hi(name="Camila")
+        function ->> code: return stored result
+    end
+
+    rect rgba(0, 255, 0, .1)
+        code ->> function: say_hi(name="Rick")
+        function ->> execute: execute function code
+        execute ->> code: return the result
+    end
+
+    rect rgba(0, 255, 0, .1)
+        code ->> function: say_hi(name="Rick", salutation="Mr.")
+        function ->> execute: execute function code
+        execute ->> code: return the result
+    end
+
+    rect rgba(0, 255, 255, .1)
+        code ->> function: say_hi(name="Rick")
+        function ->> code: return stored result
+    end
+
+    rect rgba(0, 255, 255, .1)
+        code ->> function: say_hi(name="Camila")
+        function ->> code: return stored result
+    end
+```
+
+今回の䟝存関数 `get_settings()` ã®å Žåˆã€é–¢æ•°ã¯åŒ•数を䞀切取りたせん。そのため、垞に同じ倀を返したす。
+
+この方法は、ほずんどグロヌバル倉数のように振る舞いたす。しかし、䟝存関数を䜿っおいるので、テストのために簡単にオヌバヌラむドできたす。
+
+`@lru_cache` ã¯ Python æš™æº–ラむブラリの `functools` ã®äž€éƒšã§ã™ã€‚詳现は <a href="https://docs.python.org/3/library/functools.html#functools.lru_cache" class="external-link" target="_blank">Python ã® `@lru_cache` ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ</a>を参照しおください。
+
+## ãŸãšã‚ { #recap }
+
+Pydantic Settings ã‚’䜿うこずで、アプリケヌションの蚭定や構成を、Pydantic ãƒ¢ãƒ‡ãƒ«ã®åŠ›ã‚’æŽ»ã‹ã—ãŠæ‰±ãˆãŸã™ã€‚
+
+* äŸå­˜é–¢ä¿‚を䜿うこずで、テストを簡玠化できたす。
+* `.env` ãƒ•ァむルを利甚できたす。
+* `@lru_cache` ã‚’䜿うず、各リク゚ストごずに dotenv ãƒ•ァむルを繰り返し読み蟌むのを避け぀぀、テスト時にはオヌバヌラむドできたす。
diff --git a/docs/ja/docs/advanced/sub-applications.md b/docs/ja/docs/advanced/sub-applications.md
new file mode 100644 (file)
index 0000000..f38da14
--- /dev/null
@@ -0,0 +1,67 @@
+# ã‚µãƒ–アプリケヌション - ãƒžã‚Šãƒ³ãƒˆ { #sub-applications-mounts }
+
+それぞれ独立した OpenAPI ãšãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ UI ã‚’持぀2぀の独立した FastAPI ã‚¢ãƒ—リケヌションが必芁な堎合、メむンアプリに1぀以䞊のサブアプリケヌションを「マりント」できたす。
+
+## FastAPI ã‚¢ãƒ—リケヌションのマりント { #mounting-a-fastapi-application }
+
+「マりント」ずは、特定のパスに完党に「独立した」アプリケヌションを远加し、そのサブアプリケヌションで宣蚀された path operation ã«ã‚ˆã£ãŠã€ãã®ãƒ‘ス以䞋のすべおを凊理させるこずを意味したす。
+
+### ãƒˆãƒƒãƒ—レベルアプリケヌション { #top-level-application }
+
+たず、メむンのトップレベル **FastAPI** ã‚¢ãƒ—リケヌションず、その path operation ã‚’䜜成したす:
+
+{* ../../docs_src/sub_applications/tutorial001_py310.py hl[3, 6:8] *}
+
+### ã‚µãƒ–アプリケヌション { #sub-application }
+
+次に、サブアプリケヌションずその path operation ã‚’䜜成したす。
+
+このサブアプリケヌションは通垞の FastAPI ã‚¢ãƒ—リケヌションですが、これを「マりント」したす:
+
+{* ../../docs_src/sub_applications/tutorial001_py310.py hl[11, 14:16] *}
+
+### ã‚µãƒ–アプリケヌションをマりント { #mount-the-sub-application }
+
+トップレベルのアプリケヌション `app` ã«ã€ã‚µãƒ–アプリケヌション `subapi` ã‚’マりントしたす。
+
+この䟋では、パス `/subapi` ã«ãƒžã‚Šãƒ³ãƒˆã•れたす:
+
+{* ../../docs_src/sub_applications/tutorial001_py310.py hl[11, 19] *}
+
+### è‡ªå‹• API ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®ç¢ºèª { #check-the-automatic-api-docs }
+
+では、`fastapi` ã‚³ãƒžãƒ³ãƒ‰ã§ã“のファむルを実行したす:
+
+<div class="termy">
+
+```console
+$ fastapi dev main.py
+
+<span style="color: green;">INFO</span>:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+```
+
+</div>
+
+そしお、<a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a> ã‚’開きたす。
+
+メむンアプリ甚の自動 API ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãŒè¡šç€ºã•れ、そのアプリ自身の path operation ã®ã¿ãŒå«ãŸã‚ŒãŸã™:
+
+<img src="/img/tutorial/sub-applications/image01.png">
+
+次に、サブアプリケヌションのドキュメント <a href="http://127.0.0.1:8000/subapi/docs" class="external-link" target="_blank">http://127.0.0.1:8000/subapi/docs</a> ã‚’開きたす。
+
+サブアプリケヌション甚の自動 API ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãŒè¡šç€ºã•れ、そのアプリ自身の path operation ã®ã¿ãŒã€æ­£ã—いサブパス接頭蟞 `/subapi` ã®äž‹ã§è¡šç€ºã•れたす:
+
+<img src="/img/tutorial/sub-applications/image02.png">
+
+どちらの 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 (file)
index 0000000..3c4827b
--- /dev/null
@@ -0,0 +1,126 @@
+# ãƒ†ãƒ³ãƒ—レヌト { #templates }
+
+**FastAPI** ã§ã¯ä»»æ„ã®ãƒ†ãƒ³ãƒ—レヌト゚ンゞンを䜿甚できたす。
+
+Flask ãªã©ã§ã‚‚䜿われおいる Jinja2 ãŒäž€èˆ¬çš„な遞択肢です。
+
+Starlette ã«ã‚ˆã£ãŠæäŸ›ã•れ、**FastAPI** ã‚¢ãƒ—リで盎接䜿える、簡単に蚭定できるナヌティリティがありたす。
+
+## äŸå­˜é–¢ä¿‚のむンストヌル { #install-dependencies }
+
+[仮想環境](../virtual-environments.md){.internal-link target=_blank} ã‚’䜜成しお有効化し、`jinja2` ã‚’むンストヌルしたす:
+
+<div class="termy">
+
+```console
+$ pip install jinja2
+
+---> 100%
+```
+
+</div>
+
+## `Jinja2Templates` ã®äœ¿ç”š { #using-jinja2templates }
+
+* `Jinja2Templates` ã‚’むンポヌトしたす。
+* åŸŒã§å†åˆ©ç”šã§ãã‚‹ `templates` ã‚ªãƒ–ゞェクトを䜜成したす。
+* ãƒ†ãƒ³ãƒ—レヌトを返す path operation ã« `Request` ãƒ‘ラメヌタを宣蚀したす。
+* äœœæˆã—た `templates` ã‚’䜿っお `TemplateResponse` ã‚’レンダリングしお返したす。テンプレヌト名、リク゚ストオブゞェクト、Jinja2 ãƒ†ãƒ³ãƒ—レヌト内で䜿甚するキヌず倀のペアからなる "context" ã®èŸžæ›žã‚’枡したす。
+
+{* ../../docs_src/templates/tutorial001_py310.py hl[4,11,15:18] *}
+
+/// note | å‚™è€ƒ
+
+FastAPI 0.108.0、Starlette 0.29.0 ä»¥å‰ã§ã¯ã€`name` ã¯æœ€åˆã®ãƒ‘ラメヌタでした。
+
+たたそれ以前のバヌゞョンでは、`request` ã‚ªãƒ–ゞェクトは Jinja2 ç”šã®ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆå†…のキヌず倀のペアの䞀郚ずしお枡されおいたした。
+
+///
+
+/// tip | è±†çŸ¥è­˜
+
+`response_class=HTMLResponse` ã‚’宣蚀するず、ドキュメント UI ãŒãƒ¬ã‚¹ãƒãƒ³ã‚¹ãŒ HTML ã§ã‚るこずを認識できたす。
+
+///
+
+/// note | æŠ€è¡“詳çް
+
+`from starlette.templating import Jinja2Templates` ã‚’䜿うこずもできたす。
+
+**FastAPI** ã¯ã€é–‹ç™ºè€…であるあなたの利䟿性のために、`starlette.templating` ãšåŒã˜ã‚‚のを `fastapi.templating` ãšã—お提䟛しおいたす。しかし、利甚可胜なレスポンスのほずんどは Starlette ã‹ã‚‰ç›ŽæŽ¥æäŸ›ã•れおいたす。`Request` ã‚„ `StaticFiles` ã‚‚同様です。
+
+///
+
+## ãƒ†ãƒ³ãƒ—レヌトの䜜成 { #writing-templates }
+
+䟋えば、`templates/item.html` ã«æ¬¡ã®ã‚ˆã†ãªãƒ†ãƒ³ãƒ—レヌトを曞きたす:
+
+```jinja hl_lines="7"
+{!../../docs_src/templates/templates/item.html!}
+```
+
+### ãƒ†ãƒ³ãƒ—レヌトのコンテキスト倀 { #template-context-values }
+
+次のような HTML å†…で:
+
+{% raw %}
+
+```jinja
+Item ID: {{ id }}
+```
+
+{% endraw %}
+
+...枡した "context" ã® `dict` ã‹ã‚‰å–埗した `id` ãŒè¡šç€ºã•れたす:
+
+```Python
+{"id": id}
+```
+
+䟋えば、ID ãŒ `42` ã®å Žåˆã¯æ¬¡ã®ã‚ˆã†ã«ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã•れたす:
+
+```html
+Item ID: 42
+```
+
+### ãƒ†ãƒ³ãƒ—レヌトの `url_for` ã®åŒ•æ•° { #template-url-for-arguments }
+
+テンプレヌト内でも `url_for()` ã‚’䜿甚できたす。匕数には、察応する path operation é–¢æ•°ã§äœ¿ã‚ã‚Œã‚‹ã®ãšåŒã˜åŒ•数を取りたす。
+
+したがっお、次の郚分は:
+
+{% raw %}
+
+```jinja
+<a href="{{ url_for('read_item', id=id) }}">
+```
+
+{% endraw %}
+
+...path operation é–¢æ•° `read_item(id=id)` ãŒå‡Šç†ã™ã‚‹ã®ãšåŒã˜ URL ãžã®ãƒªãƒ³ã‚¯ã‚’生成したす。
+
+䟋えば、ID ãŒ `42` ã®å Žåˆã¯æ¬¡ã®ã‚ˆã†ã«ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã•れたす:
+
+```html
+<a href="/items/42">
+```
+
+## ãƒ†ãƒ³ãƒ—レヌトず静的ファむル { #templates-and-static-files }
+
+テンプレヌト内で `url_for()` ã‚’䜿甚し、䟋えば `name="static"` ã§ãƒžã‚Šãƒ³ãƒˆã—た `StaticFiles` ã«å¯Ÿã—お利甚できたす。
+
+```jinja hl_lines="4"
+{!../../docs_src/templates/templates/item.html!}
+```
+
+この䟋では、`static/styles.css` ã® CSS ãƒ•ァむルにリンクしたす:
+
+```CSS hl_lines="4"
+{!../../docs_src/templates/static/styles.css!}
+```
+
+たた、`StaticFiles` ã‚’䜿甚しおいるため、その CSS ãƒ•ァむルは **FastAPI** ã‚¢ãƒ—リケヌションから URL `/static/styles.css` ã§è‡ªå‹•的に配信されたす。
+
+## ã•らに詳しく { #more-details }
+
+より詳しい内容テンプレヌトのテスト方法などに぀いおは、<a href="https://www.starlette.dev/templates/" class="external-link" target="_blank">Starlette ã®ãƒ†ãƒ³ãƒ—レヌトに関するドキュメント</a>を参照しおください。
diff --git a/docs/ja/docs/advanced/testing-dependencies.md b/docs/ja/docs/advanced/testing-dependencies.md
new file mode 100644 (file)
index 0000000..78478a7
--- /dev/null
@@ -0,0 +1,53 @@
+# äŸå­˜é–¢ä¿‚のオヌバヌラむドによるテスト { #testing-dependencies-with-overrides }
+
+## ãƒ†ã‚¹ãƒˆæ™‚の䟝存関係のオヌバヌラむド { #overriding-dependencies-during-testing }
+
+テスト䞭に䟝存関係をオヌバヌラむドしたい堎面がいく぀かありたす。
+
+元の䟝存関係およびそれにぶら䞋がるサブ䟝存関係を実行したくない堎合です。
+
+代わりに、テストの間だけ特定のテストだけでも䜿われる別の䟝存関係を提䟛し、元の䟝存関係の倀が䜿われおいた箇所で利甚できる倀を返したいのです。
+
+### ãƒŠãƒŒã‚¹ã‚±ãƒŒã‚¹: å€–郚サヌビス { #use-cases-external-service }
+
+䟋ずしお、呌び出す必芁がある倖郚の認蚌プロバむダがあるずしたす。
+
+トヌクンを送るず、認蚌枈みナヌザヌが返っおきたす。
+
+このプロバむダはリク゚ストごずに課金されるかもしれず、テスト甚に固定のモックナヌザヌを䜿う堎合に比べお呌び出しに䜙分な時間がかかるかもしれたせん。
+
+倖郚プロバむダ自䜓の動䜜は䞀床はテストしたいでしょうが、実行されるすべおのテストで毎回呌び出す必芁はありたせん。
+
+この堎合、そのプロバむダを呌び出す䟝存関係をオヌバヌラむドし、テストのずきだけモックナヌザヌを返すカスタムの䟝存関係を䜿えたす。
+
+### app.dependency_overrides å±žæ€§ã‚’䜿う { #use-the-app-dependency-overrides-attribute }
+
+このような堎合のために、**FastAPI** ã‚¢ãƒ—リケヌションには `app.dependency_overrides` ãšã„う属性があり、これは単玔な `dict` ã§ã™ã€‚
+
+テスト甚に䟝存関係をオヌバヌラむドするには、キヌに元の䟝存関係関数を、倀にオヌバヌラむドする䟝存関係別の関数を蚭定したす。
+
+するず **FastAPI** ã¯å…ƒã®äŸå­˜é–¢ä¿‚の代わりにそのオヌバヌラむドを呌び出したす。
+
+{* ../../docs_src/dependency_testing/tutorial001_an_py310.py hl[26:27,30] *}
+
+/// tip | è±†çŸ¥è­˜
+
+アプリケヌション内のどこで䜿われおいる䟝存関係に察しおも、䟝存関係のオヌバヌラむドを蚭定できたす。
+
+元の䟝存関係は、*path operation é–¢æ•°*、*path operation ãƒ‡ã‚³ãƒ¬ãƒŒã‚¿*戻り倀を䜿わない堎合、`.include_router()` ã®å‘Œã³å‡ºã—など、さたざたな堎所で䜿われおいおもかたいたせん。
+
+FastAPI ã¯ãã‚Œã§ã‚‚オヌバヌラむドできたす。
+
+///
+
+その埌、`app.dependency_overrides` ã‚’空の `dict` ã«èš­å®šã™ã‚‹ã“ずで、オヌバヌラむドをリセット削陀できたす:
+
+```Python
+app.dependency_overrides = {}
+```
+
+/// tip | è±†çŸ¥è­˜
+
+䞀郚のテストの間だけ䟝存関係をオヌバヌラむドしたい堎合は、テストの開始時テスト関数内にオヌバヌラむドを蚭定し、終了時テスト関数の末尟にリセットするずよいです。
+
+///
diff --git a/docs/ja/docs/advanced/testing-events.md b/docs/ja/docs/advanced/testing-events.md
new file mode 100644 (file)
index 0000000..98e97fe
--- /dev/null
@@ -0,0 +1,11 @@
+# ã‚€ãƒ™ãƒ³ãƒˆã®ãƒ†ã‚¹ãƒˆ: lifespan ãš startup - shutdown { #testing-events-lifespan-and-startup-shutdown }
+
+テストで `lifespan` ã‚’実行する必芁がある堎合は、`with` æ–‡ãšäœµç”šã—お `TestClient` ã‚’䜿甚できたす:
+
+{* ../../docs_src/app_testing/tutorial004_py310.py hl[9:15,18,27:28,30:32,41:43] *}
+
+より詳しい内容は、[公匏 Starlette ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®ã€Œãƒ†ã‚¹ãƒˆã§ã® lifespan ã®å®Ÿè¡Œã€](https://www.starlette.dev/lifespan/#running-lifespan-in-tests) ã‚’参照しおください。
+
+非掚奚の `startup` ãŠã‚ˆã³ `shutdown` ã‚€ãƒ™ãƒ³ãƒˆã«ã€ã„おは、次のように `TestClient` ã‚’䜿甚できたす:
+
+{* ../../docs_src/app_testing/tutorial003_py310.py hl[9:12,20:24] *}
diff --git a/docs/ja/docs/advanced/testing-websockets.md b/docs/ja/docs/advanced/testing-websockets.md
new file mode 100644 (file)
index 0000000..7f708ea
--- /dev/null
@@ -0,0 +1,13 @@
+# WebSocket ã®ãƒ†ã‚¹ãƒˆ { #testing-websockets }
+
+WebSocket ã‚’テストするのにも同じ `TestClient` ã‚’䜿甚できたす。
+
+そのために、`with` æ–‡ã®äž­ã§ `TestClient` ã‚’䜿甚し、WebSocket ã«æŽ¥ç¶šã—たす:
+
+{* ../../docs_src/app_testing/tutorial002_py310.py hl[27:31] *}
+
+/// note | å‚™è€ƒ
+
+詳现に぀いおは、Starlette ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã€Œ<a href="https://www.starlette.dev/testclient/#testing-websocket-sessions" class="external-link" target="_blank">WebSocket ã®ãƒ†ã‚¹ãƒˆ</a>」を参照しおください。
+
+///
diff --git a/docs/ja/docs/advanced/using-request-directly.md b/docs/ja/docs/advanced/using-request-directly.md
new file mode 100644 (file)
index 0000000..1e564f5
--- /dev/null
@@ -0,0 +1,56 @@
+# Request ã‚’盎接䜿う { #using-the-request-directly }
+
+これたで、必芁なリク゚ストの各郚分を、その型ずずもに宣蚀しおきたした。
+
+次の堎所からデヌタを取埗したす:
+
+- ãƒ‘スのパラメヌタ
+- ãƒ˜ãƒƒãƒ€ãƒŒ
+- ã‚¯ãƒƒã‚­ãƒŒ
+- ãªã©
+
+こうするこずで、**FastAPI** ã¯ãã®ãƒ‡ãƒŒã‚¿ã‚’怜蚌し、倉換し、API ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’自動生成したす。
+
+しかし、`Request` ã‚ªãƒ–ゞェクトに盎接アクセスする必芁がある堎面もありたす。
+
+## `Request` ã‚ªãƒ–ゞェクトの詳çް { #details-about-the-request-object }
+
+**FastAPI** ã¯å†…郚的には **Starlette** ã®äžŠã«ã„く぀かのツヌル局を茉せたものなので、必芁に応じお Starlette ã® <a href="https://www.starlette.dev/requests/" class="external-link" target="_blank">`Request`</a> ã‚ªãƒ–ゞェクトを盎接䜿えたす。
+
+たた、`Request` ã‚ªãƒ–ゞェクトから盎接デヌタ䟋: ãƒœãƒ‡ã‚£ïŒ‰ã‚’取埗する堎合、そのデヌタは FastAPI ã«ã‚ˆã£ãŠæ€œèšŒãƒ»å€‰æ›ãƒ»ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆåŒ–OpenAPI ã«ã‚ˆã‚‹è‡ªå‹• API ãƒŠãƒŒã‚¶ãƒŒã‚€ãƒ³ã‚¿ãƒŒãƒ•ェヌス向けされたせん。
+
+ただし、通垞どおりに宣蚀された他のパラメヌタ䟋: Pydantic ãƒ¢ãƒ‡ãƒ«ã®ãƒœãƒ‡ã‚£ïŒ‰ã¯åŒ•き続き怜蚌・倉換・泚釈付けなどが行われたす。
+
+それでも、`Request` ã‚ªãƒ–ゞェクトを取埗するのが有甚な特定のケヌスがありたす。
+
+## `Request` ã‚ªãƒ–ゞェクトを盎接䜿う { #use-the-request-object-directly }
+
+たずえば、path operation é–¢æ•°å†…でクラむアントの IP ã‚¢ãƒ‰ãƒ¬ã‚¹ïŒãƒ›ã‚¹ãƒˆã‚’取埗したいずしたす。
+
+そのためには、リク゚ストに盎接アクセスする必芁がありたす。
+
+{* ../../docs_src/using_request_directly/tutorial001_py310.py hl[1,7:8] *}
+
+path operation é–¢æ•°ã®åŒ•数ずしお `Request` åž‹ã®ãƒ‘ラメヌタを宣蚀するず、**FastAPI** ã¯ãã®åŒ•数に `Request` ã‚’枡したす。
+
+/// tip | è±†çŸ¥è­˜
+
+この䟋では、`Request` åž‹ã®åŒ•数に加えお、パスパラメヌタも宣蚀しおいたす。
+
+そのため、パスパラメヌタは取り出され、怜蚌され、指定した型に倉換され、OpenAPI ã§æ³šé‡ˆïŒˆãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆåŒ–されたす。
+
+同様に、通垞どおり任意の他のパラメヌタを宣蚀し぀぀、远加で `Request` ã‚‚受け取れたす。
+
+///
+
+## `Request` ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ { #request-documentation }
+
+より詳しくは、<a href="https://www.starlette.dev/requests/" class="external-link" target="_blank">公匏 Starlette ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚µã‚€ãƒˆã® `Request` ã‚ªãƒ–ゞェクト</a>を参照しおください。
+
+/// note | æŠ€è¡“詳çް
+
+`from starlette.requests import Request` ã‚’䜿うこずもできたす。
+
+**FastAPI** ã¯é–‹ç™ºè€…である皆さんの䟿宜のために盎接提䟛しおいたすが、これは Starlette ã‹ã‚‰ãã®ãŸãŸæäŸ›ã•れおいるものです。
+
+///
index 6c68c9f0b128944ff9d2cbda94dbcbfddab9ff15..cb5e376de6a52a80eafb0dccaa02319df2e3e1ea 100644 (file)
@@ -38,13 +38,13 @@ $ pip install websockets
 
 ã—かし、これはWebSocketsのサヌバヌサむドに焊点を圓お、動䜜する䟋を瀺す最も簡単な方法です。
 
-{* ../../docs_src/websockets/tutorial001_py39.py hl[2,6:38,41:43] *}
+{* ../../docs_src/websockets/tutorial001_py310.py hl[2,6:38,41:43] *}
 
 ## `websocket` ã‚’䜜成する { #create-a-websocket }
 
 **FastAPI** ã‚¢ãƒ—リケヌションで、`websocket` ã‚’䜜成したす。
 
-{* ../../docs_src/websockets/tutorial001_py39.py hl[1,46:47] *}
+{* ../../docs_src/websockets/tutorial001_py310.py hl[1,46:47] *}
 
 /// note | æŠ€è¡“詳çް
 
@@ -58,7 +58,7 @@ $ pip install websockets
 
 WebSocketルヌトでは、メッセヌゞを埅機しお送信するために `await` ã‚’䜿甚できたす。
 
-{* ../../docs_src/websockets/tutorial001_py39.py hl[48:52] *}
+{* ../../docs_src/websockets/tutorial001_py310.py hl[48:52] *}
 
 ãƒã‚€ãƒŠãƒªã‚„テキストデヌタ、JSONデヌタを送受信できたす。
 
@@ -154,7 +154,7 @@ $ fastapi dev main.py
 
 WebSocket接続が閉じられるず、 `await websocket.receive_text()` ã¯äŸ‹å€– `WebSocketDisconnect` ã‚’発生させ、この䟋のようにキャッチしお凊理するこずができたす。
 
-{* ../../docs_src/websockets/tutorial003_py39.py hl[79:81] *}
+{* ../../docs_src/websockets/tutorial003_py310.py hl[79:81] *}
 
 è©Šã—おみるには、
 
diff --git a/docs/ja/docs/advanced/wsgi.md b/docs/ja/docs/advanced/wsgi.md
new file mode 100644 (file)
index 0000000..b06b4a3
--- /dev/null
@@ -0,0 +1,51 @@
+# WSGI ã®çµ„み蟌み - Flask、Django ãªã© { #including-wsgi-flask-django-others }
+
+[サブアプリケヌション - ãƒžã‚Šãƒ³ãƒˆ](sub-applications.md){.internal-link target=_blank}、[プロキシの背埌](behind-a-proxy.md){.internal-link target=_blank} ã§èŠ‹ãŸã‚ˆã†ã«ã€WSGI ã‚¢ãƒ—リケヌションをマりントできたす。
+
+そのために `WSGIMiddleware` ã‚’䜿甚しお、Flask ã‚„ Django ãªã©ã® WSGI ã‚¢ãƒ—リをラップできたす。
+
+## `WSGIMiddleware` ã®äœ¿ç”š { #using-wsgimiddleware }
+
+/// info | æƒ…å ±
+
+これには `a2wsgi` ã®ã‚€ãƒ³ã‚¹ãƒˆãƒŒãƒ«ãŒå¿…芁です。䟋: `pip install a2wsgi`。
+
+///
+
+`a2wsgi` ã‹ã‚‰ `WSGIMiddleware` ã‚’むンポヌトしたす。
+
+次に、そのミドルりェアで WSGI䟋: Flaskアプリをラップしたす。
+
+そしお、それをあるパスの䞋にマりントしたす。
+
+{* ../../docs_src/wsgi/tutorial001_py310.py hl[1,3,23] *}
+
+/// note | å‚™è€ƒ
+
+以前は `fastapi.middleware.wsgi` ã® `WSGIMiddleware` ã‚’䜿甚するこずが掚奚されおいたしたが、珟圚は非掚奚です。
+
+代わりに `a2wsgi` ãƒ‘ッケヌゞを䜿甚するこずを掚奚したす。䜿い方は同じです。
+
+`a2wsgi` ãƒ‘ッケヌゞがむンストヌルされおいるこずを確認し、`a2wsgi` ã‹ã‚‰ `WSGIMiddleware` ã‚’正しくむンポヌトしおください。
+
+///
+
+## ãƒã‚§ãƒƒã‚¯ { #check-it }
+
+これで、パス `/v1/` é…äž‹ãžã®ã™ã¹ãŠã®ãƒªã‚¯ã‚šã‚¹ãƒˆã¯ Flask ã‚¢ãƒ—リケヌションが凊理したす。
+
+それ以倖は **FastAPI** ãŒå‡Šç†ã—たす。
+
+実行しお <a href="http://localhost:8000/v1/" class="external-link" target="_blank">http://localhost:8000/v1/</a> ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãšã€Flask ã‹ã‚‰ã®ãƒ¬ã‚¹ãƒãƒ³ã‚¹ãŒè¡šç€ºã•れたす:
+
+```txt
+Hello, World from Flask!
+```
+
+さらに <a href="http://localhost:8000/v2" class="external-link" target="_blank">http://localhost:8000/v2</a> ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãšã€FastAPI ã‹ã‚‰ã®ãƒ¬ã‚¹ãƒãƒ³ã‚¹ãŒè¡šç€ºã•れたす:
+
+```JSON
+{
+    "message": "Hello World"
+}
+```
index 9f5152c08a6cf83b268715480657344d8ffa48e0..8b1ec072d629c2b27d634af3e548de975a00ed81 100644 (file)
@@ -1,8 +1,8 @@
-# ä»£æ›¿ãƒ„ヌルから受けたむンスピレヌションず比范
+# ä»£æ›¿ãƒ„ヌルから受けたむンスピレヌションず比范 { #alternatives-inspiration-and-comparisons }
 
 äœ•が**FastAPI**にむンスピレヌションを䞎えたのか、他の代替ツヌルず比范しおどうか、そしおそこから䜕を孊んだのかに぀いお。
 
-## ã¯ã˜ã‚ã«
+## ã¯ã˜ã‚ã« { #intro }
 
 **FastAPI**は、代替ツヌルのこれたでの働きがなければ存圚しなかったでしょう。
 
 
 ã—かし、その時点では、これらの機胜をすべお提䟛し、以前のツヌルから優れたアむデアを取り入れ、可胜な限り最高の方法でそれらを組み合わせ、それたで利甚できなかった蚀語機胜 (Python 3.6以降の型ヒント) ã‚’利甚したものを䜜る以倖に遞択肢はありたせんでした。
 
-## ä»¥å‰ã®ãƒ„ヌル
+## ä»¥å‰ã®ãƒ„ヌル { #previous-tools }
 
-### <a href="https://www.djangoproject.com/" class="external-link" target="_blank">Django</a>
+### <a href="https://www.djangoproject.com/" class="external-link" target="_blank">Django</a> { #django }
 
 Pythonのフレヌムワヌクの䞭で最もポピュラヌで、広く信頌されおいたす。Instagramのようなシステムの構築に䜿われおいたす。
 
 ãƒªãƒ¬ãƒŒã‚·ãƒ§ãƒŠãƒ«ãƒ‡ãƒŒã‚¿ãƒ™ãƒŒã‚¹ (MySQLやPostgreSQLなど) ãšæ¯”范的匷固に結合されおいるので、NoSQLデヌタベヌス (Couchbase、MongoDB、Cassandraなど) ã‚’メむンに利甚するこずは簡単ではありたせん。
 
-バック゚ンドでHTMLを生成するために䜜られたものであり、珟代的なフロント゚ンド (ReactやVue.js、Angularなど) ã‚„、他のシステム (IoTデバむスなど) ãšé€šä¿¡ã™ã‚‹APIを構築するために䜜られたものではありたせん。
+バック゚ンドでHTMLを生成するために䜜られたものであり、珟代的なフロント゚ンド (ReactやVue.js、Angularなど) ã‚„、他のシステム (<abbr title="Internet of Things - ãƒ¢ãƒŽã®ã‚€ãƒ³ã‚¿ãƒŒãƒãƒƒãƒˆ">IoT</abbr>デバむスなど) ãšé€šä¿¡ã™ã‚‹APIを構築するために䜜られたものではありたせん。
 
-### <a href="https://www.django-rest-framework.org/" class="external-link" target="_blank">Django REST Framework</a>
+### <a href="https://www.django-rest-framework.org/" class="external-link" target="_blank">Django REST Framework</a> { #django-rest-framework }
 
 Django REST Frameworkは、Djangoを䞋敷きにしおWeb APIを構築する柔軟なツヌルキットずしお、APIの機胜を向䞊させるために䜜られたした。
 
@@ -42,7 +42,7 @@ Django REST Framework ã¯ Tom Christie ã«ã‚ˆã£ãŠäœœæˆã•れたした。Starl
 
 ///
 
-### <a href="http://flask.pocoo.org/" class="external-link" target="_blank">Flask</a>
+### <a href="https://flask.palletsprojects.com" class="external-link" target="_blank">Flask</a> { #flask }
 
 Flask ã¯ã€Œãƒžã‚€ã‚¯ãƒ­ãƒ•レヌムワヌク」であり、デヌタベヌスずの統合のようなDjangoがデフォルトで持぀倚くの機胜は含たれおいたせん。
 
@@ -64,7 +64,7 @@ Flaskのシンプルさを考えるず、APIを構築するのに適しおいる
 
 ///
 
-### <a href="http://docs.python-requests.org" class="external-link" target="_blank">Requests</a>
+### <a href="https://requests.readthedocs.io" class="external-link" target="_blank">Requests</a> { #requests }
 
 **FastAPI**は実際には**Requests**の代替ではありたせん。それらのスコヌプは倧きく異なりたす。
 
@@ -80,7 +80,7 @@ Requestsは非垞にシンプルか぀盎感的なデザむンで䜿いやすく
 
 å…¬åŒã‚µã‚€ãƒˆã§ä»¥äž‹ã®ã‚ˆã†ã«èš€ã‚ã‚ŒãŠã„るのは、それが理由です。
 
-> Requestsは今たでで最もダりンロヌドされたPythonパッケヌゞである
+> Requestsは史䞊最もダりンロヌドされたPythonパッケヌゞのひず぀です
 
 äœ¿ã„方はずおも簡単です。䟋えば、`GET`リク゚ストを実行するには、このように曞けば良いです:
 
@@ -88,7 +88,7 @@ Requestsは非垞にシンプルか぀盎感的なデザむンで䜿いやすく
 response = requests.get("http://example.com/some/url")
 ```
 
-察応するFastAPIのパスオペレヌションはこのようになりたす:
+察応するFastAPIのAPIのpath operationはこのようになりたす:
 
 ```Python hl_lines="1"
 @app.get("/some/url")
@@ -106,7 +106,7 @@ def read_url():
 
 ///
 
-### <a href="https://swagger.io/" class="external-link" target="_blank">Swagger</a> / <a href="https://github.com/OAI/OpenAPI-Specification/" class="external-link" target="_blank">OpenAPI</a>
+### <a href="https://swagger.io/" class="external-link" target="_blank">Swagger</a> / <a href="https://github.com/OAI/OpenAPI-Specification/" class="external-link" target="_blank">OpenAPI</a> { #swagger-openapi }
 
 ç§ãŒDjango REST Frameworkに求めおいた䞻な機胜は、APIの自動的なドキュメント生成でした。
 
@@ -131,13 +131,13 @@ def read_url():
 
 ///
 
-### Flask REST ãƒ•レヌムワヌク
+### Flask REST ãƒ•レヌムワヌク { #flask-rest-frameworks }
 
 ã„く぀かのFlask RESTフレヌムワヌクがありたすが、それらを調査しおみたずころ、倚くのものが䞍適切な問題が残ったたた、䞭断されたり攟眮されおいるこずがわかりたした。
 
-### <a href="https://marshmallow.readthedocs.io/en/3.0/" class="external-link" target="_blank">Marshmallow</a>
+### <a href="https://marshmallow.readthedocs.io/en/stable/" class="external-link" target="_blank">Marshmallow</a> { #marshmallow }
 
-APIシステムで必芁ずされる䞻な機胜の䞀぀に、コヌド (Python) ã‹ã‚‰ãƒ‡ãƒŒã‚¿ã‚’取り出しお、ネットワヌクを介しお送れるものに倉換するデヌタの「<abbr title="marshalling, conversion">シリアラむれヌション</abbr>」がありたす。䟋えば、デヌタベヌスのデヌタを含むオブゞェクトをJSONオブゞェクトに倉換したり、`datetime` ã‚ªãƒ–ゞェクトを文字列に倉換するなどです。
+APIシステムで必芁ずされる䞻な機胜の䞀぀に、コヌド (Python) ã‹ã‚‰ãƒ‡ãƒŒã‚¿ã‚’取り出しお、ネットワヌクを介しお送れるものに倉換するデヌタの「<dfn title="別名: marshalling、倉換">シリアラむれヌション</dfn>」がありたす。䟋えば、デヌタベヌスのデヌタを含むオブゞェクトをJSONオブゞェクトに倉換したり、`datetime` ã‚ªãƒ–ゞェクトを文字列に倉換するなどです。
 
 APIが必芁ずするもう䞀぀の倧きな機胜はデヌタのバリデヌションであり、特定のパラメヌタが䞎えられた堎合にデヌタが有効であるこずを確認するこずです。䟋えば、あるフィヌルドがランダムな文字列ではなく `int` ã§ã‚るこずなどです。これは特に受信するデヌタに察しお䟿利です。
 
@@ -145,7 +145,7 @@ APIが必芁ずするもう䞀぀の倧きな機胜はデヌタのバリデヌ
 
 ã“れらの機胜は、Marshmallowが提䟛するものです。Marshmallowは玠晎らしいラむブラリで、私も以前に䜕床も䜿ったこずがありたす。
 
-しかし、それはPythonの型ヒントが存圚する前に䜜られたものです。そのため、すべおの<abbr title="デヌタがどのように圢成されるべきかの定矩">スキヌマ</abbr>を定矩するためには、Marshmallowが提䟛する特定のナヌティリティやクラスを䜿甚する必芁がありたす。
+しかし、それはPythonの型ヒントが存圚する前に䜜られたものです。そのため、すべおの<dfn title="デヌタがどのように構成されるべきかの定矩">スキヌマ</dfn>を定矩するためには、Marshmallowが提䟛する特定のナヌティリティやクラスを䜿甚する必芁がありたす。
 
 /// check | **FastAPI**ぞ䞎えたむンスピレヌション
 
@@ -153,9 +153,9 @@ APIが必芁ずするもう䞀぀の倧きな機胜はデヌタのバリデヌ
 
 ///
 
-### <a href="https://webargs.readthedocs.io/en/latest/" class="external-link" target="_blank">Webargs</a>
+### <a href="https://webargs.readthedocs.io/en/latest/" class="external-link" target="_blank">Webargs</a> { #webargs }
 
-APIに求められる他の倧きな機胜ずしお、<abbr title="Pythonデヌタの読み蟌みず倉換">受信したリク゚ストデヌタのパヌス</abbr>がありたす。
+APIに求められる他の倧きな機胜ずしお、<dfn title="Pythonデヌタぞの読み蟌みず倉換">受信したリク゚ストデヌタのパヌス</dfn>がありたす。
 
 WebargsはFlaskをはじめずするいく぀かのフレヌムワヌクの䞊にそれを提䟛するために䜜られたツヌルです。
 
@@ -175,7 +175,7 @@ Webargsは、Marshmallowず同じ開発者により䜜られたした。
 
 ///
 
-### <a href="https://apispec.readthedocs.io/en/stable/" class="external-link" target="_blank">APISpec</a>
+### <a href="https://apispec.readthedocs.io/en/stable/" class="external-link" target="_blank">APISpec</a> { #apispec }
 
 MarshmallowずWebargsはバリデヌション、パヌス、シリアラむれヌションをプラグむンずしお提䟛しおいたす。
 
@@ -205,7 +205,7 @@ OpenAPIずいう、APIに぀いおのオヌプンな暙準をサポヌトしお
 
 ///
 
-### <a href="https://flask-apispec.readthedocs.io/en/latest/" class="external-link" target="_blank">Flask-apispec</a>
+### <a href="https://flask-apispec.readthedocs.io/en/latest/" class="external-link" target="_blank">Flask-apispec</a> { #flask-apispec }
 
 Webargs、Marshmallow、APISpecを連携させたFlaskプラグむンです。
 
@@ -237,7 +237,7 @@ Flask-apispecはMarshmallowず同じ開発者により䜜成されたした。
 
 ///
 
-### <a href="https://nestjs.com/" class="external-link" target="_blank">NestJS</a> (ず<a href="https://angular.io/" class="external-link" target="_blank">Angular</a>)
+### <a href="https://nestjs.com/" class="external-link" target="_blank">NestJS</a> (ず<a href="https://angular.io/" class="external-link" target="_blank">Angular</a>) { #nestjs-and-angular }
 
 NestJSはAngularにむンスパむアされたJavaScript (TypeScript) NodeJSフレヌムワヌクで、Pythonですらありたせん。
 
@@ -259,13 +259,13 @@ Angular 2にむンスピレヌションを受けた、統合された䟝存性
 
 ///
 
-### <a href="https://sanic.readthedocs.io/en/latest/" class="external-link" target="_blank">Sanic</a>
+### <a href="https://sanic.readthedocs.io/en/latest/" class="external-link" target="_blank">Sanic</a> { #sanic }
 
 `asyncio`に基づいた、Pythonのフレヌムワヌクの䞭でも非垞に高速なものの䞀぀です。Flaskず非垞に䌌た䜜りになっおいたす。
 
 /// note | æŠ€è¡“詳çް
 
-Pythonの`asyncio`ルヌプの代わりに、`uvloop`が利甚されおいたす。それにより、非垞に高速です。
+Pythonの`asyncio`ルヌプの代わりに、<a href="https://github.com/MagicStack/uvloop" class="external-link" target="_blank">`uvloop`</a>が利甚されおいたす。それにより、非垞に高速です。
 
 `Uvicorn`ず`Starlette`に明らかなむンスピレヌションを䞎えおおり、それらは珟圚オヌプンなベンチマヌクにおいおSanicより高速です。
 
@@ -279,12 +279,10 @@ Pythonの`asyncio`ルヌプの代わりに、`uvloop`が利甚されおいたす
 
 ///
 
-### <a href="https://falconframework.org/" class="external-link" target="_blank">Falcon</a>
+### <a href="https://falconframework.org/" class="external-link" target="_blank">Falcon</a> { #falcon }
 
 Falconはもう䞀぀の高性胜Pythonフレヌムワヌクで、ミニマムに蚭蚈されおおり、Hugのような他のフレヌムワヌクの基盀ずしお動䜜したす。
 
-Pythonのりェブフレヌムワヌク暙準芏栌 (WSGI) ã‚’䜿甚しおいたすが、それは同期的であるためWebSocketなどの利甚には察応しおいたせん。ずはいえ、それでも非垞に高い性胜を持っおいたす。
-
 ã“れは、「リク゚スト」ず「レスポンス」の2぀のパラメヌタを受け取る関数を持぀ように蚭蚈されおいたす。そしお、リク゚ストからデヌタを「読み蟌み」、レスポンスにデヌタを「曞き蟌み」たす。この蚭蚈のため、Python暙準の型ヒントでリク゚ストのパラメヌタやボディを関数の匕数ずしお宣蚀するこずはできたせん。
 
 ãã®ãŸã‚ã€ãƒ‡ãƒŒã‚¿ã®ãƒãƒªãƒ‡ãƒŒã‚·ãƒ§ãƒ³ã€ã‚·ãƒªã‚¢ãƒ©ã‚€ã‚ŒãƒŒã‚·ãƒ§ãƒ³ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆåŒ–は、自動的にできずコヌドの䞭で行わなければなりたせん。あるいは、HugのようにFalconの䞊にフレヌムワヌクずしお実装されなければなりたせん。このような分断は、パラメヌタずしお1぀のリク゚ストオブゞェクトず1぀のレスポンスオブゞェクトを持぀ずいうFalconのデザむンにむンスピレヌションを受けた他のフレヌムワヌクでも起こりたす。
@@ -299,7 +297,7 @@ Hug (HugはFalconをベヌスにしおいたす) ãšäž€ç·’に、**FastAPI**が`r
 
 ///
 
-### <a href="https://moltenframework.com/" class="external-link" target="_blank">Molten</a>
+### <a href="https://moltenframework.com/" class="external-link" target="_blank">Molten</a> { #molten }
 
 **FastAPI**を構築する最初の段階でMoltenを発芋したした。そしお、それは非垞に䌌たようなアむデアを持っおいたす。
 
@@ -323,7 +321,7 @@ Pydanticのようなデヌタのバリデヌション、シリアラむれヌシ
 
 ///
 
-### <a href="http://www.hug.rest/" class="external-link" target="_blank">Hug</a>
+### <a href="https://github.com/hugapi/hug" class="external-link" target="_blank">Hug</a> { #hug }
 
 Hugは、Pythonの型ヒントを利甚しおAPIパラメヌタの型宣蚀を実装した最初のフレヌムワヌクの1぀です。これは玠晎らしいアむデアで、他のツヌルが同じこずをするきっかけずなりたした。
 
@@ -353,7 +351,7 @@ Hugは、**FastAPI**がヘッダヌやクッキヌを蚭定するために関数
 
 ///
 
-### <a href="https://github.com/encode/apistar" class="external-link" target="_blank">APIStar</a> (<= 0.5)
+### <a href="https://github.com/encode/apistar" class="external-link" target="_blank">APIStar</a> (<= 0.5) { #apistar-0-5 }
 
 **FastAPI**を構築するこずを決める盎前に、**APIStar**サヌバヌを芋぀けたした。それは私が探しおいたものがほがすべお含たれおおり、玠晎らしいデザむンでした。
 
@@ -401,9 +399,9 @@ APIStarはTom Christieにより開発されたした。以䞋の開発者でも
 
 ///
 
-## **FastAPI**が利甚しおいるもの
+## **FastAPI**が利甚しおいるもの { #used-by-fastapi }
 
-### <a href="https://docs.pydantic.dev/" class="external-link" target="_blank">Pydantic</a>
+### <a href="https://docs.pydantic.dev/" class="external-link" target="_blank">Pydantic</a> { #pydantic }
 
 Pydanticは、Pythonの型ヒントを元にデヌタのバリデヌション、シリアラむれヌション、 (JSON Schemaを䜿甚した) ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’定矩するラむブラリです。
 
@@ -419,9 +417,9 @@ Marshmallowに匹敵したすが、ベンチマヌクではMarshmallowよりも
 
 ///
 
-### <a href="https://www.starlette.dev/" class="external-link" target="_blank">Starlette</a>
+### <a href="https://www.starlette.dev/" class="external-link" target="_blank">Starlette</a> { #starlette }
 
-Starletteは、軜量な<abbr title="非同期Python webを構築するための新暙準">ASGI</abbr>フレヌムワヌク/ツヌルキットで、高性胜な非同期サヌビスの構築に最適です。
+Starletteは、軜量な<dfn title="非同期Python Webアプリケヌションを構築するための新しい暙準">ASGI</dfn>フレヌムワヌク/ツヌルキットで、高性胜な非同期サヌビスの構築に最適です。
 
 éžåžžã«ã‚·ãƒ³ãƒ—ルで盎感的です。簡単に拡匵できるように蚭蚈されおおり、モゞュヌル化されたコンポヌネントを持っおいたす。
 
@@ -429,15 +427,14 @@ Starletteは、軜量な<abbr title="非同期Python webを構築するための
 
 * éžåžžã«æ„Ÿå‹•的な性胜。
 * WebSocketのサポヌト。
-* GraphQLのサポヌト。
 * ã‚€ãƒ³ãƒ—ロセスのバックグラりンドタスク。
 * èµ·å‹•およびシャットダりンむベント。
-* requestsに基づいお構築されたテストクラむアント。
+* HTTPXに基づいお構築されたテストクラむアント。
 * CORS、GZip、静的ファむル、ストリヌミング応答。
 * ã‚»ãƒƒã‚·ãƒ§ãƒ³ãšã‚¯ãƒƒã‚­ãƒŒã®ã‚µãƒãƒŒãƒˆã€‚
 * 100%のテストカバレッゞ。
 * 100%の型泚釈付きコヌドベヌス。
-* ãƒãƒŒãƒ‰ãªäŸå­˜é–¢ä¿‚はない。
+* ãƒãƒŒãƒ‰ãªäŸå­˜é–¢ä¿‚は少ない。
 
 Starletteは、珟圚テストされおいるPythonフレヌムワヌクの䞭で最も速いフレヌムワヌクです。フレヌムワヌクではなくサヌバヌであるUvicornだけが䞊回っおいたす。
 
@@ -465,7 +462,7 @@ webに関するコアな郚分を党お扱いたす。その䞊に機胜を远
 
 ///
 
-### <a href="https://www.uvicorn.dev/" class="external-link" target="_blank">Uvicorn</a>
+### <a href="https://www.uvicorn.dev/" class="external-link" target="_blank">Uvicorn</a> { #uvicorn }
 
 Uvicornは非垞に高速なASGIサヌバヌで、uvloopずhttptoolsにより構成されおいたす。
 
@@ -477,12 +474,12 @@ Starletteや**FastAPI**のサヌバヌずしお掚奚されおいたす。
 
 **FastAPI**アプリケヌションを実行するメむンのりェブサヌバヌである点。
 
-Gunicornず組み合わせるこずで、非同期でマルチプロセスなサヌバヌを持぀こずがきたす。
+コマンドラむンオプション `--workers` ã‚’䜿っお、非同期のマルチプロセスサヌバヌにできたす。
 
 è©³çŽ°ã¯[デプロむ](deployment/index.md){.internal-link target=_blank}の項目で確認しおください。
 
 ///
 
-## ãƒ™ãƒ³ãƒãƒžãƒŒã‚¯ ãš ã‚¹ãƒ”ヌド
+## ãƒ™ãƒ³ãƒãƒžãƒŒã‚¯ ãš ã‚¹ãƒ”ヌド { #benchmarks-and-speed }
 
 Uvicorn、Starlette、FastAPIの違いを理解、比范、確認するには、[ベンチマヌク](benchmarks.md){.internal-link target=_blank}を確認しおください。
index 90a2e2ee5548bd62ec431597a17f8e22a7bea13f..bf4acda3f76b4a627ba94f1082e5b3aaa8813b49 100644 (file)
@@ -1,18 +1,18 @@
-# äžŠè¡Œå‡Šç†ãš async / await
+# äžŠè¡Œå‡Šç†ãš async / await { #concurrency-and-async-await }
 
-*path operation é–¢æ•°*のための `async def` ã«é–¢ã™ã‚‹è©³çŽ°ãšéžåŒæœŸ (asynchronous) ã‚³ãƒŒãƒ‰ã€äžŠè¡Œå‡Šç† (Concurrency)、そしお、䞊列凊理 (Parallelism) ã®èƒŒæ™¯ã«ã€ã„お。
+*path operation é–¢æ•°*のための `async def` æ§‹æ–‡ã«é–¢ã™ã‚‹è©³çŽ°ãšã€éžåŒæœŸã‚³ãƒŒãƒ‰ã€äžŠè¡Œå‡Šç†ã€äžŠåˆ—å‡Šç†ã®èƒŒæ™¯ã«ã€ã„ãŠã§ã™ã€‚
 
-## æ€¥ã„でいたすか
+## æ€¥ã„でいたすか { #in-a-hurry }
 
-<abbr title="too long; didn't read (長すぎお読めない人のための芁玄ずいう意味のスラング)"><strong>TL;DR:</strong></abbr>
+<abbr title="too long; didn't read - é•·ã™ãŽãŠèª­ãŸãªã‹ã£ãŸ"><strong>TL;DR:</strong></abbr>
 
-ʬ¡ã\81®ã\82\88ã\81\86ã\81ªã\80\81`await` Ã£\82\92Àœ¿ç\94šã\81\97ã\81Šå\91΋\81³å\87ºã\81\99ã\81¹ã\81\8dã\82µã\83΋\83\89ã\83\91ã\83΋\83\86ã\82£ã\83©ã\82ۋ\83\96ã\83©ã\83ªã\82\92Àœ¿ç\94šã\81\97ã\81Šã\81\84ã\82\8b堎å\90\88:
+ʬ¡ã\81®ã\82\88ã\81\86ã\81« `await` Ã£\81§å\91΋\81³å\87ºã\81\99ã\82\88ã\81\86Ê\8c\87瀺ã\81\95ã\82\8cã\81Šã\81\84ã\82\8bã\82µã\83΋\83\89ã\83\91ã\83΋\83\86ã\82£ã\83©ã\82ۋ\83\96ã\83©ã\83ªã\82\92Àœ¿ã\81£ã\81Šã\81\84ã\82\8bã\81ªã\82\89:
 
 ```Python
 results = await some_library()
 ```
 
-以䞋の様に `async def` ã‚’䜿甚しお*path operation é–¢æ•°*を宣蚀したす。
+*path operation é–¢æ•°*は次のように `async def` ã§å®£èš€ã—たす:
 
 ```Python hl_lines="2"
 @app.get('/')
@@ -23,13 +23,13 @@ async def read_results():
 
 /// note | å‚™è€ƒ
 
-`async def` ã‚’䜿甚しお䜜成された関数の内郚でしか `await` ã¯äœ¿ç”šã§ããŸã›ã‚“。
+`await` ã¯ `async def` ã§äœœã‚‰ã‚ŒãŸé–¢æ•°ã®å†…郚でしか䜿えたせん。
 
 ///
 
 ---
 
-ã\83\87ã\83΋\82¿ã\83\99ã\83΋\82¹ã\80\81APIã\80\81ã\83\95ã\82¡ã\82ۋ\83«ã\82·ã\82¹ã\83\86ã\83 ã\81ªã\81©ã\81šé\80\9aÀ¿¡ã\81\97ã\80\81`await` Ã£\81®Àœ¿ç\94šã\82\92ã\82µã\83\9dã\83΋\83\88ã\81\97ã\81Šã\81\84ã\81ªã\81\84ã\82µã\83΋\83\89ã\83\91ã\83΋\83\86ã\82£ã\83©ã\82ۋ\83\96ã\83©ã\83ª (ç\8fŸå\9cšã\81®ã\81ȋ\81šã\82\93ã\81©ã\81®ã\83\87ã\83΋\82¿ã\83\99ã\83΋\82¹ã\83©ã\82ۋ\83\96ã\83©ã\83ªã\81«åœ\93ã\81Šã\81¯ã\81Ÿã\82\8aã\81Ÿã\81\99) Ã£\82\92Àœ¿ç\94šã\81\97ã\81Šã\81\84ã\82\8b堎å\90\88ã\80\81ʬ¡ã\81®Ê§\98ã\81«ã\80\81Ã¥\8d\98ã\81« `def` Ã£\82\92Àœ¿ç\94šã\81\97ã\81Šé\80\9a垞é\80\9aã\82\8a *path operation Ã©\96¢Ê\95°* Ã£\82\92宣蚀しおください:
+ã\83\87ã\83΋\82¿ã\83\99ã\83΋\82¹ã\80\81APIã\80\81ã\83\95ã\82¡ã\82ۋ\83«ã\82·ã\82¹ã\83\86ã\83 ã\81ªã\81©ã\81šé\80\9aÀ¿¡ã\81\97ã\81ۋ\81€ `await` Ã£\81®Àœ¿ç\94šã\82\92ã\82µã\83\9dã\83΋\83\88ã\81\97ã\81Šã\81\84ã\81ªã\81\84ã\82µã\83΋\83\89ã\83\91ã\83΋\83\86ã\82£ã\83©ã\82ۋ\83\96ã\83©ã\83ª (ç\8fŸå\9cšã\81®ã\81šã\81\93ã\82\8då€\9aã\81\8fã\81®ã\83\87ã\83΋\82¿ã\83\99ã\83΋\82¹ã\83©ã\82ۋ\83\96ã\83©ã\83ªã\81\8cÚ©²åœ\93ã\81\97ã\81Ÿã\81\99) Ã£\82\92Àœ¿ã\81£ã\81Šã\81\84ã\82\8b堎å\90\88ã\80\81*path operation Ã©\96¢Ê\95°*ã\81¯é\80\9a垞ã\81©ã\81\8aã\82\8a `def` Ã£\81§宣蚀しおください:
 
 ```Python hl_lines="2"
 @app.get('/')
@@ -40,272 +40,307 @@ def results():
 
 ---
 
-アプリケヌションが (どういうわけか) ä»–の䜕ずも通信せず、応答を埅぀必芁がない堎合は、`async def` ã‚’䜿甚しお䞋さい。
+アプリケヌションが (䜕らかの理由で) ã»ã‹ã®äœ•ずも通信せず応答を埅぀必芁がないなら、`await` ã‚’内郚で䜿わなくおも `async def` ã‚’䜿っおください。
 
 ---
 
-よく分からない堎合は、通垞の `def` ã‚’䜿甚しお䞋さい。
+よく分からない堎合は、通垞の `def` ã‚’䜿っおください。
 
 ---
 
-**備考**: *path operation é–¢æ•°*に必芁なだけ `def` ãš `async def` ã‚’混圚させ、それぞれに最適なオプションを䜿甚しお定矩できたす。それに応じおFastAPIは正しい凊理を行いたす。
+**備考**: å¿…芁に応じお *path operation é–¢æ•°* ã§ã¯ `def` ãš `async def` ã‚’混圚させ、それぞれに最適な遞択肢で定矩できたす。FastAPI ã¯é©åˆ‡ã«å‡Šç†ã—たす。
 
-ã\81šã\81«ã\81\8bã\81\8fã\80\81Àž\8aښ\98ã\81®ã\81\84ã\81\9aã\82\8cã\81®å Žå\90\88ã\81§ã\82\82FastAPIã\81¯é\9d\9eÃ¥\90\8cÊ\9c\9fã\81§å\8b\95Àœ\9cã\81\97ã\80\81非垞に高速です。
+ã\81\84ã\81\9aã\82\8cã\81®å Žå\90\88ã\81§ã\82\82ã\80\81FastAPI Ã£\81¯é\9d\9eÃ¥\90\8cÊ\9c\9fã\81§å\8b\95Àœ\9cã\81\97非垞に高速です。
 
-ã\81\97ã\81\8bã\81\97ã\80\81Àž\8aښ\98ã\81®ã\82¹ã\83\86ã\83\83ã\83\97ã\81«åŸ\93ã\81\86ã\81\93ã\81šã\81§ã\80\81ã\83\91ã\83\95ã\82©ã\83΋\83\9eã\83³ã\82¹ã\81®Ê\9c\80é\81©å\8c\96ã\82\92Ú¡\8cã\81\88たす。
+ã\81\9fã\81 ã\81\97Àž\8aښ\98ã\81®Ê\89\8bé \86ã\81«åŸ\93ã\81\86ã\81\93ã\81šã\81§ã\80\81ã\81\95ã\82\89ã\81«ã\83\91ã\83\95ã\82©ã\83΋\83\9eã\83³ã\82¹Ê\9c\80é\81©å\8c\96ã\81\8cÃ¥\8f¯Ú\83ϋ\81«ã\81ªã\82\8aたす。
 
-## æŠ€è¡“詳çް
+## æŠ€è¡“詳çް { #technical-details }
 
-珟代版のPythonは「**非同期コヌド**」を、「**コルヌチン**」ず称されるものを利甚しおサポヌトしおいたす。これは **`async` ãš `await`** æ§‹æ–‡ã‚’甚いたす。
+モダンな Python ã¯ **「非同期コヌド」** ã‚’ **「コルヌチン」** ãšå‘Œã°ã‚Œã‚‹ä»•組みでサポヌトしおおり、構文は **`async` ãš `await`** ã§ã™ã€‚
 
-次のセクションで、フレヌズ内のパヌツを順に芋おいきたしょう:
+以䞋のセクションで、このフレヌズをパヌツごずに芋おいきたす:
 
 * **非同期コヌド**
 * **`async` ãš `await`**
 * **コルヌチン**
 
-## éžåŒæœŸã‚³ãƒŒãƒ‰
+## éžåŒæœŸã‚³ãƒŒãƒ‰ { #asynchronous-code }
 
-非同期コヌドずは、蚀語💬がコヌド内のどこかで、コンピュヌタ/プログラム🀖に *他の䜕か* ãŒã©ã“か別の箇所で終了するのを埅぀ように䌝える手段を持っおいるこずを意味したす。*他の䜕か* ã¯ã€Œé…いファむル📝」ず呌ばれおいるずしたしょう.
+非同期コヌドずは、蚀語 ðŸ’¬ ãŒã‚³ãƒŒãƒ‰ã®ã©ã“かの時点で、コンピュヌタ/プログラム ðŸ€– ã«ã€Œã©ã“か別のずころで終わるたで、別の䜕か」を埅぀必芁があるず䌝える手段を持っおいる、ずいうこずです。その「別の䜕か」を「遅いファむル」📝 ãšå‘Œã¶ã“ずにしたしょう。
 
-ã\81\97ã\81\9fã\81\8cã\81£ã\81Šã\80\81ã\82³ã\83³ã\83\94ã\83¥ã\83΋\82¿ã\81¯ã\80\8cé\81\85ã\81\84ã\83\95ã\82¡ã\82ۋ\83«ð\9f\93\9dã\80\8dã\81\8cçµ\82˼\86ã\81\99ã\82\8bã\81Ÿã\81§ã\80\81À»\96ã\81®å\87Šç\90\86ã\81\8cã\81§ã\81\8dたす。
+ã\81\9dã\81®é\96\93ã\80\81ã\82³ã\83³ã\83\94ã\83¥ã\83΋\82¿ã\81¯ã\80\8cé\81\85ã\81\84ã\83\95ã\82¡ã\82ۋ\83«ã\80\8dð\9f\93\9d Ã£\81\8cçµ\82ã\82\8fã\82\8bã\81Ÿã\81§ã\80\81À»\96ã\81®Àœ\9cÊ¥­ã\82\92é\80²ã\82\81ã\82\89ã\82\8cたす。
 
-ã\82³ã\83³ã\83\94ã\83¥ã\83΋\82¿/ã\83\97ã\83­ã\82°ã\83©ã\83 ð\9f€\96ã\81¯å\86\8dã\81³åŸ\85Ê©\9fã\81\99ã\82\8bÊ©\9fÀŒ\9aã\81\8cã\81\82ã\82\8bã\81šã\81\8dã\82\84ã\80\81ã\81\9dã\81®Ê\99\82ç\82¹ã\81§Ú¡\8cã\81£ã\81Šã\81\84ã\81\9fã\81\99ã\81¹ã\81Šã\81®Àœ\9cÊ¥­ã\81\8cå®\8c˼\86ã\81\99ã\82\8bã\81\9fã\81³ã\81«Ê\88ȋ\81£ã\81Šã\81\8dã\81Ÿã\81\99ã\80\82ã\81\9dã\81\97ã\81Šã\80\81å¿\85ڊ\81ã\81ªå\87Šç\90\86ã\82\92ã\81\97ã\81ªã\81\8cã\82\89ã\80\81ã\82³ã\83³ã\83\94ã\83¥ã\83΋\82¿/ã\83\97ã\83­ã\82°ã\83©ã\83 ð\9f€\96ã\81\8cåŸ\85ã\81£ã\81Šã\81\84ã\81\9fÃ¥\87Šç\90\86ã\81®ã\81©ã\82\8cã\81\8bã\81\8cçµ\82ã\82\8fã\81£ã\81Šã\81\84ã\82\8bã\81\8bã\81©ã\81\86ã\81\8b確ڪ\8dしたす。
+ã\81\9dã\81®åŸ\8cã\80\81ã\82³ã\83³ã\83\94ã\83¥ã\83΋\82¿/ã\83\97ã\83­ã\82°ã\83©ã\83  Ã°\9f€\96 Ã£\81¯ã\80\81ã\81Ÿã\81\9fåŸ\85ã\81€Ê©\9fÀŒ\9aã\81\8cÊ\9d¥ã\81\9fã\81šã\81\8dã\82\84ã\80\81ã\81\9dã\81®Ê\99\82ç\82¹ã\81§Ê\8a±ã\81\88ã\81Šã\81\84ã\81\9fÀœ\9cÊ¥­ã\82\92ã\81\99ã\81¹ã\81Šçµ\82ã\81\88ã\81\9fã\81šã\81\8dã\81«Ê\88ȋ\81£ã\81Šã\81\8dã\81Ÿã\81\99ã\80\82ã\81\9dã\81\97ã\81Šã\80\81åŸ\85ã\81£ã\81Šã\81\84ã\81\9fã\82¿ã\82¹ã\82¯ã\81®ã\81©ã\82\8cã\81\8bã\81\8cçµ\82ã\82\8fã\81£ã\81Šã\81\84ã\81ªã\81\84ã\81\8b確ڪ\8dã\81\97ã\80\81å¿\85ڊ\81ã\81ªå\87Šç\90\86ã\82\92å®\9fÚ¡\8cしたす。
 
-次に、それ🀖が最初のタスク (芁するに、先皋の「遅いファむル📝」)を終わらせお、そのタスクの結果を䜿う必芁がある凊理を続けたす。
+次に、最初に終わったタスク (たずえば「遅いファむル」📝) ã‚’取り、続きの凊理を行いたす。
 
-この「他の䜕かを埅぀」ずは、通垞以䞋の様なものを埅぀ような (プロセッサずRAMメモリの速床に比べお) ç›žå¯Ÿçš„に「遅い」<abbr title="むンプットずアりトプット">I/O</abbr> æ“äœœã‚’指したす:
+この「別の䜕かを埅぀」は、通垞 <abbr title="Input and Output - å…¥å‡ºåŠ›">I/O</abbr> æ“äœœã‚’指し、(プロセッサや RAM ã®é€ŸåºŠã«æ¯”べお) ç›žå¯Ÿçš„に「遅い」埅機を䌎いたす。䟋えば次のようなものです:
 
-* Ã£\83\8dã\83\83ã\83\88ã\83¯ã\83΋\82¯çµ\8cç\94±ã\81§ã\82¯ã\83©ã\82ۋ\82¢ã\83³ã\83\88ã\81\8bã\82\89é\80\81À¿¡ã\81\95ã\82\8cã\82\8bã\83\87ã\83΋\82¿
-* Ã£\83\8dã\83\83ã\83\88ã\83¯ã\83΋\82¯çµ\8cç\94±ã\81§ã\82¯ã\83©ã\82ۋ\82¢ã\83³ã\83\88ã\81\8cÃ¥\8f\97À¿¡ã\81\99ã\82\8bã\80\81ã\83\97ã\83­ã\82°ã\83©ã\83 ã\81\8bã\82\89é\80\81À¿¡ã\81\95ã\82\8cã\81\9fã\83\87ã\83΋\82¿
-* Ã£\82·ã\82¹ã\83\86ã\83 ã\81«ã\82\88ã\81£ã\81ŠÚª­ã\81¿å\8f\96ã\82\89ã\82\8cã\80\81ã\83\97ã\83­ã\82°ã\83©ã\83 ã\81«Êž¡ã\81\95ã\82\8cã\82\8bã\83\87ã\82£ã\82¹ã\82¯å\86\85ã\81®ã\83\95ã\82¡ã\82ۋ\83«å\86\85容
-* Ã£\83\97ã\83­ã\82°ã\83©ã\83 ã\81\8cã\82·ã\82¹ã\83\86ã\83 ã\81«Êž¡ã\81\97ã\81Šã\80\81ã\83\87ã\82£ã\82¹ã\82¯ã\81«Ê\9bžã\81\8dڟŒã\82\80Ã¥\86\85容
-* ãƒªãƒ¢ãƒŒãƒˆAPI操䜜
+* Ã£\82¯ã\83©ã\82ۋ\82¢ã\83³ã\83\88ã\81\8bã\82\89ã\83\8dã\83\83ã\83\88ã\83¯ã\83΋\82¯çµ\8cç\94±ã\81§ã\83\87ã\83΋\82¿ã\81\8cé\80\81ã\82\89ã\82\8cã\81Šã\81\8fã\82\8bã\81®ã\82\92åŸ\85ã\81€
+* Ã£\83\97ã\83­ã\82°ã\83©ã\83 ã\81\8cé\80\81À¿¡ã\81\97ã\81\9fã\83\87ã\83΋\82¿ã\82\92ã\82¯ã\83©ã\82ۋ\82¢ã\83³ã\83\88ã\81\8cã\83\8dã\83\83ã\83\88ã\83¯ã\83΋\82¯çµ\8cç\94±ã\81§å\8f\97ã\81\91Ã¥\8f\96ã\82\8bã\81®ã\82\92åŸ\85ã\81€
+* Ã£\83\87ã\82£ã\82¹ã\82¯Àž\8aã\81®ã\83\95ã\82¡ã\82ۋ\83«å\86\85容ã\81\8cã\82·ã\82¹ã\83\86ã\83 ã\81«ã\82\88ã\82\8aÚª­ã\81¿å\8f\96ã\82\89ã\82\8cã\80\81ã\83\97ã\83­ã\82°ã\83©ã\83 ã\81«Êž¡ã\81\95ã\82\8cã\82\8bã\81®ã\82\92åŸ\85ã\81€
+* Ã£\83\97ã\83­ã\82°ã\83©ã\83 ã\81\8cã\82·ã\82¹ã\83\86ã\83 ã\81«Êž¡ã\81\97ã\81\9fÃ¥\86\85容ã\81\8cã\83\87ã\82£ã\82¹ã\82¯ã\81«Ê\9bžã\81\8dڟŒã\81Ÿã\82\8cã\82\8bã\81®ã\82\92åŸ\85ã\81€
+* ãƒªãƒ¢ãƒŒãƒˆ API æ“äœœ
 * ãƒ‡ãƒŒã‚¿ãƒ™ãƒŒã‚¹æ“äœœã®å®Œäº†
-* Ã£\83\87ã\83΋\82¿ã\83\99ã\83΋\82¹ã\82¯ã\82šã\83ªã\81\8cçµ\90Ê\9e\9cã\82\92Ú¿\94ã\81\99ã\81\93ã\81š
-* ãªã©ã€‚
+* Ã£\83\87ã\83΋\82¿ã\83\99ã\83΋\82¹ã\82¯ã\82šã\83ªã\81\8cçµ\90Ê\9e\9cã\82\92Ú¿\94ã\81\99ã\81®ã\82\92åŸ\85ã\81€
+* ãªã©
 
-実行時間のほずんどが<abbr title="むンプットずアりトプット">I/O</abbr> æ“äœœã®åŸ…ち時間が占めるため、このような操䜜を「I/O ãƒã‚Šãƒ³ãƒ‰ã€æ“äœœãšèš€ã„たす。
+実行時間の倧半が <abbr title="Input and Output - å…¥å‡ºåŠ›">I/O</abbr> æ“äœœã®åŸ…ち時間に費やされるため、これらは「I/O ãƒã‚Šãƒ³ãƒ‰ã€ãªæ“äœœãšå‘Œã°ã‚ŒãŸã™ã€‚
 
-ã\82³ã\83³ã\83\94ã\83¥ã\83΋\82¿/ã\83\97ã\83­ã\82°ã\83©ã\83 ã\81\8cã\81\93ã\81®ã\82\88ã\81\86ã\81ªé\81\85ã\81\84ã\82¿ã\82¹ã\82¯ã\81šã\80\8cÃ¥\90\8cÊ\9c\9f (ã\82¿ã\82¹ã\82¯ã\81®çµ\90Ê\9e\9cã\82\92Ã¥\8f\96åŸ\97ã\81\97ã\81ŠÀœ\9cÊ¥­ã\82\92ç¶\9aÚ¡\8cã\81\99ã\82\8bã\81\9fã\82\81ã\81«ã\80\81Àœ\95ã\82\82ã\81\9bã\81\9aã\81«ã\80\81ã\82¿ã\82¹ã\82¯ã\81\8cå®\8c˼\86ã\81\99ã\82\8bç\9eŽ\96\93ã\82\92Ê­£ç¢ºã\81«åŸ\85ã\81€)ã\80\8dã\81\99ã\82\8bå¿\85ڊ\81ã\81\8cã\81ªã\81\84ã\81\9fã\82\81ã\80\81ã\80\8cé\9d\9eÃ¥\90\8cÊ\9c\9fã\80\8dã\81šå\91΋\81°ã\82\8cã\81Ÿã\81\99。
+ã\80\8cé\9d\9eÃ¥\90\8cÊ\9c\9fã\80\8dã\81šå\91΋\81°ã\82\8cã\82\8bã\81®ã\81¯ã\80\81ã\82³ã\83³ã\83\94ã\83¥ã\83΋\82¿/ã\83\97ã\83­ã\82°ã\83©ã\83 ã\81\8cã\81\9dã\81®é\81\85ã\81\84ã\82¿ã\82¹ã\82¯ã\81šã\80\8cÃ¥\90\8cÊ\9c\9fã\80\8d(ã\82¿ã\82¹ã\82¯ã\81\8cã\81¡ã\82\87ã\81\86ã\81©çµ\82ã\82\8fã\82\8bç\9eŽ\96\93ã\82\92ã\80\81Àœ\95ã\82\82ã\81\9bã\81\9aã\81«åŸ\85ã\81€) Ã£\81\99ã\82\8bå¿\85ڊ\81ã\81\8cã\81ªã\81\84ã\81\8bã\82\89ã\81§ã\81\99ã\80\82çµ\90Ê\9e\9cã\82\92Ã¥\8f\97ã\81\91Ã¥\8f\96ã\81£ã\81Šå\87Šç\90\86ã\82\92ç¶\9aã\81\91ã\82\8bã\81\9fã\82\81ã\81«ã\80\81空åŸ\85ã\81¡ã\81\99ã\82\8bå¿\85ڊ\81ã\81\8cã\81\82ã\82\8aã\81Ÿã\81\9bã\82\93。
 
-その代わりに、「非同期」システムであるこずにより、いったん終了するず、タスクは、コンピュヌタ/プログラムが既に開始した凊理がすべお完了するのをほんの少し (数マむクロ秒) åŸ…っお、結果を受け取りに戻っおきたす。そしお、凊理を継続したす。
+代わりに「非同期」システムでは、タスクが終わったら、コンピュヌタ/プログラムが取りかかっおいる䜜業が終わるたで (数マむクロ秒ほど) å°‘し埅ち、結果を受け取りに戻っお凊理を続けられたす。
 
-「同期」の堎合 (「非同期」ずは異なり)、「シヌケンシャル」ずいう甚語もよく䜿甚されたす。これは、コンピュヌタ/プログラムがすべおのステップを (埅機が䌎う堎合でも別のタスクに切り替えるこずなく) é †ç•ªã«å®Ÿè¡Œã™ã‚‹ãŸã‚ã§ã™ã€‚
+「非同期」ず察になる「同期」は、「シヌケンシャル」ず呌ばれるこずもありたす。埅機が含たれおいおも、別のタスクに切り替える前にコンピュヌタ/プログラムが手順を順番に実行するためです。
 
-### äžŠè¡Œå‡Šç†ãšãƒãƒ³ãƒãƒŒã‚¬ãƒŒ
+### äžŠè¡Œå‡Šç†ãšãƒãƒ³ãƒãƒŒã‚¬ãƒŒ { #concurrency-and-burgers }
 
-䞊蚘の**非同期**コヌドのアむデアは、**「䞊行凊理」**ず呌ばれるこずもありたす。 **「䞊列凊理」**ずは異なりたす。
+䞊で説明した**非同期**コヌドの考え方は、**「䞊行凊理」** ãšå‘Œã°ã‚Œã‚‹ã“ずもありたす。これは **「䞊列凊理」** ãšã¯ç•°ãªã‚ŠãŸã™ã€‚
 
-**䞊行凊理**ず**䞊列凊理**はどちらも「倚かれ少なかれ同時に発生するさたざたなこず」に関連しおいたす。
+**䞊行凊理** ã‚‚ **䞊列凊理** ã‚‚、「耇数のこずがだいたい同時に起きる」こずに関係したす。
 
-ただし、*䞊行凊理*ず*䞊列凊理*の詳现はたったく異なりたす。
+ただし、*䞊行凊理* ãš *䞊列凊理* ã®è©³çŽ°ã¯ã‹ãªã‚Šç•°ãªã‚ŠãŸã™ã€‚
 
-違いを確認するには、ハンバヌガヌに関する次の物語を想像しおみおください:
+違いを芋るために、ハンバヌガヌに関する次の物語を想像しおみおください。
 
-### äžŠè¡Œãƒãƒ³ãƒãƒŒã‚¬ãƒŒ
+### äžŠè¡Œãƒãƒ³ãƒãƒŒã‚¬ãƒŒ { #concurrent-burgers }
 
-ã\83\95ã\82¡ã\82¹ã\83\88ã\83\95ã\83Œã\83\89ð\9f\8d\94ã\82\92é£\9fã\81¹ã\82\88ã\81\86ã\81šã\80\81奜ã\81\8dã\81ªÀººð\9f\98\8dã\81šã\83¬ã\82žã\81«ÀžŠã\82\93ã\81§ã\81\8aã\82\8aã\80\81ã\83¬ã\82žÀ¿\82ð\9f\92\81ã\81\8cã\81\82ã\81ªã\81\9fã\81®å\89\8dã\81«ã\81\84ã\82\8bÀººé\81\94ã\81®Ê³šÊ\96\87ã\82\92å\8f\97ã\81\91ã\81€ã\81\91ã\81Šã\81\84ã\81Ÿã\81\99ã\80\82
+ã\81\82ã\81ªã\81\9fã\81¯å¥œã\81\8dã\81ªÀººã\81šã\83\95ã\82¡ã\82¹ã\83\88ã\83\95ã\83Œã\83\89ã\82\92Ú²·ã\81\84ã\81«Ú¡\8cã\81\8dã\80\81å\89\8dã\81®Àººã\81\9fã\81¡ã\81®Ê³šÊ\96\87ã\82\92ã\83¬ã\82žÀ¿\82ã\81\8cå\8f\97ã\81\91ã\82\8bé\96\93ã\80\81å\88\97ã\81«ÀžŠã\81³ã\81Ÿã\81\99ã\80\82ð\9f\98\8d
 
-それからあなたの番になり、奜きな人😍ず自分のために、2぀の非垞に豪華なハンバヌガヌ🍔を泚文したす。
+<img src="/img/async/concurrent-burgers/concurrent-burgers-01.png" class="illustration">
 
-料金を支払いたす💞。
+やがおあなたの番になり、奜きな人ず自分のために、ずおも豪華なハンバヌガヌを2぀泚文したす。🍔🍔
 
-レゞ係💁はキッチンの男👚‍🍳に向かっお、あなたのハンバヌガヌ🍔を準備しなければならないず䌝えるために䜕か蚀いたした (圌は珟圚、前のお客さんの商品を準備しおいたすが)。
+<img src="/img/async/concurrent-burgers/concurrent-burgers-02.png" class="illustration">
 
-レゞ係💁はあなたに番号札を枡したす。
+レゞ係はキッチンの料理人に、あなたのハンバヌガヌを甚意するよう声をかけたす (料理人はいた前のお客さんの分を䜜っおいたす)。
 
-埅っおいる間、奜きな人😍ず䞀緒にテヌブルを遞んで座り、奜きな人😍ず長い間話をしたす (泚文したハンバヌガヌは非垞に豪華で、準備に少し時間がかかるので✚🍔✚)。
+<img src="/img/async/concurrent-burgers/concurrent-burgers-03.png" class="illustration">
 
-ハンバヌガヌ🍔を埅ちながら奜きな人😍ずテヌブルに座っおいる間、あなたの奜きな人がなんお玠晎らしく、かわいくお頭がいいんだず✚😍✚惚れ惚れしながら時間を費やすこずができたす。
+支払いをしたす。💞
 
-奜きな人😍ず話しながら埅っおいる間、ずきどき、カりンタヌに衚瀺されおいる番号をチェックしお、自分の番かどうかを確認したす。
+レゞ係はあなたに番号札を枡したす。
 
-その埌、぀いにあなたの番になりたした。カりンタヌに行き、ハンバヌガヌ🍔を手に入れおテヌブルに戻りたす。
+<img src="/img/async/concurrent-burgers/concurrent-burgers-04.png" class="illustration">
 
-あなたずあなたの奜きな人😍はハンバヌガヌ🍔を食べお、楜しい時間を過ごしたす✚。
+埅っおいる間、奜きな人ずテヌブルに移動しお座り、(豪華なハンバヌガヌは時間がかかるので) ã—ばらく話したす。
+
+テヌブルで埅っおいる間、奜きな人がどれだけ玠敵で、かわいくお、頭が良いかを眺めお時間を過ごせたす âœšðŸ˜âœšã€‚
+
+<img src="/img/async/concurrent-burgers/concurrent-burgers-05.png" class="illustration">
+
+時々カりンタヌの衚瀺を芋お、自分の番号になっおいるか確認したす。
+
+やがおあなたの番になりたす。カりンタヌに行き、ハンバヌガヌを受け取り、テヌブルに戻りたす。
+
+<img src="/img/async/concurrent-burgers/concurrent-burgers-06.png" class="illustration">
+
+あなたず奜きな人はハンバヌガヌを食べお、楜しい時間を過ごしたす。✚
+
+<img src="/img/async/concurrent-burgers/concurrent-burgers-07.png" class="illustration">
+
+/// info | æƒ…å ±
+
+矎しいむラストは <a href="https://www.instagram.com/ketrinadrawsalot" class="external-link" target="_blank">Ketrina Thompson</a> ã«ã‚ˆã‚‹ã‚‚のです。🎚
+
+///
 
 ---
 
-䞊蚘のストヌリヌで、あなたがコンピュヌタ/プログラム🀖だず想像しおみおください。
+この物語で、あなた自身がコンピュヌタ/プログラム ðŸ€– ã ãšæƒ³åƒã—おみおください。
 
-Ã¥\88\97ã\81«ã\81\84ã\82\8bé\96\93ã\80\81ã\81\82ã\81ªã\81\9fã\81¯ã\82¢ã\82ۋ\83\89ã\83«ç\8a¶Ê\85\8bã\81§ã\81\99ð\9f\98Žã\80\82Àœ\95ã\82\82ã\80\8cç\94\9fç\94£ç\9a\84ã\80\8dã\81ªã\81\93ã\81šã\82\92ã\81\9bã\81\9aã\80\81ã\81\9fã\81 Ú\87ªå\88\86ã\81®ç\95ªã\82\92åŸ\85ã\81£ã\81Šã\81\84ã\81Ÿã\81\99ã\80\82ã\81\97ã\81\8bã\81\97ã\80\81ã\83‹\82žÀ¿\82ð\9f\92\81ã\81¯Ê³šÊ\96\87ã\82\92Ã¥\8f\97ã\81\91Ã¥\8f\96ã\82\8bã\81 ã\81\91ã\81ªã\81®ã\81§ (Ã¥\95\86Ã¥\93\81ã\81®Êº\96Ã¥\82\99ã\82\92ã\81\97ã\81Šã\81\84ã\82\8bã\82\8fã\81\91ã\81§ã\81¯ã\81ªã\81\84)ã\80\81Ã¥\88\97ã\81¯é«\98é\80\9fã\81§ã\81\99ã\80\82ã\81\97ã\81\9fã\81\8cã\81£ã\81Šã\80\81Àœ\95ã\82\82問題ありたせん。
+Ã¥\88\97ã\81«ã\81\84ã\82\8bé\96\93ã\81¯ã\80\81Àœ\95ã\82\82ã\80\8cç\94\9fç\94£ç\9a\84ã\80\8dã\81ªã\81\93ã\81šã\82\92ã\81\9bã\81\9aã\80\81Ú\87ªå\88\86ã\81®ç\95ªã\82\92åŸ\85ã\81ۋ\81 ã\81\91ã\81®ã\82¢ã\82ۋ\83\89ã\83«ç\8a¶Ê\85\8b Ã°\9f\98ÂŽ Ã£\81§ã\81\99ã\80\82ã\81\9fã\81 ã\81\97ã\83‹\82žÀ¿\82ã\81¯Ê³šÊ\96\87ã\82\92Ã¥\8f\96ã\82\8bã\81 ã\81\91 (Àœ\9cã\82\8aã\81¯ã\81\97ã\81ªã\81\84) Ã£\81ªã\81®ã\81§å\88\97ã\81¯é\80\9fã\81\8fé\80²ã\81¿ã\80\81問題ありたせん。
 
-ã\81\9dã\82\8cã\81\8bã\82\89ã\80\81ã\81\82ã\81ªã\81\9fã\81®ç\95ªã\81«ã\81ªã\81£ã\81\9fã\82\89ã\80\81å®\9fã\81«ã\80\8cç\94\9fç\94£ç\9a\84ã\81ªã\80\8dÀœ\9cÊ¥­ã\82\92Ú¡\8cã\81\84ã\81Ÿã\81\99ð\9f€\93ã\80\81ã\83¡ã\83\8bã\83¥ã\83΋\82\92確ڪ\8dã\81\97ã\80\81ʬ²ã\81\97ã\81\84ã\82\82ã\81®ã\82\92ʱºã\82\81ã\80\81奜ã\81\8dã\81ªÀººð\9f\98\8dã\81®Ê¬²ã\81\97ã\81\84ã\82\82ã\81®ã\82\92Ú\81\9eã\81\8dã\80\81Ê\96\99é\87\91ã\82\92Ê\94¯Ê\89\95ã\81\84ð\9f\92žã\80\81ç\8fŸé\87\91ã\81Ÿã\81\9fã\81¯ã\82«ã\83΋\83\89ã\82\92Ê­£ã\81\97ã\81\8fʞ¡ã\81\97ã\81\9fã\81\8b確ڪ\8dã\81\97ã\80\81Ê­£ã\81\97ã\81\8fʞ\85ç®\97ã\81\95ã\82\8cã\81\9fã\81\93ã\81šã\82\92確ڪ\8dã\81\97ã\80\81ʳšÊ\96\87ã\81\8cÊ­£ã\81\97ã\81\8fé\80\9aã\81£ã\81Šã\81\84ã\82\8bかなどを確認したす。
+ã\81\82ã\81ªã\81\9fã\81®ç\95ªã\81«ã\81ªã\82\8bã\81šã\80\81å®\9fé\9a\9bã\81«ã\80\8cç\94\9fç\94£ç\9a\84ã\80\8dã\81ªÀœ\9cÊ¥­ã\82\92ã\81\97ã\81Ÿã\81\99ã\80\82ã\83¡ã\83\8bã\83¥ã\83΋\82\92ڊ\8bã\81ŠÊ³šÊ\96\87ã\82\92ʱºã\82\81ã\80\81奜ã\81\8dã\81ªÀººã\81®å\88\86ã\82\82確ڪ\8dã\81\97ã\80\81Ê\94¯Ê\89\95ã\81\84ã\80\81Ê­£ã\81\97ã\81\84çŽ\99å¹£/ã\82«ã\83΋\83\89ã\82\92ʞ¡ã\81\97ã\81\9fã\81\8bã\80\81Ê­£ã\81\97ã\81\8fʱºÊž\88ã\81\95ã\82\8cã\81\9fã\81\8bã\80\81ʳšÊ\96\87Ã¥\86\85容ã\81\8cÊ­£ã\81\97ã\81\84かなどを確認したす。
 
-しかし、ハンバヌガヌ🍔をただできおいないので、ハンバヌガヌの準備ができるたで埅機🕙する必芁があるため、レゞ係💁ずの䜜業は「䞀時停止⏞」になりたす。
+しかし、ハンバヌガヌはただ出来䞊がっおいないので、レゞ係ずのやり取りは「䞀時停止」⏞ ã«ãªã‚ŠãŸã™ã€‚ハンバヌガヌができるたで埅぀ ðŸ•™ å¿…芁があるからです。
 
-ã\81\97ã\81\8bã\81\97ã\80\81ã\82«ã\82Šã\83³ã\82¿ã\83΋\81\8bã\82\89é\9b¢ã\82\8cã\81Šã\80\81ç\95ªå\8f·Ê\9c­ã\82\92Ê\8c\81ã\81£ã\81Šã\83\86ã\83΋\83\96ã\83«ã\81«åº§ã\81£ã\81Šã\81\84ã\82\8bã\81šã\81\8dã\81¯ã\80\81ʳšÊ\84\8fã\82\92奜ã\81\8dã\81ªÀººð\9f\98\8dã\81«å\88\87ã\82\8aÊ\9b¿ã\81\88ã\81Šð\9f\94\80ã\80\81ã\81\9dã\81®Àž\8aã\81§ã\80\8cÀ»\95˼\8bâ\8f¯ð\9f€\93ã\80\8dã\82\92Ú¡\8cã\81ªã\81\88ã\81Ÿã\81\99ã\80\82ã\81\9dã\81®åŸ\8cã\80\81奜ã\81\8dã\81ªÀººð\9f\98\8dã\81šã\81\84ã\81¡ã\82\83ã\81ۋ\81\8fã\81\8bã\81®ã\82\88ã\81\86ã\81ªã\80\81é\9d\9e垞ã\81«ã\80\8cç\94\9fç\94£ç\9a\84ã\81ªð\9f€\93ã\80\8dã\81\93ã\81šã\82\92Ã¥\86\8dã\81³Ú¡\8cã\81\84たす。
+ã\81\9fã\81 ã\81\97ã\80\81ç\95ªå\8f·Ê\9c­ã\82\92Ê\8c\81ã\81£ã\81Šã\82«ã\82Šã\83³ã\82¿ã\83΋\81\8bã\82\89é\9b¢ã\82\8cã\83\86ã\83΋\83\96ã\83«ã\81«åº§ã\82\8cã\81°ã\80\81ʳšÊ\84\8fã\82\92奜ã\81\8dã\81ªÀººã\81«å\88\87ã\82\8aÊ\9b¿ã\81\88 Ã°\9f\94\80ã\80\81ã\80\8cã\81\9dã\81®Àœ\9cÊ¥­ã\80\8dâ\8f¯ Ã°\9f€\93 Ã£\81«å\8f\96ã\82\8açµ\84ã\82\81ã\81Ÿã\81\99ã\80\82奜ã\81\8dã\81ªÀººã\81šã\81\84ã\81¡ã\82\83ã\81ۋ\81\8fã\81šã\81\84ã\81\86ã\80\81ã\81šã\81Šã\82\82ã\80\8cç\94\9fç\94£ç\9a\84ã\80\8dð\9f€\93 Ã£\81ªã\81\93ã\81šã\81\8cã\81Ÿã\81\9fã\81§ã\81\8dたす。
 
-次に、レゞ係💁は、「ハンバヌガヌの準備ができたした🍔」ず蚀っお、カりンタヌのディスプレむに番号を衚瀺したすが、衚瀺番号があなたの番号に倉わっおも、すぐに狂ったように飛んで行くようなこずはありたせん。あなたは自分の番号札を持っおいっお、他の人も自分の番号札があるので、あなたのハンバヌガヌ🍔を盗む人がいないこずは知っおいたす。
+レゞ係 ðŸ’ ãŒã‚«ã‚Šãƒ³ã‚¿ãƒŒã®è¡šç€ºã«ã‚なたの番号を出しお「ハンバヌガヌができたした」ず知らせおも、あなたは衚瀺が切り替わった瞬間に飛び跳ねたりしたせん。自分の番号札があり、他の人にもそれぞれ番号札があるので、ハンバヌガヌを盗られるこずはないず知っおいるからです。
 
-ã\81ªã\81®ã\81§ã\80\81ã\81\82ã\81ªã\81\9fã\81¯å¥œã\81\8dã\81ªÀººð\9f\98\8dã\81\8c򩱋\81\97çµ\82ã\81\88ã\82\8bã\81®ã\82\92åŸ\85ã\81£ã\81Š (ç\8fŸå\9cšã\81®À»\95˼\8bâ\8f¯ / Ã¥\87Šç\90\86Àž­ã\81®ã\82¿ã\82¹ã\82¯ã\82\92çµ\82˼\86ã\81\97ã\81Ÿã\81\99ð\9f€\93)ã\80\81Ã¥\84ªã\81\97ã\81\8f埮ç¬\91ã\82\93ã\81§ã\80\81ã\83\8fã\83³ã\83\90ã\83΋\82‹\83΋\82\92Ú²°ã\81£ã\81Šã\81\8fã\82\8bã\81­ã\81šÚš\80ã\81\84ã\81Ÿã\81\99⏞。
+ã\81 ã\81\8bã\82\89ã\80\81奜ã\81\8dã\81ªÀººã\81®Ú©±ã\81\8cçµ\82ã\82\8fã\82\8bã\81®ã\82\92åŸ\85ã\81¡ (ç\8fŸå\9cšã\81®Àœ\9cÊ¥­ Ã¢\8f¯ / Ã¥\87Šç\90\86Àž­ã\81®ã\82¿ã\82¹ã\82¯ã\82\92å®\8c˼\86ã\81\97 Ã°\9f€\93)ã\80\81埮ç¬\91ã\82\93ã\81§ã\80\8cã\83\8fã\83³ã\83\90ã\83΋\82‹\83Ό\8f\96ã\81£ã\81Šã\81\8fã\82\8bã\81­ã\80\8dã\81šÚš\80ã\81\84ã\81Ÿã\81\99 âžã€‚
 
-次に、カりンタヌぞ、いたから完了する最初のタスク⏯ぞ向かい、ハンバヌガヌ🍔を受け取り、感謝の意を衚しお、テヌブルに持っおいきたす。これで、カりンタヌずのやり取りのステップ/タスクが完了したした⏹。これにより、「ハンバヌガヌを食べる🔀⏯」ずいう新しいタスクが䜜成されたす。しかし、前の「ハンバヌガヌを取埗する」ずいうタスクは終了したした⏹。
+それからカりンタヌぞ行き ðŸ”€ã€ã„た完了した初期のタスク â¯ ã«æˆ»ã£ãŠã€ãƒãƒ³ãƒãƒŒã‚¬ãƒŒã‚’受け取り、瀌を蚀っおテヌブルに持っおいきたす。これでカりンタヌずのやり取りずいうステップ/タスクは完了 â¹ ã§ã™ã€‚その結果ずしお「ハンバヌガヌを食べる」🔀 â¯ ãšã„う新しいタスクが生たれたすが、先の「ハンバヌガヌを受け取る」タスクは完了 â¹ ã—おいたす。
 
-### äžŠåˆ—ハンバヌガヌ
+### äžŠåˆ—ハンバヌガヌ { #parallel-burgers }
 
-これらが「䞊行ハンバヌガヌ」ではなく、「䞊列ハンバヌガヌ」であるずしたしょう。
+今床は、これが「䞊行ハンバヌガヌ」ではなく「䞊列ハンバヌガヌ」だず想像したしょう。
 
-あなたは奜きな人😍ず䞊列ファストフヌド🍔を買おうずしおいたす。
+あなたは奜きな人ず「䞊列」ファストフヌドを買いに行きたす。
 
-列に䞊んでいたすが、䜕人かの料理人兌、レゞ係 (8人ずしたしょう) ðŸ‘šâ€ðŸ³ðŸ‘šâ€ðŸ³ðŸ‘šâ€ðŸ³ðŸ‘šâ€ðŸ³ðŸ‘šâ€ðŸ³ðŸ‘šâ€ðŸ³ðŸ‘šâ€ðŸ³ðŸ‘šâ€ðŸ³ãŒã‚なたの前にいる人達の泚文を受け぀けおいたす。
+耇数のレゞ係 (䟋えば 8 äºº) ãŒåŒæ™‚に料理人でもあり、前の人たちの泚文を受けおいたす。
 
-8Àººã\81®ã\83¬ã\82žÀ¿\82ã\81\8cã\81\9dã\82\8cã\81\9eã\82\8cÚ\87ªå\88\86ã\81§Ê³šÊ\96\87ã\82\92å\8f\97ã\81\91ã\82\8bã\82\84å\90Šã\82\84ã\80\81ʬ¡ã\81®Ê³šÊ\96\87ã\82\92å\8f\97ã\81\91ã\82\8bå\89\8dã\81«ã\83\8fã\83³ã\83\90ã\83Œã\82¬ã\83Œã\82\92ʺ\96å\82\99ã\81\99ã\82\8bã\81®ã\81§ã\80\81ã\81\82ã\81ªã\81\9fã\81®å\89\8dã\81®Àººé\81\94ã\81¯ã\82«ã\82Šã\83³ã\82¿ã\83Œã\82\92é\9b¢ã\82\8cã\81\9aã\81«ã\80\81ã\83\8fã\83³ã\83\90ã\83Œã\82¬ã\83Œð\9f\8d\94ã\81\8cã\81§ã\81\8dã\82\8bã\81®ã\82\92åŸ\85ã\81£ã\81Šã\81\84ã\81Ÿã\81\99ð\9f\95\99ã\80\82
+8 Ã€ÂºÂºÃ£\81®ã\83‹\82žÀ¿\82ã\81¯ã\81\9dã\82\8cã\81\9eã\82\8cã\80\81ʬ¡ã\81®Ê³šÊ\96\87ã\82\92Ã¥\8f\96ã\82\8bÃ¥\89\8dã\81«ã\81\99ã\81\90ã\81«Úª¿ç\90\86ã\81«å\8f\96ã\82\8aã\81\8bã\81\8bã\82\8bã\81\9fã\82\81ã\80\81ã\81\82ã\81ªã\81\9fã\81®å\89\8dã\81®Àººã\81\9fã\81¡ã\81¯ã\82«ã\82Šã\83³ã\82¿ã\83΋\82\92é\9b¢ã\82\8cã\81\9aã\80\81ã\83\8fã\83³ã\83\90ã\83΋\82‹\83΋\81\8cã\81§ã\81\8dã\82\8bã\81®ã\82\92åŸ\85ã\81£ã\81Šã\81\84ã\81Ÿã\81\99ã\80\82
 
-それからいよいよあなたの番になり、奜きな人😍ず自分のために、2぀の非垞に豪華なハンバヌガヌ🍔を泚文したす。
+<img src="/img/async/parallel-burgers/parallel-burgers-01.png" class="illustration">
 
-料金を支払いたす💞。
+ようやくあなたの番になり、奜きな人ず自分のために豪華なハンバヌガヌを 2 ã€æ³šæ–‡ã—たす。
 
-レゞ係はキッチンに行きたす👚‍🍳。
+支払いをしたす ðŸ’žã€‚
 
-あなたはカりンタヌの前に立っお埅ちたす🕙。番号札がないので誰もあなたよりも先にハンバヌガヌ🍔を取らないようにしたす。
+<img src="/img/async/parallel-burgers/parallel-burgers-02.png" class="illustration">
 
-ã\81\82ã\81ªã\81\9fã\81šå¥œã\81\8dã\81ªÀººð\9f\98\8dã\81¯å¿\99ã\81\97ã\81\84ã\81®ã\81§ã\80\81Úª°ã\82\82ã\81\82ã\81ªã\81\9fã\81®å\89\8dã\81«Ê\9d¥ã\81\95ã\81\9bã\81Ÿã\81\9bã\82\93ã\81\97ã\80\81ã\81\82ã\81ªã\81\9fã\81®ã\83\8fã\83³ã\83\90ã\83΋\82‹\83΋\81\8cÃ¥\88°ç\9d\80ã\81\97ã\81\9fã\81šã\81\8dð\9f\95\99ã\81«Úª°ã\81«ã\82\82Ã¥\8f\96ã\82\8bã\81\93ã\81šã\82\92ښ±ã\81\97ã\81Ÿã\81\9bã\82\93ã\80\82ã\81\82ã\81ªã\81\9fã\81¯å¥œã\81\8dã\81ªÀººã\81«Ê³šÊ\84\8fã\82\92Ê\89\95ã\81\88ã\81Ÿã\81\9bã\82\93ð\9f\98\9e。
+ã\83‹\82žÀ¿\82ã\81¯ã\82­ã\83\83ã\83\81ã\83³ã\81«å\90\91ã\81\8bã\81\84ã\81Ÿã\81\99。
 
-これは「同期」䜜業であり、レゞ係/料理人👚‍🍳ず「同期」したす。レゞ係/料理人👚‍🍳がハンバヌガヌ🍔を完成させおあなたに枡すたで埅぀🕙必芁があり、ちょうどその完成の瞬間にそこにいる必芁がありたす。そうでなければ、他の誰かに取られるかもしれたせん。
+番号札がないため、他の誰かに先に取られないよう、カりンタヌの前で立っお埅ちたす ðŸ•™ã€‚
 
-その埌、カりンタヌの前で長い時間埅っおから🕙、぀いにレゞ係/料理人👚‍🍳がハンバヌガヌ🍔を枡しに戻っおきたす。
+<img src="/img/async/parallel-burgers/parallel-burgers-03.png" class="illustration">
 
-ã\83\8fã\83³ã\83\90ã\83Œã\82¬ã\83Œð\9f\8d\94ã\82\92å\8f\96ã\82\8aã\80\81奜ã\81\8dã\81ªÀººð\9f\98\8dã\81šã\83\86ã\83Œã\83\96ã\83«ã\81«Ú¡\8cã\81\8dã\81Ÿã\81\99ã\80\82
+ã\81\82ã\81ªã\81\9fã\81šå¥œã\81\8dã\81ªÀººã\81¯ã\80\81Úª°ã\81«ã\82\82å\89²ã\82\8aڟŒã\81Ÿã\82\8cã\81\9aã\83\8fã\83³ã\83\90ã\83Œã\82¬ã\83Œã\81\8cÊ\9d¥ã\81\9fã\82\89ã\81\99ã\81\90å\8f\97ã\81\91å\8f\96ã\82\8cã\82\8bã\82\88ã\81\86ڊ\8b匵ã\81£ã\81Šã\81\84ã\82\8bã\81®ã\81§ã\80\81奜ã\81\8dã\81ªÀººã\81«Ê³šÊ\84\8fã\82\92å\90\91ã\81\91ã\82\89ã\82\8cã\81Ÿã\81\9bã\82\93ã\80\82ð\9f\98\9e
 
-ã\81\9fã\81 é£\9fã\81¹ã\82\8bã\81 ã\81\91ã\80\81ã\81\9dã\82\8cã\81§ã\81\8aã\81\97ã\81Ÿã\81\84ã\81§ã\81\99ã\80\82ð\9f\8d\94â\8f¹。
+ã\81\93ã\82\8cã\81¯ã\80\8cÃ¥\90\8cÊ\9c\9fã\80\8dç\9a\84ã\81ªÀœ\9cÊ¥­ã\81§ã\81\99ã\80\82ã\83‹\82žÀ¿\82/Ê\96\99ç\90\86Àºº Ã°\9f\91šâ\80\8dð\9f\8d³ Ã£\81šã\80\8cÃ¥\90\8cÊ\9c\9fã\80\8dã\81\97ã\81Šã\81\84ã\81Ÿã\81\99ã\80\82ã\83‹\82žÀ¿\82/Ê\96\99ç\90\86Àºº Ã°\9f\91šâ\80\8dð\9f\8d³ Ã£\81\8cã\83\8fã\83³ã\83\90ã\83΋\82‹\83΋\82\92Àœ\9cã\82\8açµ\82ã\81\88ã\81ŠÊ\89\8bʞ¡ã\81\99ã\81\9dã\81®ç\9eŽ\96\93ã\81«ã\80\81åŸ\85ã\81£ã\81Š Ã°\9f\95\99 Ã£\81\9dã\81®å Žã\81«ã\81\84ã\81ªã\81\91ã\82\8cã\81°ã\81ªã\82\8aã\81Ÿã\81\9bã\82\93ã\80\82ã\81\9dã\81\86ã\81§ã\81ªã\81\84ã\81šÀ»\96ã\81®Úª°ã\81\8bã\81«å\8f\96ã\82\89ã\82\8cã\82\8bã\81\8bã\82\82ã\81\97ã\82\8cã\81Ÿã\81\9bã\82\93。
 
-ほずんどの時間、カりンタヌの前で埅぀のに費やされおいたので🕙、あたり話したりいちゃ぀くこずはありたせんでした😞。
+<img src="/img/async/parallel-burgers/parallel-burgers-04.png" class="illustration">
 
----
+長い時間 ðŸ•™ ã‚«ã‚Šãƒ³ã‚¿ãƒŒå‰ã§åŸ…った埌、ようやくレゞ係/料理人 ðŸ‘šâ€ðŸ³ ãŒãƒãƒ³ãƒãƒŒã‚¬ãƒŒã‚’持っお戻っおきたす。
+
+<img src="/img/async/parallel-burgers/parallel-burgers-05.png" class="illustration">
+
+ハンバヌガヌを受け取り、奜きな人ずテヌブルに行きたす。
+
+食べお、おしたいです。⏹
 
-この䞊列ハンバヌガヌのシナリオでは、あなたは2぀のプロセッサを備えたコンピュヌタ/プログラム🀖 (あなたずあなたの奜きな人😍) ã§ã‚り、䞡方ずも埅機🕙しおいお、圌らは「カりンタヌで埅機🕙」するこずに専念しおいたす⏯。
+<img src="/img/async/parallel-burgers/parallel-burgers-06.png" class="illustration">
 
-ã\83\95ã\82¡ã\82¹ã\83\88ã\83\95ã\83΋\83\89åº\97ã\81«ã\81¯8ã\81ۋ\81®ã\83\97ã\83­ã\82ȋ\83\83ã\82µ (ã\83‹\82žÀ¿\82/Ê\96\99ç\90\86Àºº) Ã°\9f\91šâ\80\8dð\9f\8d³ð\9f\91šâ\80\8dð\9f\8d³ð\9f\91šâ\80\8dð\9f\8d³ð\9f\91šâ\80\8dð\9f\8d³ð\9f\91šâ\80\8dð\9f\8d³ð\9f\91šâ\80\8dð\9f\8d³ð\9f\91šâ\80\8dð\9f\8d³ð\9f\91šâ\80\8dð\9f\8d³ã\81\8cã\81\82ã\82\8aã\81Ÿã\81\99ã\80\82Àž\80Ê\96¹ã\80\81ÀžŠÚ¡\8cã\83\8fã\83³ã\83\90ã\83΋\82‹\83Œåº\97ã\81«ã\81¯2Àºº (ã\83‹\82žÀ¿\82ã\81šÊ\96\99ç\90\86Àºº) Ã°\9f\92\81ð\9f\91šâ\80\8dð\9f\8d³ã\81\97ã\81\8bã\81\84ã\81ªã\81\8bã\81£ã\81\9fã\81\8bã\82\82ã\81\97ã\82\8cã\81Ÿã\81\9bã\82\93ã\80\82
+ã\81ȋ\81šã\82\93ã\81©ã\81®Ê\99\82é\96\93ã\82\92ã\82«ã\82Šã\83³ã\82¿ã\83Ό\89\8dã\81§åŸ\85ã\81€ Ã°\9f\95\99 Ã£\81®ã\81«Ú²»ã\82\84ã\81\97ã\81\9fã\81\9fã\82\81ã\80\81ã\81\82ã\81Ÿã\82\8a򩱋\81\97ã\81\9fã\82\8aã\80\81ã\81\84ã\81¡ã\82\83ã\81ۋ\81\84ã\81\9fã\82\8aã\81§ã\81\8dã\81Ÿã\81\9bã\82\93ã\81§ã\81\97ã\81\9fã\80\82ð\9f\98\9e
 
-しかし、それでも、最終的な䜓隓は最高ではありたせん😞。
+/// info | æƒ…å ±
+
+矎しいむラストは <a href="https://www.instagram.com/ketrinadrawsalot" class="external-link" target="_blank">Ketrina Thompson</a> ã«ã‚ˆã‚‹ã‚‚のです。🎚
+
+///
 
 ---
 
-ã\81\93ã\82\8cã\81¯ã\80\81ã\83\8fã\83³ã\83\90ã\83΋\82‹\83Œð\9f\8d\94ã\81®Ú©±ã\81šå\90\8cç­\89ã\81ªÚ©±ã\81«ã\81ªã\82\8aたす。
+ã\81\93ã\81®ã\80\8cÀžŠå\88\97ã\83\8fã\83³ã\83\90ã\83΋\82‹\83΋\80\8dã\81®ã\82·ã\83\8aã\83ªã\82ªã\81§ã\81¯ã\80\81ã\81\82ã\81ªã\81\9fã\81¯ 2 Ã£\81ۋ\81®ã\83\97ã\83­ã\82ȋ\83\83ã\82µ (ã\81\82ã\81ªã\81\9fã\81šå¥œã\81\8dã\81ªÀºº) Ã£\82\92Ê\8c\81ã\81ۋ\82³ã\83³ã\83\94ã\83¥ã\83΋\82¿/ã\83\97ã\83­ã\82°ã\83©ã\83  Ã°\9f€\96 Ã£\81§ã\80\81ã\81©ã\81¡ã\82\89ã\82\82é\95·ã\81\84é\96\93 Ã°\9f\95\99ã\80\8cã\82«ã\82Šã\83³ã\82¿ã\83΋\81§ã\81®åŸ\85Ê©\9fã\80\8dã\81«Ê³šÊ\84\8f Ã¢\8f¯ Ã£\82\92å°\82念ã\81\97ã\81Šã\81\84たす。
 
-より「珟実的な」䟋ずしお、銀行を想像しおみおください。
+ファストフヌド店には 8 å€‹ã®ãƒ—ロセッサ (レゞ係/料理人) ãŒã‚りたす。䞀方、䞊行ハンバヌガヌの店には (レゞ係 1、人、料理人 1 äººã®) 2 å€‹ã—かなかったかもしれたせん。
+
+それでも、最終的な䜓隓は最良ずは蚀えたせん。😞
+
+---
 
-最近たで、ほずんどの銀行は耇数の窓口👚‍💌👚‍💌👚‍💌👚‍💌に、行列🕙🕙🕙🕙🕙🕙🕙🕙ができおいたした。
+これはハンバヌガヌにおける䞊列版の物語です。🍔
 
-ã\81\99ã\81¹ã\81Šã\81®çª\93å\8f£ã\81§ã\80\81ʬ¡ã\80\85ã\81šã\80\81Àž\80Àººã\81®å®¢ã\81šã\81\99ã\81¹ã\81Šã\81®Àœ\9cÊ¥­ã\82\92Ú¡\8cã\81\84ã\81Ÿã\81\99ð\9f\91šâ\80\8dð\9f\92Œâ\8f¯.
+ã\82\88ã\82\8aã\80\8cç\8fŸå®\9fç\9a\84ã\81ªã\80\8dÀŸ\8bã\81šã\81\97ã\81Šã\80\81é\8a\80Ú¡\8cã\82\92Ê\83³å\83\8fã\81\97ã\81Šã\81¿ã\81Šã\81\8fã\81 ã\81\95ã\81\84ã\80\82
 
-ã\81\9dã\81®Àž\8aã\80\81é\95·Ê\99\82é\96\93ã\80\81Ã¥\88\97ã\81«ÀžŠã\81°ã\81ªã\81\91ã\82\8cã\81°ã\81\84ã\81\91ã\81Ÿã\81\9bã\82\93ð\9f\95\99ã\80\82ã\81\9dã\81\86ã\81\97ã\81ªã\81\84ã\81šã\80\81é \86ç\95ªã\81\8cÃ¥\9b\9eã\81£ã\81Šã\81\8dã\81Ÿã\81\9bã\82\93。
+ã\81ۋ\81\84Ê\9c\80Ú¿\91ã\81Ÿã\81§ã\80\81ã\81ȋ\81šã\82\93ã\81©ã\81®é\8a\80Ú¡\8cã\81«ã\81¯Ú€\87Ê\95°ã\81®çª\93Ã¥\8f£À¿\82 Ã°\9f\91šâ\80\8dð\9f\92Œð\9f\91šâ\80\8dð\9f\92Œð\9f\91šâ\80\8dð\9f\92Œð\9f\91šâ\80\8dð\9f\92ÂŒ Ã£\81šé\95·ã\81\84Ú¡\8cÃ¥\88\97 Ã°\9f\95\99ð\9f\95\99ð\9f\95\99ð\9f\95\99ð\9f\95\99ð\9f\95\99ð\9f\95\99ð\9f\95\99 Ã£\81\8cã\81\82ã\82\8aã\81Ÿã\81\97ã\81\9f。
 
-銀行🏊での甚事にあなたの奜きな人😍を連れお行きたくはないでしょう。
+各窓口係が、䞀人ず぀、すべおの䜜業を順番に行いたす ðŸ‘šâ€ðŸ’Œâ¯ã€‚
 
-### ãƒãƒ³ãƒãƒŒã‚¬ãƒŒã®ãŸãšã‚
+そしお、長時間 ðŸ•™ è¡Œåˆ—で埅たなければ順番を倱いたす。
 
-この「奜きな人ずのファストフヌドハンバヌガヌ」のシナリオでは、埅機🕙が倚いため、䞊行システム⏞🔀⏯を䜿甚する方がはるかに理にかなっおいたす。
+銀行の甚事 ðŸŠ ã«ã€å¥œããªäºº ðŸ˜ ã‚’連れお行きたいずは思わないでしょう。
 
-これは、ほずんどのWebアプリケヌションに圓おはたりたす。
+### ãƒãƒ³ãƒãƒŒã‚¬ãƒŒã®ãŸãšã‚ { #burger-conclusion }
 
-倚くのナヌザヌがいたすが、サヌバヌは、あたり匷くない回線でのリク゚ストの送信を埅機🕙しおいたす。
+この「奜きな人ずファストフヌド」のシナリオでは、埅ち時間 ðŸ•™ ãŒå€šã„ため、䞊行システム âžðŸ”€â¯ ã‚’䜿う方がはるかに理にかなっおいたす。
 
-ã\81\9dã\81\97ã\81Šã\80\81ã\83‹\82¹ã\83\9dã\83³ã\82¹ã\81\8cÚ¿\94ã\81£ã\81Šã\81\8fã\82\8bã\81®ã\82\92ã\82\82ã\81\86Àž\80床åŸ\85Ê©\9fð\9f\95\99ã\81\97たす。
+ã\81\93ã\82\8cã\81¯ã\80\81ã\81ȋ\81šã\82\93ã\81©ã\81® Web Ã£\82¢ã\83\97ã\83ªã\82±ã\83΋\82·ã\83§ã\83³ã\81«ã\82\82åœ\93ã\81Šã\81¯ã\81Ÿã\82\8aたす。
 
-ã\81\93ã\81®ã\80\8cåŸ\85Ê©\9fð\9f\95\99ã\80\8dã\81¯ã\83\9eã\82€ã\82¯ã\83­ç§\92å\8d\98Àœ\8dã\81§ã\81\99ã\81\8cã\80\81ã\81\9dã\82\8cã\81§ã\82\82ã\80\81ã\81\99ã\81¹ã\81Šå\90\88ç®\97ã\81\99ã\82\8bã\81šã\80\81Ê\9c\80çµ\82ç\9a\84ã\81«ã\81¯ã\81\8bã\81ªã\82\8aåŸ\85Ê©\9fã\81\99ã\82\8bã\81\93ã\81šã\81«ã\81ªã\82\8aã\81Ÿã\81\99ã\80\82
+ã\81šã\81Šã\82\82å€\9aã\81\8fã\81®ã\83Šã\83΋\82¶ã\83΋\81\8cã\81\84ã\81Ÿã\81\99ã\81\8cã\80\81ã\82µã\83΋\83\90ã\81¯åœŒã\82\89ã\81®ã\81\82ã\81Ÿã\82\8aé\80\9fã\81\8fã\81ªã\81\84Ã¥\9b\9eç·\9aã\81\8bã\82\89ã\83ªã\82¯ã\82šã\82¹ã\83\88ã\81\8cå±\8aã\81\8fã\81®ã\82\92åŸ\85ã\81¡ Ã°\9f\95\99ã\80\81
 
-ã\81\93ã\82\8cã\81\8cã\80\81Web APIã\81žã\81®é\9d\9eÃ¥\90\8cÊ\9c\9fâ\8fžð\9f\94\80â\8f¯ã\82³ã\83΋\83\89ã\81®å\88©ç\94šã\81\8cç\90\86ã\81«ã\81\8bã\81ªã\81£ã\81Šã\81\84ã\82\8bç\90\86ç\94±ã\81§ã\81\99ã\80\82
+ã\81\9dã\81®åŸ\8cã\80\81ã\83‹\82¹ã\83\9dã\83³ã\82¹ã\81\8cÊ\88ȋ\81£ã\81Šã\81\8fã\82\8bã\81®ã\82\92ã\81Ÿã\81\9fåŸ\85ã\81¡ã\81Ÿã\81\99 Ã°\9f\95\99ã\80\82
 
-ã\81ȋ\81šã\82\93ã\81©ã\81®Ê\97¢å­\98ã\81®ÀººÊ°\97ã\81®ã\81\82ã\82\8bPythonã\83\95ã\83‹\83΋\83 ã\83¯ã\83΋\82¯ (Flaskã\82\84Djangoã\82\92Ã¥\90«ã\82\80) Ã£\81¯ã\80\81Pythonã\81®Ê\96°ã\81\97ã\81\84é\9d\9eÃ¥\90\8cÊ\9c\9fÊ©\9fÚ\83ϋ\81\8cã\81§ã\81\8dã\82\8bÃ¥\89\8dã\81«Àœ\9cÊ\88\90ã\81\95ã\82\8cã\81Ÿã\81\97ã\81\9fã\80\82ã\81\97ã\81\9fã\81\8cã\81£ã\81Šã\80\81ã\81\9dã\82\8cã\82\89ã\82\92ã\83\87ã\83\97ã\83­ã\82ۋ\81\99ã\82\8bÊ\96¹Ê³\95ã\81¯ã\80\81ÀžŠå\88\97å®\9fÚ¡\8cã\81šã\80\81Ê\96°Ê©\9fÚ\83ϋ\81ȋ\81©åŒ·å\8a\9bã\81§ã\81¯ã\81ªã\81\84Ã¥\8fۋ\81\84圢åŒ\8fã\81®é\9d\9eÃ¥\90\8cÊ\9c\9få®\9fÚ¡\8cã\82\92ã\82µã\83\9dã\83΋\83\88ã\81\97たす。
+ã\81\93ã\81®ã\80\8cåŸ\85ã\81¡ã\80\8dð\9f\95\99 Ã£\81¯ã\83\9eã\82ۋ\82¯ã\83­ç§\92Ã¥\8d\98Àœ\8dã\81§Êž¬ã\82\89ã\82\8cã\81Ÿã\81\99ã\81\8cã\80\81ã\81\99ã\81¹ã\81Šã\82\92Ã¥\90\88ښ\88ã\81\99ã\82\8bã\81šã\80\81çµ\90å±\80ã\81\8bã\81ªã\82\8aã\81®åŸ\85ã\81¡ã\81«ã\81ªã\82\8aたす。
 
-ã\81\97ã\81\8bã\81\97ã\80\81WebSocketã\81®ã\82µã\83\9dã\83΋\83\88ã\82\92Ú¿œå\8a ã\81\99ã\82\8bã\81\9fã\82\81ã\81«ã\80\81é\9d\9eÃ¥\90\8cÊ\9c\9fWeb Python (ASGI) Ã£\81®Àž»ã\81ªÀ»\95ʧ\98ã\81¯Djangoã\81§é\96\8bç\99ºã\81\95ã\82\8cã\81Ÿã\81\97ã\81\9f。
+ã\81 ã\81\8bã\82\89ã\81\93ã\81\9dã\80\81Web API Ã£\81«ã\81¯é\9d\9eÃ¥\90\8cÊ\9c\9f Ã¢\8fžð\9f\94\80â\8f¯ Ã£\82³ã\83΋\83\89ã\82\92Àœ¿ã\81\86ã\81®ã\81\8cç\90\86ã\81«ã\81\8bã\81ªã\81£ã\81Šã\81\84ã\81Ÿã\81\99。
 
-ã\81\9dã\81®ã\82\88ã\81\86ã\81ªé\9d\9eÃ¥\90\8cÊ\9c\9fÊ\80§ã\81\8cNodeJSã\82\92ÀººÊ°\97ã\81«ã\81\97ã\81\9fç\90\86ç\94±ã\81§ã\81\99 (NodeJSã\81¯ÀžŠå\88\97ã\81§ã\81¯ã\81\82ã\82\8aã\81Ÿã\81\9bã\82\93ã\81\8c)ã\80\82ã\81\9dã\81\97ã\81Šã\80\81ã\83\97ã\83­ã\82°ã\83©ã\83\9fã\83³ã\82°Úš\80Úª\9eã\81šã\81\97ã\81Šã\81®Goの匷みでもありたす。
+ã\81\93ã\82\8cã\81\8cã\80\81NodeJS Ã£\82\92ÀººÊ°\97ã\81«ã\81\97ã\81\9fڊ\81Ã¥\9b  (NodeJS Ãš\87ªÀœ\93ã\81¯ÀžŠå\88\97ã\81§ã\81¯ã\81\82ã\82\8aã\81Ÿã\81\9bã\82\93) Ã£\81§ã\81\82ã\82\8aã\80\81ã\83\97ã\83­ã\82°ã\83©ã\83\9fã\83³ã\82°Úš\80Úª\9eã\81šã\81\97ã\81Šã\81® Go ã®åŒ·ã¿ã§ã‚‚ありたす。
 
-ã\81\9dã\81\97ã\81Šã\80\81ã\81\9dã\82\8cã\81¯**FastAPI**ã\81§åŸ\97ã\82\89ã\82\8cã\82\8bã\83\91ã\83\95ã\82©ã\83΋\83\9eã\83³ã\82¹ã\81šå\90\8cã\81\98ã\83‹\83\99ã\83«です。
+ã\81\9dã\81\97ã\81Šã\80\81ã\81\9dã\82\8cã\81\8c **FastAPI** Ã£\81§åŸ\97ã\82\89ã\82\8cã\82\8bã\83\91ã\83\95ã\82©ã\83΋\83\9eã\83³ã\82¹ã\81®Ê°ŽÊº\96です。
 
-ã\81Ÿã\81\9fã\80\81ÀžŠå\88\97Ã¥\87Šç\90\86ã\81šé\9d\9eÃ¥\90\8cÊ\9c\9fÃ¥\87Šç\90\86ã\82\92Ã¥\90\8cÊ\99\82ã\81«å®\9fÚ¡\8cã\81§ã\81\8dã\82\8bã\81\9fã\82\81ã\80\81ã\83\86ã\82¹ã\83\88ʞ\88ã\81¿ã\81®ã\81ȋ\81šã\82\93ã\81©ã\81®NodeJSã\83\95ã\83‹\83΋\83 ã\83¯ã\83΋\82¯ã\82\88ã\82\8aã\82\82é«\98ã\81\8fã\80\81Goã\81šå\90\8cç­\89ã\81®ã\83\91ã\83\95ã\82©ã\83΋\83\9eã\83³ã\82¹ã\81\8cåŸ\97ã\82\89ã\82\8cã\81Ÿã\81\99ã\80\82Goã\81¯ã\80\81Cã\81«Ú¿\91ã\81\84ã\82³ã\83³ã\83\91ã\82ۋ\83«Úš\80Úª\9eã\81§ã\81\99 <a href="https://www.techempower.com/benchmarks/#section=data-r17&hw=ph&test=query&l=zijmkf-1" class="external-link" target="_blank">(Starletteã\81«Ê\84\9fÚ¬\9dã\81\97ã\81Ÿす)</a>。
+ã\81\95ã\82\89ã\81«ã\80\81ÀžŠå\88\97Ê\80§ã\81šé\9d\9eÃ¥\90\8cÊ\9c\9fÊ\80§ã\82\92Ã¥\90\8cÊ\99\82ã\81«ÊŽ»ç\94šã\81§ã\81\8dã\82\8bã\81\9fã\82\81ã\80\81ã\83\86ã\82¹ã\83\88ã\81\95ã\82\8cã\81\9få€\9aã\81\8fã\81® NodeJS Ã£\83\95ã\83‹\83΋\83 ã\83¯ã\83΋\82¯ã\82\88ã\82\8aé«\98ã\81\84Ê\80§Ú\83ϋ\82\92ç\99ºÊ\8f®ã\81\97ã\80\81C Ã£\81«Ú¿\91ã\81\84ã\82³ã\83³ã\83\91ã\82ۋ\83«Úš\80Úª\9eã\81§ã\81\82ã\82\8b Go Ã£\81šå\90\8cç­\89ã\81®Ê\80§Ú\83ϋ\81«ã\81ªã\82\8aã\81Ÿã\81\99 <a href="https://www.techempower.com/benchmarks/#section=data-r17&hw=ph&test=query&l=zijmkf-1" class="external-link" target="_blank">(ã\81\99ã\81¹ã\81Š Starlette Ã£\81®ã\81\8aã\81\8bã\81\92ã\81§す)</a>。
 
-### äžŠè¡Œã¯äžŠåˆ—よりも優れおいたすか
+### äžŠè¡Œå‡Šç†ã¯äžŠåˆ—凊理より優れおいる { #is-concurrency-better-than-parallelism }
 
-ã\81\84ã\82\84ïŒ\81ã\81\9dã\82\8cã\81¯この話の教蚓ではありたせん。
+ã\81\84ã\81\84ã\81\88ïŒ\81ã\81\9dã\82\8cã\81\8cこの話の教蚓ではありたせん。
 
-䞊行凊理は䞊列凊理ずは異なりたす。倚くの埅機を䌎う**特定の**シナリオに適しおいたす。そのため、䞀般に、Webアプリケヌション開発では䞊列凊理よりもはるかに優れおいたす。しかし、すべおに察しおより良いずいうわけではありたせん。
+䞊行凊理は䞊列凊理ずは異なりたす。そしお倚くの埅ち時間を䌎う**特定の**シナリオでは優れおいたす。そのため、䞀般に Web ã‚¢ãƒ—リ開発では䞊列凊理よりはるかに適しおいたす。しかし、すべおに察しお最良ずいうわけではありたせん。
 
-ã\81ªã\81®ã\81§ã\80\81ã\83\90ã\83©ã\83³ã\82¹ã\82\92ã\81šã\82\8bã\81\9fã\82\81ã\81«ã\80\81ʬ¡ã\81®ç\89©Úª\9eã\82\92Ê\83³å\83\8fã\81\97ã\81ŠÀž\8bã\81\95ã\81\84:
+ã\83\90ã\83©ã\83³ã\82¹ã\82\92å\8f\96ã\82\8bã\81\9fã\82\81ã\81«ã\80\81ʬ¡ã\81®ç\9f­ã\81\84ç\89©Úª\9eã\82\92Ê\83³å\83\8fã\81\97ã\81Šã\81\8fã\81 ã\81\95ã\81\84ã\80\82
 
-> ã‚なたは倧きくお汚れた家を掃陀する必芁がありたす。
+> å€§ãããŠæ±šã‚ŒãŸå®¶ã‚’掃陀しなければならない。
 
-*はい、以䞊です*。
+*はい、これで物語は党郚です*。
 
 ---
 
-埅機🕙せず、家の䞭の耇数の堎所でたくさんの仕事をするだけです。
+どこにも埅ち ðŸ•™ ã¯ãªãã€å®¶ã®è€‡æ•°ç®‡æ‰€ã§å€§é‡ã®äœœæ¥­ãŒã‚るだけです。
 
-ã\81\82ã\81ªã\81\9fã\81¯ã\83\8fã\83³ã\83\90ã\83΋\82‹\83΋\81®ÀŸ\8bã\81®ã\82\88ã\81\86ã\81«ã\80\81Ê\9c\80Ã¥\88\9dã\81¯ã\83ªã\83\93ã\83³ã\82°ã\83«ã\83΋\83 ã\80\81ʬ¡ã\81«ã\82­ã\83\83ã\83\81ã\83³ã\81®ã\82\88ã\81\86ã\81«é \86ç\95ªã\81«ã\82\84ã\81£ã\81Šã\81\84ã\81\8fã\81\93ã\81šã\81\8cã\81§ã\81\8dã\81Ÿã\81\99ã\81\8cã\80\81Àœ\95ã\81\8bã\82\92åŸ\85Ê©\9fð\9f\95\99ã\81\97ã\81Šã\81\84ã\82\8bã\82\8fã\81\91ã\81§ã\81¯ã\81ªã\81\8fã\80\81ã\81\9fã\81 ã\81²ã\81\9fã\81\99ã\82\89ã\81«Ê\8e\83é\99ۋ\82\92ã\81\99ã\82\8bã\81 ã\81\91ã\81§ã\80\81é \86ç\95ªã\81¯Àœ\95ã\81«も圱響したせん。
+ã\83\8fã\83³ã\83\90ã\83΋\82‹\83΋\81®ÀŸ\8bã\81®ã\82\88ã\81\86ã\81«é \86ç\95ªã\82\92ʱºã\82\81ã\81Šã\80\81ã\81Ÿã\81\9aã\83ªã\83\93ã\83³ã\82°ã\80\81ʬ¡ã\81«ã\82­ã\83\83ã\83\81ã\83³ã\80\81ã\81šé\80²ã\82\81ã\81Šã\82\82ã\82\88ã\81\84ã\81®ã\81§ã\81\99ã\81\8cã\80\81Àœ\95ã\81\8bã\82\92åŸ\85ã\81€ Ã°\9f\95\99 Ã£\82\8fã\81\91ã\81§ã\81¯ã\81ªã\81\8fã\80\81ã\81²ã\81\9fã\81\99ã\82\89Ê\8e\83é\99ۋ\81\99ã\82\8bã\81 ã\81\91ã\81ªã\81®ã\81§ã\80\81é \86ç\95ªã\81¯Àœ\95も圱響したせん。
 
-順番の有無に関係なく (䞊行に) åŒã˜æ™‚間がかかり、同じ量の䜜業が行われるこずになるでしょう。
+順番の有無 (䞊行性の有無) ã«é–¢ä¿‚なく、終了たでに同じ時間がかかり、同じ䜜業量をこなすこずになりたす。
 
-ã\81\97ã\81\8bã\81\97ã\80\81ã\81\93ã\81®å Žå\90\88ã\80\818Àººã\81®å\85\83ã\83‹\82žÀ¿\82/Ê\96\99ç\90\86Àºº/ç\8fŸåœ¹Êž\85Ê\8e\83Ã¥\93¡ð\9f\91šâ\80\8dð\9f\8d³ð\9f\91šâ\80\8dð\9f\8d³ð\9f\91šâ\80\8dð\9f\8d³ð\9f\91šâ\80\8dð\9f\8d³ð\9f\91šâ\80\8dð\9f\8d³ð\9f\91šâ\80\8dð\9f\8d³ð\9f\91šâ\80\8dð\9f\8d³ð\9f\91šâ\80\8dð\9f\8d³ã\82\92Ê\89\8bé\85\8dã\81§ã\81\8dã\81Šã\80\81ã\81\9dã\82\8cã\81\9eã\82\8c (ã\81\95ã\82\89ã\81«ã\81\82ã\81ªã\81\9fã\82\82) Ã£\81\8cå®¶ã\81®å\88¥ã\80\85ã\81®å ŽÊ\89\80ã\82\92Ê\8e\83é\99ۋ\81§ã\81\8dã\82\8cã\81°ã\80\81Ú¿œå\8a ã\81®å\8a©ã\81\91ã\82\92Ã¥\80\9fã\82\8aã\81Šã\80\81ã\81\99ã\81¹ã\81Šã\81®Àœ\9cÊ¥­ã\82\92**ÀžŠå\88\97**ã\81«Ú¡\8cã\81\84ã\80\81ã\81¯ã\82\8bã\81\8bã\81«Ê\97©ã\81\8fçµ\82˼\86ã\81§ã\81\8dã\82\8bã\81§ã\81\97ã\82\87ã\81\86。
+ã\81\97ã\81\8bã\81\97ã\81\93ã\81®å Žå\90\88ã\80\818 Ã€ÂºÂºÃ£\81®å\85\83ã\83‹\82žÀ¿\82/Ê\96\99ç\90\86Àºº/ç\8fŸÊž\85Ê\8e\83Ã¥\93¡ã\82\92é\80£ã\82\8cã\81Šã\81\8dã\81Šã\80\81ã\81\9dã\82\8cã\81\9eã\82\8c (ã\81\82ã\81ªã\81\9fã\82\82Ã¥\8a ã\81\88ã\81Š) Ã¥Â®Â¶Ã£\81®å\88¥ã\80\85ã\81®ã\82šã\83ªã\82¢ã\82\92Ê\8e\83é\99ۋ\81§ã\81\8dã\82\8cã\81°ã\80\81**ÀžŠå\88\97** Ã£\81«Àœ\9cÊ¥­ã\81§ã\81\8dã\80\81ã\82\88ã\82\8aÊ\97©ã\81\8fçµ\82ã\81\88ã\82\89ã\82\8cã\81Ÿã\81\99。
 
-このシナリオでは、枅掃員 (あなたを含む) ã®ãã‚Œãžã‚ŒãŒãƒ—ロセッサずなり、それぞれの圹割を果たしたす。
+このシナリオでは、各枅掃員 (あなたを含む) ãŒãƒ—ロセッサであり、それぞれが自分の圹割を果たしたす。
 
-ã\81Ÿã\81\9fã\80\81å®\9fÚ¡\8cÊ\99\82é\96\93ã\81®ã\81ȋ\81šã\82\93ã\81©ã\81¯ (åŸ\85Ê©\9fã\81§ã\81¯ã\81ªã\81\8f) Ã¥Â®\9fé\9a\9bã\81®Àœ\9cÊ¥­ã\81«Ú²»ã\82\84ã\81\95ã\82\8cã\80\81ã\82³ã\83³ã\83\94ã\83¥ã\83΋\82¿ã\81§ã\81®Àœ\9cÊ¥­ã\81¯<abbr title="Central Processing Unit">CPU</abbr>ã\81«ã\82\88ã\81£ã\81ŠÚ¡\8cã\82\8fã\82\8cã\81Ÿã\81\99ã\80\82ã\81\93ã\82\8cã\82\89ã\81®å\95\8fé¡\8cã\81¯ã\80\8cCPUã\83\90ã\82Šã\83³ã\83\89ã\80\8dã\81šÚš\80ã\81\84たす。
+ã\81\9dã\81\97ã\81Šå®\9fÚ¡\8cÊ\99\82é\96\93ã\81®å€§å\8d\8aã\81¯ (åŸ\85ã\81¡ã\81§ã\81¯ã\81ªã\81\8f) Ã¥Â®\9fÀœ\9cÊ¥­ã\81\8cÃ¥\8d ã\82\81ã\80\81ã\82³ã\83³ã\83\94ã\83¥ã\83΋\82¿ã\81§ã\81®Àœ\9cÊ¥­ã\81¯ <abbr title="Central Processing Unit - Ã€ÂžÂ­Ã¥Â€Â®Ã¥\87Šç\90\86Ú£\85眮">CPU</abbr> Ã£\81«ã\82\88ã\81£ã\81ŠÚ¡\8cã\82\8fã\82\8cã\81Ÿã\81\99ã\80\82ã\81\93ã\82\8cã\82\89ã\81®å\95\8fé¡\8cã\81¯ã\80\8cCPU Ã£\83\90ã\82Šã\83³ã\83\89ã\80\8dã\81šå\91΋\81°ã\82\8cたす。
 
 ---
 
-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)
 ```
 
-ã\82«ã\82®ã\81¯ `await` Ã£\81§ã\81\99ã\80\82çµ\90Ê\9e\9cã\82\92 `burgers`ã\81«À¿\9då­\98ã\81\99ã\82\8bÃ¥\89\8dã\81«ã\80\81`get_burgers(2)`ã\81®å\87Šç\90\86ð\9f\95\99ã\81®å®\8c˼\86ã\82\92åŸ\85ã\81ۉ\8fžå¿\85ڊ\81ã\81\8cã\81\82ã\82\8bã\81\93ã\81šã\82\92Pythonã\81«ÀŒ\9dã\81\88ã\81Ÿã\81\99ã\80\82ã\81\93ã\82\8cã\81§Pythonã\81¯ã\80\81ã\81\9dã\81®é\96\93ã\81« (Ã¥\88¥ã\81®ã\83ªã\82¯ã\82šã\82¹ã\83\88ã\82\92Ã¥\8f\97À¿¡ã\81\99ã\82\8bã\81ªã\81©) Ã€Âœ\95ã\81\8bÀ»\96ã\81®ã\81\93ã\81šã\81\8cã\81§ã\81\8dã\82\8bð\9f\94\80â\8f¯ã\81\93ã\81šã\82\92ç\9f¥りたす。
+ã\81\93ã\81\93ã\81§ã\81®é\8dµã\81¯ `await` Ã£\81§ã\81\99ã\80\82`burgers` Ã£\81«çµ\90Ê\9e\9cã\82\92À¿\9då­\98ã\81\99ã\82\8bÃ¥\89\8dã\81«ã\80\81`get_burgers(2)` Ã£\81\8cã\82\84ã\82\8bã\81¹ã\81\8dã\81\93ã\81šã\82\92çµ\82ã\81\88ã\82\8bã\81®ã\82\92 Ã¢\8fž Ã¥ÂŸ\85ã\81€ Ã°\9f\95\99 Ã£\82\88ã\81\86ã\81« Python Ã£\81«ÀŒ\9dã\81\88ã\81Ÿã\81\99ã\80\82ã\81\93ã\82\8cã\81«ã\82\88ã\82\8a Python Ã£\81¯ã\80\81ã\81\9dã\81®é\96\93ã\81« (Ã¥\88¥ã\81®ã\83ªã\82¯ã\82šã\82¹ã\83\88ã\82\92Ã¥\8f\97ã\81\91Ã¥\8f\96ã\82\8bã\81ªã\81©) Ã£\81ȋ\81\8bã\81®ã\81\93ã\81šã\82\92 Ã°\9f\94\80 Ã¢\8f¯ Ã£\81§ã\81\8dã\82\8bã\81šå\88\86ã\81\8bりたす。
 
-`await` Ã£\81\8cÊ©\9fÚ\83ϋ\81\99ã\82\8bã\81\9fã\82\81ã\81«ã\81¯ã\80\81é\9d\9eÃ¥\90\8cÊ\9c\9fÃ¥\87Šç\90\86ã\82\92ã\82µã\83\9dã\83΋\83\88ã\81\99ã\82\8bé\96¢Ê\95°å\86\85ã\81«ã\81\82ã\82\8bå¿\85ڊ\81ã\81\8cã\81\82ã\82\8aã\81Ÿã\81\99ã\80\82ã\81\93ã\82\8cã\81¯ã\80\81`async def` Ã£\81§é\96¢Ê\95°ã\82\92宣ښ\80ã\81\99ã\82\8bã\81 ã\81\91ã\81§ã\82\88ã\81\84ã\81§す:
+`await` Ã£\81\8cÊ©\9fÚ\83ϋ\81\99ã\82\8bã\81«ã\81¯ã\80\81ã\81\93ã\81®é\9d\9eÃ¥\90\8cÊ\9c\9fÊ\80§ã\82\92ã\82µã\83\9dã\83΋\83\88ã\81\99ã\82\8bé\96¢Ê\95°ã\81®å\86\85é\83šã\81§ã\81ªã\81\91ã\82\8cã\81°ã\81ªã\82\8aã\81Ÿã\81\9bã\82\93ã\80\82ã\81\9dã\81®ã\81\9fã\82\81ã\81«ã\81¯ `async def` Ã£\81§å®£Úš\80ã\81\97ã\81Ÿす:
 
 ```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)
 ```
 
 ---
 
-ã\81\97ã\81\9fã\81\8cã\81£ã\81Šã\80\81 `await` Ã£\81§å\91΋\81³å\87ºã\81\99ã\81\93ã\81šã\81\8cã\81§ã\81\8dã\82\8bã\83©ã\82ۋ\83\96ã\83©ã\83ªã\82\92Àœ¿ç\94šã\81\97ã\81Šã\81\84ã\82\8b堎å\90\88ã\81¯ã\80\81ʬ¡ã\81®ã\82\88ã\81\86ã\81« `async def` Ã£\82\92Àœ¿ç\94šã\81\97ã\81Šã\80\81ã\81\9dã\82\8cã\82\92Àœ¿ç\94šã\81\99ã\82\8b*path operation Ã©\96¢Ê\95°*ã\82\92Àœ\9cÊ\88\90ã\81\99ã\82\8bå¿\85ڊ\81ã\81\8cã\81\82ã\82\8aã\81Ÿã\81\99:
+ã\81\9dã\81®ã\81\9fã\82\81ã\80\81`await` Ã£\81§å\91΋\81¹ã\82\8bã\81šÚ¬³ã\81£ã\81Šã\81\84ã\82\8bã\83©ã\82ۋ\83\96ã\83©ã\83ªã\82\92Àœ¿ã\81£ã\81Šã\81\84ã\82\8b堎å\90\88ã\81¯ã\80\81ã\81\9dã\82\8cã\82\92Àœ¿ã\81\86 *path operation Ã©\96¢Ê\95°* Ã£\82\92 `async def` Ã£\81§Àœ\9cã\82\8bå¿\85ڊ\81ã\81\8cã\81\82ã\82\8aã\81Ÿã\81\99ã\80\82ÀŸ\8bã\81\88ã\81°:
 
 ```Python hl_lines="2-3"
 @app.get('/burgers')
@@ -314,86 +349,96 @@ async def read_burgers():
     return burgers
 ```
 
-### ã‚ˆã‚Šç™ºå±•的な技術詳çް
+### ã‚ˆã‚Šç™ºå±•的な技術詳çް { #more-technical-details }
+
+`await` ã¯ `async def` ã§å®šçŸ©ã•れた関数の内郚でしか䜿えないこずに気づいたかもしれたせん。
+
+同時に、`async def` ã§å®šçŸ©ã•れた関数は「await」される必芁がありたす。぀たり、`async def` ã‚’持぀関数は、やはり `async def` ã§å®šçŸ©ã•れた関数の内郚からしか呌べたせん。
+
+では、ニワトリず卵の話のように、最初の `async` é–¢æ•°ã¯ã©ã†å‘Œã¶ã®ã§ã—ょうか
+
+**FastAPI** ã‚’䜿っおいる堎合は心配ありたせん。その「最初の」関数は *path operation é–¢æ•°* ã§ã€FastAPI ãŒé©åˆ‡ã«å®Ÿè¡Œã—おくれたす。
+
+しかし、FastAPI ã‚’䜿わずに `async` / `await` ã‚’䜿いたい堎合もありたす。
 
-`await` ã¯ `async def` ã§å®šçŸ©ã•れた関数内でのみ䜿甚できるこずがわかったかず思いたす。
+### è‡ªåˆ†ã§ async ã‚³ãƒŒãƒ‰ã‚’曞く { #write-your-own-async-code }
 
-しかし同時に、`async def` ã§å®šçŸ©ã•れた関数は「awaitされる」必芁がありたす。なので、`async def` ã‚’持぀関数は、`async def` ã§å®šçŸ©ã•れた関数内でのみ呌び出せたす。
+Starlette (**FastAPI** ã‚‚) ã¯ <a href="https://anyio.readthedocs.io/en/stable/" class="external-link" target="_blank">AnyIO</a> ã®äžŠã«æ§‹ç¯‰ã•れおおり、暙準ラむブラリの <a href="https://docs.python.org/3/library/asyncio-task.html" class="external-link" target="_blank">asyncio</a> ãš <a href="https://trio.readthedocs.io/en/stable/" class="external-link" target="_blank">Trio</a> ã®äž¡æ–¹ã«å¯Ÿå¿œã—おいたす。
 
-では、このニワトリず卵の問題に぀いお、最初の `async` é–¢æ•°ã‚’どのように呌び出すのでしょうか
+特に、あなた自身のコヌド内で、より高床なパタヌンを必芁ずする発展的な䞊行凊理のナヌスケヌスに察しお、<a href="https://anyio.readthedocs.io/en/stable/" class="external-link" target="_blank">AnyIO</a> ã‚’盎接䜿えたす。
 
-**FastAPI**を䜿甚しおいる堎合、その「最初の」関数が*path operation é–¢æ•°*であり、FastAPIが正しく実行する方法を知っおいるので、心配する必芁はありたせん。
+仮に FastAPI ã‚’䜿っおいなくおも、<a href="https://anyio.readthedocs.io/en/stable/" class="external-link" target="_blank">AnyIO</a> ã§ç‹¬è‡ªã® async ã‚¢ãƒ—リケヌションを曞けば、高い互換性ず利点 (䟋: æ§‹é€ åŒ–䞊行性) ã‚’埗られたす。
 
-しかし、FastAPI以倖で `async` / `await` ã‚’䜿甚したい堎合は、<a href="https://docs.python.org/3/library/asyncio-task.html#coroutine" class="external-link" target="_blank">公匏Pythonドキュメントを参照しお䞋さい</a>。
+私は AnyIO ã®äžŠã«è–„い局ずしお、型泚釈を少し改善し、より良い**補完**や**むンラむン゚ラヌ**などを埗るための別ラむブラリも䜜りたした。たた、**理解**しお**自分で async ã‚³ãƒŒãƒ‰ã‚’曞く**のに圹立぀フレンドリヌなむントロ/チュヌトリアルもありたす: <a href="https://asyncer.tiangolo.com/" class="external-link" target="_blank">Asyncer</a>。特に、**async ã‚³ãƒŒãƒ‰ãšé€šåžžã®** (ブロッキング/同期) **コヌドを組み合わせる**必芁がある堎合に有甚です。
 
-### éžåŒæœŸã‚³ãƒŒãƒ‰ã®ä»–の圢匏
+### éžåŒæœŸã‚³ãƒŒãƒ‰ã®ä»–の圢匏 { #other-forms-of-asynchronous-code }
 
-`async` ãš `await` ã‚’䜿甚するスタむルは、この蚀語では比范的新しいものです。
+`async` ãš `await` ã‚’䜿うこのスタむルは、蚀語ずしおは比范的新しいものです。
 
-非同期コヌドの操䜜がはるかに簡単になりたす。
+しかし、これにより非同期コヌドの取り扱いは倧幅に簡単になりたす。
 
-等䟡な (たたはほずんど同䞀の) æ§‹æ–‡ãŒã€æœ€è¿‘のバヌゞョンのJavaScript (ブラりザおよびNodeJS) ã«ã‚‚最近組み蟌たれたした。
+同等 (ほが同䞀) ã®æ§‹æ–‡ãŒæœ€è¿‘の JavaScript (ブラりザず NodeJS) ã«ã‚‚導入されたした。
 
-ã\81\97ã\81\8bã\81\97ã\80\81ã\81\9dã\81®å\89\8dã\81¯ã\80\81é\9d\9eÃ¥\90\8cÊ\9c\9fã\82³ã\83΋\83\89ã\81®å\87Šç\90\86はかなり耇雑で難解でした。
+ã\81\9dã\82\8cÀ»¥å\89\8dã\81¯ã\80\81é\9d\9eÃ¥\90\8cÊ\9c\9fã\82³ã\83΋\83\89ã\81®Ê\89±ã\81\84はかなり耇雑で難解でした。
 
-以前のバヌゞョンのPythonでは、スレッドや<a href="https://www.gevent.org/" class="external-link" target="_blank">Gevent</a>が利甚できたした。しかし、コヌドは理解、デバック、そしお、考察がはるかに耇雑です。
+以前の Python ã§ã¯ã‚¹ãƒ¬ãƒƒãƒ‰ã‚„ <a href="https://www.gevent.org/" class="external-link" target="_blank">Gevent</a> ã‚’䜿えたしたが、コヌドの理解・デバッグ・思考がはるかに難しくなりたす。
 
-以前のバヌゞョンのNodeJS / ãƒ–ラりザJavaScriptでは、「コヌルバック」を䜿甚しおいたした。これは、「コヌルバック地獄」に぀ながりたす。
+以前の NodeJS / ãƒ–ラりザ JavaScript ã§ã¯ã€Œã‚³ãƒŒãƒ«ãƒãƒƒã‚¯ã€ã‚’䜿っおおり、「コヌルバック地獄」を招きたした。
 
-## ã‚³ãƒ«ãƒŒãƒãƒ³
+## ã‚³ãƒ«ãƒŒãƒãƒ³ { #coroutines }
 
-**ã\82³ã\83«ã\83΋\83\81ã\83³**ã\81¯ã\80\81`async def` Ã©\96¢Ê\95°ã\81«ã\82\88ã\81£ã\81ŠÚ¿\94ã\81\95ã\82\8cã\82\8bã\82\82ã\81®ã\82\92Ê\8c\87ã\81\99é\9d\9e垞ã\81«ÊŽ\92Ú\90ϋ\81\9fç\94šÚª\9eã\81§ã\81\99ã\80\82ã\81\93ã\82\8cã\81¯ã\80\81é\96\8bå§\8bã\81§ã\81\8dã\81Šã\80\81ã\81\84ã\81ۋ\81\8bçµ\82˼\86ã\81\99ã\82\8bé\96¢Ê\95°ã\81®ã\82\88ã\81\86ã\81ªã\82\82ã\81®ã\81§ã\81\82ã\82\8bã\81\8cã\80\81Ã¥\86\85é\83šã\81« `await` Ã£\81\8cã\81\82ã\82\8bã\81šã\81\8dã\81¯å\86\85é\83šç\9a\84ã\81«Àž\80Ê\99\82Ã¥\81\9cÊ­¢â\8fžã\81\95ã\82\8cã\82\8bã\81\93ã\81šã\82\82ã\81\82ã\82\8bã\82\82ã\81®ã\81 ã\81šPythonã\81¯Úª\8dÚ­\98ã\81\97ã\81Šã\81\84たす。
+**ã\82³ã\83«ã\83΋\83\81ã\83³**ã\81¯ã\80\81`async def` Ã©\96¢Ê\95°ã\81\8cÚ¿\94ã\81\99ã\82\82ã\81®ã\82\92Ê\8c\87ã\81\99ã\80\81ã\81¡ã\82\87ã\81£ã\81šÊŽ\92Ú\90ϋ\81\9fç\94šÚª\9eã\81§ã\81\99ã\80\82Python Ã£\81¯ã\81\9dã\82\8cã\82\92ã\80\81é\96\8bå§\8bã\81§ã\81\8dã\81Šã\81\84ã\81ۋ\81\8bçµ\82˼\86ã\81\99ã\82\8bé\96¢Ê\95°ã\81®ã\82\88ã\81\86ã\81ªã\82\82ã\81®ã\81šã\81\97ã\81ŠÊ\89±ã\81\84ã\81Ÿã\81\99ã\81\8cã\80\81Ã¥\86\85é\83šã\81« `await` Ã£\81\8cã\81\82ã\82\8bã\81\9fã\81³ã\81«å\86\85é\83šç\9a\84ã\81«Àž\80Ê\99\82Ã¥\81\9cÊ­¢ Ã¢\8fž Ã£\81\99ã\82\8bã\81\8bã\82\82ã\81\97ã\82\8cã\81ªã\81\84ã\82\82ã\81®ã\81šã\81\97ã\81ŠÚª\8dÚ­\98ã\81\97たす。
 
-`async` Ã£\81š `await` Ã£\82\92ç\94šã\81\84ã\81\9fé\9d\9eÃ¥\90\8cÊ\9c\9fã\82³ã\83΋\83\89ã\82\92Àœ¿ç\94šã\81\99ã\82\8bã\81\99ã\81¹ã\81Šã\81®Ê©\9fÚ\83ϋ\81¯ã\80\81ã\80\8cã\82³ã\83«ã\83΋\83\81ã\83³ã\80\8dã\82\92Àœ¿ç\94šã\81\99ã\82\8bã\82\82ã\81®ã\81šã\81\97ã\81ŠÀœ\95床ã\82\82ã\81Ÿã\81šã\82\81ã\82\89ã\82\8cã\81Šã\81\84ã\81Ÿã\81\99ã\80\82Goã\81®Àž»ÚŠ\81Ê©\9fÚ\83ϋ\81§ã\81\82ã\82\8bã\80\8cã\82Žã\83«ã\83΋\83\81ã\83³」に盞圓したす。
+`async` Ã£\81š `await` Ã£\82\92ç\94šã\81\84ã\81\9fé\9d\9eÃ¥\90\8cÊ\9c\9fã\82³ã\83΋\83\89ã\81®Ê©\9fÚ\83ό\85šÀœ\93ã\81¯ã\80\81ã\81\97ã\81°ã\81\97ã\81°ã\80\8cã\82³ã\83«ã\83΋\83\81ã\83³ã\82\92Àœ¿ã\81\86ã\80\8dã\81šÚŠ\81çŽ\84ã\81\95ã\82\8cã\81Ÿã\81\99ã\80\82ã\81\93ã\82\8cã\81¯ Go Ã£\81®Àž»ÚŠ\81Ê©\9fÚ\83ϋ\80\8cGoroutines」に盞圓したす。
 
-## ãŸãšã‚
+## ãŸãšã‚ { #conclusion }
 
-䞊述したフレヌズを芋おみたしょう:
+䞊のフレヌズをもう䞀床芋おみたしょう:
 
-> çŸä»£ç‰ˆã®Pythonは「**非同期コヌド**」を、「**コルヌチン**」ず称されるものを利甚しおサポヌトしおいたす。これは **`async` ãš `await`** æ§‹æ–‡ã‚’甚いたす。
+> ãƒ¢ãƒ€ãƒ³ãª Python ã¯ **「非同期コヌド」** ã‚’ **「コルヌチン」** ãšå‘Œã°ã‚Œã‚‹ä»•組みでサポヌトしおおり、構文は **`async` ãš `await`** ã§ã™ã€‚
 
-À»\8aã\81§ã\81¯ã\80\81ã\81\93ã\81®Ê\84\8fÃ¥\91³ã\81\8cã\82\88ã\82\8aç\90\86򤣋\81§ã\81\8dるはずです。✚
+À»\8aã\81ªã\82\89ã\80\81ã\82\88ã\82\8aÊ\84\8fÃ¥\91³ã\81\8cÃ¥\88\86ã\81\8bるはずです。✚
 
-(Starletteを介しお) FastAPIに力を䞎えお、印象的なパフォヌマンスを実珟しおいるものはこれがすべおです。
+これらすべおが (Starlette ã‚’通じお) FastAPI ã‚’支え、印象的なパフォヌマンスを実珟しおいたす。
 
-## éžåžžã«ç™ºå±•的な技術的詳çް
+## éžåžžã«ç™ºå±•的な技術的詳çް { #very-technical-details }
 
 /// warning | æ³šæ„
 
-恐らくスキップしおも良いでしょう。
+おそらく読み飛ばしおも倧䞈倫です。
 
-ã\81\93ã\81®é\83šå\88\86ã\81¯**FastAPI**ã\81®À»\95çµ\84ã\81¿ã\81«é\96¢ã\81\99ã\82\8bé\9d\9e垞ã\81«技術的な詳现です。
+ã\81\93ã\82\8cã\81¯ **FastAPI** Ã£\81®å\86\85é\83šå\8b\95Àœ\9cã\81«é\96¢ã\81\99ã\82\8bã\80\81ã\81šã\81Šã\82\82技術的な詳现です。
 
-かなりの技術知識 (コルヌチン、スレッド、ブロッキングなど) ãŒã‚り、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` ã§å®£èš€ã—た堎合、(サヌバをブロックしおしたうため) ç›ŽæŽ¥å‘Œã³å‡ºã•れるのではなく、倖郚のスレッドプヌルで実行され、それを埅機したす。
 
-Àž\8aښ\98ã\81®Ê\96¹Ê³\95ã\81šé\81\95ã\81£ã\81\9fÊ\96¹Ê³\95ã\81®å\88¥ã\81®é\9d\9eÃ¥\90\8cÊ\9c\9fã\83\95ã\83‹\83΋\83 ã\83¯ã\83΋\82¯ã\81\8bã\82\89Ê\9d¥ã\81Šã\81\8aã\82\8aã\80\81å°\8fã\81\95ã\81ªã\83\91ã\83\95ã\82©ã\83΋\83\9eã\83³ã\82¹å\90\91Àž\8a (çŽ\84100ã\83\8aã\83\8eç§\92) Ã£\81®ã\81\9fã\82\81ã\81«é\80\9a垞ã\81® `def` Ã£\82\92Àœ¿ç\94šã\81\97ã\81ŠÀº\9b现ã\81ªÊŒ\94ç®\97ã\81®ã\81¿Ú¡\8cã\81\86 *path operation Ã©\96¢Ê\95°* Ã£\82\92å®\9a矩ã\81\99ã\82\8bã\81®ã\81«Ê\85£ã\82\8cã\81Šã\81\84ã\82\8b堎å\90\88ã\81¯ã\80\81**FastAPI**ã\81§ã\81¯ã\81Ÿã\81£ã\81\9fã\81\8fé\80\86ã\81®å\8a¹Ê\9e\9cã\81«ã\81ªã\82\8bã\81\93ã\81šã\81«Ê³šÊ\84\8fã\81\97ã\81Šã\81\8fã\81 ã\81\95ã\81\84ã\80\82ã\81\93ã\81®ã\82\88ã\81\86ã\81ªå Žå\90\88ã\80\81*path operation Ã©\96¢Ê\95°* Ã£\81\8cã\83\96ã\83­ã\83\83ã\82­ã\83³ã\82°<abbr title="Ã¥\85¥å\8a\9b/Ã¥\87ºå\8a\9b: Ã£\83\87ã\82£ã\82¹ã\82¯ã\81®Úª­ã\81¿å\8f\96ã\82\8aã\81Ÿã\81\9fã\81¯Ê\9bžã\81\8dڟŒã\81¿ã\80\81ã\83\8dã\83\83ã\83\88ã\83¯ã\83΋\82¯é\80\9aÀ¿¡ã\80\82">I/O</abbr>ã\82\92å®\9fÚ¡\8cã\81\97ã\81ªã\81\84ã\81®ã\81§ã\81\82ã\82\8cã\81°ã\80\81`async def` Ã£\81®Àœ¿ç\94šã\82\92ã\81\8aÃ¥\8b§ã\82\81ã\81\97ã\81Ÿす。
+Àž\8aښ\98ã\81šã\81¯ç\95°ã\81ªã\82\8bÃ¥\8b\95Àœ\9cã\81®å\88¥ã\81®é\9d\9eÃ¥\90\8cÊ\9c\9fã\83\95ã\83‹\83΋\83 ã\83¯ã\83΋\82¯ã\81\8bã\82\89Ê\9d¥ã\81Šã\81\8aã\82\8aã\80\81ã\81ȋ\82\93ã\81®ã\82\8fã\81\9aã\81\8bã\81ªã\83\91ã\83\95ã\82©ã\83΋\83\9eã\83³ã\82¹å\90\91Àž\8a (çŽ\84 100 Ã£\83\8aã\83\8eç§\92) Ã£\82\92ç\8b\99ã\81£ã\81Šã\80\81ښ\88ç®\97ã\81®ã\81¿ã\81®Àº\9b现ã\81ª *path operation Ã©\96¢Ê\95°* Ã£\82\92玠ã\81® `def` Ã£\81§å®\9a矩ã\81\99ã\82\8bã\81\93ã\81šã\81«Ê\85£ã\82\8cã\81Šã\81\84ã\82\8b堎å\90\88ã\80\81**FastAPI** Ã£\81§ã\81¯å\8a¹Ê\9e\9cã\81\8cã\81Ÿã\81£ã\81\9fã\81\8fé\80\86ã\81«ã\81ªã\82\8bç\82¹ã\81«Ê³šÊ\84\8fã\81\97ã\81Šã\81\8fã\81 ã\81\95ã\81\84ã\80\82ã\81\93ã\82\8cã\82\89ã\81®å Žå\90\88ã\80\81*path operation Ã©\96¢Ê\95°* Ã£\81\8cã\83\96ã\83­ã\83\83ã\82­ã\83³ã\82°ã\81ª <abbr title="Input/Output - Ã¥\85¥å\87ºå\8a\9b: Ã£\83\87ã\82£ã\82¹ã\82¯ã\81®Úª­ã\81¿å\8f\96ã\82\8aã\81Ÿã\81\9fã\81¯Ê\9bžã\81\8dڟŒã\81¿ã\80\81ã\83\8dã\83\83ã\83\88ã\83¯ã\83΋\82¯é\80\9aÀ¿¡ã\80\82">I/O</abbr> Ã£\82\92Ú¡\8cã\81\86ã\82³ã\83΋\83\89ã\82\92Àœ¿ã\81£ã\81Šã\81\84ã\81ªã\81\84é\99\90ã\82\8aã\80\81`async def` Ã£\82\92Àœ¿ã\81£ã\81\9fÊ\96¹ã\81\8cÚ\89¯ã\81\84ã\81§す。
 
-それでも、どちらの状況でも、**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 é–¢æ•°* ãšäŸå­˜é–¢ä¿‚) ãšã¯å¯Ÿç…§çš„です。
 
-ã\83Šã\83΋\83\86ã\82£ã\83ªã\83\86ã\82£é\96¢Ê\95°ã\81\8c `def` Ã£\82\92Àœ¿ç\94šã\81\97ã\81\9fé\80\9a垞ã\81®é\96¢Ê\95°ã\81§ã\81\82ã\82\8b堎å\90\88ã\80\81ã\82¹ã\83‹\83\83ã\83\89ã\83\97ã\83΋\83«ã\81§ã\81¯ã\81ªã\81\8fç\9bŽÊ\8eÂ¥ (ã\82³ã\83΋\83\89ã\81§Úš\98Ú¿°ã\81\97ã\81\9fã\81šã\81\8aã\82\8aã\81«) Ã¥\91΋\81³å\87ºã\81\95ã\82\8cã\81Ÿã\81\99ã\80\82é\96¢Ê\95°ã\81\8c `async def` Ã£\82\92Àœ¿ç\94šã\81\97ã\81ŠÀœ\9cÊ\88\90ã\81\95ã\82\8cã\81Šã\81\84ã\82\8b堎å\90\88ã\81¯ã\80\81Ã¥\91΋\81³å\87ºã\81\99é\9a\9bã\81« `await` Ã£\81\99ã\82\8bå¿\85ڊ\81ã\81\8cã\81\82ã\82\8aã\81Ÿす。
+ã\83Šã\83΋\83\86ã\82£ã\83ªã\83\86ã\82£é\96¢Ê\95°ã\81\8c `def` Ã£\81®é\80\9a垞é\96¢Ê\95°ã\81§ã\81\82ã\82\8cã\81°ã\80\81(ã\81\82ã\81ªã\81\9fã\81®ã\82³ã\83΋\83\89ã\81«Ê\9bžã\81\84ã\81\9fã\81šã\81\8aã\82\8aã\81«) Ã§\9bŽÊ\8e¥å\91΋\81³å\87ºã\81\95ã\82\8cã\80\81ã\82¹ã\83‹\83\83ã\83\89ã\83\97ã\83΋\83«ã\81§ã\81¯å®\9fÚ¡\8cã\81\95ã\82\8cã\81Ÿã\81\9bã\82\93ã\80\82é\96¢Ê\95°ã\81\8c `async def` Ã£\81§Àœ\9cã\82\89ã\82\8cã\81Šã\81\84ã\82\8b堎å\90\88ã\81¯ã\80\81ã\81\9dã\81®é\96¢Ê\95°ã\82\92Ã¥\91΋\81¶ã\81šã\81\8dã\81« `await` Ã£\81\99ã\81¹ã\81\8dã\81§す。
 
 ---
 
-ç¹°ã\82\8aÚ¿\94ã\81\97ã\81«ã\81ªã\82\8aã\81Ÿã\81\99ã\81\8cã\80\81ã\81\93ã\82\8cã\82\89ã\81¯é\9d\9e垞ã\81«Ê\8a\80Ú¡\93ç\9a\84ã\81ªÚ©³çްã\81§ã\81\82ã\82\8aã\80\81ʀ\9c玢ã\81\97ã\81ŠÚŸ¿ã\82\8aç\9d\80ã\81\84ã\81\9f堎å\90\88は圹立぀でしょう。
+ç¹°ã\82\8aÚ¿\94ã\81\97ã\81«ã\81ªã\82\8aã\81Ÿã\81\99ã\81\8cã\80\81ã\81\93ã\82\8cã\82\89ã\81¯é\9d\9e垞ã\81«Ê\8a\80Ú¡\93ç\9a\84ã\81ªÚ©³çްã\81§ã\80\81Ú©²åœ\93˼\8bé \85ã\82\92ʀ\9c玢ã\81\97ã\81Šã\81\93ã\81\93ã\81«ã\81\9fã\81©ã\82\8aç\9d\80ã\81\84ã\81\9f堎å\90\88ã\81«は圹立぀でしょう。
 
-それ以倖の堎合は、䞊蚘のセクションのガむドラむンで問題ないはずです: <a href="#_1">急いでいたすか</a>。
+それ以倖の堎合は、䞊のセクションのガむドラむンに埓えば十分です: <a href="#in-a-hurry">急いでいたすか</a>。
diff --git a/docs/ja/docs/deployment/cloud.md b/docs/ja/docs/deployment/cloud.md
new file mode 100644 (file)
index 0000000..17699cd
--- /dev/null
@@ -0,0 +1,24 @@
+# ã‚¯ãƒ©ã‚Šãƒ‰ãƒ—ロバむダぞの FastAPI ãƒ‡ãƒ—ロむ { #deploy-fastapi-on-cloud-providers }
+
+FastAPI ã‚¢ãƒ—リケヌションは、実質的にどのようなクラりドプロバむダでもデプロむできたす。
+
+倚くの堎合、䞻芁なクラりドプロバむダは FastAPI ã‚’デプロむするためのガむドを提䟛しおいたす。
+
+## FastAPI Cloud { #fastapi-cloud }
+
+**<a href="https://fastapicloud.com" class="external-link" target="_blank">FastAPI Cloud</a>** ã¯ã€**FastAPI** ã®äœœè€…ず同じチヌムによっお䜜られおいたす。
+
+API ã®**構築**、**デプロむ**、**アクセス**たでのプロセスを、最小限の手間で効率化したす。
+
+FastAPI ã§ã‚¢ãƒ—リを開発するずきず同じ**開発者䜓隓**を、クラりドぞの**デプロむ**にももたらしたす。🎉
+
+FastAPI Cloud ã¯ã€*FastAPI and friends* ã‚ªãƒŒãƒ—ン゜ヌスプロゞェクトの䞻芁なスポンサヌか぀資金提䟛元です。✚
+
+## ã‚¯ãƒ©ã‚Šãƒ‰ãƒ—ロバむダ - ã‚¹ãƒãƒ³ã‚µãƒŒ { #cloud-providers-sponsors }
+
+他にもいく぀かのクラりドプロバむダが âœš [**FastAPI ã‚’スポンサヌしおいたす**](../help-fastapi.md#sponsor-the-author){.internal-link target=_blank} âœšã€‚🙇
+
+それらのガむドを参考にし、サヌビスを詊しおみるのもよいでしょう:
+
+* <a href="https://docs.render.com/deploy-fastapi?utm_source=deploydoc&utm_medium=referral&utm_campaign=fastapi" class="external-link" target="_blank">Render</a>
+* <a href="https://docs.railway.com/guides/fastapi?utm_medium=integration&utm_source=docs&utm_campaign=fastapi" class="external-link" target="_blank">Railway</a>
index 787eb2e73f8bbc0f38c0d1fa27deb123b54bf47e..501a90bc93d5fedd5c9d425e5f43fff819933827 100644 (file)
@@ -29,7 +29,6 @@
 
 ## ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ - HTTPS { #security-https }
 
-<!-- NOTE: https.md written in Japanese does not exist, so it redirects to English one  -->
 [前チャプタヌの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 }
-<!-- NOTE: https.md written in Japanese does not exist, so it redirects to English one  -->
 
 [HTTPSに぀いお](https.md){.internal-link target=_blank}のドキュメントで、1぀のサヌバヌで1぀のポヌトずIPアドレスの組み合わせでリッスンできるのは1぀のプロセスだけであるこずを芚えおいたすでしょうか
 
index 6c182448c939d3588c1b3e3670568a955d7b12ea..883f98c985db77bef2b9f7c4eb0d0678428bcf76 100644 (file)
@@ -14,7 +14,7 @@ Linuxコンテナの䜿甚には、**セキュリティ**、**反埩可胜性
 <summary>Dockerfile Preview ðŸ‘€</summary>
 
 ```Dockerfile
-FROM python:3.9
+FROM python:3.14
 
 WORKDIR /code
 
@@ -166,7 +166,7 @@ def read_item(item_id: int, q: str | None = None):
 
 ```{ .dockerfile .annotate }
 # (1)!
-FROM python:3.9
+FROM python:3.14
 
 # (2)!
 WORKDIR /code
@@ -392,7 +392,7 @@ FastAPI ãŒå˜äž€ã®ãƒ•ァむル、䟋えば `./app` ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã®ãªã„
 ãã†ã™ã‚Œã°ã€`Dockerfile`の䞭にファむルをコピヌするために、察応するパスを倉曎するだけでよいです
 
 ```{ .dockerfile .annotate hl_lines="10  13" }
-FROM python:3.9
+FROM python:3.14
 
 WORKDIR /code
 
@@ -456,7 +456,7 @@ TraefikはDockerやKubernetesなどず統合されおいるので、コンテナ
 
 ## ãƒ¬ãƒ—リケヌション - ãƒ—ロセス数 { #replication-number-of-processes }
 
-**Kubernetes** ã‚„ Docker Swarm ãƒ¢ãƒŒãƒ‰ã€Nomad、あるいは耇数のマシン䞊で分散コンテナを管理するための同様の耇雑なシステムを䜿っおマシンの<abbr title="A group of machines that are configured to be connected and work together in some way. - ã‚る方法で接続され、連携しお動䜜するように構成されたマシンの集たり">cluster</abbr>を構成しおいる堎合、 å„コンテナでWorkerを持぀Uvicornのような**プロセスマネヌゞャ**を䜿甚する代わりに、**クラスタヌ・レベル**で**レプリケヌション**を凊理したいず思うでしょう。
+**Kubernetes** ã‚„ Docker Swarm ãƒ¢ãƒŒãƒ‰ã€Nomad、あるいは耇数のマシン䞊で分散コンテナを管理するための同様の耇雑なシステムを䜿っおマシンの<dfn title="ある方法で接続され、連携しお動䜜するように構成されたマシンの集たり">クラスタ</dfn>を構成しおいる堎合、 å„コンテナでWorkerを持぀Uvicornのような**プロセスマネヌゞャ**を䜿甚する代わりに、**クラスタヌ・レベル**で**レプリケヌション**を凊理したいず思うでしょう。
 
 Kubernetesのような分散コンテナ管理システムの1぀は通垞、入っおくるリク゚ストの**ロヌドバランシング**をサポヌトしながら、**コンテナのレプリケヌション**を凊理する統合された方法を持っおいたす。このこずはすべお**クラスタレベル**におです。
 
@@ -501,7 +501,7 @@ HTTPSに䜿われるものず同じ**TLS Termination Proxy**コンポヌネン
 ãã®ã‚ˆã†ãªå Žåˆã€`--workers` ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚€ãƒ³ã‚ªãƒ—ションを䜿っお、実行したいワヌカヌ数を蚭定できたす
 
 ```{ .dockerfile .annotate }
-FROM python:3.9
+FROM python:3.14
 
 WORKDIR /code
 
diff --git a/docs/ja/docs/deployment/fastapicloud.md b/docs/ja/docs/deployment/fastapicloud.md
new file mode 100644 (file)
index 0000000..43d9ce0
--- /dev/null
@@ -0,0 +1,65 @@
+# FastAPI Cloud { #fastapi-cloud }
+
+<a href="https://fastapicloud.com" class="external-link" target="_blank">FastAPI Cloud</a> ã« **コマンド1぀** ã§ãƒ‡ãƒ—ロむできたす。ただならりェむティングリストにご登録ください。🚀
+
+## ãƒ­ã‚°ã‚€ãƒ³ { #login }
+
+すでに **FastAPI Cloud** ã‚¢ã‚«ã‚Šãƒ³ãƒˆã‚’お持ちであるこずを確認しおくださいりェむティングリストからご招埅しおいたす ðŸ˜‰ïŒ‰ã€‚
+
+次にログむンしたす:
+
+<div class="termy">
+
+```console
+$ fastapi login
+
+You are logged in to FastAPI Cloud ðŸš€
+```
+
+</div>
+
+## ãƒ‡ãƒ—ロむ { #deploy }
+
+では、**コマンド1぀** ã§ã‚¢ãƒ—リをデプロむしたす:
+
+<div class="termy">
+
+```console
+$ fastapi deploy
+
+Deploying to FastAPI Cloud...
+
+✅ Deployment successful!
+
+🐔 Ready the chicken! Your app is ready at https://myapp.fastapicloud.dev
+```
+
+</div>
+
+以䞊ですその URL ã‹ã‚‰ã‚¢ãƒ—リにアクセスできたす。✚
+
+## FastAPI Cloud ã«ã€ã„お { #about-fastapi-cloud }
+
+**<a href="https://fastapicloud.com" class="external-link" target="_blank">FastAPI Cloud</a>** ã¯ã€**FastAPI** ã®äœœè€…ずチヌムによっお開発されおいたす。
+
+最小限の手間で API ã‚’**構築**・**デプロむ**・**利甚**できるように工皋を簡玠化したす。
+
+FastAPI ã§ã®é–‹ç™ºãšåŒã˜**開発者䜓隓**を、クラりドぞの**デプロむ**にももたらしたす。🎉
+
+さらに、アプリのデプロむ時に必芁ずなる倚くの事項も任せられたす。䟋えば:
+
+* HTTPS
+* ãƒ¬ãƒ—リケヌションリク゚ストに基づくオヌトスケヌリング付き
+* ãªã©
+
+FastAPI Cloud ã¯ã€*FastAPI and friends* ã®ã‚ªãƒŒãƒ—ン゜ヌスプロゞェクトに察する䞻芁スポンサヌか぀資金提䟛元です。✚
+
+## ä»–のクラりドプロバむダヌぞのデプロむ { #deploy-to-other-cloud-providers }
+
+FastAPI ã¯ã‚ªãƒŒãƒ—ン゜ヌスで暙準に基づいおいたす。お奜みの任意のクラりドプロバむダヌに FastAPI ã‚¢ãƒ—リをデプロむできたす。
+
+各クラりドプロバむダヌのガむドに埓っお FastAPI ã‚¢ãƒ—リをデプロむしおください。🀓
+
+## è‡ªåˆ†ã®ã‚µãƒŒãƒãƒŒãžã®ãƒ‡ãƒ—ロむ { #deploy-your-own-server }
+
+この**デプロむ**ガむドの埌半では詳现も解説したす。䜕が起きおいるのか、䜕が必芁なのか、そしお自分のサヌバヌを含めお FastAPI ã‚¢ãƒ—リを自力でデプロむする方法が分かるようになりたす。🀓
index d5a6daf0c05a564dadece01c47a13a4bc53efe0b..8e588aadc39adf2fd2edd951c10dbd31dfcbaa69 100644 (file)
@@ -28,7 +28,7 @@ HTTPSは単に「有効」か「無効」かで決たるものだず思いがち
 * **デフォルトでは**、**IPアドレスごずに1぀のHTTPS蚌明曞**しか持おないこずになりたす。
     * ã“れは、サヌバヌの芏暡やアプリケヌションの芏暡に寄りたせん。
     * ã—かし、これには**解決策**がありたす。
-* **TLS**プロトコル(HTTPの前に、TCPレベルで暗号化を凊理するもの)には、**<a href="https://en.wikipedia.org/wiki/Server_Name_Indication" class="external-link" target="_blank"><abbr title="Server Name Indication">SNI</abbr></a>**ず呌ばれる**拡匵**がありたす。
+* **TLS**プロトコル(HTTPの前に、TCPレベルで暗号化を凊理するもの)には、**<a href="https://en.wikipedia.org/wiki/Server_Name_Indication" class="external-link" target="_blank"><abbr title="Server Name Indication - ã‚µãƒŒãƒãƒŒåè¡šç€º">SNI</abbr></a>**ず呌ばれる**拡匵**がありたす。
     * ã“のSNI拡匵機胜により、1぀のサヌバヌ**単䞀のIPアドレス**を持぀が**耇数のHTTPS蚌明曞**を持ち、**耇数のHTTPSドメむン/アプリケヌション**にサヌビスを提䟛できるようになりたす。
     * ã“れが機胜するためには、**パブリックIPアドレス**でリッスンしおいる、サヌバヌ䞊で動䜜しおいる**単䞀の**コンポヌネント(プログラム)が、サヌバヌ内の**すべおのHTTPS蚌明曞**を持っおいる必芁がありたす。
 * ã‚»ã‚­ãƒ¥ã‚¢ãªæŽ¥ç¶šã‚’取埗した**埌**でも、通信プロトコルは**HTTPのたた**です。
@@ -66,7 +66,7 @@ Let's Encrypt以前は、これらの**HTTPS蚌明曞**は信頌できる第䞉
 
 ã‚¹ãƒ†ãƒƒãƒ—の初めは、**ドメむン名**を**取埗するこず**から始たるでしょう。その埌、DNSサヌバヌおそらく同じクラりドプロバむダヌに蚭定したす。
 
-おそらくクラりドサヌバヌ仮想マシンかそれに類するものを手に入れ、<abbr title="That doesn't change â€“ å€‰ã‚ã‚‰ãªã„">fixed</abbr> **パブリックIPアドレス**を持぀こずになるでしょう。
+おそらくクラりドサヌバヌ仮想マシンかそれに類するものを手に入れ、<dfn title="時間ずずもに倉化しない。動的ではない。">固定の</dfn> **パブリックIPアドレス**を持぀こずになるでしょう。
 
 DNSサヌバヌでは、**取埗したドメむン**をあなたのサヌバヌのパプリック**IPアドレス**に向けるレコヌド「`A record`」を蚭定したす。
 
index da382a9c5329b89bbf36b34adaa4cd721fa00067..1931cd87e556e3cfa75e1387bf681b2e8c0fbafa 100644 (file)
-# æ‰‹å‹•デプロむ
+# ã‚µãƒŒãƒãƒŒã‚’手動で実行する { #run-a-server-manually }
 
-**FastAPI** ã‚’手動でデプロむするこずもできたす。
+## fastapi run ã‚³ãƒžãƒ³ãƒ‰ã‚’䜿う { #use-the-fastapi-run-command }
 
-以䞋の様なASGI察応のサヌバをむンストヌルする必芁がありたす:
-
-//// tab | Uvicorn
-
-* <a href="https://www.uvicorn.dev/" class="external-link" target="_blank">Uvicorn</a>, uvloopずhttptoolsを基にした高速なASGIサヌバ。
+結論ずしお、FastAPI ã‚¢ãƒ—リケヌションを提䟛するには `fastapi run` ã‚’䜿いたす:
 
 <div class="termy">
 
 ```console
-$ pip install "uvicorn[standard]"
+$ <font color="#4E9A06">fastapi</font> run <u style="text-decoration-style:solid">main.py</u>
 
----> 100%
+  <span style="background-color:#009485"><font color="#D3D7CF"> FastAPI </font></span>  Starting production server ðŸš€
+
+             Searching for package file structure from directories
+             with <font color="#3465A4">__init__.py</font> files
+             Importing from <font color="#75507B">/home/user/code/</font><font color="#AD7FA8">awesomeapp</font>
+
+   <span style="background-color:#007166"><font color="#D3D7CF"> module </font></span>  ðŸ main.py
+
+     <span style="background-color:#007166"><font color="#D3D7CF"> code </font></span>  Importing the FastAPI app object from the module with
+             the following code:
+
+             <u style="text-decoration-style:solid">from </u><u style="text-decoration-style:solid"><b>main</b></u><u style="text-decoration-style:solid"> import </u><u style="text-decoration-style:solid"><b>app</b></u>
+
+      <span style="background-color:#007166"><font color="#D3D7CF"> app </font></span>  Using import string: <font color="#3465A4">main:app</font>
+
+   <span style="background-color:#007166"><font color="#D3D7CF"> server </font></span>  Server started at <font color="#729FCF"><u style="text-decoration-style:solid">http://0.0.0.0:8000</u></font>
+   <span style="background-color:#007166"><font color="#D3D7CF"> server </font></span>  Documentation at <font color="#729FCF"><u style="text-decoration-style:solid">http://0.0.0.0:8000/docs</u></font>
+
+             Logs:
+
+     <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span>  Started server process <b>[</b><font color="#34E2E2"><b>2306215</b></font><b>]</b>
+     <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span>  Waiting for application startup.
+     <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span>  Application startup complete.
+     <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span>  Uvicorn running on <font color="#729FCF"><u style="text-decoration-style:solid">http://0.0.0.0:8000</u></font> <b>(</b>Press CTRL+C
+             to quit<b>)</b>
 ```
 
 </div>
 
-////
+これでほずんどのケヌスは動䜜したす。😎
 
-/// tip | è±†çŸ¥è­˜
+このコマンドは、たずえばコンテナやサヌバヌ内で **FastAPI** ã‚¢ãƒ—リを起動するのに䜿えたす。
 
-`standard` ã‚’加えるこずで、Uvicornがむンストヌルされ、いく぀かの掚奚される䟝存関係を利甚するようになりたす。
+## ASGIサヌバヌ { #asgi-servers }
 
-これには、`asyncio` ã®é«˜æ€§èƒœãªå®Œå…šäº’換品である `uvloop` ãŒå«ãŸã‚Œã€äžŠè¡Œå‡Šç†ã®ãƒ‘フォヌマンスが倧幅に向䞊したす。
+少し詳しく芋おいきたす。
 
-///
+FastAPI ã¯ã€Python ã® Web ãƒ•レヌムワヌクずサヌバヌのための暙準である <abbr title="Asynchronous Server Gateway Interface - éžåŒæœŸã‚µãƒŒãƒãƒŒã‚²ãƒŒãƒˆã‚Šã‚§ã‚€ã‚€ãƒ³ã‚¿ãƒŒãƒ•ェヌス">ASGI</abbr> ã‚’䜿いたす。FastAPI ã¯ ASGI Web ãƒ•レヌムワヌクです。
+
+リモヌトのサヌバヌマシンで **FastAPI** ã‚¢ãƒ—リケヌションや他の ASGI ã‚¢ãƒ—リケヌションを実行するのに䞻に必芁なのは **Uvicorn** ã®ã‚ˆã†ãª ASGI ã‚µãƒŒãƒãƒŒãƒ—ログラムです。これは `fastapi` ã‚³ãƒžãƒ³ãƒ‰ã«ãƒ‡ãƒ•ォルトで含たれおいたす。
+
+他にもいく぀かの遞択肢がありたす:
+
+* <a href="https://www.uvicorn.dev/" class="external-link" target="_blank">Uvicorn</a>: é«˜æ€§èƒœãª ASGI ã‚µãƒŒãƒãƒŒã€‚
+* <a href="https://hypercorn.readthedocs.io/" class="external-link" target="_blank">Hypercorn</a>: HTTP/2 ã‚„ Trio ã«å¯Ÿå¿œã™ã‚‹ ASGI ã‚µãƒŒãƒãƒŒãªã©ã€‚
+* <a href="https://github.com/django/daphne" class="external-link" target="_blank">Daphne</a>: Django Channels ã®ãŸã‚ã«äœœã‚‰ã‚ŒãŸ ASGI ã‚µãƒŒãƒãƒŒã€‚
+* <a href="https://github.com/emmett-framework/granian" class="external-link" target="_blank">Granian</a>: Python ã‚¢ãƒ—リケヌション向けの Rust è£œ HTTP ã‚µãƒŒãƒãƒŒã€‚
+* <a href="https://unit.nginx.org/howto/fastapi/" class="external-link" target="_blank">NGINX Unit</a>: è»œé‡ã§å€šç”šé€”な Web ã‚¢ãƒ—リケヌションランタむム。
+
+## ã‚µãƒŒãƒãƒŒãƒžã‚·ãƒ³ãšã‚µãƒŒãƒãƒŒãƒ—ログラム { #server-machine-and-server-program }
+
+名称に関する小さな泚意点がありたす。💡
+
+「サヌバヌ」ずいう蚀葉は、リモヌト/クラりド䞊のコンピュヌタ物理/仮想マシンず、そのマシン䞊で動䜜しおいるプログラム䟋: Uvicornの䞡方を指すのに䞀般的に䜿われたす。
+
+䞀般に「サヌバヌ」ず曞かれおいるずきは、そのどちらかを指しおいる可胜性があるこずを芚えおおいおください。
+
+リモヌトマシンを指す堎合、「サヌバヌ」のほか「マシン」「VM仮想マシン」「ノヌド」などずも呌ばれたす。いずれも通垞 Linux ã‚’実行し、そこでプログラムを動かすリモヌトマシンを指したす。
 
-//// tab | Hypercorn
+## ã‚µãƒŒãƒãƒŒãƒ—ログラムをむンストヌル { #install-the-server-program }
 
-* <a href="https://github.com/pgjones/hypercorn" class="external-link" target="_blank">Hypercorn</a>, HTTP/2にも察応しおいるASGIサヌバ。
+FastAPI ã‚’むンストヌルするず、本番サヌバヌの Uvicorn ãŒåŒæ¢±ã•れおおり、`fastapi run` ã‚³ãƒžãƒ³ãƒ‰ã§èµ·å‹•できたす。
+
+ただし、ASGI ã‚µãƒŒãƒãƒŒã‚’手動でむンストヌルするこずもできたす。
+
+[仮想環境](../virtual-environments.md){.internal-link target=_blank}を䜜成しお有効化し、サヌバヌアプリケヌションをむンストヌルしおください。
+
+䟋ずしお、Uvicorn ã‚’むンストヌルするには:
 
 <div class="termy">
 
 ```console
-$ pip install hypercorn
+$ pip install "uvicorn[standard]"
 
 ---> 100%
 ```
 
 </div>
 
-...たたは、これら以倖のASGIサヌバ。
+他の ASGI ã‚µãƒŒãƒãƒŒãƒ—ログラムでも同様の手順です。
+
+/// tip | è±†çŸ¥è­˜
 
-////
+`standard` ã‚’付けるず、Uvicorn ã¯æŽšå¥šã®è¿œåŠ äŸå­˜é–¢ä¿‚ã‚‚ã‚€ãƒ³ã‚¹ãƒˆãƒŒãƒ«ã—ãŠäœ¿ç”šã—ãŸã™ã€‚
 
-ã\81\9dã\81\97ã\81Šã\80\81ã\83\81ã\83¥ã\83΋\83\88ã\83ªã\82¢ã\83«ã\81šå\90\8cʧ\98ã\81ªÊ\96¹Ê³\95ã\81§ã\82¢ã\83\97ã\83ªã\82±ã\83΋\82·ã\83§ã\83³ã\82\92Úµ·å\8b\95ã\81\97ã\81ŠÀž\8bã\81\95ã\81\84ã\80\82ã\81\9fã\81 ã\81\97ã\80\81À»¥Àž\8bã\81®Ê§\98ã\81«`--reload` Ã£\82ªã\83\97ã\82·ã\83§ã\83³ã\81¯Àœ¿ç\94šã\81\97ã\81ªã\81\84ã\81§Àž\8bã\81\95ã\81\84:
+ã\81\9dã\81®Àž­ã\81«ã\81¯ã\80\81`asyncio` Ã£\81®é«\98Ê\80§Ú\83ϋ\81ªã\83\89ã\83­ã\83\83ã\83\97ã\82ۋ\83³À»£Ê\9b¿ã\81§ã\81\82ã\82\8aã\80\81倧ã\81\8dã\81ªÀžŠÚ¡\8cå®\9fÚ¡\8cÊ\80§Ú\83ϋ\81®å\90\91Àž\8aã\82\92ã\82\82ã\81\9fã\82\89ã\81\99 `uvloop` Ã£\82\82Ã¥\90«ã\81Ÿã\82\8cã\81Ÿã\81\99ã\80\82
 
-//// tab | Uvicorn
+`pip install "fastapi[standard]"` ã®ã‚ˆã†ã« FastAPI ã‚’むンストヌルした堎合は、すでに `uvicorn[standard]` ã‚‚含たれたす。
+
+///
+
+## ã‚µãƒŒãƒãƒŒãƒ—ログラムを起動 { #run-the-server-program }
+
+ASGI ã‚µãƒŒãƒãƒŒã‚’手動でむンストヌルした堎合、通垞は FastAPI ã‚¢ãƒ—リケヌションをむンポヌトさせるために、特別な圢匏のむンポヌト文字列を枡す必芁がありたす:
 
 <div class="termy">
 
@@ -60,26 +114,44 @@ $ uvicorn main:app --host 0.0.0.0 --port 80
 
 </div>
 
-////
+/// note | å‚™è€ƒ
 
-//// tab | Hypercorn
+`uvicorn main:app` ãšã„うコマンドは次を指したす:
 
-<div class="termy">
+* `main`: ãƒ•ァむル `main.py`Python ã®ã€Œãƒ¢ã‚žãƒ¥ãƒŒãƒ«ã€ïŒ‰ã€‚
+* `app`: `main.py` å†…で `app = FastAPI()` ã«ã‚ˆã‚Šäœœæˆã•れたオブゞェクト。
 
-```console
-$ hypercorn main:app --bind 0.0.0.0:80
+これは次ず等䟡です:
 
-Running on 0.0.0.0:8080 over http (CTRL + C to quit)
+```Python
+from main import app
 ```
 
-</div>
+///
+
+他の ASGI ã‚µãƒŒãƒãƒŒãƒ—ログラムでも同様のコマンドがあり、詳现はそれぞれのドキュメントを参照しおください。
+
+/// warning | æ³šæ„
+
+Uvicorn ãªã©ã®ã‚µãƒŒãƒãƒŒã¯ã€é–‹ç™ºæ™‚に䟿利な `--reload` ã‚ªãƒ—ションをサポヌトしおいたす。
+
+しかし `--reload` ã¯å€šãã®ãƒªã‚œãƒŒã‚¹ã‚’消費し、䞍安定になるなどの性質がありたす。
+
+開発䞭には非垞に圹立ちたすが、 æœ¬ç•ªç’°å¢ƒã§ã¯äœ¿ç”šã™ã¹ãã§ã¯ã‚りたせん。
+
+///
 
-////
+## ãƒ‡ãƒ—ロむの抂念 { #deployment-concepts }
 
-停止した堎合に自動的に再起動させるツヌルを蚭定したいかもしれたせん。
+これらの䟋は、サヌバヌプログラム䟋: Uvicornを実行し、事前に決めたポヌト䟋: `80`で、すべおの IP`0.0.0.0`をリッスンする「単䞀プロセス」を起動したす。
 
-ã\81\95ã\82\89ã\81«ã\80\81<a href="https://gunicorn.org/" class="external-link" target="_blank">Gunicorn</a>ã\82\92ã\82ۋ\83³ã\82¹ã\83\88ã\83΋\83«ã\81\97ã\81Š<a href="https://www.uvicorn.dev/#running-with-gunicorn" class="external-link" target="_blank">Uvicornã\81®ã\83\9eã\83\8dã\83΋\82žã\83£ã\83΋\81šã\81\97ã\81ŠÀœ¿ç\94šã\81\97ã\81\9fã\82\8a</a>ã\80\81ڀ\87Ê\95°ã\81®ã\83¯ã\83΋\82«ã\83΋\81§Hypercornã\82\92Àœ¿ç\94šã\81\97ã\81\9fã\81\84ã\81\8bã\82\82ã\81\97ã\82\8cã\81Ÿã\81\9bã\82\93ã\80\82
+ã\81\93ã\82\8cã\81\8cå\9fºÊ\9c¬ç\9a\84ã\81ªÚ\80\83ã\81\88Ê\96¹ã\81§ã\81\99ã\80\82ã\81\9fã\81 ã\81\97ã\80\81ʬ¡ã\81®ã\82\88ã\81\86ã\81ªÚ¿œå\8a Àº\8bé \85ã\81«ã\82\82察å¿\9cã\81\97ã\81\9fã\81\8fã\81ªã\82\8bã\81§ã\81\97ã\82\87ã\81\86:
 
-ワヌカヌ数などの埮調敎も行いたいかもしれたせん。
+* ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ - HTTPS
+* èµ·å‹•時に実行
+* å†èµ·å‹•
+* ãƒ¬ãƒ—リケヌション実行プロセス数
+* ãƒ¡ãƒ¢ãƒª
+* èµ·å‹•前の事前ステップ
 
-ã\81\97ã\81\8bã\81\97ã\81\93ã\82\8cã\82\89å\85šã\81Šã\82\92ã\82\84ã\82\8dã\81\86ã\81šã\81\99ã\82\8bã\81šã\80\81Ú\87ªå\8b\95ç\9a\84ã\81«ã\81\93ã\82\8cã\82\89ã\82\92Ú¡\8cã\81\86Dockerã\82€ã\83¡ã\83Œã\82žã\82\92Àœ¿ã\81\86Ê\96¹ã\81\8cÊ¥œã\81\8bã\82\82ã\81\97ã\82\8cã\81Ÿã\81\9bã\82\93ã\80\82
+ã\81\93ã\82\8cã\82\89ã\81®å\90\84ʊ\82念ã\81«ã\81€ã\81\84ã\81Šã\81®Ú\80\83ã\81\88Ê\96¹ã\82\84ã\80\81察å\87Šã\81\99ã\82\8bã\81\9fã\82\81ã\81®å\85·Àœ\93ÀŸ\8bã\83»Ê\88Šç\95¥ã\82\92ʬ¡ã\81®ç« ã\81§Úª¬Ê\98\8eã\81\97ã\81Ÿã\81\99ã\80\82ð\9f\9a\80
index 45dbfc71fdbc532d28c7fc642bcd45285044e37e..4deae70446d578131e13948e3ff8289f8c786334 100644 (file)
@@ -153,7 +153,7 @@ Hello World from Python
 
 /// tip | è±†çŸ¥è­˜
 
-詳しくは <a href="https://12factor.net/config" class="external-link" target="_blank">The Twelve-Factor App: Config</a> ã‚’参照しおください。
+詳しくは <a href="https://12factor.net/config" class="external-link" target="_blank">The Twelve-Factor App: èš­å®š</a> ã‚’参照しおください。
 
 ///
 
@@ -291,7 +291,7 @@ $ C:\opt\custompython\bin\python
 
 ã“れで、**環境倉数**ずは䜕か、Pythonでどのように䜿甚するかに぀いお、基本的な理解が埗られたはずです。
 
-環境倉数に぀いおの詳现は、<a href="https://en.wikipedia.org/wiki/Environment_variable" class="external-link" target="_blank">Wikipedia for Environment Variable</a> ã‚‚参照しおください。
+環境倉数に぀いおの詳现は、<a href="https://en.wikipedia.org/wiki/Environment_variable" class="external-link" target="_blank">Wikipedia ã®ç’°å¢ƒå€‰æ•°</a> ã‚‚参照しおください。
 
 å€šãã®å Žåˆã€ç’°å¢ƒå€‰æ•°ãŒã©ã®ã‚ˆã†ã«åœ¹ç«‹ã¡ã€ã™ãã«é©ç”šã§ãã‚‹ã®ã‹ã¯ã‚たり明確ではありたせん。しかし、開発䞭のさたざたなシナリオで䜕床も登堎するため、知っおおくずよいでしょう。
 
diff --git a/docs/ja/docs/fastapi-cli.md b/docs/ja/docs/fastapi-cli.md
new file mode 100644 (file)
index 0000000..20cc9c2
--- /dev/null
@@ -0,0 +1,75 @@
+# FastAPI CLI { #fastapi-cli }
+
+**FastAPI CLI** ã¯ã€FastAPI ã‚¢ãƒ—リの提䟛、FastAPI ãƒ—ロゞェクトの管理などに䜿甚できるコマンドラむンプログラムです。
+
+FastAPI ã‚’むンストヌルするず䟋: `pip install "fastapi[standard]"`、`fastapi-cli` ãšã„うパッケヌゞが含たれたす。このパッケヌゞがタヌミナルで䜿甚する `fastapi` ã‚³ãƒžãƒ³ãƒ‰ã‚’提䟛したす。
+
+開発甚に FastAPI ã‚¢ãƒ—リを起動するには、`fastapi dev` ã‚³ãƒžãƒ³ãƒ‰ã‚’䜿甚できたす:
+
+<div class="termy">
+
+```console
+$ <font color="#4E9A06">fastapi</font> dev <u style="text-decoration-style:solid">main.py</u>
+
+  <span style="background-color:#009485"><font color="#D3D7CF"> FastAPI </font></span>  Starting development server ðŸš€
+
+             Searching for package file structure from directories with
+             <font color="#3465A4">__init__.py</font> files
+             Importing from <font color="#75507B">/home/user/code/</font><font color="#AD7FA8">awesomeapp</font>
+
+   <span style="background-color:#007166"><font color="#D3D7CF"> module </font></span>  ðŸ main.py
+
+     <span style="background-color:#007166"><font color="#D3D7CF"> code </font></span>  Importing the FastAPI app object from the module with the
+             following code:
+
+             <u style="text-decoration-style:solid">from </u><u style="text-decoration-style:solid"><b>main</b></u><u style="text-decoration-style:solid"> import </u><u style="text-decoration-style:solid"><b>app</b></u>
+
+      <span style="background-color:#007166"><font color="#D3D7CF"> app </font></span>  Using import string: <font color="#3465A4">main:app</font>
+
+   <span style="background-color:#007166"><font color="#D3D7CF"> server </font></span>  Server started at <font color="#729FCF"><u style="text-decoration-style:solid">http://127.0.0.1:8000</u></font>
+   <span style="background-color:#007166"><font color="#D3D7CF"> server </font></span>  Documentation at <font color="#729FCF"><u style="text-decoration-style:solid">http://127.0.0.1:8000/docs</u></font>
+
+      <span style="background-color:#007166"><font color="#D3D7CF"> tip </font></span>  Running in development mode, for production use:
+             <b>fastapi run</b>
+
+             Logs:
+
+     <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span>  Will watch for changes in these directories:
+             <b>[</b><font color="#4E9A06">&apos;/home/user/code/awesomeapp&apos;</font><b>]</b>
+     <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span>  Uvicorn running on <font color="#729FCF"><u style="text-decoration-style:solid">http://127.0.0.1:8000</u></font> <b>(</b>Press CTRL+C to
+             quit<b>)</b>
+     <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span>  Started reloader process <b>[</b><font color="#34E2E2"><b>383138</b></font><b>]</b> using WatchFiles
+     <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span>  Started server process <b>[</b><font color="#34E2E2"><b>383153</b></font><b>]</b>
+     <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span>  Waiting for application startup.
+     <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span>  Application startup complete.
+```
+
+</div>
+
+`fastapi` ãšã„うコマンドラむンプログラムが **FastAPI CLI** ã§ã™ã€‚
+
+FastAPI CLI ã¯ã€Python ãƒ—ログラムぞのパス䟋: `main.py`を受け取り、`FastAPI` ã‚€ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ïŒˆé€šåžžã¯ `app`を自動怜出し、適切な import æ–¹æ³•を刀断しお提䟛したす。
+
+本番環境では代わりに `fastapi run` ã‚’䜿甚したす。🚀
+
+内郚的には、**FastAPI CLI** ã¯ <a href="https://www.uvicorn.dev" class="external-link" target="_blank">Uvicorn</a>高性胜で本番運甚向けの ASGI ã‚µãƒŒãƒãƒŒïŒ‰ã‚’䜿甚したす。😎
+
+## `fastapi dev` { #fastapi-dev }
+
+`fastapi dev` ã‚’実行するず、開発モヌドが有効になりたす。
+
+デフォルトでは、**auto-reload** ãŒæœ‰åŠ¹ã§ã™ã€‚ã‚³ãƒŒãƒ‰ã‚’å€‰æ›Žã™ã‚‹ãšã‚µãƒŒãƒãƒŒãŒè‡ªå‹•ã§å†èª­ã¿èŸŒã¿ã•ã‚ŒãŸã™ã€‚ã“ã‚Œã¯ãƒªã‚œãƒŒã‚¹ã‚’å€šãæ¶ˆè²»ã—ã€ç„¡åŠ¹æ™‚ã‚ˆã‚Šå®‰å®šæ€§ãŒäœŽããªã‚‹å¯èƒœæ€§ãŒã‚ã‚ŠãŸã™ã€‚é–‹ç™ºæ™‚ã®ã¿ã«äœ¿ç”šã—ãŠãã ã•ã„ã€‚ãŸãŸã€IP ã‚¢ãƒ‰ãƒ¬ã‚¹ `127.0.0.1`マシン自身のみず通信するための IP、`localhost`で埅ち受けたす。
+
+## `fastapi run` { #fastapi-run }
+
+`fastapi run` ã‚’実行するず、デフォルトで本番モヌドで起動したす。
+
+デフォルトでは、**auto-reload** ã¯ç„¡åŠ¹ã§ã™ã€‚ãŸãŸã€IP ã‚¢ãƒ‰ãƒ¬ã‚¹ `0.0.0.0`利甚可胜なすべおの IP ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’意味したすで埅ち受けるため、そのマシンず通信できる任意のクラむアントから公開アクセスが可胜になりたす。これは、たずえばコンテナ内など、本番環境で䞀般的な実行方法です。
+
+倚くの堎合そしお掚奚されるのは、䞊䜍に HTTPS ã‚’終端する「termination proxy」を眮きたす。これはアプリのデプロむ方法に䟝存し、プロバむダが代行する堎合もあれば、自分で蚭定する必芁がある堎合もありたす。
+
+/// tip | è±†çŸ¥è­˜
+
+詳しくは、[デプロむのドキュメント](deployment/index.md){.internal-link target=_blank}を参照しおください。
+
+///
index f78eab4303831fdb7d0fd28367b28b029a648598..40a1d2e60d23d95df6854b912222f76f23ddd948 100644 (file)
@@ -1,54 +1,55 @@
-# æ©Ÿèƒœ
+# æ©Ÿèƒœ { #features }
 
-## FastAPIの機胜
+## FastAPIの機胜 { #fastapi-features }
 
-**FastAPI** ã¯ä»¥äž‹ã®æ©Ÿèƒœã‚’もちたす:
+**FastAPI** ã¯æ¬¡ã®ã‚‚のを提䟛したす:
 
-### ã‚ªãƒŒãƒ—ンスタンダヌド準拠
+### ã‚ªãƒŒãƒ—ンスタンダヌド準拠 { #based-on-open-standards }
 
-* API䜜成のための<a href="https://github.com/OAI/OpenAPI-Specification" class="external-link" target="_blank"><strong>OpenAPI</strong></a>。これは、<abbr title="also known as: endpoints, routes">path</abbr> <abbr title="also known as HTTP methods, as POST, GET, PUT, DELETE">operations</abbr>の宣蚀、パラメヌタ、ボディリク゚スト、セキュリティなどを含んでいたす。
-* <a href="http://json-schema.org/" class="external-link" target="_blank"><strong>JSONスキヌマ</strong></a>を䜿甚したデヌタモデルのドキュメント自動生成OpenAPIはJSONスキヌマに基づいおいる。
-* ç¶¿å¯†ãªèª¿æŸ»ã®çµæžœã€äžŠå±€ã«åŸŒä»˜ã‘するのではなく、これらの基準に基づいお蚭蚈されたした。
+* API äœœæˆã®ãŸã‚ã® <a href="https://github.com/OAI/OpenAPI-Specification" class="external-link" target="_blank"><strong>OpenAPI</strong></a>。<dfn title="別名: ã‚šãƒ³ãƒ‰ãƒã‚€ãƒ³ãƒˆã€ãƒ«ãƒŒãƒˆ">path</dfn> <dfn title="別名: HTTP ãƒ¡ã‚œãƒƒãƒ‰ïŒˆPOST、GET、PUT、DELETE ãªã©ïŒ‰">operations</dfn>、パラメヌタ、リク゚ストボディ、セキュリティなどの宣蚀を含みたす。
+* <a href="https://json-schema.org/" class="external-link" target="_blank"><strong>JSON Schema</strong></a> ã«ã‚ˆã‚‹ãƒ‡ãƒŒã‚¿ãƒ¢ãƒ‡ãƒ«ã®è‡ªå‹•ドキュメント化OpenAPI è‡ªäœ“が JSON Schema ã«åŸºã¥ã„おいたす。
+* å…¥å¿µãªèª¿æŸ»ã®ã†ãˆã€ã“れらの暙準を䞭心に蚭蚈されおいたす。埌付けのレむダヌではありたせん。
 * ã“れにより、倚くの蚀語で自動 **クラむアントコヌド生成** ãŒå¯èƒœã§ã™ã€‚
 
-### è‡ªå‹•ドキュメント生成
-察話的なAPIドキュメントず探玢的なwebナヌザヌむンタヌフェヌスを提䟛したす。フレヌムワヌクはOpenAPIを基にしおいるため、いく぀かのオプションがあり、デフォルトで2぀含たれおいたす。
+### è‡ªå‹•ドキュメント { #automatic-docs }
 
-* <a href="https://github.com/swagger-api/swagger-ui" class="external-link" target="_blank"><strong>Swagger UI</strong></a>で、むンタラクティブな探玢をしながら、ブラりザから盎接APIを呌び出しおテストが行えたす。
+察話的な API ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãšæŽ¢çŽ¢çš„ãª Web ãƒŠãƒŒã‚¶ãƒŒã‚€ãƒ³ã‚¿ãƒŒãƒ•ェヌス。フレヌムワヌクは OpenAPI ã«åŸºã¥ã„おいるため、耇数のオプションがあり、デフォルトで 2 ã€å«ãŸã‚ŒãŸã™ã€‚
+
+* <a href="https://github.com/swagger-api/swagger-ui" class="external-link" target="_blank"><strong>Swagger UI</strong></a>。むンタラクティブに探玢し぀぀、ブラりザから盎接 API ã‚’呌び出しおテストできたす。
 
 ![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-03-swagger-02.png)
 
-* <a href="https://github.com/Rebilly/ReDoc" class="external-link" target="_blank"><strong>ReDoc</strong></a>を䜿甚したもう䞀぀のAPIドキュメント生成。
+* <a href="https://github.com/Rebilly/ReDoc" class="external-link" target="_blank"><strong>ReDoc</strong></a> ã«ã‚ˆã‚‹ä»£æ›¿ã® API ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã€‚
 
 ![ReDoc](https://fastapi.tiangolo.com/img/index/index-06-redoc-02.png)
 
-### çŸä»£çš„なPython
+### çŸä»£çš„なPythonのみ { #just-modern-python }
 
-FastAPIの機胜はすべお、暙準のPython 3.8型宣蚀に基づいおいたすPydanticの功瞟。新しい構文はありたせん。ただの珟代的な暙準のPythonです。
+すべお暙準の **Python ã®åž‹** å®£èš€ïŒˆPydantic ã«æ„Ÿè¬ïŒ‰ã«åŸºã¥ã„おいたす。新しい構文を孊ぶ必芁はありたせん。暙準的でモダンな Python ã ã‘です。
 
-FastAPIを䜿甚しない堎合でもPythonの型の䜿甚方法に぀いお簡単な埩習が必芁な堎合は、短いチュヌトリアル[Python Types](python-types.md){.internal-link target=_blank}を参照しおください。
+FastAPI ã‚’䜿わない堎合でもPython ã®åž‹ã®äœ¿ã„方を 2 åˆ†ã§åŸ©ç¿’したい堎合は、短いチュヌトリアル [Python Types](python-types.md){.internal-link target=_blank} ã‚’参照しおください。
 
-型を䜿甚した暙準的なPythonを蚘述したす:
+型を䜿った暙準的な Python ã‚’蚘述したす:
 
 ```Python
 from datetime import date
 
 from pydantic import BaseModel
 
-# Declare a variable as a str
-# and get editor support inside the function
+# å€‰æ•°ã‚’ str ãšã—お宣蚀
+# ãã—お関数内で゚ディタ支揎を受ける
 def main(user_id: str):
     return user_id
 
 
-# A Pydantic model
+# Pydantic ãƒ¢ãƒ‡ãƒ«
 class User(BaseModel):
     id: int
     name: str
     joined: date
 ```
 
-これは以䞋のように甚いられたす:
+これは次のように䜿えたす:
 
 ```Python
 my_user: User = User(id=3, name="John Doe", joined="2018-07-19")
@@ -62,143 +63,139 @@ second_user_data = {
 my_second_user: User = User(**second_user_data)
 ```
 
-/// info | æƒ…å ±
+/// info
 
-`**second_user_data` ã¯ä»¥äž‹ã‚’意味したす
+`**second_user_data` ã¯æ¬¡ã®æ„å‘³ã§ã™:
 
-`second_user_data`蟞曞のキヌず倀を盎接、キヌず倀の匕数ずしお枡したす。これは、`User(id=4, name="Mary", joined="2018-11-30")`ず同等です。
+`second_user_data` èŸžæ›žã®ã‚­ãƒŒãšå€€ã‚’、そのたたキヌバリュヌ匕数ずしお枡したす。これは `User(id=4, name="Mary", joined="2018-11-30")` ãšåŒç­‰ã§ã™ã€‚
 
 ///
 
-### ã‚šãƒ‡ã‚£ã‚¿ã®ã‚µãƒãƒŒãƒˆ
+### ã‚šãƒ‡ã‚£ã‚¿ã®ã‚µãƒãƒŒãƒˆ { #editor-support }
 
-ã\81\99ã\81¹ã\81Šã\81®ã\83\95ã\83‹\83΋\83 ã\83¯ã\83΋\82¯ã\81¯Àœ¿ã\81\84ã\82\84ã\81\99ã\81\8fç\9bŽÊ\84\9fç\9a\84ã\81«Àœ¿ç\94šã\81§ã\81\8dã\82\8bã\82\88ã\81\86ã\81«Úš­Úš\88ã\81\95ã\82\8cã\81Šã\81\8aã\82\8aã\80\81ã\81\99ã\81¹ã\81Šã\81®Ê±ºå®\9aã\81¯é\96\8bç\99ºã\82\92é\96\8bå§\8bã\81\99ã\82\8bÃ¥\89\8dã\81§ã\82\82ڀ\87Ê\95°ã\81®ã\82šã\83\87ã\82£ã\82¿ã\83΋\81§ã\83\86ã\82¹ã\83\88ã\81\95ã\82\8cã\80\81Ê\9c\80é«\98ã\81®é\96\8bç\99ºÀœ\93éš\93ã\81\8cÀ¿\9dښŒã\81\95ã\82\8cたす。
+ã\83\95ã\83‹\83΋\83 ã\83¯ã\83΋\82¯å\85šÀœ\93ã\81\8cÀœ¿ã\81\84ã\82\84ã\81\99ã\81\8fç\9bŽÊ\84\9fç\9a\84ã\81«ã\81ªã\82\8bã\82\88ã\81\86ښ­Úš\88ã\81\95ã\82\8cã\81Šã\81\8aã\82\8aã\80\81Ê\9c\80é«\98ã\81®é\96\8bç\99ºÀœ\93éš\93ã\82\92確À¿\9dã\81\99ã\82\8bã\81\9fã\82\81ã\80\81é\96\8bç\99ºé\96\8bå§\8bÃ¥\89\8dã\81\8bã\82\89ڀ\87Ê\95°ã\81®ã\82šã\83\87ã\82£ã\82¿ã\81§ã\81\82ã\82\89ã\82\86ã\82\8bÃ¥\88€Ê\96­ã\81\8cʀ\9cښŒã\81\95ã\82\8cã\81Šã\81\84たす。
 
-前回のPython開発者調査では、<a href="https://www.jetbrains.com/research/python-developers-survey-2017/#tools-and-features" class="external-link" target="_blank">最も䜿甚されおいる機胜が「オヌトコンプリヌト」であるこずが明らかになりたした。</a>
+Python é–‹ç™ºè€…調査では、<a href="https://www.jetbrains.com/research/python-developers-survey-2017/#tools-and-features" class="external-link" target="_blank">最もよく䜿われる機胜の 1 ã€ãŒã€Œã‚ªãƒŒãƒˆã‚³ãƒ³ãƒ—リヌト」であるこずが明らかです</a>。
 
-**FastAPI** Ã£\83\95ã\83‹\83΋\83 ã\83¯ã\83΋\82¯ã\81¯ã\80\81ã\81\93ã\81®ÚŠ\81ʱ\82ã\82\92ʺ\80ã\81\9fã\81\99ã\81\93ã\81šã\82\92Ã¥\9fºÊ\9c‹\81šしおいたす。オヌトコンプリヌトはどこでも機胜したす。
+**FastAPI** Ã£\81¯ã\81\9dã\81®ÚŠ\81ʱ\82ã\82\92ʺ\80ã\81\9fã\81\99ã\81\93ã\81šã\82\92Ã¥\9fºç\9bۋ\81«しおいたす。オヌトコンプリヌトはどこでも機胜したす。
 
 ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã«æˆ»ã‚‹å¿…芁はほずんどありたせん。
 
-ã\82šã\83\87ã\82£ã\82¿ã\83΋\81\8cã\81©ã\81®ã\82\88ã\81\86ã\81«åœ¹ç«\8bã\81ۋ\81\8bã\82\92À»¥Àž\8bã\81«ç€ºã\81\97ã\81Ÿす:
+ã\82šã\83\87ã\82£ã\82¿ã\81\8cã\81©ã\81®ã\82\88ã\81\86ã\81«åœ¹ç«\8bã\81ۋ\81\8bã\81®ÀŸ\8bã\81§す:
 
-* <a href="https://code.visualstudio.com/" class="external-link" target="_blank">Visual Studio Code</a>の堎合:
+* <a href="https://code.visualstudio.com/" class="external-link" target="_blank">Visual Studio Code</a> ã®å Žåˆ:
 
 ![editor support](https://fastapi.tiangolo.com/img/vscode-completion.png)
 
-* <a href="https://www.jetbrains.com/pycharm/" class="external-link" target="_blank">PyCharm</a>の堎合:
+* <a href="https://www.jetbrains.com/pycharm/" class="external-link" target="_blank">PyCharm</a> ã®å Žåˆ:
 
 ![editor support](https://fastapi.tiangolo.com/img/pycharm-completion.png)
 
-以前は䞍可胜だず考えおいたコヌドでさえ補完されたす。䟋えば、リク゚ストからのJSONボディネストされおいる可胜性がある内の `price`キヌです。
-
-間違ったキヌ名を入力したり、ドキュメント間を行き来したり、䞊䞋にスクロヌルしお`username`ず`user_name`のどちらを䜿甚したか調べたりする必芁はもうありたせん。
-
-### ç°¡æœ”
+以前は䞍可胜だず思っおいたコヌドでも補完が埗られたす。䟋えば、リク゚ストから届くネストされおいる可胜性のあるJSON ãƒœãƒ‡ã‚£å†…の `price` ã‚­ãƒŒãªã©ã§ã™ã€‚
 
-ã\81\99ã\81¹ã\81Šã\81«é\81©å\88\87ã\81ª**ã\83\87ã\83\95ã\82©ã\83«ã\83\88**ã\81\8cã\81\82ã\82\8aã\80\81ã\82ªã\83\97ã\82·ã\83§ã\83³ã\81®Ê§\8bÊ\88\90ã\81\8cã\81§ã\81\8dã\81Ÿã\81\99ã\80\82å¿\85ڊ\81ã\81ªã\81\93ã\81šã\82\92å®\9fÚ¡\8cã\81\97ã\80\81å¿\85ڊ\81ã\81ªAPIã\82\92å®\9a矩ã\81\99ã\82\8bã\81\9fã\82\81ã\81«ã\81\99ã\81¹ã\81Šã\81®ã\83\91ã\83©ã\83¡ã\83΋\82¿ã\83΋\82\92Úª¿Ê\95Žã\81§ã\81\8dã\81Ÿã\81\99。
+ã\82\82ã\81\86é\96\93é\81\95ã\81£ã\81\9fã\82­ã\83Ό\90\8dã\82\92Ã¥\85¥å\8a\9bã\81\97ã\81\9fã\82\8aã\80\81ã\83\89ã\82­ã\83¥ã\83¡ã\83³ã\83\88ã\82\92Ú¡\8cã\81\8dÊ\9d¥ã\81\97ã\81\9fã\82\8aã\80\81Àž\8aÀž\8bã\81«ã\82¹ã\82¯ã\83­ã\83΋\83«ã\81\97ã\81ŠÊ\9c\80çµ\82ç\9a\84ã\81« `username` Ã£\81š `user_name` Ã£\81®ã\81©ã\81¡ã\82\89ã\82\92Àœ¿ã\81£ã\81\9fã\81®ã\81\8bÊ\8e¢ã\81\99å¿\85ڊ\81ã\81¯ã\81\82ã\82\8aã\81Ÿã\81\9bã\82\93。
 
-ただし、デフォルトでもすべお **うたくいきたす**。
+### ç°¡æœ” { #short }
 
-### æ€œèšŒ
+すべおに劥圓な **デフォルト** ãŒã‚り、どこでもオプションで構成できたす。必芁に応じおすべおのパラメヌタを埮調敎しお、求める API ã‚’定矩できたす。
 
-* ä»¥äž‹ã®æ§˜ãªã€ã»ãšã‚“どのすべおのPython **デヌタ型**の怜蚌:
-     * JSONオブゞェクト`dict`
-     * é …目の型を定矩するJSON配列`list`
-     * æœ€å°é•·ãšæœ€å€§é•·ã®ã‚る文字列`str`フィヌルド
-     * æœ€å°å€€ãšæœ€å€§å€€ã®ã‚る数倀`int`、` float`
+しかしデフォルトのたたでも、すべお **うたく動きたす**。
 
-* ã‚ˆã‚Šã‚šã‚­ã‚Ÿãƒãƒƒã‚¯ãªåž‹ã®æ€œèšŒïŒš
-     * URL
-     * Eメヌル
-     * UUID
-     * ...その他
+### æ€œèšŒ { #validation }
 
-すべおの怜蚌は、確立された堅牢な **Pydantic** ã«ã‚ˆã£ãŠå‡Šç†ã•れたす。
+* ã»ãšã‚“どあるいはすべおの Python ã® **デヌタ型** ã«å¯Ÿã™ã‚‹æ€œèšŒ:
+    * JSON ã‚ªãƒ–ゞェクト`dict`。
+    * é …目の型を定矩する JSON é…åˆ—`list`。
+    * æ–‡å­—列`str`フィヌルドの最小/最倧長。
+    * æ•°å€€ïŒˆ`int`、`float`の最小/最倧倀、など。
 
-### ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãšèªèšŒ
+* ã‚ˆã‚Šã‚šã‚­ã‚Ÿãƒãƒƒã‚¯ãªåž‹ã®æ€œèšŒ:
+    * URL。
+    * Email。
+    * UUID。
+    * ...その他。
 
-ã\82ȋ\82­ã\83¥ã\83ªã\83\86ã\82£ã\81šÚª\8dښŒã\81\8cçµ±å\90\88ã\81\95ã\82\8cã\81Šã\81\84ã\81Ÿã\81\99ã\80\82 Ã£\83\87ã\83΋\82¿ã\83\99ã\83΋\82¹ã\81Ÿã\81\9fã\81¯ã\83\87ã\83΋\82¿ã\83¢ã\83\87ã\83«ã\81«ã\81ۋ\81\84ã\81Šã\82\82劥å\8d\94ã\81\97ã\81Šã\81\84ã\81Ÿã\81\9bã\82\93。
+ã\81\99ã\81¹ã\81Šã\81®Ê€\9cښŒã\81¯ã\80\81確ç«\8bã\81\95ã\82\8cå \85ç\89¢ã\81ª **Pydantic** Ã£\81«ã\82\88ã\81£ã\81Šå\87Šç\90\86ã\81\95ã\82\8cã\81Ÿã\81\99。
 
-以䞋のOpenAPIで定矩されおいるすべおのセキュリティスキヌムを含む:
+### ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãšèªèšŒ { #security-and-authentication }
 
-* HTTPベヌシック
-* **OAuth2****JWTトヌクン**も䜿甚。 JWTを䜿甚したOAuth2のチュヌトリアル[OAuth2 with JWT](tutorial/security/oauth2-jwt.md){.internal-link target=_blank}を確認しおください。
-* APIキヌ
-     * ãƒ˜ãƒƒãƒ€ãƒŒ
-     * ã‚¯ã‚šãƒªãƒ‘ラメヌタ
-     * ã‚¯ãƒƒã‚­ãƒŒã€ç­‰
+セキュリティず認蚌が統合されおいたす。デヌタベヌスやデヌタモデルずの劥協はありたせん。
 
-さらに、Starletteのすべおのセキュリティ機胜も含みたす**セッションCookie**を含む。
+OpenAPI ã§å®šçŸ©ã•れたすべおのセキュリティスキヌムをサポヌトしたす:
 
-これらは、システム、デヌタストア、リレヌショナルデヌタベヌス、NoSQLデヌタベヌスなどず簡単に統合できる再利甚可胜なツヌルずコンポヌネントずしお構築されおいたす。
+* HTTP Basic。
+* **OAuth2****JWT ãƒˆãƒŒã‚¯ãƒ³** ã‚‚可。チュヌトリアル [JWT ã‚’甚いた OAuth2](tutorial/security/oauth2-jwt.md){.internal-link target=_blank} ã‚’確認しおください。
+* API ã‚­ãƒŒïŒˆä»¥äž‹ã®å Žæ‰€ïŒ‰:
+    * ãƒ˜ãƒƒãƒ€ãƒŒã€‚
+    * ã‚¯ã‚šãƒªãƒ‘ラメヌタ。
+    * ã‚¯ãƒƒã‚­ãƒŒã€ãªã©ã€‚
 
-### äŸå­˜æ€§ã®æ³šå…¥ïŒˆDependency Injection
+さらに、Starlette ã®ã™ã¹ãŠã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£æ©ŸèƒœïŒˆ**セッション Cookie** ã‚’含むも利甚できたす。
 
-FastAPIには非垞に䜿いやすく、非垞に匷力な<abbr title='also known as "components", "resources", "services", "providers"'><strong>䟝存性の泚入</strong></abbr>システムを備えおいたす。
+これらはすべお再利甚可胜なツヌルやコンポヌネントずしお構築されおおり、システム、デヌタストア、リレヌショナル/NoSQL ãƒ‡ãƒŒã‚¿ãƒ™ãƒŒã‚¹ç­‰ãšå®¹æ˜“に統合できたす。
 
-* äŸå­˜é–¢ä¿‚でさえも䟝存関係を持぀こずができ、階局たたは **䟝存関係の"グラフ"** ã‚’䜜成するこずができたす。
+### äŸå­˜æ€§ã®æ³šå…¥ { #dependency-injection }
 
-* ãƒ•レヌムワヌクによっおすべお**自動的に凊理**されたす。
-* ã™ã¹ãŠã®äŸå­˜é–¢ä¿‚はリク゚ストからのデヌタを芁請できお、**path operationsの制玄ず自動ドキュメンテヌションを拡匵できたす**。
-* äŸå­˜é–¢ä¿‚で定矩された *path operation* ãƒ‘ラメヌタも**自動怜蚌**が可胜です。
-* è€‡é›‘なナヌザヌ認蚌システム、**デヌタベヌス接続**などのサポヌト
-* **デヌタベヌス、フロント゚ンドなどに察する劥協はありたせん**。それらすべおず簡単に統合できたす。
+FastAPI ã«ã¯ã€éžåžžã«äœ¿ã„やすく、か぀非垞に匷力な <dfn title='別名: ã‚³ãƒ³ãƒãƒŒãƒãƒ³ãƒˆã€ãƒªã‚œãƒŒã‚¹ã€ã‚µãƒŒãƒ“ス、プロバむダヌ'><strong>䟝存性の泚入</strong></dfn> ã‚·ã‚¹ãƒ†ãƒ ãŒã‚りたす。
 
-### ç„¡åˆ¶é™ã®ã€Œãƒ—ラグむン」
+* äŸå­˜é–¢ä¿‚は䟝存関係を持぀こずもでき、階局たたは **䟝存関係の「グラフ」** ã‚’䜜成できたす。
+* ã™ã¹ãŠãƒ•レヌムワヌクによっお**自動的に凊理**されたす。
+* ã™ã¹ãŠã®äŸå­˜é–¢ä¿‚はリク゚ストからデヌタを芁求でき、*path operation* ã®åˆ¶çŽ„ãšè‡ªå‹•ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’**拡匵**できたす。
+* äŸå­˜é–¢ä¿‚で定矩された *path operation* ã®ãƒ‘ラメヌタに぀いおも**自動怜蚌**されたす。
+* è€‡é›‘なナヌザヌ認蚌システム、**デヌタベヌス接続** ãªã©ã®ã‚µãƒãƒŒãƒˆã€‚
+* **デヌタベヌスやフロント゚ンド等ずの劥協は䞍芁**。すべおず簡単に統合できたす。
 
-他の方法では、それらを必芁ずせず、必芁なコヌドをむンポヌトしお䜿甚したす。
+### ç„¡åˆ¶é™ã®ã€Œãƒ—ラグむン」 { #unlimited-plug-ins }
 
-統合は非垞に簡単に䜿甚できるように蚭蚈されおおり䟝存関係を甚いお、*path operations* ã§äœ¿ç”šã•れおいるのず同じ構造ず構文を䜿甚しお、2行のコヌドでアプリケヌションの「プラグむン」を䜜成できたす。
+別の蚀い方をすれば、プラグむンは䞍芁で、必芁なコヌドをむンポヌトしお䜿うだけです。
 
+あらゆる統合は䟝存関係を甚いお非垞に簡単に䜿えるよう蚭蚈されおおり、*path operation* ã§äœ¿ã†ã®ãšåŒã˜æ§‹é€ ãšæ§‹æ–‡ã§ã€2 è¡Œã®ã‚³ãƒŒãƒ‰ã§ã‚¢ãƒ—リケヌション甚の「プラグむン」を䜜れたす。
 
-### ãƒ†ã‚¹ãƒˆ
+### ãƒ†ã‚¹ãƒˆæžˆã¿ { #tested }
 
-* <abbr title = "自動的にテストされるコヌドの量">テストカバレッゞ</abbr> 100%
-* <abbr title = "Python型アノテヌション。これにより、ナヌザヌはより良い゚ディタヌず倖郚ツヌルのサポヌト受けられる。">型アノテヌション</abbr>100%のコヌドベヌス
-* ÃŠ\9c\95ªã\82¢ã\83\97ã\83ªã\82±ã\83΋\82·ã\83§ã\83³ã\81§Àœ¿ç\94šã\81\95ã\82\8cã\81Ÿã\81\99
+* 100% ã® <dfn title="自動的にテストされるコヌドの量">テストカバレッゞ</dfn>。
+* 100% <dfn title="Python ã®åž‹ã‚¢ãƒŽãƒ†ãƒŒã‚·ãƒ§ãƒ³ã€‚これにより、゚ディタや倖郚ツヌルからより良い支揎が受けられたす">型アノテヌション付き</dfn>のコヌドベヌス。
+* ÃŠ\9c\95ªã\82¢ã\83\97ã\83ªã\82±ã\83΋\82·ã\83§ã\83³ã\81§Àœ¿ç\94šã\81\95ã\82\8cã\81Šã\81\84ã\81Ÿã\81\99ã\80\82
 
-## Starletteの機胜
+## Starletteの機胜 { #starlette-features }
 
-**FastAPI**は、<a href="https://www.starlette.dev/" class="external-link" target="_blank"><strong>Starlette </strong></a>ず完党に互換性がありたすそしおベヌスになっおいたす。したがっお、远加のStarletteコヌドがあれば、それも機胜したす。
+**FastAPI** ã¯ <a href="https://www.starlette.dev/" class="external-link" target="_blank"><strong>Starlette</strong></a> ãšå®Œå…šã«äº’換性がありか぀それに基づいおいたす。そのため、手元の Starlette ã®è¿œåŠ ã‚³ãƒŒãƒ‰ã‚‚å‹•äœœã—ãŸã™ã€‚
 
-`FastAPI`は実際には`Starlette`のサブクラスです。したがっお、Starletteをすでに知っおいるか䜿甚しおいる堎合は、ほずんどの機胜が同じように機胜したす。
+`FastAPI` ã¯å®Ÿéš›ã«ã¯ `Starlette` ã®ã‚µãƒ–クラスです。すでに Starlette ã‚’知っおいる、あるいは䜿っおいるなら、ほずんどの機胜は同じように動䜜したす。
 
-**FastAPI**を䜿甚するず、以䞋のような、**Starlette**のすべおの機胜を利甚できたすFastAPIはStarletteを匷化したものにすぎないため:
+**FastAPI** ã§ã¯ **Starlette** ã®ã™ã¹ãŠã®æ©ŸèƒœãŒåˆ©ç”šã§ããŸã™ïŒˆFastAPI ã¯åŒ·åŒ–された Starlette ã«ã™ãŽãŸã›ã‚“:
 
-* èŠ‹äº‹ãªãƒ‘ãƒ•ã‚©ãƒŒãƒžãƒ³ã‚¹ã€‚<a href="https://github.com/encode/starlette#performance" class="external-link" target="_blank"> **NodeJS**および**Go**に匹敵する、最速のPythonフレヌムワヌクの1぀です。</a>
-
-* **WebSocket**のサポヌト
-* **GraphQL**のサポヌト
-* ãƒ—ロセス内バックグラりンドタスク
-* èµ·å‹•およびシャットダりンむベント
-* `httpx`に基づいお構築されたテストクラむアント
-* **CORS**、GZip、静的ファむル、ストリヌミング応答
-* **セッションずCookie**のサポヌト
-* ãƒ†ã‚¹ãƒˆã‚«ãƒãƒ¬ãƒƒã‚ž100%
-* åž‹ã‚¢ãƒŽãƒ†ãƒŒã‚·ãƒ§ãƒ³100%のコヌドベヌス
+* åœ§å€’的なパフォヌマンス。<a href="https://github.com/encode/starlette#performance" class="external-link" target="_blank">利甚可胜な最速クラスの Python ãƒ•レヌムワヌクの 1 ã€ã§ã€**NodeJS** ã‚„ **Go** ãšåŒç­‰ã§ã™</a>。
+* **WebSocket** ã®ã‚µãƒãƒŒãƒˆã€‚
+* ãƒ—ロセス内バックグラりンドタスク。
+* èµ·å‹•およびシャットダりンむベント。
+* HTTPX ã«åŸºã¥ããƒ†ã‚¹ãƒˆã‚¯ãƒ©ã‚€ã‚¢ãƒ³ãƒˆã€‚
+* **CORS**、GZip、静的ファむル、ストリヌミングレスポンス。
+* **セッションず Cookie** ã®ã‚µãƒãƒŒãƒˆã€‚
+* ãƒ†ã‚¹ãƒˆã‚«ãƒãƒ¬ãƒƒã‚ž 100%。
+* åž‹ã‚¢ãƒŽãƒ†ãƒŒã‚·ãƒ§ãƒ³ 100% ã®ã‚³ãƒŒãƒ‰ãƒ™ãƒŒã‚¹ã€‚
 
-## Pydanticの特城
+## Pydanticの機胜 { #pydantic-features }
 
-**FastAPI**は<a href="https://docs.pydantic.dev/" class="external-link" target="_blank"><strong>Pydantic </strong></a>ず完党に互換性がありたすそしおベヌスになっおいたす。したがっお、远加のPydanticコヌドがあれば、それも機胜したす。
+**FastAPI** ã¯ <a href="https://docs.pydantic.dev/" class="external-link" target="_blank"><strong>Pydantic</strong></a> ãšå®Œå…šã«äº’換性がありか぀それに基づいおいたす。そのため、手元の Pydantic ã®è¿œåŠ ã‚³ãƒŒãƒ‰ã‚‚å‹•äœœã—ãŸã™ã€‚
 
-デヌタベヌスのために<abbr title = "Object-Relational Mapper">ORM</abbr>sや、<abbr title = "Object-Document Mapper">ODM</abbr>sなどの、Pydanticに基づく倖郚ラむブラリを備えおいたす。
+Pydantic ã«åŸºã¥ãå€–郚ラむブラリデヌタベヌス甚の <abbr title="Object-Relational Mapper - ã‚ªãƒ–ゞェクト関係マッパヌ">ORM</abbr>、<abbr title="Object-Document Mapper - ã‚ªãƒ–ゞェクトドキュメントマッパヌ">ODM</abbr> ãªã©ïŒ‰ã‚‚含たれたす。
 
-これは、すべおが自動的に怜蚌されるため、倚くの堎合、リク゚ストから取埗したオブゞェクトを**デヌタベヌスに盎接**枡すこずができるずいうこずを意味しおいたす。
+これは、すべおが自動的に怜蚌されるため、倚くの堎合、リク゚ストから取埗したオブゞェクトを **そのたたデヌタベヌスに** æž¡ã›ã‚‹ã“ずを意味したす。
 
-同じこずがその逆にも圓おはたり、倚くの堎合、デヌタベヌスから取埗したオブゞェクトを**クラむアントに盎接**枡すこずができたす。
+逆方向も同様で、倚くの堎合、デヌタベヌスから取埗したオブゞェクトを **そのたたクラむアントに** æž¡ã›ãŸã™ã€‚
 
-**FastAPI**を䜿甚するず、**Pydantic**のすべおの機胜を利甚できたすFastAPIがPydanticに基づいおすべおのデヌタ凊理を行っおいるため。
+**FastAPI** ã§ã¯ **Pydantic** ã®ã™ã¹ãŠã®æ©ŸèƒœãŒåˆ©ç”šã§ããŸã™ïŒˆFastAPI ã¯ãƒ‡ãƒŒã‚¿å‡Šç†ã®ã™ã¹ãŠã§ Pydantic ã«åŸºã¥ã„おいたす:
 
-* **brainfuckなし**
-    * ã‚¹ã‚­ãƒŒãƒžå®šçŸ©ã®ãŸã‚ã®ãƒžã‚€ã‚¯ãƒ­èš€èªžã‚’新たに孊習する必芁はありたせん。
-    * Pythonの型を知っおいる堎合は、既にPydanticの䜿甚方法を知っおいるに等しいです。
-* ãƒŠãƒŒã‚¶ãƒŒã® **<abbr title = "コヌド゚ディタヌに䌌た統合開発環境">IDE</abbr>/<abbr title = "コヌド゚ラヌをチェックするプログラム">リンタヌ</abbr>/思考 ãšã†ãŸãé€£æºã—たす**
-    * Pydanticのデヌタ構造は、ナヌザヌが定矩するクラスの単なるむンスタンスであるため、オヌトコンプリヌト、リンティング、mypy、およびナヌザヌの盎感はすべお、怜蚌枈みのデヌタで適切に機胜するはずです。
-* **耇雑な構造**を怜蚌
-    * éšŽå±€çš„なPydanticモデルや、Pythonの「`typing`」の「`list`」ず「`dict`」などの利甚。
-    * Ã£\83\90ã\83ªã\83\87ã\83΋\82¿ã\83΋\81«ã\82\88ã\82\8aã\80\81ڀ\87é\9b\91ã\81ªã\83\87ã\83΋\82¿ã\82¹ã\82­ã\83΋\83\9eã\82\92Ê\98\8e確ã\81\8bã\81€ç°¡å\8d\98ã\81«å®\9a矩ã\80\81ã\83\81ã\82§ã\83\83ã\82¯ã\81\97ã\80\81JSONã\82¹ã\82­ã\83΋\83\9eずしお文曞化できたす。
-    * æ·±ã**ネストされたJSON**オブゞェクトを䜜成し、それらすべおを怜蚌しおアノテヌションを付けるこずができたす。
+* **brainfuck ãªã—**
+    * ã‚¹ã‚­ãƒŒãƒžå®šçŸ©ã®ãŸã‚ã®æ–°ã—いマむクロ蚀語を孊ぶ必芁はありたせん。
+    * Python ã®åž‹ã‚’知っおいれば、Pydantic ã®äœ¿ã„方もわかりたす。
+* **<abbr title="Integrated Development Environment - çµ±åˆé–‹ç™ºç’°å¢ƒ: ã‚³ãƒŒãƒ‰ã‚šãƒ‡ã‚£ã‚¿ã«é¡žäŒŒ">IDE</abbr>/<dfn title="コヌドの゚ラヌを怜査するプログラム">リンタヌ</dfn>/思考** ãšæ°—持ちよく連携したす
+    * Pydantic ã®ãƒ‡ãƒŒã‚¿æ§‹é€ ã¯ã€ã‚なたが定矩するクラスの単なるむンスタンスなので、オヌトコンプリヌト、リンティング、mypy、そしおあなたの盎感が、怜蚌枈みデヌタに察しお適切に機胜したす。
+* **耇雑な構造** ã‚’怜蚌
+    * éšŽå±€çš„な Pydantic ãƒ¢ãƒ‡ãƒ«ã‚„、Python ã® `typing` ã«ã‚ã‚‹ `List` ã‚„ `Dict` ãªã©ã‚’利甚できたす。
+    * Ã£\81\95ã\82\89ã\81«ã\83\90ã\83ªã\83\87ã\83΋\82¿ã\81«ã\82\88ã\82\8aã\80\81ڀ\87é\9b\91ã\81ªã\83\87ã\83΋\82¿ã\82¹ã\82­ã\83΋\83\9eã\82\92Ê\98\8e確ã\81\8bã\81€å®¹Ê\98\93ã\81«å®\9a矩ã\83»Ê€\9cÊ\9fȋ\81§ã\81\8dã\80\81JSON Schema ãšã—お文曞化できたす。
+    * æ·±ã **ネストされた JSON** ã‚ªãƒ–ゞェクトを扱え、それらすべおを怜蚌しおアノテヌションを付䞎できたす。
 * **拡匵可胜**
-    * Pydanticでは、カスタムデヌタ型を定矩できたす。たたは、バリデヌタヌデコレヌタヌで装食されたモデルのメ゜ッドを䜿甚しお怜蚌を拡匵できたす。
+    * Pydantic ã§ã¯ã‚«ã‚¹ã‚¿ãƒ ãƒ‡ãƒŒã‚¿åž‹ã‚’定矩できたすし、バリデヌタデコレヌタヌで装食したモデルメ゜ッドで怜蚌を拡匵できたす。
 * ãƒ†ã‚¹ãƒˆã‚«ãƒãƒ¬ãƒƒã‚ž 100%。
index 8cf0c216361a0ef4c0eee647051dba0c7be27342..ed91bb19f6a5b6e2555258ff58929a9bb30333a6 100644 (file)
-# FastAPIを応揎 - ãƒ˜ãƒ«ãƒ—の入手
+# FastAPIを応揎 - ãƒ˜ãƒ«ãƒ—の入手 { #help-fastapi-get-help }
 
 **FastAPI** ã¯æ°—に入りたしたか
 
-FastAPIやナヌザヌや開発者を応揎したいですか
+FastAPIや他のナヌザヌ、䜜者を応揎したいですか
 
-ã\82\82ã\81\97ã\81\8fã\81¯ã\80\81 **FastAPI** ã«ã€ã„おヘルプが必芁ですか
+ã\81\9dã\82\8cã\81šã\82\82 **FastAPI** ã«ã€ã„おヘルプが必芁ですか
 
-ã\81šã\81Šã\82\82ç°¡å\8d\98ã\81«å¿\9cÊ\8fŽã\81§ã\81\8dã\81Ÿã\81\99 (ã\81\9fã\81 1ã\80\812Ã¥\9b\9eã\82¯ã\83ªã\83\83ã\82¯ã\81\99ã\82\8bã\81 ã\81\91ã\81®ã\82\82ã\81®ã\82\82ã\81\82ã\82\8aã\81Ÿã\81\99)。
+ã\81šã\81Šã\82\82ç°¡å\8d\98ã\81«å¿\9cÊ\8fŽã\81§ã\81\8dã\82\8bÊ\96¹Ê³\95ã\81\8cã\81\82ã\82\8aã\81Ÿã\81\99ïŒ\881ã\80\812Ã¥\9b\9eã\82¯ã\83ªã\83\83ã\82¯ã\81\99ã\82\8bã\81 ã\81\91ã\81®ã\82\82ã\81®ã\82\82ã\81\82ã\82\8aã\81Ÿã\81\99ïŒ\89。
 
-ã\81Ÿã\81\9fã\80\81ã\83\98ã\83«ã\83\97ã\82\92Ã¥\85¥Ê\89\8bã\81\99ã\82\8bÊ\89\8bÊ®µã\81\8cいく぀かありたす。
+ã\83\98ã\83«ã\83\97ã\82\92åŸ\97ã\82\8bÊ\96¹Ê³\95ã\82\82いく぀かありたす。
 
-## GitHubで **FastAPI** ã«Star
+## ãƒ‹ãƒ¥ãƒŒã‚¹ãƒ¬ã‚¿ãƒŒã‚’賌読 { #subscribe-to-the-newsletter }
 
-GitHubでFastAPIに「Star」を぀けるこずができたす (右䞊郚のStarボタンをクリック): <a href="https://github.com/fastapi/fastapi" class="external-link" target="_blank">https://github.com/fastapi/fastapi</a>. â­ïž
+[**FastAPI and friends** ãƒ‹ãƒ¥ãƒŒã‚¹ãƒ¬ã‚¿ãƒŒ](newsletter.md){.internal-link target=_blank}配信はたれですを賌読するず、次の情報をキャッチアップできたす:
 
-スタヌを増やすこずで、他のナヌザヌの目に぀きやすくなり、倚くの人にずっお䟿利なものであるこずを瀺せたす。
+* FastAPI ãšé–¢é€£ãƒ—ロゞェクトのニュヌス ðŸš€
+* ã‚¬ã‚€ãƒ‰ ðŸ“
+* æ©Ÿèƒœ âœš
+* äº’換性に圱響する倉曎 ðŸšš
+* ãƒ’ントやコツ âœ…
 
-## GitHubレポゞトリのリリヌスをWatch
+## X (Twitter) ã§ FastAPI ã‚’フォロヌ { #follow-fastapi-on-x-twitter }
 
-GitHubでFastAPIを「Watch」できたす (右䞊郚のWatchボタンをクリック): <a href="https://github.com/fastapi/fastapi" class="external-link" target="_blank">https://github.com/fastapi/fastapi</a>. ðŸ‘€
+<a href="https://x.com/fastapi" class="external-link" target="_blank">**X (Twitter)** ã§ @fastapi ã‚’フォロヌ</a>しお、**FastAPI** ã®æœ€æ–°æƒ…報を受け取りたしょう。🐊
+
+## GitHubで **FastAPI** ã«Star { #star-fastapi-in-github }
+
+GitHubでFastAPIに「Star」を぀けるこずができたす右䞊郚のStarボタンをクリック: <a href="https://github.com/fastapi/fastapi" class="external-link" target="_blank">https://github.com/fastapi/fastapi</a>。⭐
+
+スタヌを増やすこずで、他のナヌザヌの目に぀きやすくなり、すでに倚くの人の圹に立っおいるこずが䌝わりたす。
+
+## GitHubレポゞトリのリリヌスをWatch { #watch-the-github-repository-for-releases }
+
+GitHubでFastAPIを「Watch」できたす右䞊郚の「Watch」ボタンをクリック: <a href="https://github.com/fastapi/fastapi" class="external-link" target="_blank">https://github.com/fastapi/fastapi</a>。👀
 
 ãã“で「Releases only」を遞択できたす。
 
-これを行うず、**FastAPI** ãƒã‚°ä¿®æ­£ã‚„新機胜の実装などの新しいリリヌス (新しいバヌゞョン) ãŒã‚るたびに (メヌルで) é€šçŸ¥ã‚’受け取れたす。
+これを行うず、バグ修正や新機胜を含む **FastAPI** ã®æ–°ã—いリリヌス新バヌゞョンがあるたびに、メヌルで通知を受け取れたす。
 
-## é–‹ç™ºè€…ず぀ながる
+## é–‹ç™ºè€…ず぀ながる { #connect-with-the-author }
 
-以䞋で、<a href="https://tiangolo.com" class="external-link" target="_blank">開発者 (Sebastián Ramírez / `tiangolo`)</a> ãšã‚³ãƒ³ã‚¿ã‚¯ãƒˆã‚’ずれたす:
+䜜者である<a href="https://tiangolo.com" class="external-link" target="_blank">私Sebastián Ramírez / `tiangolo`</a>ず぀ながれたす。
+
+できるこず:
 
 * <a href="https://github.com/tiangolo" class="external-link" target="_blank">**GitHub** ã§ãƒ•ォロヌ</a>。
-    * ä»–のオヌプン゜ヌスプロゞェクトを確認できたす。䜕かの助けになるものが芋぀かるかもしれたせん。
-    * æ–°ãŸãªã‚ªãƒŒãƒ—ン゜ヌスプロゞェクトを䜜成したずきに通知されたす。
-* <a href="https://x.com/tiangolo" class="external-link" target="_blank">**X (Twitter)** ã§ãƒ•ォロヌ</a>。
-    * FastAPIの䜿甚甚途を教えおください (聞いおみたいです)。
-    * æ–°ãŸãªãƒ„ヌルの発衚やリリヌスが聞けたす。
-* <a href="https://www.linkedin.com/in/tiangolo/" class="external-link" target="_blank">**Linkedin** ã§ã€ãªãŒã‚‹</a>。
-    * æ–°ãŸãªãƒ„ヌルの発衚やリリヌスが聞けたす (ただしX (Twitter)の方が利甚頻床が高いですが ðŸ€·â€â™‚)。
-* <a href="https://dev.to/tiangolo" class="external-link" target="_blank">**Dev.to**</a> ã‚„ <a href="https://medium.com/@tiangolo" class="external-link" target="_blank">**Medium**</a> ã§è‘—䜜物を読む (たたはフォロヌ)。
-    * ã‚¢ã‚€ãƒ‡ã‚¢ã‚„䜜成ツヌルに぀いおの蚘事が読めたす。
-    * æ–°èŠèš˜äº‹ã®åŸ·ç­†ã‚’é€šçŸ¥ã—ãŠãã‚ŒãŸã™ã€‚
+    * åœ¹ã«ç«‹ã€ã‹ã‚‚しれない、私が䜜成した他のオヌプン゜ヌスプロゞェクトを芋られたす。
+    * æ–°ã—いオヌプン゜ヌスプロゞェクトを䜜成したずきにわかりたす。
+* <a href="https://x.com/tiangolo" class="external-link" target="_blank">**X (Twitter)** ã§ãƒ•ォロヌ</a> ãŸãŸã¯ <a href="https://fosstodon.org/@tiangolo" class="external-link" target="_blank">Mastodon</a>。
+    * ã‚なたがどのようにFastAPIを䜿っおいるか教えおください聞けるず嬉しいです。
+    * æ–°ã—いツヌルの告知やリリヌスを聞けたす。
+    * ã•らに、<a href="https://x.com/fastapi" class="external-link" target="_blank">X (Twitter) ã® @fastapi</a>別アカりントもフォロヌできたす。
+* <a href="https://www.linkedin.com/in/tiangolo/" class="external-link" target="_blank">**LinkedIn** ã§ãƒ•ォロヌ</a>。
+    * æ–°ã—いツヌルの告知やリリヌスを聞けたすただしX (Twitter) ã®æ–¹ã‚’よく䜿っおいたす ðŸ€·â€â™‚。
+* <a href="https://dev.to/tiangolo" class="external-link" target="_blank">**Dev.to**</a> ã‚„ <a href="https://medium.com/@tiangolo" class="external-link" target="_blank">**Medium**</a> ã§åŸ·ç­†å†…容を読むたたはフォロヌ。
+    * ç§ã®ã‚¢ã‚€ãƒ‡ã‚¢ã‚„、䜜成したツヌルに関する蚘事を読めたす。
+    * æ–°ã—い蚘事を公開したずきに読めたす。
+
+## **FastAPI** ã«ã€ã„おツむヌト { #tweet-about-fastapi }
+
+<a href="https://x.com/compose/tweet?text=I'm loving @fastapi because... https://github.com/fastapi/fastapi" class="external-link" target="_blank">**FastAPI** ã«ã€ã„おツむヌト</a>しお、なぜ気に入っおいるのかを私や他の人に教えおください。🎉
+
+**FastAPI** ãŒã©ã®ã‚ˆã†ã«äœ¿ã‚ã‚ŒãŠã„るか、どこを気に入っおいるか、どのプロゞェクト/䌚瀟で䜿っおいるか等、聞けるず嬉しいです。
+
+## FastAPIに投祚 { #vote-for-fastapi }
+
+* <a href="https://www.slant.co/options/34241/~fastapi-review" class="external-link" target="_blank">Slantで **FastAPI** ã«æŠ•祚</a>。
+* <a href="https://alternativeto.net/software/fastapi/about/" class="external-link" target="_blank">AlternativeToで **FastAPI** ã«æŠ•祚</a>。
+* <a href="https://stackshare.io/pypi-fastapi" class="external-link" target="_blank">StackShare ã§ **FastAPI** ã‚’䜿っおいるず宣蚀</a>。
+
+## GitHubで質問に困っおいる人を助ける { #help-others-with-questions-in-github }
+
+次の堎所で、他の人の質問を手助けできたす:
+
+* <a href="https://github.com/fastapi/fastapi/discussions/categories/questions?discussions_q=category%3AQuestions+is%3Aunanswered" class="external-link" target="_blank">GitHub Discussions</a>
+* <a href="https://github.com/fastapi/fastapi/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Aquestion+-label%3Aanswered+" class="external-link" target="_blank">GitHub Issues</a>
+
+倚くの堎合、その質問の答えをすでに知っおいるかもしれたせん。🀓
+
+もし倚くの人の質問に答えお助けおくれたなら、あなたは公匏の[FastAPI Expert](fastapi-people.md#fastapi-experts){.internal-link target=_blank}になりたす。🎉
+
+最も倧事なポむントは「芪切であるこず」を心がけるこずです。人はフラストレヌションを抱えおやっお来るので、必ずしも最良の聞き方をしおいるずは限りたせんが、できる限り芪切に察応したしょう。🀗
+
+**FastAPI** ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã¯èŠªåˆ‡ã§æ­“è¿Žçš„ã§ã‚ã‚‹ã“ãšã‚’ç›®æŒ‡ã—ãŠã„ãŸã™ã€‚åŒæ™‚ã«ã€ã„ã˜ã‚ã‚„ä»–è€…ãžã®ç„¡ç€ŒãªæŒ¯ã‚‹èˆžã„ã¯å—ã‘å…¥ã‚Œãªã„ã§ãã ã•ã„ã€‚ãŠäº’ã„ã‚’å€§äº‹ã«ã—ãŸã—ã‚‡ã†ã€‚
+
+---
+
+以䞋はDiscussions ã‚„ Issues ã§ïŒ‰ä»–の人の質問を手助けする方法です:
+
+### è³ªå•ã‚’理解する { #understand-the-question }
+
+* è³ªå•è€…の「目的」やナヌスケヌスを理解できるか確認したす。
+
+* æ¬¡ã«ã€è³ªå•ïŒˆå€§åŠã¯è³ªå•ã§ã™ïŒ‰ãŒã€Œæ˜Žç¢ºã€ã‹ç¢ºèªã—たす。
+
+* å€šãã®å Žåˆã€ãƒŠãƒŒã‚¶ãƒŒãŒæƒ³åƒã—た解決策に぀いおの質問になっおいたすが、もっず「良い」方法があるかもしれたせん。問題やナヌスケヌスをよりよく理解できれば、より良い「代替解決策」を提案できるかもしれたせん。
+
+* è³ªå•ãŒç†è§£ã§ããªã„堎合は、さらに「詳现」を尋ねたす。
+
+### å•é¡Œã‚’再珟する { #reproduce-the-problem }
+
+倚くのケヌスや質問は、その人の「元のコヌド」に関係しおいたす。
+
+しばしばコヌドの断片だけが共有されたすが、それでは問題を「再珟」するには䞍十分です。
+
+* ãƒ­ãƒŒã‚«ãƒ«ã§åŒã˜ã‚šãƒ©ãƒŒã‚„挙動を確認できるように、たたはナヌスケヌスをよりよく理解できるように、**コピヌ&ペヌスト**しお実行できる<a href="https://stackoverflow.com/help/minimal-reproducible-example" class="external-link" target="_blank">最小の再珟可胜な䟋</a>の提䟛を䟝頌できたす。
+
+* ãšãŠã‚‚寛倧な気分なら、問題の説明だけをもずに、あなた自身でそのような**䟋を䜜成**しおみるこずもできたす。ただし時間がかかる可胜性が高いので、たずは問題の明確化を䟝頌した方が良い堎合もありたす。
+
+### è§£æ±ºç­–を提案する { #suggest-solutions }
+
+* è³ªå•ã‚’理解できたら、可胜な**回答**を提瀺できたす。
+
+* å€šãã®å Žåˆã€ç›žæ‰‹ã®ã€Œæ ¹æœ¬çš„な問題やナヌスケヌス」を理解するこずが重芁です。盞手が詊しおいる方法より良い解決方法があるかもしれないからです。
+
+### ã‚¯ãƒ­ãƒŒã‚ºã‚’䟝頌する { #ask-to-close }
+
+もし盞手が返信しおきお、あなたが問題を解決できたなら、おめでずう、**あなたはヒヌロヌ**です🊞
+
+* ãã®å Žåˆã€æ¬¡ã®ã‚ˆã†ã«äŸé Œã§ããŸã™:
+
+    * GitHub Discussions: ã‚³ãƒ¡ãƒ³ãƒˆã‚’**回答**ずしおマヌクしおもらう。
+    * GitHub Issues: issue ã‚’**クロヌズ**しおもらう。
+
+## GitHubレポゞトリをWatch { #watch-the-github-repository }
+
+GitHubでFastAPIを「Watch」できたす右䞊郚の「Watch」ボタンをクリック: <a href="https://github.com/fastapi/fastapi" class="external-link" target="_blank">https://github.com/fastapi/fastapi</a>。👀
+
+「Releases only」ではなく「Watching」を遞択するず、新しい issue ã‚„質問が䜜成されたずきに通知を受け取れたす。新しい issue ã®ã¿ã€Discussions ã®ã¿ã€PR ã®ã¿ã€ãªã©é€šçŸ¥å¯Ÿè±¡ã‚’絞るこずもできたす。
+
+その䞊で、そうした質問の解決を手助けできたす。
+
+## è³ªå•ã™ã‚‹ { #ask-questions }
+
+GitHubレポゞトリで<a href="https://github.com/fastapi/fastapi/discussions/new?category=questions" class="external-link" target="_blank">新しい質問</a>を䜜成できたす。䟋えば:
+
+* **質問**をする、たたは**問題**に぀いお尋ねる。
+* æ–°ã—い**機胜**を提案する。
+
+**Note**: ã‚‚しそうするなら、他の人の手助けもお願いしたす。😉
+
+## ãƒ—ルリク゚ストをレビュヌ { #review-pull-requests }
+
+他の人からのプルリク゚ストのレビュヌを手䌝っおもらえたす。
+
+ここでも、できる限り芪切であるようにしおください。🀗
+
+---
+
+プルリク゚ストをレビュヌするずきのポむントです:
+
+### å•é¡Œã‚’理解する { #understand-the-problem }
+
+* ãŸãšã€ãã®ãƒ—ルリク゚ストが解決しようずしおいる**問題を理解**しおください。長めの議論が GitHub Discussion ã‚„ issue ã«ã‚るかもしれたせん。
+
+* ãã®å•é¡Œã¯å®Ÿã¯**別の方法**で解決でき、プルリク゚スト自䜓が䞍芁な堎合もありたす。その堎合は、その提案や質問をしおも良いでしょう。
+
+### ã‚¹ã‚¿ã‚€ãƒ«ã¯æ°—にしすぎない { #dont-worry-about-style }
+
+* ã‚³ãƒŸãƒƒãƒˆãƒ¡ãƒƒã‚»ãƒŒã‚žã®ã‚¹ã‚¿ã‚€ãƒ«ãªã©ã¯ã‚たり気にしなくお倧䞈倫です。私は squash and merge ã‚’䜿い、コミットを手動で調敎したす。
+
+* ã‚¹ã‚¿ã‚€ãƒ«ãƒ«ãƒŒãƒ«ã«ã€ã„おも心配無甚です。自動化ツヌルがすでにチェックしおいたす。
+
+ほかにスタむルや䞀貫性の芁件があれば、私から盎接䟝頌したすし、必芁な倉曎を䞊に積む圢でコミットを远加したす。
+
+### ã‚³ãƒŒãƒ‰ã‚’確認 { #check-the-code }
+
+* ã‚³ãƒŒãƒ‰ã‚’確認しお読み、劥圓かどうかを芋お、**ロヌカルで実行**し、本圓に問題を解決しおいるか確かめおください。
+
+* ãã®ã†ãˆã§ã€ãã‚Œã‚’行ったこずを**コメント**で䌝えおください。そうすれば、実際に確認しおくれたずわかりたす。
+
+/// info | æƒ…å ±
+
+残念ながら、承認が耇数぀いただけのPRを、そのたた信頌するこずはできたせん。
+
+説明が魅力的なためか、3件、5件以䞊の承認が぀いおいおも、実際にPRを確認するず壊れおいたり、バグがあったり、䞻匵する問題を解決しおいなかったりするこずが䜕床もありたした。😅
+
+ですので、実際にコヌドを読み、実行しお確認し、それをコメントで知らせおもらえるこずが本圓に重芁です。🀓
+
+///
+
+* ã‚‚しPRを簡玠化できそうなら、その䟝頌をしおも構いたせんが、现かい点にこだわり過ぎる必芁はありたせん。䞻芳的な芋方が倚く私にもありたす ðŸ™ˆïŒ‰ã€åŸºæœ¬çš„な点に集䞭できるずより良いでしょう。
+
+### ãƒ†ã‚¹ãƒˆ { #tests }
+
+* PRに**テスト**があるか確認を手䌝っおください。
+
+* PR前はテストが**倱敗**するこずを確認したす。🚚
+
+* ãã—おPR埌にテストが**成功**するこずを確認したす。✅
 
-## **FastAPI** ã«é–¢ã™ã‚‹ãƒ„むヌト
+* å€šãã®PRにはテストがありたせん。テストの远加を**リマむンド**したり、テストを**提案**したりできたす。これは最も時間を消費する郚分の䞀぀で、倧いに助けになりたす。
 
-<a href="https://x.com/compose/tweet?text=I'm loving FastAPI because... https://github.com/fastapi/fastapi cc @tiangolo" class="external-link" target="_blank">**FastAPI** ã«ã€ã„おツむヌト</a>し、開発者や他の人にどこが気に入ったのか教えおください。🎉
+* äœ•を詊したかもコメントしおください。そうすれば、確認しおくれたこずがわかりたす。🀓
 
-**FastAPI** ãŒã©ã®ã‚ˆã†ã«äœ¿ã‚ã‚Œã€ã©ã“が気に入られ、どんなプロゞェクト/䌚瀟で䜿われおいるかなどに぀いお知りたいです。
+## ãƒ—ルリク゚ストを䜜成 { #create-a-pull-request }
 
-## FastAPIに投祚
+[貢献](contributing.md){.internal-link target=_blank}ずしお、次のようにプルリク゚ストで゜ヌスコヌドに貢献できたす:
 
-* <a href="https://www.slant.co/options/34241/~fastapi-review" class="external-link" target="_blank">Slantで **FastAPI** ã«æŠ•祚</a>
-* <a href="https://alternativeto.net/software/fastapi/" class="external-link" target="_blank">AlternativeToで **FastAPI** ã«æŠ•祚</a>
-* <a href="https://github.com/marmelab/awesome-rest/pull/93" class="external-link" target="_blank">awesome-restで **FastAPI** ã«æŠ•祚</a>
+* ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã§èŠ‹ã€ã‘ãŸã‚¿ã‚€ãƒã®ä¿®æ­£ã€‚
+* è‡ªåˆ†ãŒäœœæˆ/発芋した FastAPI ã«é–¢ã™ã‚‹èš˜äº‹ãƒ»å‹•画・ポッドキャストを、<a href="https://github.com/fastapi/fastapi/edit/master/docs/en/data/external_links.yml" class="external-link" target="_blank">このファむルを線集</a>しお共有。
+    * è©²åœ“セクションの先頭にリンクを远加しおください。
+* è‡ªåˆ†ã®èš€èªžãžã®[ドキュメント翻蚳を手䌝う](contributing.md#translations){.internal-link target=_blank}。
+    * ä»–の人が䜜成した翻蚳のレビュヌも手䌝えたす。
+* æ–°ã—いドキュメントセクションの提案。
+* æ—¢å­˜ã®issue/バグの修正。
+    * ãƒ†ã‚¹ãƒˆã‚’远加しおください。
+* æ–°æ©Ÿèƒœã®è¿œåŠ ã€‚
+    * ãƒ†ã‚¹ãƒˆã‚’远加しおください。
+    * é–¢é€£ãŒã‚ればドキュメントも远加しおください。
 
-## GitHub issuesで他の人を助ける
+## FastAPIのメンテナンスを手䌝う { #help-maintain-fastapi }
 
-<a href="https://github.com/fastapi/fastapi/issues" class="external-link" target="_blank">既存のissues</a>を確認しお、他の人を助けおみおください。皆さんが回答を知っおいるかもしれない質問がほずんどです。🀓
+**FastAPI** ã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹ã‚’手䌝っおください🀓
 
-## GitHubレポゞトリをWatch
+やるこずはたくさんあり、その倚くは**あなた**にもできたす。
 
-GitHubでFastAPIを「watch」できたす (右䞊郚の「watch」ボタンをクリック): <a href="https://github.com/fastapi/fastapi" class="external-link" target="_blank">https://github.com/fastapi/fastapi</a>. ðŸ‘€
+今すぐできる䞻なタスクは次のずおりです:
 
-「Releases only」ではなく「Watching」を遞択するず、新たなissueが立おられた際に通知されたす。
+* [GitHubで質問に困っおいる人を助ける](#help-others-with-questions-in-github){.internal-link target=_blank}䞊のセクションを参照。
+* [プルリク゚ストをレビュヌ](#review-pull-requests){.internal-link target=_blank}䞊のセクションを参照。
 
-ã\81\9dã\81\97ã\81Šã\80\81issueã\82\92Ú§£Ê±ºã\81\97À»\96ã\81®Àººã\82\92Ã¥\8a©ã\81\91ã\82\8bã\81\93ã\81šã\81\8cã\81§ã\81\8dã\81Ÿす。
+ã\81\93ã\81®2ã\81ۋ\81\8c**Ê\9c\80ã\82\82Ê\99\82é\96\93ã\82\92ʶ\88Ú²»**ã\81\97ã\81Ÿã\81\99ã\80\82FastAPI Ã£\81®ã\83¡ã\83³ã\83\86ã\83\8aã\83³ã\82¹Àœ\9cÊ¥­ã\81®Àž­å¿\83ã\81§す。
 
-## issuesを立おる
+これを手䌝っおもらえるず、**FastAPIのメンテナンスに貢献**し、**より速く・より良く前進**できるようになりたす。🚀
 
-GitHubレポゞトリで<a href="https://github.com/fastapi/fastapi/issues/new/choose" class="external-link" target="_blank">新たなissueを立おられたす</a>。䟋えば:
+## ãƒãƒ£ãƒƒãƒˆã«å‚加 { #join-the-chat }
 
-* è³ªå•ã€ãŸãŸã¯ã€å•é¡Œã®å ±å‘Š
-* æ–°æ©Ÿèƒœã®ææ¡ˆ
+👥 <a href="https://discord.gg/VQjSZaeJmf" class="external-link" target="_blank">Discord ãƒãƒ£ãƒƒãƒˆã‚µãƒŒãƒãƒŒ</a> ðŸ‘¥ ã«å‚加し、FastAPI ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã®ã¿ã‚“なず亀流したしょう。
 
-**Note**: issueを立おた人は、他の人の手助けもお願いしたす。😉
+/// tip | è±†çŸ¥è­˜
 
-## ãƒ—ルリク゚ストをする
+質問は <a href="https://github.com/fastapi/fastapi/discussions/new?category=questions" class="external-link" target="_blank">GitHub Discussions</a> ã«æŠ•皿しおください。そこなら[FastAPI Experts](fastapi-people.md#fastapi-experts){.internal-link target=_blank}から助けおもらえる可胜性がずっず高いです。
 
-以䞋の様な<a href="https://github.com/fastapi/fastapi" class="external-link" target="_blank">プルリク゚ストを䜜成</a>できたす:
+チャットは䞀般的な䌚話のみに䜿いたしょう。
 
-* ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®ã‚¿ã‚€ãƒ—ミスを修正。
-* æ–°ãŸãªãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’提案。
-* æ—¢å­˜ã®issue/バグを修正。
-* æ–°æ©Ÿèƒœã‚’远加。
+///
 
-## é–‹ç™ºè€…のスポンサヌになる
+### è³ªå•ã§ãƒãƒ£ãƒƒãƒˆã‚’䜿わない { #dont-use-the-chat-for-questions }
 
-<a href="https://github.com/sponsors/tiangolo" class="external-link" target="_blank">GitHub sponsors</a>を通しお開発者を経枈的にサポヌトできたす。
+チャットは「自由な䌚話」がしやすいため、䞀般的すぎお答えにくい質問になりがちです。そのため、回答が埗られない可胜性がありたす。
 
-そこで、感謝の気持ちを䌝えるためにコヌヒヌ☕を買うこずができたす ðŸ˜„。
+GitHub ã§ã¯ã€ãƒ†ãƒ³ãƒ—レヌトが正しい圢で質問を曞くのを助けおくれるため、良い回答を埗やすくなりたすし、質問する前に自分で問題を解決できるこずもありたす。さらにGitHubなら、時間がかかっおも私が必ずすべおに回答できるようにできたす。チャットでは私個人にはそれができたせん。😅
 
-## FastAPIを匷化するツヌルのスポンサヌになる
+チャットでの䌚話はGitHubほど怜玢しやすくないため、質問ず回答が䌚話に埋もれがちです。そしお、[FastAPI Expert](fastapi-people.md#fastapi-experts){.internal-link target=_blank}になるためにカりントされるのはGitHub䞊の掻動だけです。ですから、GitHubの方が泚目を集めやすいでしょう。
 
-ドキュメントで芋たように、FastAPIはStarletteずPydanticずいう巚人の肩に乗っおいたす。
+䞀方で、チャットには数千人のナヌザヌがいるため、ほが垞に誰かず䌚話できる可胜性が高いです。😄
 
-以䞋のスポンサヌになるこずもできたす:
+## äœœè€…をスポンサヌ { #sponsor-the-author }
 
-* <a href="https://github.com/sponsors/samuelcolvin" class="external-link" target="_blank">Samuel Colvin (Pydantic)</a>
-* <a href="https://github.com/sponsors/encode" class="external-link" target="_blank">Encode (Starlette, Uvicorn)</a>
+あなたの**補品/䌚瀟**が **FastAPI** ã«äŸå­˜ã—おいる、たたは関連しおおり、そのナヌザヌにリヌチしたい堎合は、<a href="https://github.com/sponsors/tiangolo" class="external-link" target="_blank">GitHub sponsors</a> ã‚’通じお䜜者私を支揎できたす。プランに応じお、ドキュメントにバッゞが衚瀺されるなどの特兞がある堎合がありたす。🎁
 
 ---
 
index 6cfd1894d8a44fd1ac0802931b95d47f44de7a72..14655570800343691bdfe7ac7a26f8a0770bf385 100644 (file)
@@ -1,13 +1,12 @@
-# æ­Žå²ã€èš­èšˆã€ãã—おこれから
+# æ­Žå²ã€èš­èšˆã€ãã—おこれから { #history-design-and-future }
 
-少し前に、<a href="https://github.com/fastapi/fastapi/issues/3#issuecomment-454956920" class="external-link" target="_blank">**FastAPI**
-のナヌザヌに以䞋の様に尋ねられたした</a>:
+少し前に、<a href="https://github.com/fastapi/fastapi/issues/3#issuecomment-454956920" class="external-link" target="_blank">**FastAPI**のナヌザヌに以䞋の様に尋ねられたした</a>:
 
 > ã“のプロゞェクトの歎史は䜕もないずころから、数週間ですごいものができおいるようです。 [...]
 
 ã“れがその歎史のほんの䞀郚です。
 
-## ä»£æ›¿æ‰‹æ®µ
+## ä»£æ›¿æ‰‹æ®µ { #alternatives }
 
 æ•°å¹Žå‰ã‹ã‚‰ã€ç§ã¯è€‡é›‘な芁件を持぀API (機械孊習、分散システム、非同期ゞョブ、NoSQLデヌタベヌスなど) ã‚’䜜成しおおり、いく぀かの開発者チヌムを率いおいたす。
 
@@ -19,7 +18,7 @@
 
 <blockquote markdown="1">
 
-**FastAPI**ã\81¯ã\80\81À»£Ê\9b¿ã\83\84ã\83΋\83«のこれたでの働きがなければ存圚しなかったでしょう。
+**FastAPI**ã\81¯ã\80\81À»\96ã\81®Àººã\80\85のこれたでの働きがなければ存圚しなかったでしょう。
 
 ä»¥å‰ã«äœœã‚‰ã‚ŒãŸå€šãã®ãƒ„ヌルが、䜜成における刺激ずしお圹立っおきたした。
 
@@ -29,7 +28,7 @@
 
 </blockquote>
 
-## èª¿æŸ»
+## èª¿æŸ» { #investigation }
 
 ã™ã¹ãŠæ—¢å­˜ã®ä»£æ›¿æ‰‹æ®µã‚’䜿うこずで、そのすべおを孊び、アむデアを埗お、自分や䞀緒に仕事をしおきた開発者のチヌムにずっお最良の方法で組み合わせる機䌚を埗たした。
 
@@ -39,7 +38,7 @@
 
 ãã“で、**FastAPI**のコヌドを曞き始める前に、OpenAPI、JSON Schema、OAuth2などの仕様を数ヶ月かけお勉匷し、それらの関係、重耇する箇所、盞違点を理解したした。
 
-## èš­èšˆ
+## èš­èšˆ { #design }
 
 ãã®åŸŒã€ (FastAPIを䜿う開発者ずしお) ãƒŠãƒŒã‚¶ãƒŒãŒæ¬²ã—い「API」の蚭蚈に時間を費やしたした。
 
 
 ã™ã¹ãŠã®ç®‡æ‰€ã§ã€ã™ã¹ãŠã®é–‹ç™ºè€…に最高の開発䜓隓を提䟛したした。
 
-## èЁ件
+## èЁ件 { #requirements }
 
 ã„く぀かの代替手法を詊したあず、私は<a href="https://docs.pydantic.dev/" class="external-link" target="_blank">**Pydantic**</a>の匷みを利甚するこずを決めたした。
 
 ãã—お、JSON Schemaに完党に準拠するようにしたり、制玄宣蚀を定矩するさたざたな方法をサポヌトしたり、いく぀かの゚ディタヌでのテストに基づいお゚ディタヌのサポヌト (型チェック、自動補完) ã‚’改善するために貢献したした。
 
-é\96\8bç\99ºÀž­ã\80\81ã\82\82ã\81\861ã\81ۋ\81®é\87\8dڊ\81ã\81ªé\8dµã\81šã\81ªã\82\8b<a href="https://www.starlette.dev/" class="external-link" target="_blank">**Starlette**</a>ã\80\81ã\81«ã\82\82Ú²¢ç\8c®ã\81\97ã\81Ÿã\81\97ã\81\9fã\80\82
+開発䞭、もう1぀の重芁な鍵ずなる<a href="https://www.starlette.dev/" class="external-link" target="_blank">**Starlette**</a>にも貢献したした。
 
-## é–‹ç™º
+## é–‹ç™º { #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 (file)
index 0000000..9bef476
--- /dev/null
@@ -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` ãƒ˜ãƒƒãƒ€ãƒŒã‚’含めたす。<a href="https://datatracker.ietf.org/doc/html/rfc7235#section-3.1" class="external-link" target="_blank">RFC 7235</a>、<a href="https://datatracker.ietf.org/doc/html/rfc9110#name-401-unauthorized" class="external-link" target="_blank">RFC 9110</a>。
+
+しかし、䜕らかの理由でクラむアントが埓来の挙動に䟝存しおいる堎合は、セキュリティクラスでメ゜ッド `make_not_authenticated_error` ã‚’オヌバヌラむドするこずで、その挙動に戻せたす。
+
+たずえば、既定の `401 Unauthorized` ã‚šãƒ©ãƒŒã®ä»£ã‚ã‚Šã« `403 Forbidden` ã‚šãƒ©ãƒŒã‚’返す `HTTPBearer` ã®ã‚µãƒ–クラスを䜜成できたす:
+
+{* ../../docs_src/authentication_error_status_code/tutorial001_an_py310.py hl[9:13] *}
+
+/// tip | è±†çŸ¥è­˜
+
+この関数は䟋倖むンスタンスを返す点に泚意しおください。ここでは䟋倖を送出したせん。送出は内郚の他のコヌドで行われたす。
+
+///
index 9478f5c032ea4f41ac3a7aef2688def9f9747ea6..0febe1ef67cc4905f7030c9c1c97ebde08244e9c 100644 (file)
@@ -10,7 +10,7 @@
 
 ã‚‚しセキュリティ䞊の欠陥が゜ヌスコヌドにあるならば、それは存圚したたたです。
 
-ドキュメンテヌションを非衚瀺にするのは、単にあなたのAPIぞのアクセス方法を難解にするだけでなく、同時にあなた自身の本番環境でのAPIのデバッグを困難にしおしたう可胜性がありたす。単玔に、 <a href="https://en.wikipedia.org/wiki/Security_through_obscurity" class="external-link" target="_blank">Security through obscurity</a> ã®äž€ã€ã®åœ¢æ…‹ãšã—お考えられるでしょう。
+ドキュメンテヌションを非衚瀺にするのは、単にあなたのAPIぞのアクセス方法を難解にするだけでなく、同時にあなた自身の本番環境でのAPIのデバッグを困難にしおしたう可胜性がありたす。単玔に、 <a href="https://en.wikipedia.org/wiki/Security_through_obscurity" class="external-link" target="_blank">秘匿によるセキュリティ</a> ã®äž€ã€ã®åœ¢æ…‹ãšã—お考えられるでしょう。
 
 ã‚‚しあなたの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 (file)
index 0000000..8be7adc
--- /dev/null
@@ -0,0 +1,70 @@
+# Swagger UI ã®èš­å®š { #configure-swagger-ui }
+
+いく぀かの远加の <a href="https://swagger.io/docs/open-source-tools/swagger-ui/usage/configuration/" class="external-link" target="_blank">Swagger UI ãƒ‘ラメヌタ</a>を蚭定できたす。
+
+蚭定するには、`FastAPI()` ã®ã‚¢ãƒ—リオブゞェクトを䜜成するずき、たたは `get_swagger_ui_html()` é–¢æ•°ã« `swagger_ui_parameters` åŒ•数を枡したす。
+
+`swagger_ui_parameters` ã¯ã€Swagger UI ã«ç›ŽæŽ¥æž¡ã•れる蚭定を含む蟞曞を受け取りたす。
+
+FastAPI ã¯ãã‚Œã‚‰ã®èš­å®šã‚’ **JSON** ã«å€‰æ›ã—、JavaScript ãšäº’換にしたす。Swagger UI ãŒå¿…芁ずするのはこの圢匏です。
+
+## ã‚·ãƒ³ã‚¿ãƒƒã‚¯ã‚¹ãƒã‚€ãƒ©ã‚€ãƒˆã‚’無効化 { #disable-syntax-highlighting }
+
+䟋えば、Swagger UI ã®ã‚·ãƒ³ã‚¿ãƒƒã‚¯ã‚¹ãƒã‚€ãƒ©ã‚€ãƒˆã‚’無効化できたす。
+
+蚭定を倉曎しなければ、シンタックスハむラむトはデフォルトで有効です:
+
+<img src="/img/tutorial/extending-openapi/image02.png">
+
+しかし、`syntaxHighlight` ã‚’ `False` ã«èš­å®šã™ã‚‹ãšç„¡åŠ¹åŒ–ã§ããŸã™:
+
+{* ../../docs_src/configure_swagger_ui/tutorial001_py310.py hl[3] *}
+
+...その堎合、Swagger UI ã§ã¯ã‚·ãƒ³ã‚¿ãƒƒã‚¯ã‚¹ãƒã‚€ãƒ©ã‚€ãƒˆãŒè¡šç€ºã•れなくなりたす:
+
+<img src="/img/tutorial/extending-openapi/image03.png">
+
+## ãƒ†ãƒŒãƒžã®å€‰æ›Ž { #change-the-theme }
+
+同様に、キヌ `"syntaxHighlight.theme"`途䞭にドットが含たれおいる点に泚意でシンタックスハむラむトのテヌマを蚭定できたす:
+
+{* ../../docs_src/configure_swagger_ui/tutorial002_py310.py hl[3] *}
+
+この蚭定により、シンタックスハむラむトの配色テヌマが倉わりたす:
+
+<img src="/img/tutorial/extending-openapi/image04.png">
+
+## æ—¢å®šã® 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 }
+
+利甚可胜な他のすべおの蚭定に぀いおは、公匏の <a href="https://swagger.io/docs/open-source-tools/swagger-ui/usage/configuration/" class="external-link" target="_blank">Swagger UI ãƒ‘ラメヌタのドキュメント</a>を参照しおください。
+
+## 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 (file)
index 0000000..c0c9745
--- /dev/null
@@ -0,0 +1,185 @@
+# ã‚«ã‚¹ã‚¿ãƒ ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ UI ã®é™çš„アセットセルフホスティング { #custom-docs-ui-static-assets-self-hosting }
+
+API ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¯ **Swagger UI** ãš **ReDoc** ã‚’䜿甚しおおり、それぞれにいく぀かの JavaScript ãš CSS ãƒ•ァむルが必芁です。
+
+既定では、これらのファむルは <abbr title="Content Delivery Network - ã‚³ãƒ³ãƒ†ãƒ³ãƒ„配信ネットワヌク: é€šåžžã¯è€‡æ•°ã®ã‚µãƒŒãƒãƒŒã§æ§‹æˆã•れ、JavaScript ã‚„ CSS ãªã©ã®é™çš„ファむルを提䟛するサヌビス。クラむアントに近いサヌバヌからそれらのファむルを配信するこずで、パフォヌマンスを改善するためによく䜿われたす。">CDN</abbr> ã‹ã‚‰é…ä¿¡ã•れたす。
+
+しかし、カスタマむズするこずも可胜で、特定の CDN ã‚’指定したり、自分でファむルを配信したりできたす。
+
+## JavaScript ãš CSS ã®ã‚«ã‚¹ã‚¿ãƒ  CDN { #custom-cdn-for-javascript-and-css }
+
+別の <abbr title="Content Delivery Network - ã‚³ãƒ³ãƒ†ãƒ³ãƒ„配信ネットワヌク">CDN</abbr> ã‚’䜿いたいずしたす。䟋えば `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 }
+
+これで、<a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a> ã«ã‚¢ã‚¯ã‚»ã‚¹ã—おペヌゞを再読み蟌みするず、新しい 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** ã§ã¯æ¬¡ã®ãƒ•ァむルを䜿甚したす:
+
+- <a href="https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui-bundle.js" class="external-link" target="_blank">`swagger-ui-bundle.js`</a>
+- <a href="https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui.css" class="external-link" target="_blank">`swagger-ui.css`</a>
+
+そしお **ReDoc** ã§ã¯æ¬¡ã®ãƒ•ァむルを䜿甚したす:
+
+- <a href="https://cdn.jsdelivr.net/npm/redoc@2/bundles/redoc.standalone.js" class="external-link" target="_blank">`redoc.standalone.js`</a>
+
+その埌、ファむル構成は次のようになりたす:
+
+```
+.
+├── 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 }
+
+アプリケヌションを起動し、<a href="http://127.0.0.1:8000/static/redoc.standalone.js" class="external-link" target="_blank">http://127.0.0.1:8000/static/redoc.standalone.js</a> ã«ã‚¢ã‚¯ã‚»ã‚¹ã—たす。
+
+**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 ã‚’切断しお <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a> ã«ã‚¢ã‚¯ã‚»ã‚¹ã—、ペヌゞを再読み蟌みできるはずです。
+
+むンタヌネットに接続しおいなくおも、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 (file)
index 0000000..ae64f31
--- /dev/null
@@ -0,0 +1,109 @@
+# ã‚«ã‚¹ã‚¿ãƒ  Request ãš APIRoute ã‚¯ãƒ©ã‚¹ { #custom-request-and-apiroute-class }
+
+堎合によっおは、`Request` ã‚„ `APIRoute` ã‚¯ãƒ©ã‚¹ã§äœ¿ã‚ã‚Œã‚‹ãƒ­ã‚žãƒƒã‚¯ã‚’䞊曞きしたいこずがありたす。
+
+特に、ミドルりェアでのロゞックの代替ずしお有効な堎合がありたす。
+
+たずえば、アプリケヌションで凊理される前にリク゚ストボディを読み取ったり操䜜したりしたい堎合です。
+
+/// danger | è­Šå‘Š
+
+これは「䞊玚」機胜です。
+
+FastAPI ã‚’始めたばかりの堎合は、このセクションは読み飛ばしおもよいでしょう。
+
+///
+
+## ãƒŠãƒŒã‚¹ã‚±ãƒŒã‚¹ { #use-cases }
+
+ナヌスケヌスの䟋:
+
+* JSON ã§ã¯ãªã„リク゚ストボディを JSON ã«å€‰æ›ã™ã‚‹ïŒˆäŸ‹: <a href="https://msgpack.org/index.html" class="external-link" target="_blank">`msgpack`</a>。
+* 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` ã«ã€ã„お詳しくは、<a href="https://www.starlette.dev/requests/" class="external-link" target="_blank">Starlette ã® Requests ã«é–¢ã™ã‚‹ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ</a> ã‚’参照しおください。
+
+///
+
+`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 (file)
index 0000000..df5b3cd
--- /dev/null
@@ -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 ã‚¹ã‚­ãƒŒãƒžã‚’生成し、必芁な郚分を䞊曞きできたす。
+
+たずえば、<a href="https://github.com/Rebilly/ReDoc/blob/master/docs/redoc-vendor-extensions.md#x-logo" class="external-link" target="_blank">カスタムロゎを含めるための ReDoc ã® OpenAPI æ‹¡åŒµ</a>を远加しおみたしょう。
+
+### é€šåžžã® **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 }
+
+<a href="http://127.0.0.1:8000/redoc" class="external-link" target="_blank">http://127.0.0.1:8000/redoc</a> ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãšã€ã‚«ã‚¹ã‚¿ãƒ ãƒ­ã‚ŽïŒˆã“の䟋では **FastAPI** ã®ãƒ­ã‚ŽïŒ‰ãŒäœ¿ã‚ã‚ŒãŠã„るこずが確認できたす:
+
+<img src="/img/tutorial/extending-openapi/image01.png">
diff --git a/docs/ja/docs/how-to/general.md b/docs/ja/docs/how-to/general.md
new file mode 100644 (file)
index 0000000..8879c68
--- /dev/null
@@ -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 (file)
index 0000000..bd0d223
--- /dev/null
@@ -0,0 +1,60 @@
+# GraphQL { #graphql }
+
+**FastAPI** ã¯ **ASGI** æš™æº–に基づいおいるため、ASGI ã«å¯Ÿå¿œã—た任意の **GraphQL** ãƒ©ã‚€ãƒ–ラリを簡単に統合できたす。
+
+同じアプリケヌション内で通垞の FastAPI ã® *path operation* ãš GraphQL ã‚’組み合わせお䜿えたす。
+
+/// tip | è±†çŸ¥è­˜
+
+**GraphQL** ã¯éžåžžã«ç‰¹å®šã®ãƒŠãƒŒã‚¹ã‚±ãƒŒã‚¹ã‚’解決したす。
+
+䞀般的な **Web API** ãšæ¯”べるず、**長所** ãš **短所** ãŒã‚りたす。
+
+ご自身のナヌスケヌスで埗られる **利点** ãŒ **欠点** ã‚’補うかどうかを評䟡しおください。 ðŸ€“
+
+///
+
+## GraphQL ãƒ©ã‚€ãƒ–ラリ { #graphql-libraries }
+
+**ASGI** ã‚’サポヌトする **GraphQL** ãƒ©ã‚€ãƒ–ラリの䞀郚を以䞋に瀺したす。**FastAPI** ãšçµ„み合わせお䜿甚できたす:
+
+* <a href="https://strawberry.rocks/" class="external-link" target="_blank">Strawberry</a> ðŸ“
+    * <a href="https://strawberry.rocks/docs/integrations/fastapi" class="external-link" target="_blank">FastAPI å‘けドキュメント</a>あり
+* <a href="https://ariadnegraphql.org/" class="external-link" target="_blank">Ariadne</a>
+    * <a href="https://ariadnegraphql.org/docs/fastapi-integration" class="external-link" target="_blank">FastAPI å‘けドキュメント</a>あり
+* <a href="https://tartiflette.io/" class="external-link" target="_blank">Tartiflette</a>
+    * ASGI é€£æºç”šã® <a href="https://tartiflette.github.io/tartiflette-asgi/" class="external-link" target="_blank">Tartiflette ASGI</a> ã‚り
+* <a href="https://graphene-python.org/" class="external-link" target="_blank">Graphene</a>
+    * <a href="https://github.com/ciscorn/starlette-graphene3" class="external-link" target="_blank">starlette-graphene3</a> ã‚り
+
+## Strawberry ã§ GraphQL { #graphql-with-strawberry }
+
+**GraphQL** ãŒå¿…芁、たたは利甚したい堎合は、<a href="https://strawberry.rocks/" class="external-link" target="_blank">**Strawberry**</a> ã‚’**掚奚**したす。**FastAPI** ã®èš­èšˆã«æœ€ã‚‚近く、すべおが**型アノテヌション**に基づいおいたす。
+
+ナヌスケヌスによっおは他のラむブラリを遞ぶ方がよい堎合もありたすが、私に尋ねられれば、おそらく **Strawberry** ã‚’詊すこずを勧めるでしょう。
+
+FastAPI ãš Strawberry ã‚’統合する方法の簡単なプレビュヌです:
+
+{* ../../docs_src/graphql_/tutorial001_py310.py hl[3,22,25] *}
+
+詳现は <a href="https://strawberry.rocks/" class="external-link" target="_blank">Strawberry ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ</a>をご芧ください。
+
+たた、<a href="https://strawberry.rocks/docs/integrations/fastapi" class="external-link" target="_blank">Strawberry ãš FastAPI</a> ã®é€£æºã«é–¢ã™ã‚‹ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚‚ありたす。
+
+## Starlette ã®æ—§ `GraphQLApp` { #older-graphqlapp-from-starlette }
+
+以前の Starlette ã«ã¯ã€<a href="https://graphene-python.org/" class="external-link" target="_blank">Graphene</a> ãšçµ±åˆã™ã‚‹ãŸã‚ã® `GraphQLApp` ã‚¯ãƒ©ã‚¹ãŒå«ãŸã‚ŒãŠã„たした。
+
+これは Starlette ã‹ã‚‰ã¯éžæŽšå¥šã«ãªã‚ŠãŸã—たが、もしそれを䜿甚しおいるコヌドがある堎合は、同じナヌスケヌスをカバヌし、**ほが同䞀のむンタヌフェヌス**を持぀ <a href="https://github.com/ciscorn/starlette-graphene3" class="external-link" target="_blank">starlette-graphene3</a> ãžå®¹æ˜“に**移行**できたす。
+
+/// tip | è±†çŸ¥è­˜
+
+GraphQL ãŒå¿…芁であれば、䟝然ずしお <a href="https://strawberry.rocks/" class="external-link" target="_blank">Strawberry</a> ã®åˆ©ç”šã‚’掚奚したす。独自のクラスや型ではなく、型アノテヌションに基づいおいるためです。
+
+///
+
+## ã•らに孊ぶ { #learn-more }
+
+**GraphQL** ã«ã€ã„おは、<a href="https://graphql.org/" class="external-link" target="_blank">公匏 GraphQL ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ</a>でさらに孊べたす。
+
+䞊蚘の各ラむブラリに぀いおは、リンク先のドキュメントをご参照ください。
diff --git a/docs/ja/docs/how-to/index.md b/docs/ja/docs/how-to/index.md
new file mode 100644 (file)
index 0000000..b1cd177
--- /dev/null
@@ -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 (file)
index 0000000..f1414ac
--- /dev/null
@@ -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 ãžã®å…¬åŒã® <a href="https://docs.pydantic.dev/latest/migration/" class="external-link" target="_blank">移行ガむド</a> ãŒã‚りたす。
+
+倉曎点、怜蚌がより正確で厳密になった点、泚意事項などが含たれたす。
+
+䜕が倉わったかをよりよく理解するために参照しおください。
+
+## ãƒ†ã‚¹ãƒˆ { #tests }
+
+アプリに察する[テスト](../tutorial/testing.md){.internal-link target=_blank}を甚意し、継続的むンテグレヌションCIで実行するようにしおください。
+
+これにより、アップグレヌド埌も期埅どおり動䜜しおいるこずを確認できたす。
+
+## `bump-pydantic` { #bump-pydantic }
+
+倚くの堎合、カスタマむズのない通垞の Pydantic ãƒ¢ãƒ‡ãƒ«ã‚’䜿っおいれば、v1 ã‹ã‚‰ v2 ãžã®ç§»è¡Œäœœæ¥­ã®å€§åŠã‚’自動化できたす。
+
+同じ Pydantic ãƒãƒŒãƒ ãŒæäŸ›ã™ã‚‹ <a href="https://github.com/pydantic/bump-pydantic" class="external-link" target="_blank">`bump-pydantic`</a> ã‚’䜿甚できたす。
+
+このツヌルは必芁なコヌド倉曎のほずんどを自動で行いたす。
+
+その埌テストを実行し、問題なければ完了です。😎
+
+## 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 (file)
index 0000000..46df2aa
--- /dev/null
@@ -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` ãƒ•ィヌルドには **赀いアスタリスク** ãŒä»˜ã„おおらず、必須ずしおはマヌクされおいたせん:
+
+<div class="screenshot">
+<img src="/img/tutorial/separate-openapi-schemas/image01.png">
+</div>
+
+### å‡ºåŠ›ç”šãƒ¢ãƒ‡ãƒ« { #model-for-output }
+
+しかし同じモデルを次のように出力ずしお䜿う堎合:
+
+{* ../../docs_src/separate_openapi_schemas/tutorial001_py310.py hl[19] *}
+
+...`description` ã«ãƒ‡ãƒ•ォルト倀があるため、そのフィヌルドに䜕も返さなくおも、その **デフォルト倀** ãŒå…¥ã‚ŠãŸã™ã€‚
+
+### å‡ºåŠ›ã®ãƒ¬ã‚¹ãƒãƒ³ã‚¹ãƒ‡ãƒŒã‚¿ { #model-for-output-response-data }
+
+ドキュメントから詊しおレスポンスを確認するず、コヌドでは䞀方の `description` ãƒ•ィヌルドに䜕も远加しおいないにもかかわらず、JSON ãƒ¬ã‚¹ãƒãƒ³ã‚¹ã«ã¯ãƒ‡ãƒ•ォルト倀`null`が含たれおいたす:
+
+<div class="screenshot">
+<img src="/img/tutorial/separate-openapi-schemas/image02.png">
+</div>
+
+぀たりそのフィヌルドには **垞に倀がありたす**。倀が `None`JSON ã§ã¯ `null`になるこずがあるだけです。
+
+したがっお、この API ã‚’䜿うクラむアントは倀の有無を確認する必芁がなく、フィヌルドが **垞に存圚する** ãšä»®å®šã§ããŸã™ã€‚堎合によっおはデフォルト倀の `None` ã«ãªã‚‹ã ã‘です。
+
+これを OpenAPI ã§è¡šçŸã™ã‚‹ã«ã¯ã€ãã®ãƒ•ィヌルドを **必須** ãšã—おマヌクしたす。垞に存圚するためです。
+
+このため、モデルの JSON Schema ã¯ã€**入力か出力か** ã«ã‚ˆã£ãŠç•°ãªã‚‹å ŽåˆãŒã‚りたす:
+
+- **入力** ã§ã¯ `description` ã¯ **必須ではない**
+- **出力** ã§ã¯ **必須**倀は `None`、JSON ã§ã¯ `null` ã®å¯èƒœæ€§ã‚り
+
+### ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã§ã®å‡ºåŠ›ãƒ¢ãƒ‡ãƒ« { #model-for-output-in-docs }
+
+ドキュメントで出力モデルを芋るず、`name` ãš `description` ã® **䞡方** ãŒ **赀いアスタリスク** ã§ **必須** ãšã—おマヌクされおいたす:
+
+<div class="screenshot">
+<img src="/img/tutorial/separate-openapi-schemas/image03.png">
+</div>
+
+### ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã§ã®å…¥åŠ›ãƒ»å‡ºåŠ›ãƒ¢ãƒ‡ãƒ« { #model-for-input-and-output-in-docs }
+
+さらに、OpenAPI ã«å«ãŸã‚Œã‚‹åˆ©ç”šå¯èƒœãªã‚¹ã‚­ãƒŒãƒžïŒˆJSON Schemaを確認するず、`Item-Input` ãš `Item-Output` ã® 2 ã€ãŒã‚るこずが分かりたす。
+
+`Item-Input` ã§ã¯ã€`description` ã¯ **必須ではありたせん**赀いアスタリスクなし。
+
+䞀方、`Item-Output` ã§ã¯ã€`description` ã¯ **必須**赀いアスタリスクありです。
+
+<div class="screenshot">
+<img src="/img/tutorial/separate-openapi-schemas/image04.png">
+</div>
+
+この **Pydantic v2** ã®æ©Ÿèƒœã«ã‚ˆã‚Šã€API ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¯ã‚ˆã‚Š **正確** ã«ãªã‚Šã€è‡ªå‹•生成されたクラむアントや SDK ã‚‚より正確になりたす。これにより、より良い **開発者゚クスペリ゚ンス** ãšäž€è²«æ€§ãŒåŸ—られたす。🎉
+
+## ã‚¹ã‚­ãƒŒãƒžã‚’分けない { #do-not-separate-schemas }
+
+䞀方で、**入力ず出力で同じスキヌマ** ã«ã—たい堎合もありたす。
+
+䞻なナヌスケヌスは、すでに自動生成されたクラむアントコヌドや SDK ãŒã‚り、ただそれらをすべお曎新したくない堎合です。いずれは曎新したいずしおも、今ではないかもしれたせん。
+
+その堎合は、**FastAPI** ã®ãƒ‘ラメヌタ `separate_input_output_schemas=False` ã§ã“の機胜を無効化できたす。
+
+/// info | æƒ…å ±
+
+`separate_input_output_schemas` ã®ã‚µãƒãƒŒãƒˆã¯ FastAPI `0.102.0` ã§è¿œåŠ ã•ã‚ŒãŸã—ãŸã€‚ðŸ€“
+
+///
+
+{* ../../docs_src/separate_openapi_schemas/tutorial002_py310.py hl[10] *}
+
+### ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã§å…¥åŠ›ãƒ»å‡ºåŠ›ã«åŒäž€ã‚¹ã‚­ãƒŒãƒžã‚’äœ¿ç”š { #same-schema-for-input-and-output-models-in-docs }
+
+これでモデルの入力ず出力は単䞀のスキヌマ、`Item` ã®ã¿ã«ãªã‚Šã€`description` ã¯ **必須ではありたせん**:
+
+<div class="screenshot">
+<img src="/img/tutorial/separate-openapi-schemas/image05.png">
+</div>
diff --git a/docs/ja/docs/how-to/testing-database.md b/docs/ja/docs/how-to/testing-database.md
new file mode 100644 (file)
index 0000000..af9ad75
--- /dev/null
@@ -0,0 +1,7 @@
+# ãƒ‡ãƒŒã‚¿ãƒ™ãƒŒã‚¹ã®ãƒ†ã‚¹ãƒˆ { #testing-a-database }
+
+デヌタベヌス、SQL、SQLModel ã«ã€ã„おは、<a href="https://sqlmodel.tiangolo.com/" class="external-link" target="_blank">SQLModel ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ</a>で孊べたす。🀓
+
+FastAPI ãšäž€ç·’に SQLModel ã‚’䜿うためのミニ <a href="https://sqlmodel.tiangolo.com/tutorial/fastapi/" class="external-link" target="_blank">チュヌトリアル</a>がありたす。✚
+
+そのチュヌトリアルには、<a href="https://sqlmodel.tiangolo.com/tutorial/fastapi/tests/" class="external-link" target="_blank">SQL ãƒ‡ãƒŒã‚¿ãƒ™ãƒŒã‚¹ã®ãƒ†ã‚¹ãƒˆ</a>に関するセクションも含たれおいたす。😎
index 67e01ed5351454fe693cfd92ebd059b4ef8ae572..90368b4ae3001a8ecfce163899183b064fc7bb2d 100644 (file)
@@ -40,7 +40,7 @@ FastAPI ã¯ã€Python ã®æš™æº–である型ヒントに基づいお Python ã§ AP
 * **高速**: **NodeJS** ã‚„ **Go** äžŠã¿ã®ãšãŠã‚‚高いパフォヌマンスStarlette ãš Pydantic ã®ãŠã‹ã’です。 [利甚可胜な最も高速な Python ãƒ•レヌムワヌクの䞀぀です](#performance)。
 * **高速なコヌディング**: é–‹ç™ºé€ŸåºŠã‚’玄 200%〜300% å‘䞊させたす。*
 * **少ないバグ**: é–‹ç™ºè€…起因のヒュヌマン゚ラヌを玄 40% å‰Šæž›ã—たす。*
-* **盎感的**: çŽ æ™Žã‚‰ã—ã„ã‚šãƒ‡ã‚£ã‚¿ã‚µãƒãƒŒãƒˆã€‚ã‚ã‚‰ã‚†ã‚‹å Žæ‰€ã§ <abbr title="also known as auto-complete, autocompletion, IntelliSense">補完</abbr> ãŒäœ¿ãˆãŸã™ã€‚デバッグ時間を削枛したす。
+* **盎感的**: çŽ æ™Žã‚‰ã—ã„ã‚šãƒ‡ã‚£ã‚¿ã‚µãƒãƒŒãƒˆã€‚<dfn title="別名: auto-complete、autocompletion、IntelliSense">補完</dfn> ãŒã‚らゆる堎所で䜿えたす。デバッグ時間を削枛したす。
 * **簡単**: ç°¡å˜ã«åˆ©ç”šãƒ»ç¿’埗できるようにデザむンされおいたす。ドキュメントを読む時間を削枛したす。
 * **短い**: ã‚³ãƒŒãƒ‰ã®é‡è€‡ã‚’最小限にしたす。各パラメヌタ宣蚀から耇数の機胜を埗られたす。バグも枛りたす。
 * **堅牢性**: è‡ªå‹•察話型ドキュメントにより、本番環境向けのコヌドが埗られたす。
@@ -127,7 +127,7 @@ FastAPI ã¯ã€Python ã®æš™æº–である型ヒントに基づいお Python ã§ AP
 
 <a href="https://typer.tiangolo.com" target="_blank"><img src="https://typer.tiangolo.com/img/logo-margin/logo-margin-vector.svg" style="width: 20%;"></a>
 
-Web API ã®ä»£ã‚ã‚Šã«ã‚¿ãƒŒãƒŸãƒŠãƒ«ã§äœ¿ç”šã™ã‚‹ <abbr title="Command Line Interface">CLI</abbr> ã‚¢ãƒ—リを構築する堎合は、<a href="https://typer.tiangolo.com/" class="external-link" target="_blank">**Typer**</a> ã‚’確認しおください。
+Web API ã®ä»£ã‚ã‚Šã«ã‚¿ãƒŒãƒŸãƒŠãƒ«ã§äœ¿ç”šã™ã‚‹ <abbr title="Command Line Interface - ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚€ãƒ³ã‚€ãƒ³ã‚¿ãƒŒãƒ•ェむス">CLI</abbr> ã‚¢ãƒ—リを構築する堎合は、<a href="https://typer.tiangolo.com/" class="external-link" target="_blank">**Typer**</a> ã‚’確認しおください。
 
 **Typer** ã¯ FastAPI ã®åŒŸåˆ†ã§ã™ã€‚そしお、**CLI ç‰ˆ FastAPI** ã‚’意図しおいたす。 âŒšïž ðŸš€
 
@@ -368,7 +368,7 @@ item: Item
 * ãƒ‡ãƒŒã‚¿ã®æ€œèšŒ:
     * ãƒ‡ãƒŒã‚¿ãŒç„¡åŠ¹ãªå Žåˆã«è‡ªå‹•ã§æ˜Žç¢ºãªã‚šãƒ©ãƒŒã‚’è¿”ã—ãŸã™ã€‚
     * æ·±ã„入れ子になった JSON ã‚ªãƒ–ゞェクトでも怜蚌が可胜です。
-* å…¥åŠ›ãƒ‡ãƒŒã‚¿ã® <abbr title="also known as: serialization, parsing, marshalling">倉換</abbr>: ãƒãƒƒãƒˆãƒ¯ãƒŒã‚¯ã‹ã‚‰ Python ã®ãƒ‡ãƒŒã‚¿ã‚„型ぞ。以䞋から読み取りたす:
+* å…¥åŠ›ãƒ‡ãƒŒã‚¿ã® <dfn title="別名: serialization、parsing、marshalling">倉換</dfn>: ãƒãƒƒãƒˆãƒ¯ãƒŒã‚¯ã‹ã‚‰ Python ã®ãƒ‡ãƒŒã‚¿ã‚„型ぞ。以䞋から読み取りたす:
     * JSON。
     * ãƒ‘スパラメヌタ。
     * ã‚¯ã‚šãƒªãƒ‘ラメヌタ。
@@ -376,7 +376,7 @@ item: Item
     * ãƒ˜ãƒƒãƒ€ãƒŒã€‚
     * ãƒ•ォヌム。
     * ãƒ•ァむル。
-* å‡ºåŠ›ãƒ‡ãƒŒã‚¿ã® <abbr title="also known as: serialization, parsing, marshalling">倉換</abbr>: Python ã®ãƒ‡ãƒŒã‚¿ã‚„型からネットワヌクデヌタぞJSON ãšã—お倉換したす:
+* å‡ºåŠ›ãƒ‡ãƒŒã‚¿ã® <dfn title="別名: serialization、parsing、marshalling">倉換</dfn>: Python ã®ãƒ‡ãƒŒã‚¿ã‚„型からネットワヌクデヌタぞJSON ãšã—お倉換したす:
     * Python ã®åž‹ïŒˆ`str`、`int`、`float`、`bool`、`list` ãªã©ïŒ‰ã®å€‰æ›ã€‚
     * `datetime` ã‚ªãƒ–ゞェクト。
     * `UUID` ã‚ªãƒ–ゞェクト。
@@ -439,7 +439,7 @@ item: Item
 
 * **ヘッダヌ**、**Cookie**、**フォヌムフィヌルド**、**ファむル**など、他のさたざたな堎所からの **パラメヌタ** å®£èš€ã€‚
 * `maximum_length` ã‚„ `regex` ã®ã‚ˆã†ãª **怜蚌制玄** ã‚’蚭定する方法。
-* éžåžžã«åŒ·åŠ›ã§äœ¿ã„ã‚„ã™ã„ **<abbr title="also known as components, resources, providers, services, injectables">䟝存性泚入</abbr>** ã‚·ã‚¹ãƒ†ãƒ ã€‚
+* éžåžžã«åŒ·åŠ›ã§äœ¿ã„ã‚„ã™ã„ **<dfn title="別名: components、resources、providers、services、injectables">䟝存性泚入</dfn>** ã‚·ã‚¹ãƒ†ãƒ ã€‚
 * **JWT ãƒˆãƒŒã‚¯ãƒ³**を甚いた **OAuth2** ã‚„ **HTTP Basic** èªèšŒã®ã‚µãƒãƒŒãƒˆã‚’含む、セキュリティず認蚌。
 * **深くネストされた JSON ãƒ¢ãƒ‡ãƒ«**を宣蚀するための、より高床なしかし同様に簡単な手法Pydantic ã®ãŠã‹ã’です。
 * <a href="https://strawberry.rocks" class="external-link" target="_blank">Strawberry</a> ãŠã‚ˆã³ä»–のラむブラリによる **GraphQL** çµ±åˆã€‚
@@ -524,7 +524,7 @@ Starlette ã«ã‚ˆã£ãŠäœ¿ç”šã•れるもの:
 
 * <a href="https://www.python-httpx.org" target="_blank"><code>httpx</code></a> - `TestClient` ã‚’䜿甚したい堎合に必芁です。
 * <a href="https://jinja.palletsprojects.com" target="_blank"><code>jinja2</code></a> - ãƒ‡ãƒ•ォルトのテンプレヌト蚭定を䜿甚したい堎合に必芁です。
-* <a href="https://github.com/Kludex/python-multipart" target="_blank"><code>python-multipart</code></a> - `request.form()` ãšãšã‚‚に、フォヌムの <abbr title="converting the string that comes from an HTTP request into Python data">「parsing」</abbr> ã‚’サポヌトしたい堎合に必芁です。
+* <a href="https://github.com/Kludex/python-multipart" target="_blank"><code>python-multipart</code></a> - `request.form()` ãšãšã‚‚に、フォヌムの <dfn title="HTTP ãƒªã‚¯ã‚šã‚¹ãƒˆã‹ã‚‰å±Šãæ–‡å­—列を Python ãƒ‡ãƒŒã‚¿ã«å€‰æ›ã™ã‚‹ã“ず">「parsing」</dfn> ã‚’サポヌトしたい堎合に必芁です。
 
 FastAPI ã«ã‚ˆã£ãŠäœ¿ç”šã•れるもの:
 
index 26a9e2193cecab865e1e2c812df03cce54e9a59f..a6b46c256da271c39e2ee7969012c25609482c38 100644 (file)
@@ -1,12 +1,12 @@
 # Pythonの型の玹介 { #python-types-intro }
 
-Pythonではオプションの「型ヒント」「型アノテヌション」ずも呌ばれたすがサポヌトされおいたす。
+Python ã«ã¯ã‚ªãƒ—ションの「型ヒント」「型アノテヌション」ずも呌ばれたすがサポヌトされおいたす。
 
-ã\81\93ã\82\8cã\82\89ã\81® **ã\80\8cÃ¥\9e\8bã\83\92ã\83³ã\83\88ã\80\8d** Ã£\81Ÿã\81\9fã\81¯ã\82¢ã\83\8eã\83\86ã\83΋\82·ã\83§ã\83³ã\81¯ã\80\81å€\89Ê\95°ã\81®<abbr title="for example: str, int, float, bool">Ã¥\9e\8b</abbr>を宣蚀できる特別な構文です。
+ã\81\93ã\82\8cã\82\89ã\81® **ã\80\8cÃ¥\9e\8bã\83\92ã\83³ã\83\88ã\80\8d** Ã£\82\84ã\82¢ã\83\8eã\83\86ã\83΋\82·ã\83§ã\83³ã\81¯ã\80\81å€\89Ê\95°ã\81®<dfn title="ÀŸ\8bã\81\88ã\81°: strã\80\81intã\80\81floatã\80\81bool">Ã¥\9e\8b</dfn>を宣蚀できる特別な構文です。
 
 å€‰æ•°ã«åž‹ã‚’宣蚀するこずで、゚ディタヌやツヌルがより良いサポヌトを提䟛できたす。
 
-これは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()`を甚いお、それぞれの最初の文字を倧文字に倉換したす。
-* çœŸã‚“䞭にスペヌスを入れお<abbr title="Puts them together, as one. With the contents of one after the other.">連結</abbr>したす。
+* `first_name` ãš `last_name` ã‚’取埗したす。
+* `title()` ã‚’甚いお、それぞれの最初の文字を倧文字に倉換したす。
+* çœŸã‚“䞭にスペヌスを入れお<dfn title="1぀にたずめたす。片方の内容をもう片方の埌ろに続けたす。">連結</dfn>したす。
 
-{* ../../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` ã§è‡ªå‹•補完を実行するず、以䞋のようになりたす:
 
 <img src="/img/python-types/image02.png">
 
@@ -106,15 +106,15 @@ John Doe
 
 ã“の関数を芋おください。すでに型ヒントを持っおいたす:
 
-{* ../../docs_src/python_types/tutorial003_py39.py hl[1] *}
+{* ../../docs_src/python_types/tutorial003_py310.py hl[1] *}
 
 ã‚šãƒ‡ã‚£ã‚¿ã¯å€‰æ•°ã®åž‹ã‚’知っおいるので、補完だけでなく、゚ラヌチェックをするこずもできたす:
 
 <img src="/img/python-types/image04.png">
 
-これで`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 }
 
-ã\83\87ã\83Œã\82¿Ê§\8bé\80 ã\81®Àž­ã\81«ã\81¯ã\80\81`dict`ã\80\81`list`ã\80\81`set`ã\80\81`tuple`ã\81®ã\82\88ã\81\86ã\81«À»\96ã\81®å\80€ã\82\92å\90«ã\82\80ã\81\93ã\81šã\81\8cã\81§ã\81\8dã\82\8bã\82\82ã\81®ã\81\8cã\81\82ã\82\8aã\81Ÿã\81\99ã\80\82ã\81Ÿã\81\9få\86\85é\83šã\81®å\80€ã\82\82ç\8b¬Ú\87ªã\81®å\9e\8bã\82\92Ê\8c\81ã\81€ã\81\93ã\81šã\81\8cã\81§ã\81\8dã\81Ÿã\81\99ã\80\82
+ã\81\84ã\81\8fã\81ۋ\81\8bã\81®Ú¿œå\8a ã\81®ã\83Šã\83΋\82¹ã\82±ã\83΋\82¹ã\81§ã\81¯ã\80\81ʚ\99ʺ\96ã\83©ã\82ۋ\83\96ã\83©ã\83ªã\81® `typing` Ã£\83¢ã\82žã\83¥ã\83΋\83«ã\81\8bã\82\89Àœ\95ã\81\8bã\82\92ã\82ۋ\83³ã\83\9dã\83΋\83\88ã\81\99ã\82\8bå¿\85ڊ\81ã\81\8cã\81\82ã\82\8bã\81\8bã\82\82ã\81\97ã\82\8cã\81Ÿã\81\9bã\82\93ã\80\82ÀŸ\8bã\81\88ã\81°ã\80\8cÀ»»Ê\84\8fã\81®å\9e\8bã\80\8dã\82\92Ã¥\8f\97ã\81\91À»\98ã\81\91ã\82\8bã\81\93ã\81šã\82\92宣ښ\80ã\81\97ã\81\9fã\81\84堎å\90\88ã\80\81`typing` Ã£\81® `Any` Ã£\82\92Àœ¿ã\81\88ã\81Ÿã\81\99:
 
-内郚の型を持぀これらの型は「**generic**」型ず呌ばれたす。そしお、内郚の型も含めお宣蚀するこずが可胜です。
+```python
+from typing import Any
 
-これらの型や内郚の型を宣蚀するには、Pythonの暙準モゞュヌル`typing`を䜿甚できたす。これらの型ヒントをサポヌトするために特別に存圚しおいたす。
 
-#### æ–°ã—いPythonバヌゞョン { #newer-versions-of-python }
-
-`typing`を䜿う構文は、Python 3.6から最新バヌゞョンたでPython 3.9、Python 3.10などを含むすべおのバヌゞョンず **互換性** ãŒã‚りたす。
+def some_function(data: Any):
+    print(data)
+```
 
-Pythonが進化するに぀れ、**新しいバヌゞョン** ã§ã¯ã“れらの型アノテヌションぞのサポヌトが改善され、倚くの堎合、型アノテヌションを宣蚀するために`typing`モゞュヌルをむンポヌトしお䜿う必芁すらなくなりたす。
+### ã‚žã‚§ãƒãƒªãƒƒã‚¯åž‹ { #generic-types }
 
-プロゞェクトでより新しいPythonバヌゞョンを遞べるなら、その远加のシンプルさを掻甚できたす。
+䞀郚の型は、角括匧内で「型パラメヌタ」を受け取り、内郚の型を定矩できたす。䟋えば「文字列のリスト」は `list[str]` ãšã—お宣蚀したす。
 
-ã\83\89ã\82­ã\83¥ã\83¡ã\83³ã\83\88Ã¥\85šÀœ\93ã\81§ã\80\81Pythonã\81®å\90\84ã\83\90ã\83΋\82žã\83§ã\83³ã\81šÀº\92Ê\8f\9bÊ\80§ã\81®ã\81\82ã\82\8bÀŸ\8bïŒ\88å·®å\88\86ã\81\8cã\81\82ã\82\8b堎å\90\88ïŒ\89ã\82\92瀺ã\81\97ã\81Šã\81\84たす。
+ã\81\93ã\81®ã\82\88ã\81\86ã\81«å\9e\8bã\83\91ã\83©ã\83¡ã\83΋\82¿ã\82\92Ã¥\8f\96ã\82\8cã\82\8bÃ¥\9e\8bã\81¯ **Generic types**ïŒ\88ã\82žã\82§ã\83\8dã\83ªã\82¯ã\82¹ïŒ\89ã\81šå\91΋\81°ã\82\8cたす。
 
-䟋えば「**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`です。
-
-Python 3.6以䞊Python 3.10を含むでは、`typing`の`Union`型を䜿い、角括匧の䞭に受け付ける可胜性のある型を入れられたす。
+倉数が **耇数の型のいずれか** ã«ãªã‚ŠåŸ—るこずを宣蚀できたす。䟋えば、`int` ãŸãŸã¯ `str` ã§ã™ã€‚
 
-Python 3.10では、受け付ける可胜性のある型を<abbr title='also called "bitwise or operator", but that meaning is not relevant here'>瞊棒`|`</abbr>で区切っお曞ける **新しい構文** ã‚‚ありたす。
+それを定矩するには、䞡方の型を区切るために <dfn title="「ビット単䜍の OR æŒ”算子」ずも呌ばれたすが、ここでの意味ずは関係ありたせん。">瞊棒`|`</dfn> ã‚’䜿いたす。
 
-//// tab | Python 3.10+
+これは「ナニオンunion」ず呌ばれたす。倉数がそれら 2 ã€ã®åž‹ã®é›†åˆã®å’Œé›†åˆã®ã„ずれかになり埗るからです。
 
 ```Python hl_lines="1"
 {!> ../../docs_src/python_types/tutorial008b_py310.py!}
 ```
 
-////
-
-//// tab | Python 3.9+
-
-```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`である可胜性もあるずいう゚ラヌを゚ディタが怜出するのに圹立ちたす。
+これは `item` ãŒ `int` ãŸãŸã¯ `str` ã«ãªã‚ŠåŸ—るこずを意味したす.
 
-`Optional[Something]`は実際には`Union[Something, None]`のショヌトカットで、䞡者は等䟡です。
+#### `None` ã®å¯èƒœæ€§ { #possibly-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`を䜿う代替ずしお、型のナニオンを宣蚀するために<abbr title='also called "bitwise or operator", but that meaning is not relevant here'>瞊棒`|`</abbr>を䜿えたす。これはずっず良く、よりシンプルです。
-
-////
-
-//// 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] *}
 
 ãã—お、再び、すべおの゚ディタのサポヌトを埗るこずができたす:
 
 <img src="/img/python-types/image06.png">
 
-これは「`one_person`はクラス`Person`の**むンスタンス**である」こずを意味したす。
+これは「`one_person` ã¯ã‚¯ãƒ©ã‚¹ `Person` ã® **むンスタンス** ã§ã‚る」こずを意味したす。
 
-「`one_person`は`Person`ずいう名前の**クラス**である」ずいう意味ではありたせん。
+「`one_person` ã¯ `Person` ãšã„う名前の **クラス** ã§ã‚る」ずいう意味ではありたせん。
 
-## Pydanticのモデル { #pydantic-models }
+## Pydantic ã®ãƒ¢ãƒ‡ãƒ« { #pydantic-models }
 
-<a href="https://docs.pydantic.dev/" class="external-link" target="_blank">Pydantic</a> ã¯ãƒ‡ãƒŒã‚¿æ€œèšŒã‚’行うためのPythonラむブラリです。
+<a href="https://docs.pydantic.dev/" class="external-link" target="_blank">Pydantic</a> ã¯ãƒ‡ãƒŒã‚¿æ€œèšŒã‚’行うための Python ãƒ©ã‚€ãƒ–ラリです。
 
 ãƒ‡ãƒŒã‚¿ã®ã€Œåœ¢ã€ã‚’属性付きのクラスずしお宣蚀したす。
 
@@ -389,53 +279,47 @@ Python 3.10では、ゞェネリクスの`Union`や`Optional`を䜿う代替ず
 
 ãŸãŸã€ãã®çµæžœã®ã‚ªãƒ–ゞェクトですべおの゚ディタのサポヌトを受けるこずができたす。
 
-Pydanticの公匏ドキュメントからの䟋:
+Pydantic ã®å…¬åŒãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‹ã‚‰ã®äŸ‹:
 
 {* ../../docs_src/python_types/tutorial011_py310.py *}
 
 /// info | æƒ…å ±
 
-<a href="https://docs.pydantic.dev/" class="external-link" target="_blank">Pydanticの詳现はドキュメントを参照しおください</a>。
+<a href="https://docs.pydantic.dev/" class="external-link" target="_blank">Pydantic ã®è©³çŽ°ã¯ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ãŠãã ã•ã„</a>。
 
 ///
 
-**FastAPI** ã¯ã™ã¹ãŠPydanticをベヌスにしおいたす。
+**FastAPI** ã¯ã™ã¹ãŠ Pydantic ã‚’ベヌスにしおいたす。
 
-すべおのこずは[チュヌトリアル - ãƒŠãƒŒã‚¶ãƒŒã‚¬ã‚€ãƒ‰](tutorial/index.md){.internal-link target=_blank}で実際に芋るこずができたす。
-
-/// tip | è±†çŸ¥è­˜
-
-Pydanticには、デフォルト倀なしで`Optional`たたは`Union[Something, None]`を䜿った堎合の特別な挙動がありたす。詳现はPydanticドキュメントの<a href="https://docs.pydantic.dev/2.3/usage/models/#required-fields" class="external-link" target="_blank">Required Optional fields</a>を参照しおください。
-
-///
+すべおのこずは [チュヌトリアル - ãƒŠãƒŒã‚¶ãƒŒã‚¬ã‚€ãƒ‰](tutorial/index.md){.internal-link target=_blank} ã§å®Ÿéš›ã«èŠ‹ã‚‹ã“ãšãŒã§ããŸã™ã€‚
 
 ## ãƒ¡ã‚¿ãƒ‡ãƒŒã‚¿ã‚¢ãƒŽãƒ†ãƒŒã‚·ãƒ§ãƒ³ä»˜ãåž‹ãƒ’ント { #type-hints-with-metadata-annotations }
 
-Pythonには、`Annotated`を䜿っお型ヒントに**远加の<abbr title="Data about the data, in this case, information about the type, e.g. a description.">メタデヌタ</abbr>**を付䞎できる機胜もありたす。
+Python ã«ã¯ã€`Annotated` ã‚’䜿っお型ヒントに **远加の <dfn title="デヌタに関するデヌタ。この堎合は型に関する情報䟋えば説明。">メタデヌタ</dfn>** ã‚’付䞎できる機胜もありたす。
 
-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 | æƒ…å ±
 
-すでにすべおのチュヌトリアルを終えお、型に぀いおの詳现を芋るためにこのペヌゞに戻っおきた堎合は、良いリ゜ヌスずしお<a href="https://mypy.readthedocs.io/en/latest/cheat_sheet_py3.html" class="external-link" target="_blank">`mypy`の「チヌトシヌト」</a>がありたす。
+すでにすべおのチュヌトリアルを終えお、型に぀いおの詳现を芋るためにこのペヌゞに戻っおきた堎合は、良いリ゜ヌスずしお <a href="https://mypy.readthedocs.io/en/latest/cheat_sheet_py3.html" class="external-link" target="_blank">`mypy` ã®ã€ŒãƒãƒŒãƒˆã‚·ãƒŒãƒˆã€</a> ãŒã‚りたす。
 
 ///
diff --git a/docs/ja/docs/resources/index.md b/docs/ja/docs/resources/index.md
new file mode 100644 (file)
index 0000000..15a949e
--- /dev/null
@@ -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 (file)
index 0000000..351a82a
--- /dev/null
@@ -0,0 +1,11 @@
+/// details | ðŸŒ AI ãšäººé–“による翻蚳
+
+この翻蚳は、人間のガむドに基づいお AI ã«ã‚ˆã£ãŠäœœæˆã•れたした。🀝
+
+原文の意図を取り違えおいたり、䞍自然な衚珟になっおいる可胜性がありたす。🀖
+
+[AI LLM ã‚’より適切に誘導するのを手䌝う](https://fastapi.tiangolo.com/ja/contributing/#translations) ã“ずで、この翻蚳を改善できたす。
+
+[英語版](ENGLISH_VERSION_URL)
+
+///
index 0ed41ce11494d50df19ee50753501b5a4a833754..d32c141b5bc9bbd04e854518852215ec8652e45d 100644 (file)
@@ -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` åž‹ã®ã‚ªãƒ–ゞェクトを䜜成し、そのパラメヌタヌに枡したす。
 
 
 ãŸãŸã€æ›žãèŸŒã¿æ“äœœã§ã¯ `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 (file)
index 0000000..9c1cc0f
--- /dev/null
@@ -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` ã§ã™ã€‚
+
+<img src="/img/tutorial/bigger-applications/package.drawio.svg">
+
+同じファむル構成にコメントを付けるず次のずおりです:
+
+```bash
+.
+├── app                  # "app" is a Python package
+│   â”œâ”€â”€ __init__.py      # this file makes "app" a "Python package"
+│   â”œâ”€â”€ main.py          # "main" module, e.g. import app.main
+│   â”œâ”€â”€ dependencies.py  # "dependencies" module, e.g. import app.dependencies
+│   â””── routers          # "routers" is a "Python subpackage"
+│   â”‚   â”œâ”€â”€ __init__.py  # makes "routers" a "Python subpackage"
+│   â”‚   â”œâ”€â”€ items.py     # "items" submodule, e.g. import app.routers.items
+│   â”‚   â””── users.py     # "users" submodule, e.g. import app.routers.users
+│   â””── internal         # "internal" is a "Python subpackage"
+│       â”œâ”€â”€ __init__.py  # makes "internal" a "Python subpackage"
+│       â””── admin.py     # "admin" submodule, e.g. import app.internal.admin
+```
+
+## `APIRouter` { #apirouter }
+
+ナヌザヌだけを扱うファむルが `/app/routers/users.py` ã®ã‚µãƒ–モゞュヌルだずしたす。
+
+ナヌザヌに関連する *path operations* ã‚’ほかのコヌドから分離しお敎理したいはずです。
+
+ただし、同じ **FastAPI** ã‚¢ãƒ—リケヌション / Web API同じ「Python ãƒ‘ッケヌゞ」の䞀郚である点は倉わりたせん。
+
+そのモゞュヌルで `APIRouter` ã‚’䜿っお *path operations* ã‚’䜜成できたす。
+
+### `APIRouter` ã®ã‚€ãƒ³ãƒãƒŒãƒˆ { #import-apirouter }
+
+クラス `FastAPI` ãšåŒæ§˜ã«ã‚€ãƒ³ãƒãƒŒãƒˆã—、「むンスタンス」を䜜成したす:
+
+{* ../../docs_src/bigger_applications/app_an_py310/routers/users.py hl[1,3] title["app/routers/users.py"] *}
+
+### `APIRouter` ã§ã® *path operations* { #path-operations-with-apirouter }
+
+これを䜿っお *path operations* ã‚’宣蚀したす。
+
+䜿い方は `FastAPI` ã‚¯ãƒ©ã‚¹ãšåŒã˜ã§ã™:
+
+{* ../../docs_src/bigger_applications/app_an_py310/routers/users.py hl[6,11,16] title["app/routers/users.py"] *}
+
+`APIRouter` ã¯ã€ŒãƒŸãƒ‹ `FastAPI`」のようなクラスず考えられたす。
+
+同じオプションがすべおサポヌトされおいたす。
+
+同じ `parameters`、`responses`、`dependencies`、`tags` ãªã©ãŒäœ¿ãˆãŸã™ã€‚
+
+/// tip | è±†çŸ¥è­˜
+
+この䟋では倉数名は `router` ã§ã™ãŒã€ä»»æ„ã®åå‰ã‚’付けられたす。
+
+///
+
+この `APIRouter` ã‚’メむンの `FastAPI` ã‚¢ãƒ—リに取り蟌みたすが、その前に䟝存関係ず別の `APIRouter` ã‚’確認したす。
+
+## äŸå­˜é–¢ä¿‚ { #dependencies }
+
+アプリケヌションの耇数箇所で䜿う䟝存関係が必芁になりたす。
+
+そのため、専甚の `dependencies` ãƒ¢ã‚žãƒ¥ãƒŒãƒ«ïŒˆ`app/dependencies.py`に眮きたす。
+
+ここではカスタムヘッダヌ `X-Token` ã‚’読む簡単な䟝存関係を䜿いたす:
+
+{* ../../docs_src/bigger_applications/app_an_py310/dependencies.py hl[3,6:8] title["app/dependencies.py"] *}
+
+/// tip | è±†çŸ¥è­˜
+
+この䟋を簡単にするために架空のヘッダヌを䜿っおいたす。
+
+しかし実際には、組み蟌みの [Security utilities](security/index.md){.internal-link target=_blank} ã‚’䜿う方が良い結果になりたす。
+
+///
+
+## åˆ¥ãƒ¢ã‚žãƒ¥ãƒŒãƒ«ã§ã® `APIRouter` { #another-module-with-apirouter }
+
+アプリケヌションの「items」を扱う゚ンドポむントが `app/routers/items.py` ã®ãƒ¢ã‚žãƒ¥ãƒŒãƒ«ã«ã‚るずしたす。
+
+次の *path operations* ãŒã‚りたす:
+
+* `/items/`
+* `/items/{item_id}`
+
+構造は `app/routers/users.py` ãšåŒã˜ã§ã™ã€‚
+
+しかし、もう少し賢くしおコヌドを少し簡朔にしたいずころです。
+
+このモゞュヌルのすべおの *path operations* ã«ã¯åŒã˜ã‚‚のがあるず分かっおいたす:
+
+* ãƒ‘スの `prefix`: `/items`
+* `tags`1぀のタグ: `items`
+* è¿œåŠ ã® `responses`
+* `dependencies`: å…ˆã»ã©äœœæˆã—た `X-Token` ã®äŸå­˜é–¢ä¿‚が必èЁ
+
+そこで、各 *path operation* ã«å€‹åˆ¥ã«è¿œåŠ ã™ã‚‹ä»£ã‚ã‚Šã«ã€ã“ã‚Œã‚‰ã‚’ `APIRouter` ã«è¿œåŠ ã§ããŸã™ã€‚
+
+{* ../../docs_src/bigger_applications/app_an_py310/routers/items.py hl[5:10,16,21] title["app/routers/items.py"] *}
+
+各 *path operation* ã®ãƒ‘スは次のように `/` ã§å§‹ã‚ã‚‹å¿…芁があるため:
+
+```Python hl_lines="1"
+@router.get("/{item_id}")
+async def read_item(item_id: str):
+    ...
+```
+
+...prefix ã®æœ«å°Ÿã« `/` ã‚’含めおはいけたせん。
+
+この堎合の prefix ã¯ `/items` ã§ã™ã€‚
+
+たた、`tags` ã®ãƒªã‚¹ãƒˆã‚„远加の `responses` ã‚’、このルヌタヌに含たれるすべおの *path operations* ã«é©ç”šã™ã‚‹ã‚ˆã†è¿œåŠ ã§ããŸã™ã€‚
+
+さらに `dependencies` ã®ãƒªã‚¹ãƒˆã‚’远加できたす。これはこのルヌタヌ内のすべおの *path operations* ã«è¿œåŠ ã•ã‚Œã€ãã‚Œã‚‰ãžã®å„ãƒªã‚¯ã‚šã‚¹ãƒˆã”ãšã«å®Ÿè¡Œãƒ»è§£æ±ºã•ã‚ŒãŸã™ã€‚
+
+/// tip | è±†çŸ¥è­˜
+
+[*path operation ãƒ‡ã‚³ãƒ¬ãƒŒã‚¿*の䟝存関係](dependencies/dependencies-in-path-operation-decorators.md){.internal-link target=_blank} ãšåŒæ§˜ã«ã€*path operation é–¢æ•°*には倀は枡されない点に泚意しおください。
+
+///
+
+最終的に、item ã®ãƒ‘スは次のずおりになりたす:
+
+* `/items/`
+* `/items/{item_id}`
+
+...意図したずおりです。
+
+* ã“れらには、文字列 `"items"` ã‚’1぀含むタグのリストが付きたす。
+    * ã“れらの「タグ」は、OpenAPI ã‚’䜿う自動むンタラクティブドキュメントで特に有甚です。
+* ã™ã¹ãŠã«äº‹å‰å®šçŸ©ã—た `responses` ãŒå«ãŸã‚ŒãŸã™ã€‚
+* ã“れらすべおの *path operations* ã§ã¯ã€å®Ÿè¡Œå‰ã« `dependencies` ã®ãƒªã‚¹ãƒˆãŒè©•䟡・実行されたす。
+    * ç‰¹å®šã® *path operation* ã«äŸå­˜é–¢ä¿‚を宣蚀した堎合は、**それらも実行されたす**。
+    * ãƒ«ãƒŒã‚¿ãƒŒã®äŸå­˜é–¢ä¿‚が先に実行され、その埌に[デコレヌタ内の `dependencies`](dependencies/dependencies-in-path-operation-decorators.md){.internal-link target=_blank}、次に通垞のパラメヌタ䟝存関係が続きたす。
+    * [`scopes` ã‚’䌎う `Security` äŸå­˜é–¢ä¿‚](../advanced/security/oauth2-scopes.md){.internal-link target=_blank} ã‚’远加するこずもできたす。
+
+/// tip | è±†çŸ¥è­˜
+
+`APIRouter` ã« `dependencies` ã‚’眮くこずで、*path operations* ã®ã‚°ãƒ«ãƒŒãƒ—党䜓に認蚌を芁求する、ずいった甚途に䜿えたす。個々の *path operation* ã«äŸå­˜é–¢ä¿‚を远加しおいなくおも構いたせん。
+
+///
+
+/// check | ç¢ºèª
+
+`prefix`、`tags`、`responses`、`dependencies` ã®å„パラメヌタはほかの倚くのケヌスず同様にコヌド重耇を避けるための **FastAPI** ã®æ©Ÿèƒœã§ã™ã€‚
+
+///
+
+### äŸå­˜é–¢ä¿‚をむンポヌト { #import-the-dependencies }
+
+このコヌドはモゞュヌル `app.routers.items`ファむル `app/routers/items.py`内にありたす。
+
+そしお䟝存関係の関数はモゞュヌル `app.dependencies`ファむル `app/dependencies.py`から取埗する必芁がありたす。
+
+そこで、䟝存関係には `..` ã‚’䜿った盞察むンポヌトを䜿いたす:
+
+{* ../../docs_src/bigger_applications/app_an_py310/routers/items.py hl[3] title["app/routers/items.py"] *}
+
+#### ç›žå¯Ÿã‚€ãƒ³ãƒãƒŒãƒˆã®ä»•組み { #how-relative-imports-work }
+
+/// tip | è±†çŸ¥è­˜
+
+むンポヌトの仕組みを十分理解しおいる堎合は、次の節に進んでください。
+
+///
+
+ドット1぀ `.` ã‚’䜿うず、次のような意味になりたす:
+
+```Python
+from .dependencies import get_token_header
+```
+
+意味:
+
+* ã“のモゞュヌル`app/routers/items.py`が存圚する同じパッケヌゞディレクトリ `app/routers/`から開始し...
+* ãƒ¢ã‚žãƒ¥ãƒŒãƒ« `dependencies`仮想的には `app/routers/dependencies.py`を探し...
+* ãã“から関数 `get_token_header` ã‚’むンポヌトする。
+
+しかしそのファむルは存圚せず、実際の䟝存関係は `app/dependencies.py` ã«ã‚りたす。
+
+アプリファむル構成がどうなっおいたかを思い出しおください:
+
+<img src="/img/tutorial/bigger-applications/package.drawio.svg">
+
+---
+
+ドット2぀ `..` ã‚’䜿うず、次のようになりたす:
+
+```Python
+from ..dependencies import get_token_header
+```
+
+意味:
+
+* ã“のモゞュヌル`app/routers/items.py`が存圚する同じパッケヌゞディレクトリ `app/routers/`から開始し...
+* èŠªãƒ‘ãƒƒã‚±ãƒŒã‚žïŒˆãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒª `app/`に移動し...
+* ãã“でモゞュヌル `dependencies`ファむル `app/dependencies.py`を探し...
+* ãã“から関数 `get_token_header` ã‚’むンポヌトする。
+
+これは正しく動䜜したす ðŸŽ‰
+
+---
+
+同様に、ドット3぀ `...` ã‚’䜿うず:
+
+```Python
+from ...dependencies import get_token_header
+```
+
+意味:
+
+* ã“のモゞュヌル`app/routers/items.py`が存圚する同じパッケヌゞディレクトリ `app/routers/`から開始し...
+* èŠªãƒ‘ãƒƒã‚±ãƒŒã‚žïŒˆãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒª `app/`に移動し...
+* ã•らにその芪パッケヌゞに移動しようずしたす`app` ã¯æœ€äžŠäœãªã®ã§èŠªãƒ‘ãƒƒã‚±ãƒŒã‚žã¯ã‚ã‚ŠãŸã›ã‚“ ðŸ˜±ïŒ‰...
+* ãã“でモゞュヌル `dependencies`ファむル `app/dependencies.py`を探し...
+* ãã“から関数 `get_token_header` ã‚’むンポヌトする。
+
+これは `app/` ã‚ˆã‚ŠäžŠäœã®ãƒ‘ッケヌゞ独自の `__init__.py` ã‚’持぀を参照するこずになりたす。しかしそのようなものはありたせん。そのため、この䟋でぱラヌになりたす。🚚
+
+これで仕組みが分かったので、どれほど耇雑でも自分のアプリで盞察むンポヌトを䜿えたす。🀓
+
+### ã‚«ã‚¹ã‚¿ãƒ ã® `tags`、`responses`、`dependencies` ã‚’远加 { #add-some-custom-tags-responses-and-dependencies }
+
+`APIRouter` ã«è¿œåŠ æžˆã¿ãªã®ã§ã€å„ *path operation* ã« `/items` ã® prefix ã‚„ `tags=["items"]` ã‚’付けおいたせん。
+
+しかし、特定の *path operation* ã«é©ç”šã•れる _远加の_ `tags` ã‚„、その *path operation* å›ºæœ‰ã®è¿œåŠ ã® `responses` ã‚’加えるこずはできたす:
+
+{* ../../docs_src/bigger_applications/app_an_py310/routers/items.py hl[30:31] title["app/routers/items.py"] *}
+
+/// tip | è±†çŸ¥è­˜
+
+この最埌の *path operation* ã¯ã€`["items", "custom"]` ã®ã‚¿ã‚°ã®çµ„み合わせを持ちたす。
+
+たたドキュメントには `404` ãš `403` ã®äž¡æ–¹ã®ãƒ¬ã‚¹ãƒãƒ³ã‚¹ãŒè¡šç€ºã•れたす。
+
+///
+
+## ãƒ¡ã‚€ãƒ³ã® `FastAPI` { #the-main-fastapi }
+
+次に、`app/main.py` ã®ãƒ¢ã‚žãƒ¥ãƒŒãƒ«ã‚’芋おいきたす。
+
+ここでクラス `FastAPI` ã‚’むンポヌトしお䜿甚したす。
+
+これはすべおをたずめるアプリケヌションのメむンファむルになりたす。
+
+そしお倧郚分のロゞックはそれぞれの専甚モゞュヌルに眮かれるため、メむンファむルはかなりシンプルになりたす。
+
+### `FastAPI` ã®ã‚€ãƒ³ãƒãƒŒãƒˆ { #import-fastapi }
+
+通垞どおり `FastAPI` ã‚¯ãƒ©ã‚¹ã‚’むンポヌトしお䜜成したす。
+
+さらに、各 `APIRouter` ã®äŸå­˜é–¢ä¿‚ず組み合わされる[グロヌバル䟝存関係](dependencies/global-dependencies.md){.internal-link target=_blank}も宣蚀できたす:
+
+{* ../../docs_src/bigger_applications/app_an_py310/main.py hl[1,3,7] title["app/main.py"] *}
+
+### `APIRouter` ã®ã‚€ãƒ³ãƒãƒŒãƒˆ { #import-the-apirouter }
+
+次に、`APIRouter` ã‚’持぀他のサブモゞュヌルをむンポヌトしたす:
+
+{* ../../docs_src/bigger_applications/app_an_py310/main.py hl[4:5] title["app/main.py"] *}
+
+`app/routers/users.py` ãš `app/routers/items.py` ã¯åŒã˜ Python ãƒ‘ッケヌゞ `app` ã®ã‚µãƒ–モゞュヌルなので、1぀のドット `.` ã‚’䜿った「盞察むンポヌト」でむンポヌトできたす。
+
+### ã‚€ãƒ³ãƒãƒŒãƒˆã®å‹•䜜 { #how-the-importing-works }
+
+次の郚分:
+
+```Python
+from .routers import items, users
+```
+
+は次の意味です:
+
+* ã“のモゞュヌル`app/main.py`が存圚する同じパッケヌゞディレクトリ `app/`から開始し...
+* ã‚µãƒ–パッケヌゞ `routers`ディレクトリ `app/routers/`を探し...
+* ãã“からサブモゞュヌル `items`ファむル `app/routers/items.py`ず `users`ファむル `app/routers/users.py`をむンポヌトする...
+
+モゞュヌル `items` ã«ã¯å€‰æ•° `router``items.router`がありたす。これは `app/routers/items.py` ã§äœœæˆã—た `APIRouter` ã‚ªãƒ–ゞェクトず同じものです。
+
+モゞュヌル `users` ã«ã€ã„おも同様です。
+
+次のようにむンポヌトするこずもできたす:
+
+```Python
+from app.routers import items, users
+```
+
+/// info | æƒ…å ±
+
+最初のバヌゞョンは「盞察むンポヌト」です:
+
+```Python
+from .routers import items, users
+```
+
+2぀目のバヌゞョンは「絶察むンポヌト」です:
+
+```Python
+from app.routers import items, users
+```
+
+Python ã®ãƒ‘ッケヌゞずモゞュヌルに぀いお詳しくは、<a href="https://docs.python.org/3/tutorial/modules.html" class="external-link" target="_blank">公匏の Python ãƒ¢ã‚žãƒ¥ãƒŒãƒ«ã«é–¢ã™ã‚‹ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ</a>をご芧ください。
+
+///
+
+### åå‰è¡çªã®å›žé¿ { #avoid-name-collisions }
+
+サブモゞュヌル `items` ã®å€‰æ•° `router` ã ã‘をむンポヌトするのではなく、サブモゞュヌル自䜓を盎接むンポヌトしおいたす。
+
+これは、サブモゞュヌル `users` ã«ã‚‚ `router` ãšã„う倉数があるためです。
+
+もし次のように続けおむンポヌトした堎合:
+
+```Python
+from .routers.items import router
+from .routers.users import router
+```
+
+`users` ã® `router` ãŒ `items` ã®ã‚‚のを䞊曞きしおしたい、同時に䞡方を䜿えなくなりたす。
+
+同じファむルで䞡方を䜿えるようにするため、サブモゞュヌルを盎接むンポヌトしたす:
+
+{* ../../docs_src/bigger_applications/app_an_py310/main.py hl[5] title["app/main.py"] *}
+
+### `users` ãš `items` ã® `APIRouter` ã‚’取り蟌む { #include-the-apirouters-for-users-and-items }
+
+では、サブモゞュヌル `users` ãš `items` ã‹ã‚‰ `router` ã‚’取り蟌みたす:
+
+{* ../../docs_src/bigger_applications/app_an_py310/main.py hl[10:11] title["app/main.py"] *}
+
+/// info | æƒ…å ±
+
+`users.router` ã¯ã€ãƒ•ァむル `app/routers/users.py` å†…の `APIRouter` ã‚’含みたす。
+
+`items.router` ã¯ã€ãƒ•ァむル `app/routers/items.py` å†…の `APIRouter` ã‚’含みたす。
+
+///
+
+`app.include_router()` ã‚’䜿っお、各 `APIRouter` ã‚’メむンの `FastAPI` ã‚¢ãƒ—リケヌションに远加できたす。
+
+そのルヌタヌのすべおのルヌトがアプリに含たれたす。
+
+/// note | æŠ€è¡“詳çް
+
+実際には、`APIRouter` ã§å®£èš€ã•れた各 *path operation* ã”ずに内郚的に *path operation* ãŒäœœæˆã•れたす。
+
+぀たり裏偎では、すべおが同じ単䞀のアプリであるかのように動䜜したす。
+
+///
+
+/// check | ç¢ºèª
+
+ルヌタヌを取り蟌んでもパフォヌマンスを心配する必芁はありたせん。
+
+これは起動時にマむクロ秒で行われたす。
+
+したがっおパフォヌマンスには圱響したせん。⚡
+
+///
+
+### ã‚«ã‚¹ã‚¿ãƒ ã® `prefix`、`tags`、`responses`、`dependencies` ä»˜ãã§ `APIRouter` ã‚’取り蟌む { #include-an-apirouter-with-a-custom-prefix-tags-responses-and-dependencies }
+
+あなたの組織から `app/internal/admin.py` ãƒ•ァむルが提䟛されたずしたしょう。
+
+そこには、組織が耇数プロゞェクトで共有しおいる管理甚の *path operations* ã‚’持぀ `APIRouter` ãŒå«ãŸã‚ŒãŠã„たす。
+
+この䟋ではずおもシンプルですが、組織内の他プロゞェクトず共有しおいるため、`APIRouter` è‡ªäœ“を盎接倉曎しお `prefix`、`dependencies`、`tags` ãªã©ã‚’远加できないずしたす:
+
+{* ../../docs_src/bigger_applications/app_an_py310/internal/admin.py hl[3] title["app/internal/admin.py"] *}
+
+それでも、`APIRouter` ã‚’取り蟌む際にカスタムの `prefix` ã‚’蚭定しおすべおの *path operations* ã‚’ `/admin` ã§å§‹ã‚ãŸã„、既存の `dependencies` ã§ä¿è­·ã—たい、さらに `tags` ãš `responses` ã‚‚含めたいずしたす。
+
+元の `APIRouter` ã‚’倉曎するこずなく、`app.include_router()` ã«ã“れらのパラメヌタを枡すこずで宣蚀できたす:
+
+{* ../../docs_src/bigger_applications/app_an_py310/main.py hl[14:17] title["app/main.py"] *}
+
+このようにするず、元の `APIRouter` ã¯æœªå€‰æ›Žã®ãŸãŸãªã®ã§ã€åŒã˜ `app/internal/admin.py` ãƒ•ァむルを組織内の他プロゞェクトずも匕き続き共有できたす。
+
+結果ずしお、このアプリ内では `admin` ãƒ¢ã‚žãƒ¥ãƒŒãƒ«ã®å„ *path operation* ãŒæ¬¡ã®ã‚ˆã†ã«ãªã‚ŠãŸã™:
+
+* prefix ã¯ `/admin`
+* ã‚¿ã‚°ã¯ `admin`
+* äŸå­˜é–¢ä¿‚は `get_token_header`
+* ãƒ¬ã‚¹ãƒãƒ³ã‚¹ã¯ `418` ðŸµ
+
+ただし、これはこのアプリ内のその `APIRouter` ã«ã®ã¿åœ±éŸ¿ã—、それを䜿甚する他のコヌドには圱響したせん。
+
+䟋えば、他のプロゞェクトでは同じ `APIRouter` ã‚’別の認蚌方匏で䜿うこずもできたす。
+
+### *path operation* ã‚’远加 { #include-a-path-operation }
+
+`FastAPI` ã‚¢ãƒ—リに *path operations* ã‚’盎接远加するこずもできたす。
+
+ここではできるこずを瀺すためだけに远加したす ðŸ€·:
+
+{* ../../docs_src/bigger_applications/app_an_py310/main.py hl[21:23] title["app/main.py"] *}
+
+そしお、`app.include_router()` ã§è¿œåŠ ã—ãŸã»ã‹ã® *path operations* ãšäž€ç·’に正しく動䜜したす。
+
+/// info | éžåžžã«æŠ€è¡“的な詳çް
+
+泚蚘: ã“れは非垞に技術的な詳现で、**読み飛ばしお構いたせん**。
+
+---
+
+`APIRouter` ã¯ã€Œãƒžã‚Šãƒ³ãƒˆã€ã•れおおらず、アプリケヌションの他郚分から分離されおいたせん。
+
+これは、それらの *path operations* ã‚’ OpenAPI ã‚¹ã‚­ãƒŒãƒžã‚„ナヌザヌむンタヌフェヌスに含めたいからです。
+
+完党に分離しお独立に「マりント」できないため、*path operations* ã¯ç›ŽæŽ¥å–り蟌たれるのではなく「クロヌン再䜜成」されたす。
+
+///
+
+## è‡ªå‹•APIドキュメントの確認 { #check-the-automatic-api-docs }
+
+アプリを実行したす:
+
+<div class="termy">
+
+```console
+$ fastapi dev app/main.py
+
+<span style="color: green;">INFO</span>:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+```
+
+</div>
+
+そしお <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a> ã‚’開きたす。
+
+すべおのサブモゞュヌル由来のパスを含む自動 API ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãŒè¡šç€ºã•れ、正しいパスおよび prefixず正しいタグが䜿われおいるのが分かりたす:
+
+<img src="/img/tutorial/bigger-applications/image01.png">
+
+## åŒã˜ãƒ«ãƒŒã‚¿ãƒŒã‚’異なる `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* ã‚‚含たれるようにしおください。
index 4ce77cc0dc4dbfb08532f89300598b7d709632c7..0f81f4c46a7665aca3edc3976543afea29fc4ee4 100644 (file)
 q: str | None = None
 ```
 
-たたはPython 3.10以䞊では:
-
-```Python
-q: Union[str, None] = None
-```
-
 äŸ‹ãˆã°:
 
 {* ../../docs_src/body_multiple_params/tutorial004_an_py310.py hl[28] *}
index 24eb302082d728819a8cd074fd49d496857c040b..ab78b8f86ac6866b07f3cb6c9d0978866f6a3b1d 100644 (file)
@@ -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 | è±†çŸ¥è­˜
 
index e888d5a0d9eb14f396f47aef4741477713c9fb50..310530c6901a1a1fcd559c9bf588d1704896500e 100644 (file)
@@ -68,7 +68,7 @@
 
 ãŸãšã‚ã‚‹ãšã€éƒšåˆ†çš„な曎新を適甚するには、次のようにしたす:
 
-* (オプションで)`PUT`の代わりに`PATCH`を䜿甚したす。
+* (オプションで)`PATCH`の代わりに`PUT`を䜿甚したす。
 * ä¿å­˜ã•れおいるデヌタを取埗したす。
 * ãã®ãƒ‡ãƒŒã‚¿ã‚’Pydanticモデルにいれたす。
 * å…¥åŠ›ãƒ¢ãƒ‡ãƒ«ã‹ã‚‰ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆå€€ã‚’å«ãŸãªã„`dict`を生成したす`exclude_unset`を䜿甚したす。
index a219faed046babb674fc6d67f7da88b56ae85f06..7c939bdfa00a1792c7029f7c992d8b5e9ad15a5a 100644 (file)
@@ -74,7 +74,7 @@ APIはほずんどの堎合 **レスポンス** ãƒœãƒ‡ã‚£ã‚’送信する必èЁ
 * å—け取ったデヌタをパラメヌタ `item` ã«æž¡ã—たす。
     * é–¢æ•°å†…で `Item` åž‹ãšã—お宣蚀したため、すべおの属性ずその型に぀いお、゚ディタサポヌト補完なども利甚できたす。
 * ãƒ¢ãƒ‡ãƒ«å‘けの <a href="https://json-schema.org" class="external-link" target="_blank">JSON Schema</a> å®šçŸ©ã‚’生成したす。プロゞェクトにずっお意味があるなら、他の堎所でも奜きなように利甚できたす。
-* ãã‚Œã‚‰ã®ã‚¹ã‚­ãƒŒãƒžã¯ç”Ÿæˆã•れるOpenAPIスキヌマの䞀郚ずなり、自動ドキュメントの <abbr title="User Interfaces">UIs</abbr> ã§äœ¿ç”šã•れたす。
+* ãã‚Œã‚‰ã®ã‚¹ã‚­ãƒŒãƒžã¯ç”Ÿæˆã•れるOpenAPIスキヌマの䞀郚ずなり、自動ドキュメントの <abbr title="User Interfaces - ãƒŠãƒŒã‚¶ãƒŒã‚€ãƒ³ã‚¿ãƒŒãƒ•ェヌス">UIs</abbr> ã§äœ¿ç”šã•れたす。
 
 ## è‡ªå‹•ドキュメント { #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` ãšã„うデフォルト倀があるため、必須ではないこずを認識したす。
 
 ã—かし、型アノテヌションを远加するず、゚ディタがより良いサポヌトを提䟛し、゚ラヌを怜出できるようになりたす。
 
index 10ffb2566e6043e8d09d1f92995992de081f4af6..89ae4243889f1936867617135cdcdcd257749cd0 100644 (file)
@@ -46,7 +46,7 @@
 
 ç‰¹å®šã®ïŒˆã‚たり䞀般的ではないかもしれないケヌスで、受け付けるクッキヌを**制限**する必芁があるかもしれたせん。
 
-あなたのAPIは独自の <abbr title="念のためですが、これはゞョヌクです。クッキヌ同意ずは関係ありたせんが、APIでさえ䞍適切なクッキヌを拒吊できるずは愉快ですね。クッキヌでも食べおください。🍪 ïŒˆåŽŸæ–‡: This is a joke, just in case. It has nothing to do with cookie consents, but it's funny that even the API can now reject the poor cookies. Have a cookie. ðŸªïŒ‰">クッキヌ同意</abbr> ã‚’管理する胜力を持っおいたす。 ðŸ€ªðŸª
+あなたのAPIは独自の <dfn title="念のためですが、これはゞョヌクです。クッキヌ同意ずは関係ありたせんが、APIでさえ今やかわいそうなクッキヌを拒吊できるのは面癜いですね。クッキヌでもどうぞ。🍪">クッキヌ同意</dfn> ã‚’管理する胜力を持っおいたす。 ðŸ€ªðŸª
 
 Pydanticのモデルの Configuration ã‚’利甚しお、 `extra` ãƒ•ィヌルドを `forbid` ãšã™ã‚‹ã“ずができたす。
 
@@ -54,9 +54,9 @@ Pydanticのモデルの Configuration ã‚’利甚しお、 `extra` ãƒ•ィヌルド
 
 ã‚‚しクラむアントが**䜙分なクッキヌ**を送ろうずするず、**゚ラヌ**レスポンスが返されたす。
 
-<abbr title="これもゞョヌクです。気にしないでください。クッキヌのお䟛にコヌヒヌでも飲んでください。☕ ïŒˆåŽŸæ–‡: This is another joke. Don't pay attention to me. Have some coffee for your cookie. â˜•">どうせAPIに拒吊されるのに</abbr>あなたの同意を埗ようず粟䞀杯努力する可哀想なクッキヌバナヌたち... ðŸª
+<dfn title="これもゞョヌクです。気にしないでください。クッキヌのお䟛にコヌヒヌでもどうぞ。☕">どうせAPIに拒吊されるのに</dfn>あなたの同意を埗ようず粟䞀杯努力する可哀想なクッキヌバナヌたち... ðŸª
 
-䟋えば、クラむアントがクッキヌ `santa_tracker` ã‚’ `good-list-please` ãšã„う倀で送ろうずするず、`santa_tracker` ãšã„う <abbr title="サンタはクッキヌ䞍足を良しずはしないでしょう。🎅 ã¯ã„、クッキヌゞョヌクはもう止めおおきたす。原文: Santa disapproves the lack of cookies. ðŸŽ… Okay, no more cookie jokes.">クッキヌが蚱可されおいない</abbr> ã“ずを通知する**゚ラヌ**レスポンスが返されたす:
+䟋えば、クラむアントがクッキヌ `santa_tracker` ã‚’ `good-list-please` ãšã„う倀で送ろうずするず、`santa_tracker` ãšã„う <dfn title="サンタはクッキヌ䞍足を良しずしたせん。🎅 ã¯ã„、クッキヌゞョヌクはこれでおしたい。">クッキヌが蚱可されおいない</dfn> ã“ずを通知する**゚ラヌ**レスポンスが返されたす:
 
 ```json
 {
@@ -73,4 +73,4 @@ Pydanticのモデルの Configuration ã‚’利甚しお、 `extra` ãƒ•ィヌルド
 
 ## ãŸãšã‚ { #summary }
 
-**FastAPI**では、<abbr title="垰っおしたう前に最埌のクッキヌをどうぞ。🍪 ïŒˆåŽŸæ–‡: Have a last cookie before you go. ðŸªïŒ‰">**クッキヌ**</abbr>を宣蚀するために、**Pydanticモデル**を䜿甚できたす。😎
+**FastAPI**では、<dfn title="垰る前に最埌のクッキヌをどうぞ。🍪">**クッキヌ**</dfn>を宣蚀するために、**Pydanticモデル**を䜿甚できたす。😎
index a1dfe8e6243a490b2d9ca17dba7d78c4645fd7a3..5136a7fd5fd1c92f70670a8ec59bcaf95ac8fd5b 100644 (file)
@@ -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` å®Ÿè£…で䜿甚されるデフォルトのパラメヌタはデフォルトで制限が厳しいため、ブラりザがクロスドメむンのコンテキストでそれらを䜿甚できるようにするには、特定のオリゞン、メ゜ッド、たたはヘッダヌを明瀺的に有効にする必芁がありたす。
index 8fe5b2d5d3a35f74749d4e9790e0e8534e7b2ed9..9d88ba42b59a3bc78a50e295d3a12b38e242f1b5 100644 (file)
@@ -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 }
 
index 3cb1fe73d99513c78b33bfbe18659e98230e38f5..21de5b9783d5c1648d6fde86d0fcdbe76018898f 100644 (file)
@@ -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 | è±†çŸ¥è­˜
 
index 2051afc05b98c632a60a94eeb212bb320af05797..d0a2b167210a32e8666eb54f38d2e2aa8cb4941e 100644 (file)
@@ -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 é–¢æ•°*には枡されたせん。
 
 
 ã“れらはリク゚ストの芁件ヘッダヌのようなものやその他のサブ䟝存関係を宣蚀できたす:
 
-{* ../../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 }
 
index 8095114c3f71a12983d2a0c8f56de43a68a88a18..380dcb536bd87847accf6a4d555b333ba8c1d155 100644 (file)
@@ -1,6 +1,6 @@
 # `yield`を持぀䟝存関係 { #dependencies-with-yield }
 
-FastAPIは、いく぀かの<abbr title='sometimes also called "exit code", "cleanup code", "teardown code", "closing code", "context manager exit code", etc. â€“ ã€Œexit code」「cleanup code」「teardown code」「closing code」「context manager exit code」などず呌ばれるこずもありたす。'>終了埌の远加のステップ</abbr>を行う䟝存関係をサポヌトしおいたす。
+FastAPIは、いく぀かの<dfn title="「終了コヌド」「クリヌンアップコヌド」「ティアダりンコヌド」「クロヌズコヌド」「コンテキストマネヌゞャの終了コヌド」などず呌ばれるこずもありたす">終了埌の远加のステップ</dfn>を行う䟝存関係をサポヌトしおいたす。
 
 ã“れを行うには、`return`の代わりに`yield`を䜿い、その埌に远加のステップコヌドを曞きたす。
 
@@ -29,15 +29,15 @@ FastAPIは、いく぀かの<abbr title='sometimes also called "exit code", "cle
 
 ãƒ¬ã‚¹ãƒãƒ³ã‚¹ã‚’䜜成する前に、`yield`文より前のコヌドおよび`yield`文を含むが実行されたす:
 
-{* ../../docs_src/dependencies/tutorial007_py39.py hl[2:4] *}
+{* ../../docs_src/dependencies/tutorial007_py310.py hl[2:4] *}
 
 ç”Ÿæˆã•れた倀は、*path operations*や他の䟝存関係に泚入されるものです:
 
-{* ../../docs_src/dependencies/tutorial007_py39.py hl[4] *}
+{* ../../docs_src/dependencies/tutorial007_py310.py hl[4] *}
 
 `yield`文に続くコヌドは、レスポンスの埌に実行されたす:
 
-{* ../../docs_src/dependencies/tutorial007_py39.py hl[5:6] *}
+{* ../../docs_src/dependencies/tutorial007_py310.py hl[5:6] *}
 
 /// tip | è±†çŸ¥è­˜
 
@@ -57,7 +57,7 @@ FastAPIは、いく぀かの<abbr title='sometimes also called "exit code", "cle
 
 åŒæ§˜ã«ã€`finally`を甚いお䟋倖があったかどうかにかかわらず、終了ステップを確実に実行するこずができたす。
 
-{* ../../docs_src/dependencies/tutorial007_py39.py hl[3,5] *}
+{* ../../docs_src/dependencies/tutorial007_py310.py hl[3,5] *}
 
 ## `yield`を持぀サブ䟝存関係 { #sub-dependencies-with-yield }
 
@@ -67,7 +67,7 @@ FastAPIは、いく぀かの<abbr title='sometimes also called "exit code", "cle
 
 äŸ‹ãˆã°ã€`dependency_c`は`dependency_b`に、そしお`dependency_b`は`dependency_a`に䟝存するこずができたす:
 
-{* ../../docs_src/dependencies/tutorial008_an_py39.py hl[6,14,22] *}
+{* ../../docs_src/dependencies/tutorial008_an_py310.py hl[6,14,22] *}
 
 ãã—お、それらはすべお`yield`を䜿甚するこずができたす。
 
@@ -75,7 +75,7 @@ FastAPIは、いく぀かの<abbr title='sometimes also called "exit code", "cle
 
 ãã—お、`dependency_b`は`dependency_a`ここでは`dep_a`ずいう名前の倀を終了コヌドで利甚できるようにする必芁がありたす。
 
-{* ../../docs_src/dependencies/tutorial008_an_py39.py hl[18:19,26:27] *}
+{* ../../docs_src/dependencies/tutorial008_an_py310.py hl[18:19,26:27] *}
 
 åŒæ§˜ã«ã€`yield`を持぀䟝存関係ず`return`を持぀他の䟝存関係をいく぀か持ち、それらの䞀郚が他の䞀郚に䟝存するようにもできたす。
 
@@ -109,7 +109,7 @@ FastAPIは、いく぀かの<abbr title='sometimes also called "exit code", "cle
 
 ///
 
-{* ../../docs_src/dependencies/tutorial008b_an_py39.py hl[18:22,31] *}
+{* ../../docs_src/dependencies/tutorial008b_an_py310.py hl[18:22,31] *}
 
 äŸ‹å€–をキャッチしお、それに基づいおカスタムレスポンスを䜜成したい堎合は、[カスタム䟋倖ハンドラ](../handling-errors.md#install-custom-exception-handlers){.internal-link target=_blank}を䜜成しおください。
 
@@ -117,7 +117,7 @@ FastAPIは、いく぀かの<abbr title='sometimes also called "exit code", "cle
 
 `yield`を持぀䟝存関係で`except`を䜿っお䟋倖をキャッチし、それを再床raiseしないたたは新しい䟋倖をraiseしない堎合、通垞のPythonず同じように、FastAPIは䟋倖があったこずに気づけたせん:
 
-{* ../../docs_src/dependencies/tutorial008c_an_py39.py hl[15:16] *}
+{* ../../docs_src/dependencies/tutorial008c_an_py310.py hl[15:16] *}
 
 ã“の堎合、`HTTPException`やそれに類するものをraiseしおいないためクラむアントには適切に*HTTP 500 Internal Server Error*レスポンスが返りたすが、サヌバヌには**ログが䞀切残らず**、䜕が゚ラヌだったのかを瀺す他の手がかりもありたせん。 ðŸ˜±
 
@@ -127,7 +127,7 @@ FastAPIは、いく぀かの<abbr title='sometimes also called "exit code", "cle
 
 `raise`を䜿うず同じ䟋倖を再raiseできたす:
 
-{* ../../docs_src/dependencies/tutorial008d_an_py39.py hl[17] *}
+{* ../../docs_src/dependencies/tutorial008d_an_py310.py hl[17] *}
 
 ã“れでクラむアントは同じ*HTTP 500 Internal Server Error*レスポンスを受け取りたすが、サヌバヌのログにはカスタムの`InternalError`が残りたす。 ðŸ˜Ž
 
@@ -190,7 +190,7 @@ participant tasks as Background tasks
 
 ã—かし、*path operation é–¢æ•°*からreturnした埌に䟝存関係を䜿う必芁がないず分かっおいる堎合は、`Depends(scope="function")`を䜿っお、**レスポンスが送信される前**に、*path operation é–¢æ•°*のreturn埌に䟝存関係を閉じるべきだずFastAPIに䌝えられたす。
 
-{* ../../docs_src/dependencies/tutorial008e_an_py39.py hl[12,16] *}
+{* ../../docs_src/dependencies/tutorial008e_an_py310.py hl[12,16] *}
 
 `Depends()`は、以䞋のいずれかを取る`scope`パラメヌタを受け取りたす:
 
@@ -268,7 +268,7 @@ Pythonでは、<a href="https://docs.python.org/3/reference/datamodel.html#conte
 
 ãŸãŸã€äŸå­˜é–¢æ•°ã®äž­ã§`with`や`async with`文を䜿甚するこずによっお`yield`を持぀ **FastAPI** ã®äŸå­˜é–¢ä¿‚の䞭でそれらを䜿甚するこずができたす:
 
-{* ../../docs_src/dependencies/tutorial010_py39.py hl[1:9,13] *}
+{* ../../docs_src/dependencies/tutorial010_py310.py hl[1:9,13] *}
 
 /// tip | è±†çŸ¥è­˜
 
diff --git a/docs/ja/docs/tutorial/dependencies/global-dependencies.md b/docs/ja/docs/tutorial/dependencies/global-dependencies.md
new file mode 100644 (file)
index 0000000..284da21
--- /dev/null
@@ -0,0 +1,15 @@
+# ã‚°ãƒ­ãƒŒãƒãƒ«ãªäŸå­˜é–¢ä¿‚ { #global-dependencies }
+
+アプリケヌションの皮類によっおは、アプリ党䜓に䟝存関係を远加したい堎合がありたす。
+
+[`dependencies` ã‚’ path operation ã®ãƒ‡ã‚³ãƒ¬ãƒŒã‚¿ã«è¿œåŠ ](dependencies-in-path-operation-decorators.md){.internal-link target=_blank}できるのず同様に、`FastAPI` ã‚¢ãƒ—リケヌション自䜓にも远加できたす。
+
+その堎合、アプリケヌション内のすべおの path operation ã«é©ç”šã•れたす:
+
+{* ../../docs_src/dependencies/tutorial012_an_py310.py hl[17] *}
+
+たた、[`dependencies` ã‚’ path operation ã®ãƒ‡ã‚³ãƒ¬ãƒŒã‚¿ã«è¿œåŠ ](dependencies-in-path-operation-decorators.md){.internal-link target=_blank}する節で説明した考え方はすべお匕き続き圓おはたりたすが、この堎合はアプリ内のすべおの path operation ã«å¯Ÿã—お適甚されたす。
+
+## path operation ã®ã‚°ãƒ«ãƒŒãƒ—に察する䟝存関係 { #dependencies-for-groups-of-path-operations }
+
+埌で、耇数ファむルを含む倧芏暡アプリケヌションの構成方法[倧芏暡アプリケヌション - è€‡æ•°ãƒ•ァむル](../../tutorial/bigger-applications.md){.internal-link target=_blank}を読むず、path operation ã®ã‚°ãƒ«ãƒŒãƒ—に察しお 1 ã€ã® `dependencies` ãƒ‘ラメヌタを宣蚀する方法を孊びたす。
index 0561935538d371efd3eb257b398aa6fc7212a913..64cb4f79e4dc164b010506cd07cbfb5ecaf8317c 100644 (file)
@@ -1,6 +1,6 @@
 # äŸå­˜é–¢ä¿‚ { #dependencies }
 
-**FastAPI** ã¯éžåžžã«åŒ·åŠ›ã§ã‚ã‚ŠãªãŒã‚‰ç›Žæ„Ÿçš„ãª **<abbr title="also known as components, resources, providers, services, injectables">Dependency Injection</abbr>** ã‚·ã‚¹ãƒ†ãƒ ã‚’持っおいたす。
+**FastAPI** ã¯éžåžžã«åŒ·åŠ›ã§ã‚ã‚ŠãªãŒã‚‰ç›Žæ„Ÿçš„ãª **<dfn title="別名: ã‚³ãƒ³ãƒãƒŒãƒãƒ³ãƒˆã€ãƒªã‚œãƒŒã‚¹ã€ãƒ—ロバむダ、サヌビス、むンゞェクタブル">䟝存性泚入</dfn>** ã‚·ã‚¹ãƒ†ãƒ ã‚’持っおいたす。
 
 ãã‚Œã¯éžåžžã«ã‚·ãƒ³ãƒ—ルに䜿甚できるように蚭蚈されおおり、開発者が他のコンポヌネント **FastAPI** ãšçµ±åˆã™ã‚‹ã®ãŒéžåžžã«ç°¡å˜ã«ãªã‚‹ã‚ˆã†ã«èš­èšˆã•れおいたす。
 
index 007c320f331d5238a02610194d291aa77371be61..fa27781f954f8e36f6a21edd9ca9b21fc3d5b2ca 100644 (file)
@@ -58,11 +58,11 @@ query_extractor --> query_or_cookie_extractor --> read_query
 
 äŸå­˜é–¢ä¿‚の1぀が同じ*path operation*に察しお耇数回宣蚀されおいる堎合、䟋えば、耇数の䟝存関係が共通のサブ䟝存関係を持っおいる堎合、**FastAPI** ã¯ãƒªã‚¯ã‚šã‚¹ãƒˆã”ずに1回だけそのサブ䟝存関係を呌び出したす。
 
-そしお、返された倀を<abbr title="A utility/system to store computed/generated values, to reuse them instead of computing them again. â€“ èšˆç®—/生成された倀を保存し、再蚈算する代わりに再利甚するためのナヌティリティ/システム。">「キャッシュ」</abbr>に保存し、同じリク゚ストに察しお䟝存関係を䜕床も呌び出す代わりに、その特定のリク゚ストでそれを必芁ずする党おの「䟝存」に枡すこずになりたす。
+そしお、返された倀を<dfn title="蚈算/生成された倀を保存し、再蚈算する代わりに再利甚するためのナヌティリティ/システム">「キャッシュ」</dfn>に保存し、同じリク゚ストに察しお䟝存関係を䜕床も呌び出す代わりに、その特定のリク゚ストでそれを必芁ずする党おの「䟝存」に枡すこずになりたす。
 
 é«˜åºŠãªã‚·ãƒŠãƒªã‚ªã§ã¯ã€ã€Œã‚­ãƒ£ãƒƒã‚·ãƒ¥ã•れた」倀を䜿うのではなく、同じリク゚ストの各ステップおそらく耇数回で䟝存関係を呌び出す必芁があるこずがわかっおいる堎合、`Depends`を䜿甚する際に、`use_cache=False`ずいうパラメヌタを蚭定するこずができたす:
 
-//// tab | Python 3.9+
+//// tab | Python 3.10+
 
 ```Python hl_lines="1"
 async def needy_dependency(fresh_value: Annotated[str, Depends(get_value, use_cache=False)]):
@@ -71,7 +71,7 @@ async def needy_dependency(fresh_value: Annotated[str, Depends(get_value, use_ca
 
 ////
 
-//// tab | Python 3.9+ éžAnnotated
+//// tab | Python 3.10+ éžAnnotated
 
 /// tip | è±†çŸ¥è­˜
 
index 05e267818ccceceb20b7f8de1e12bcac45c4515b..951e8b35e4e049e4aca3eba9c7158056a01f7d1e 100644 (file)
@@ -1,4 +1,4 @@
-# Extra Models { #extra-models }
+# è¿œåŠ ã®ãƒ¢ãƒ‡ãƒ« { #extra-models }
 
 å…ˆã»ã©ã®äŸ‹ã«ç¶šãã€è€‡æ•°ã®é–¢é€£ãƒ¢ãƒ‡ãƒ«ã‚’持぀こずは䞀般的です。
 
@@ -8,7 +8,7 @@
 * **出力モデル**はパスワヌドをも぀べきではありたせん。
 * **デヌタベヌスモデル**はおそらくハッシュ化されたパスワヌドが必芁になるでしょう。
 
-/// danger
+/// danger | è­Šå‘Š
 
 ãƒŠãƒŒã‚¶ãƒŒã®å¹³æ–‡ã®ãƒ‘スワヌドは絶察に保存しないでください。垞に怜蚌できる「安党なハッシュ」を保存しおください。
 
 
 ///
 
-## Multiple models { #multiple-models }
+## è€‡æ•°ã®ãƒ¢ãƒ‡ãƒ« { #multiple-models }
 
 ã“こでは、パスワヌドフィヌルドをも぀モデルがどのように芋えるのか、たた、どこで䜿われるのか、倧たかなむメヌゞを玹介したす:
 
 {* ../../docs_src/extra_models/tutorial001_py310.py hl[7,9,14,20,22,27:28,31:33,38:39] *}
 
-### About `**user_in.model_dump()` { #about-user-in-model-dump }
+### `**user_in.model_dump()` ã«ã€ã„お { #about-user-in-model-dump }
 
 #### Pydanticの`.model_dump()` { #pydantics-model-dump }
 
@@ -132,13 +132,13 @@ UserInDB(
 )
 ```
 
-/// warning
+/// warning | æ³šæ„
 
 è¿œåŠ ã®ã‚µãƒãƒŒãƒˆé–¢æ•°`fake_password_hasher`ず`fake_save_user`は、デヌタの可胜な流れをデモするだけであり、もちろん本圓のセキュリティを提䟛しおいるわけではありたせん。
 
 ///
 
-## Reduce duplication { #reduce-duplication }
+## é‡è€‡ã®å‰Šæž› { #reduce-duplication }
 
 ã‚³ãƒŒãƒ‰ã®é‡è€‡ã‚’枛らすこずは、**FastAPI**の䞭栞的なアむデアの぀です。
 
@@ -156,7 +156,7 @@ UserInDB(
 
 {* ../../docs_src/extra_models/tutorial002_py310.py hl[7,13:14,17:18,21:22] *}
 
-## `Union` or `anyOf` { #union-or-anyof }
+## `Union` ãŸãŸã¯ `anyOf` { #union-or-anyof }
 
 ãƒ¬ã‚¹ãƒãƒ³ã‚¹ã‚’2぀以䞊の型の`Union`ずしお宣蚀できたす。぀たり、そのレスポンスはそれらのいずれかになりたす。
 
@@ -186,25 +186,25 @@ some_variable: PlaneItem | CarItem
 
 ã—かし、これを代入で`response_model=PlaneItem | CarItem`のように曞くず、Pythonはそれを型アノテヌションずしお解釈するのではなく、`PlaneItem`ず`CarItem`の間で**無効な操䜜**を行おうずしおしたうため、゚ラヌになりたす。
 
-## List of models { #list-of-models }
+## ãƒ¢ãƒ‡ãƒ«ã®ãƒªã‚¹ãƒˆ { #list-of-models }
 
 åŒã˜ã‚ˆã†ã«ã€ã‚ªãƒ–ゞェクトのリストのレスポンスを宣蚀できたす。
 
-そのためには、暙準のPythonの`typing.List`たたはPython 3.9以降では単に`list`を䜿甚したす:
+そのためには、暙準のPythonの`list`を䜿甚したす:
 
-{* ../../docs_src/extra_models/tutorial004_py39.py hl[18] *}
+{* ../../docs_src/extra_models/tutorial004_py310.py hl[18] *}
 
-## Response with arbitrary `dict` { #response-with-arbitrary-dict }
+## ä»»æ„ã®`dict`によるレスポンス { #response-with-arbitrary-dict }
 
 ãŸãŸã€Pydanticモデルを䜿甚せずに、キヌず倀の型だけを定矩した任意の`dict`を䜿っおレスポンスを宣蚀するこずもできたす。
 
 ã“れは、有効なフィヌルド・属性名Pydanticモデルに必芁なものを事前に知らない堎合に䟿利です。
 
-この堎合、`typing.Dict`たたはPython 3.9以降では単に`dict`を䜿甚できたす:
+この堎合、`dict`を䜿甚できたす:
 
-{* ../../docs_src/extra_models/tutorial005_py39.py hl[6] *}
+{* ../../docs_src/extra_models/tutorial005_py310.py hl[6] *}
 
-## Recap { #recap }
+## ãŸãšã‚ { #recap }
 
 è€‡æ•°ã®Pydanticモデルを䜿甚し、ケヌスごずに自由に継承したす。
 
index ecad2f6ff9764726547838bf79ce705bbf1191f4..37d71a9f72c243a5286c2423e67a49775844dd27 100644 (file)
@@ -2,7 +2,7 @@
 
 æœ€ã‚‚シンプルなFastAPIファむルは以䞋のようになりたす:
 
-{* ../../docs_src/first_steps/tutorial001_py39.py *}
+{* ../../docs_src/first_steps/tutorial001_py310.py *}
 
 ã“れを`main.py`にコピヌしたす。
 
@@ -104,7 +104,7 @@ INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
 
 #### OpenAPIおよびJSONスキヌマ { #openapi-and-json-schema }
 
-OpenAPIã\81¯APIã\81®ã\81\9fã\82\81ã\81®APIã\82¹ã\82­ã\83΋\83\9eã\82\92å®\9a矩ã\81\97ã\81Ÿã\81\99ã\80\82ã\81\9dã\81\97ã\81Šã\80\81ã\81\9dã\81®ã\82¹ã\82­ã\83΋\83\9eã\81¯**JSONã\83\87ã\83΋\82¿ã\82¹ã\82­ã\83΋\83\9e**ã\81®Êš\99ʺ\96ڊ\8fÊ Œã\81«Êº\96Ê\8b ã\81\97ã\81\9fJSONã\82¹ã\82­ã\83΋\83\9eを利甚するAPIによっお送受されるデヌタの定矩たたは「スキヌマ」を含んでいたす。
+OpenAPIã\81¯APIã\81®ã\81\9fã\82\81ã\81®APIã\82¹ã\82­ã\83΋\83\9eã\82\92å®\9a矩ã\81\97ã\81Ÿã\81\99ã\80\82ã\81\9dã\81\97ã\81Šã\80\81ã\81\9dã\81®ã\82¹ã\82­ã\83΋\83\9eã\81¯**JSONã\83\87ã\83΋\82¿ã\82¹ã\82­ã\83΋\83\9e**ã\81®Êš\99ʺ\96ڊ\8fÊ Œã\81§ã\81\82ã\82\8b**JSON Schema**を利甚するAPIによっお送受されるデヌタの定矩たたは「スキヌマ」を含んでいたす。
 
 #### `openapi.json`を確認 { #check-the-openapi-json }
 
@@ -183,7 +183,7 @@ Deploying to FastAPI Cloud...
 
 ### Step 1: `FastAPI`をむンポヌト { #step-1-import-fastapi }
 
-{* ../../docs_src/first_steps/tutorial001_py39.py hl[1] *}
+{* ../../docs_src/first_steps/tutorial001_py310.py hl[1] *}
 
 `FastAPI`は、APIのすべおの機胜を提䟛するPythonクラスです。
 
@@ -197,7 +197,7 @@ Deploying to FastAPI Cloud...
 
 ### Step 2: `FastAPI`の「むンスタンス」を生成 { #step-2-create-a-fastapi-instance }
 
-{* ../../docs_src/first_steps/tutorial001_py39.py hl[3] *}
+{* ../../docs_src/first_steps/tutorial001_py310.py hl[3] *}
 ã“こで、`app`倉数が`FastAPI`クラスの「むンスタンス」になりたす。
 
 ã“れが、すべおのAPIを䜜成するための䞻芁なポむントになりたす。
@@ -265,12 +265,12 @@ APIを構築するずきは、通垞、これらの特定のHTTPメ゜ッドを
 
 #### *path operation ãƒ‡ã‚³ãƒ¬ãƒŒã‚¿*を定矩 { #define-a-path-operation-decorator }
 
-{* ../../docs_src/first_steps/tutorial001_py39.py hl[6] *}
+{* ../../docs_src/first_steps/tutorial001_py310.py hl[6] *}
 
 `@app.get("/")`は盎䞋の関数が䞋蚘のリク゚ストの凊理を担圓するこずを**FastAPI**に䌝えたす:
 
 * ãƒ‘ス `/`
-* <abbr title="an HTTP GET method"><code>get</code> ã‚ªãƒšãƒ¬ãƒŒã‚·ãƒ§ãƒ³</abbr>
+* <dfn title="HTTP GET ãƒ¡ã‚œãƒƒãƒ‰"><code>get</code> ã‚ªãƒšãƒ¬ãƒŒã‚·ãƒ§ãƒ³</dfn>
 
 /// info | `@decorator` Info
 
@@ -319,7 +319,7 @@ Pythonにおける`@something`シンタックスはデコレヌタず呌ばれ
 * **オペレヌション**: ã¯`get`です。
 * **関数**: ã€Œãƒ‡ã‚³ãƒ¬ãƒŒã‚¿ã€ã®ç›Žäž‹ã«ã‚る関数 (`@app.get("/")`の盎䞋) ã§ã™ã€‚
 
-{* ../../docs_src/first_steps/tutorial001_py39.py hl[7] *}
+{* ../../docs_src/first_steps/tutorial001_py310.py hl[7] *}
 
 ã“れは、Pythonの関数です。
 
@@ -331,7 +331,7 @@ Pythonにおける`@something`シンタックスはデコレヌタず呌ばれ
 
 `async def`の代わりに通垞の関数ずしお定矩するこずもできたす:
 
-{* ../../docs_src/first_steps/tutorial003_py39.py hl[7] *}
+{* ../../docs_src/first_steps/tutorial003_py310.py hl[7] *}
 
 /// note | å‚™è€ƒ
 
@@ -341,7 +341,7 @@ Pythonにおける`@something`シンタックスはデコレヌタず呌ばれ
 
 ### Step 5: ã‚³ãƒ³ãƒ†ãƒ³ãƒ„の返信 { #step-5-return-the-content }
 
-{* ../../docs_src/first_steps/tutorial001_py39.py hl[8] *}
+{* ../../docs_src/first_steps/tutorial001_py310.py hl[8] *}
 
 `dict`、`list`、`str`、`int`などの単䞀の倀を返すこずができたす。
 
index 945fe07772b72fe10b34a3189239b039a5aea503..dc74e3f6cca5a72f08dc7f74e3d0b6cb477e005a 100644 (file)
@@ -25,7 +25,7 @@ HTTPレスポンスを゚ラヌでクラむアントに返すには、`HTTPExcep
 
 ### `HTTPException`のむンポヌト { #import-httpexception }
 
-{* ../../docs_src/handling_errors/tutorial001_py39.py hl[1] *}
+{* ../../docs_src/handling_errors/tutorial001_py310.py hl[1] *}
 
 ### ã‚³ãƒŒãƒ‰å†…での`HTTPException`の発生 { #raise-an-httpexception-in-your-code }
 
@@ -39,7 +39,7 @@ Pythonの䟋倖なので、`return`ではなく、`raise`です。
 
 ã“の䟋では、クラむアントが存圚しないIDでアむテムを芁求した堎合、`404`のステヌタスコヌドを持぀䟋倖を発生させたす:
 
-{* ../../docs_src/handling_errors/tutorial001_py39.py hl[11] *}
+{* ../../docs_src/handling_errors/tutorial001_py310.py hl[11] *}
 
 ### ãƒ¬ã‚¹ãƒãƒ³ã‚¹çµæžœ { #the-resulting-response }
 
@@ -77,7 +77,7 @@ Pythonの䟋倖なので、`return`ではなく、`raise`です。
 
 ã—かし、高床なシナリオのために必芁な堎合には、カスタムヘッダヌを远加するこずができたす:
 
-{* ../../docs_src/handling_errors/tutorial002_py39.py hl[14] *}
+{* ../../docs_src/handling_errors/tutorial002_py310.py hl[14] *}
 
 ## ã‚«ã‚¹ã‚¿ãƒ äŸ‹å€–ハンドラのむンストヌル { #install-custom-exception-handlers }
 
@@ -89,7 +89,7 @@ Pythonの䟋倖なので、`return`ではなく、`raise`です。
 
 ã‚«ã‚¹ã‚¿ãƒ äŸ‹å€–ハンドラを`@app.exception_handler()`で远加するこずができたす:
 
-{* ../../docs_src/handling_errors/tutorial003_py39.py hl[5:7,13:18,24] *}
+{* ../../docs_src/handling_errors/tutorial003_py310.py hl[5:7,13:18,24] *}
 
 ã“こで、`/unicorns/yolo`をリク゚ストするず、*path operation*は`UnicornException`を`raise`したす。
 
@@ -127,7 +127,7 @@ Pythonの䟋倖なので、`return`ではなく、`raise`です。
 
 ã“の䟋倖ハンドラは`Request`ず䟋倖を受け取りたす。
 
-{* ../../docs_src/handling_errors/tutorial004_py39.py hl[2,14:19] *}
+{* ../../docs_src/handling_errors/tutorial004_py310.py hl[2,14:19] *}
 
 ã“れで、`/items/foo`にアクセスするず、以䞋のデフォルトのJSON゚ラヌの代わりに:
 
@@ -159,7 +159,7 @@ Field: ('path', 'item_id'), Error: Input should be a valid integer, unable to pa
 
 äŸ‹ãˆã°ã€ã“れらの゚ラヌに察しおは、JSONではなくプレヌンテキストを返すようにするこずができたす:
 
-{* ../../docs_src/handling_errors/tutorial004_py39.py hl[3:4,9:11,25] *}
+{* ../../docs_src/handling_errors/tutorial004_py310.py hl[3:4,9:11,25] *}
 
 /// note | æŠ€è¡“詳çް
 
@@ -183,7 +183,7 @@ Field: ('path', 'item_id'), Error: Input should be a valid integer, unable to pa
 
 ã‚¢ãƒ—リ開発䞭にボディのログを取っおデバッグしたり、ナヌザヌに返したりなどに䜿甚するこずができたす。
 
-{* ../../docs_src/handling_errors/tutorial005_py39.py hl[14] *}
+{* ../../docs_src/handling_errors/tutorial005_py310.py hl[14] *}
 
 ã“こで、以䞋のような無効な項目を送信しおみおください:
 
@@ -239,6 +239,6 @@ from starlette.exceptions import HTTPException as StarletteHTTPException
 
 **FastAPI** ã‹ã‚‰åŒã˜ãƒ‡ãƒ•ォルトの䟋倖ハンドラず䞀緒に䟋倖を䜿甚したい堎合は、`fastapi.exception_handlers`からデフォルトの䟋倖ハンドラをむンポヌトしお再利甚できたす:
 
-{* ../../docs_src/handling_errors/tutorial006_py39.py hl[2:5,15,21] *}
+{* ../../docs_src/handling_errors/tutorial006_py310.py hl[2:5,15,21] *}
 
 ã“の䟋では、非垞に衚珟力のあるメッセヌゞで゚ラヌを`print`しおいるだけですが、芁点は理解できるはずです。䟋倖を䜿甚し、その埌デフォルトの䟋倖ハンドラを再利甚できたす。
diff --git a/docs/ja/docs/tutorial/header-param-models.md b/docs/ja/docs/tutorial/header-param-models.md
new file mode 100644 (file)
index 0000000..e1e102c
--- /dev/null
@@ -0,0 +1,72 @@
+# ãƒ˜ãƒƒãƒ€ãƒŒãƒ‘ラメヌタのモデル { #header-parameter-models }
+
+関連する**ヘッダヌパラメヌタ**が䞀匏ある堎合、それらを宣蚀するための**Pydantic ãƒ¢ãƒ‡ãƒ«**を䜜成できたす。
+
+これにより、モデルを**耇数箇所**で**再利甚**でき、さらにすべおのパラメヌタに察するバリデヌションやメタデヌタを䞀括で宣蚀できたす。😎
+
+/// note | å‚™è€ƒ
+
+これは FastAPI ãƒãƒŒã‚žãƒ§ãƒ³ `0.115.0` ä»¥é™ã§ã‚µãƒãƒŒãƒˆã•れおいたす。🀓
+
+///
+
+## Pydantic ãƒ¢ãƒ‡ãƒ«ã«ã‚ˆã‚‹ãƒ˜ãƒƒãƒ€ãƒŒãƒ‘ラメヌタ { #header-parameters-with-a-pydantic-model }
+
+必芁な**ヘッダヌパラメヌタ**を**Pydantic ãƒ¢ãƒ‡ãƒ«**内で宣蚀し、関数匕数ではそのパラメヌタを `Header` ãšã—お宣蚀したす:
+
+{* ../../docs_src/header_param_models/tutorial001_an_py310.py hl[9:14,18] *}
+
+**FastAPI** ã¯ãƒªã‚¯ã‚šã‚¹ãƒˆã®**ヘッダヌ**から**各フィヌルド**の倀を**抜出**し、定矩した Pydantic ãƒ¢ãƒ‡ãƒ«ãšã—お枡したす。
+
+## ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®ç¢ºèª { #check-the-docs }
+
+`/docs` ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ UI ã§å¿…芁なヘッダヌを確認できたす:
+
+<div class="screenshot">
+<img src="/img/tutorial/header-param-models/image01.png">
+</div>
+
+## äœ™åˆ†ãªãƒ˜ãƒƒãƒ€ãƒŒã‚’犁止 { #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** ã§ **ヘッダヌ**を宣蚀できたす。😎
index 0ffb8f350541e2b6be1141c252204fa92b4c9844..3b70bf2f413ef09d48e674c45422b6a22f350887 100644 (file)
@@ -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] *}
index 12fb57a640a5f865256ac87f9ba7a6321a63f37a..103d6e2c06a4915b3e37b213b0cf7b533b3f06b7 100644 (file)
@@ -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}を参照しおください。
 
-次のセクションでは、ミドルりェアを䜿甚しお <abbr title="Cross-Origin Resource Sharing">CORS</abbr> ã‚’凊理する方法に぀いお説明したす。
+次のセクションでは、ミドルりェアを䜿甚しお <abbr title="Cross-Origin Resource Sharing - ã‚¯ãƒ­ã‚¹ã‚ªãƒªã‚žãƒ³ãƒªã‚œãƒŒã‚¹å…±æœ‰">CORS</abbr> ã‚’凊理する方法に぀いお説明したす。
index eb6b6b11a55d146997b363f7d863ff5b1523444a..556cc6b148b2cb5dda83776a88f365f4f6b65938 100644 (file)
@@ -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 }
 
-説明文は長くお耇数行におよぶ傟向があるので、関数<abbr title="a multi-line string as the first expression inside a function (not assigned to any variable) used for documentation â€“ ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã«äœ¿ç”šã•れる関数内の最初の匏倉数に代入されおいないずしおの耇数行の文字列">docstring</abbr>内に*path operation*の説明文を宣蚀できたす。するず、**FastAPI** ã¯èª¬æ˜Žæ–‡ã‚’読み蟌んでくれたす。
+説明文は長くお耇数行におよぶ傟向があるので、関数<dfn title="関数内の最初の匏どの倉数にも代入されないずしお蚘述される、ドキュメント甚の耇数行の文字列">docstring</dfn>内に*path operation*の説明文を宣蚀できたす。するず、**FastAPI** ã¯èª¬æ˜Žæ–‡ã‚’読み蟌んでくれたす。
 
 docstringに<a href="https://en.wikipedia.org/wiki/Markdown" class="external-link" target="_blank">Markdown</a>を蚘述すれば、正しく解釈されお衚瀺されたす。docstringのむンデントを考慮しお
 
@@ -90,9 +90,9 @@ OpenAPIは*path operation*ごずにレスポンスの説明を必芁ずしおい
 
 ## *path operation*を非掚奚にする { #deprecate-a-path-operation }
 
-*path operation*を<abbr title="obsolete, recommended not to use it â€“ éžæŽšå¥šã€äœ¿ã‚ãªã„方がよい">deprecated</abbr>ずしおマヌクする必芁があるが、それを削陀しない堎合は、`deprecated`パラメヌタを枡したす:
+*path operation*を<dfn title="非掚奚、䜿甚しないこずを掚奚">deprecated</dfn>ずしおマヌクする必芁があるが、それを削陀しない堎合は、`deprecated`パラメヌタを枡したす:
 
-{* ../../docs_src/path_operation_configuration/tutorial006_py39.py hl[16] *}
+{* ../../docs_src/path_operation_configuration/tutorial006_py310.py hl[16] *}
 
 å¯Ÿè©±çš„ドキュメントでは非掚奚ず明蚘されたす:
 
index 6a9ecc4e7b25b5862f01cf6bda2c1dfd5a23a5d2..ab3240f042c46efbf1686ddc3bb9998ebf4205cd 100644 (file)
@@ -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はその`*`で䜕かをするこずはありたせんが、それ以降のすべおのパラメヌタがキヌワヌド匕数キヌず倀のペアずしお呌ばれるべきものであるず知っおいるでしょう。それは<abbr title="From: K-ey W-ord Arg-uments"><code>kwargs</code></abbr>ずしおも知られおいたす。たずえデフォルト倀がなくおも。
+Pythonはその`*`で䜕かをするこずはありたせんが、それ以降のすべおのパラメヌタがキヌワヌド匕数キヌず倀のペアずしお呌ばれるべきものであるず知っおいるでしょう。それは<abbr title="From: K-ey W-ord Arg-uments - ã‚­ãƒŒãƒ¯ãƒŒãƒ‰åŒ•æ•°"><code>kwargs</code></abbr>ずしおも知られおいたす。たずえデフォルト倀がなくおも。
 
-{* ../../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はその`*`で䜕かをするこずはありたせんが、それ以降
 
 ã“れは<abbr title="less than â€“ ã‚ˆã‚Šå°ã•い"><code>lt</code></abbr>も同じです。
 
-{* ../../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 }
 
index 96a1fe9d1077b6b40aed6b47a9f845d1d6a39602..5b78eb7b1f4c651be03d9814cf2181f428b128f2 100644 (file)
@@ -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文字列ず同様のシンタックスで「パスパラメヌ
 
 ///
 
-## ãƒ‡ãƒŒã‚¿<abbr title="別名: serialization, parsing, marshalling">倉換</abbr> { #data-conversion }
+## ãƒ‡ãƒŒã‚¿<dfn title="別名: ã‚·ãƒªã‚¢ãƒ©ã‚€ã‚ºã€ãƒ‘ヌス、マヌシャリング">倉換</dfn> { #data-conversion }
 
 ã“の䟋を実行し、ブラりザで <a href="http://127.0.0.1:8000/items/3" class="external-link" target="_blank">http://127.0.0.1:8000/items/3</a> ã‚’開くず、次のレスポンスが衚瀺されたす:
 
@@ -38,7 +38,7 @@ Pythonのformat文字列ず同様のシンタックスで「パスパラメヌ
 
 é–¢æ•°ãŒå—け取ったおよび返した倀は、文字列の `"3"` ã§ã¯ãªãã€Pythonの `int` ãšã—おの `3` ã§ã‚るこずに泚意しおください。
 
-したがっお、その型宣蚀を䜿うず、**FastAPI**は自動リク゚スト <abbr title="HTTPリク゚ストで受け取った文字列をPythonデヌタぞ倉換する">"解析"</abbr> ã‚’行いたす。
+したがっお、その型宣蚀を䜿うず、**FastAPI**は自動リク゚スト <dfn title="HTTPリク゚ストから受け取った文字列をPythonのデヌタに倉換する">"解析"</dfn> ã‚’行いたす。
 
 ///
 
@@ -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"は機械孊習<abbr title="Technically, Deep Learning model architectures">モデル</abbr>の名前です。
+"AlexNet"、"ResNet"そしお"LeNet"は機械孊習<dfn title="厳密には、Deep Learning ã®ãƒ¢ãƒ‡ãƒ«ã‚¢ãƒŒã‚­ãƒ†ã‚¯ãƒãƒ£">モデル</dfn>の名前です。
 
 ///
 
@@ -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**は以䞋を行いたす:
 
 * ã‚šãƒ‡ã‚£ã‚¿ãƒŒã‚µãƒãƒŒãƒˆ: ã‚šãƒ©ãƒŒãƒã‚§ãƒƒã‚¯ã€è‡ªå‹•補完、など
-* ãƒ‡ãƒŒã‚¿ã€Œ<abbr title="HTTPリク゚ストで受け取った文字列をPythonデヌタぞ倉換する">解析</abbr>」
+* ãƒ‡ãƒŒã‚¿ã€Œ<dfn title="HTTPリク゚ストから受け取った文字列をPythonのデヌタに倉換する">解析</dfn>」
 * ãƒ‡ãƒŒã‚¿ãƒãƒªãƒ‡ãƒŒã‚·ãƒ§ãƒ³
 * APIアノテヌションず自動ドキュメント生成
 
index e230ef29af3ddf1c3e0157f5322a76c79290d8c7..dda4e120bf57ac6b46f9d705e0c6f79cb3801091 100644 (file)
@@ -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 ã®ä»¥å‰ã®ãƒãƒŒã‚žãƒ§ãƒ³ïŒˆ<abbr title="before 2023-03">0.95.0</abbr> ã‚ˆã‚Šå‰ïŒ‰ã§ã¯ã€ãƒ‘ラメヌタのデフォルト倀ずしお `Query` ã‚’䜿う必芁があり、`Annotated` ã®äž­ã«å…¥ã‚Œã‚‹ã®ã§ã¯ã‚りたせんでした。これを䜿ったコヌドを芋かける可胜性が高いので、説明したす。
+FastAPI ã®ä»¥å‰ã®ãƒãƒŒã‚žãƒ§ãƒ³ïŒˆ<dfn title="2023-03 ã‚ˆã‚Šå‰">0.95.0</dfn> ã‚ˆã‚Šå‰ïŒ‰ã§ã¯ã€ãƒ‘ラメヌタのデフォルト倀ずしお `Query` ã‚’䜿う必芁があり、`Annotated` ã®äž­ã«å…¥ã‚Œã‚‹ã®ã§ã¯ã‚りたせんでした。これを䜿ったコヌドを芋かける可胜性が高いので、説明したす。
 
 /// tip | è±†çŸ¥è­˜
 
@@ -192,7 +168,7 @@ FastAPI ãªã—で同じ関数を **別の堎所** ã‹ã‚‰ **呌び出しおも**
 
 ## æ­£èŠè¡šçŸã®è¿œåŠ  { #add-regular-expressions }
 
-パラメヌタが䞀臎するべき <abbr title="A regular expression, regex or regexp is a sequence of characters that define a search pattern for strings.">正芏衚珟</abbr> `pattern` ã‚’定矩するこずができたす:
+パラメヌタが䞀臎するべき <dfn title="正芏衚珟、regex、regexp ã¯ã€æ–‡å­—列に察する怜玢パタヌンを定矩する文字の䞊びです。">正芏衚珟</dfn> `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
 
 ã•お、このパラメヌタが気に入らなくなったずしたしょう。
 
-それを䜿っおいるクラむアントがいるので、しばらくは残しおおく必芁がありたすが、ドキュメントには<abbr title="obsolete, recommended not to use it">deprecated</abbr>ず明蚘しおおきたいです。
+それを䜿っおいるクラむアントがいるので、しばらくは残しおおく必芁がありたすが、ドキュメントには<abbr title="obsolete, recommended not to use it - å»ƒæ­¢äºˆå®šã€äœ¿ç”šã¯æŽšå¥šã•れたせん">deprecated</abbr>ず明蚘しおおきたいです。
 
 ãã®å Žåˆã€`Query`にパラメヌタ`deprecated=True`を枡したす:
 
@@ -402,7 +378,7 @@ Pydantic ã«ã¯ <a href="https://docs.pydantic.dev/latest/concepts/validators/#f
 
 ///
 
-䟋えば、このカスタムバリデヌタは、<abbr title="ISBN means International Standard Book Number â€“ å›œéš›æš™æº–図曞番号">ISBN</abbr> ã®æ›žç±ç•ªå·ãªã‚‰ item ID ãŒ `isbn-` ã§å§‹ãŸã‚‹ã“ず、<abbr title="IMDB (Internet Movie Database) is a website with information about movies â€“ IMDBInternet Movie Databaseは映画に関する情報を掲茉するWebサむトです">IMDB</abbr> ã® movie URL ID ãªã‚‰ `imdb-` ã§å§‹ãŸã‚‹ã“ずをチェックしたす:
+䟋えば、このカスタムバリデヌタは、<abbr title="International Standard Book Number - å›œéš›æš™æº–図曞番号">ISBN</abbr> ã®æ›žç±ç•ªå·ãªã‚‰ item ID ãŒ `isbn-` ã§å§‹ãŸã‚‹ã“ず、<abbr title="Internet Movie Database - ã‚€ãƒ³ã‚¿ãƒŒãƒãƒƒãƒˆãƒ»ãƒ ãƒŒãƒ“ヌ・デヌタベヌス: æ˜ ç”»ã«é–¢ã™ã‚‹æƒ…報を掲茉する Web ã‚µã‚€ãƒˆ">IMDB</abbr> ã® movie URL ID ãªã‚‰ `imdb-` ã§å§‹ãŸã‚‹ã“ずをチェックしたす:
 
 {* ../../docs_src/query_params_str_validations/tutorial015_an_py310.py hl[5,16:19,24] *}
 
@@ -436,7 +412,7 @@ Pydantic ã«ã¯ <a href="https://docs.pydantic.dev/latest/concepts/validators/#f
 
 #### ãƒ©ãƒ³ãƒ€ãƒ ãªã‚¢ã‚€ãƒ†ãƒ  { #a-random-item }
 
-`data.items()` ã§ã€èŸžæ›žã®å„アむテムのキヌず倀を含むタプルを持぀ <abbr title="Something we can iterate on with a for loop, like a list, set, etc.">反埩可胜オブゞェクト</abbr> ã‚’取埗したす。
+`data.items()` ã§ã€èŸžæ›žã®å„アむテムのキヌず倀を含むタプルを持぀ <dfn title="for ãƒ«ãƒŒãƒ—で繰り返し凊理できるものlist、set ãªã©ïŒ‰">反埩可胜オブゞェクト</dfn> ã‚’取埗したす。
 
 ã“の反埩可胜オブゞェクトを `list(data.items())` ã§é©åˆ‡ãª `list` ã«å€‰æ›ã—たす。
 
index 41e51ed782f8c4ef89464b19bd1cf510213e3b13..d32c9822b8446bdcf42fdfaf5d9eaf38b1fa7bb1 100644 (file)
@@ -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
 ãƒ‘スパラメヌタに適甚される凊理ず完党に同様な凊理がク゚リパラメヌタにも斜されたす:
 
 * ã‚šãƒ‡ã‚£ã‚¿ãƒŒã‚µãƒãƒŒãƒˆ (明らかに)
-* ãƒ‡ãƒŒã‚¿ <abbr title="converting the string that comes from an HTTP request into Python data">「解析」</abbr>
+* ãƒ‡ãƒŒã‚¿ <dfn title="HTTP ãƒªã‚¯ã‚šã‚¹ãƒˆã‹ã‚‰æ¥ã‚‹æ–‡å­—列を Python ã®ãƒ‡ãƒŒã‚¿ã«å€‰æ›ã™ã‚‹ã“ず">「解析」</dfn>
 * ãƒ‡ãƒŒã‚¿ãƒãƒªãƒ‡ãƒŒã‚·ãƒ§ãƒ³
 * è‡ªå‹•ドキュメント生成
 
@@ -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 (file)
index 0000000..538cf64
--- /dev/null
@@ -0,0 +1,176 @@
+# ãƒªã‚¯ã‚šã‚¹ãƒˆãƒ•ァむル { #request-files }
+
+`File` ã‚’䜿っお、クラむアントがアップロヌドするファむルを定矩できたす。
+
+/// info | æƒ…å ±
+
+アップロヌドされたファむルを受け取るには、たず <a href="https://github.com/Kludex/python-multipart" class="external-link" target="_blank">`python-multipart`</a> ã‚’むンストヌルしたす。
+
+[仮想環境](../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」ファむルを䜿いたす:
+    - æœ€å€§ã‚µã‚€ã‚ºãŸã§ã¯ãƒ¡ãƒ¢ãƒªã«ä¿æŒã—、それを超えるずディスクに栌玍されるファむルです。
+- ãã®ãŸã‚ã€ç”»åƒãƒ»å‹•画・倧きなバむナリなどの倧きなファむルでも、メモリを䜿い果たすこずなくうたく動䜜したす。
+- ã‚¢ãƒƒãƒ—ロヌドされたファむルからメタデヌタを取埗できたす。
+- <a href="https://docs.python.org/3/glossary.html#term-file-like-object" class="external-link" target="_blank">file-like</a> ãª `async` ã‚€ãƒ³ã‚¿ãƒŒãƒ•ェヌスを持ちたす。
+- å®Ÿéš›ã® Python ã® <a href="https://docs.python.org/3/library/tempfile.html#tempfile.SpooledTemporaryFile" class="external-link" target="_blank">`SpooledTemporaryFile`</a> ã‚ªãƒ–ゞェクトを公開しおおり、file-like ã‚ªãƒ–ゞェクトを期埅する他のラむブラリにそのたた枡せたす。
+
+### `UploadFile` { #uploadfile }
+
+`UploadFile` ã«ã¯æ¬¡ã®å±žæ€§ãŒã‚りたす:
+
+- `filename`: ã‚¢ãƒƒãƒ—ロヌド時の元のファむル名を衚す `str`䟋: `myimage.jpg`
+- `content_type`: ã‚³ãƒ³ãƒ†ãƒ³ãƒˆã‚¿ã‚€ãƒ—MIME ã‚¿ã‚€ãƒ— / ãƒ¡ãƒ‡ã‚£ã‚¢ã‚¿ã‚€ãƒ—を衚す `str`䟋: `image/jpeg`
+- `file`: <a href="https://docs.python.org/3/library/tempfile.html#tempfile.SpooledTemporaryFile" class="external-link" target="_blank">`SpooledTemporaryFile`</a><a href="https://docs.python.org/3/glossary.html#term-file-like-object" class="external-link" target="_blank">file-like</a> ãªã‚ªãƒ–ゞェクト。これは実際の 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 ãƒ•ォヌム`<form></form>`がサヌバヌにデヌタを送る方法は、そのデヌタに察しお通垞「特別な」゚ンコヌディングを甚い、JSON ãšã¯ç•°ãªã‚ŠãŸã™ã€‚
+
+**FastAPI** ã¯ JSON ã§ã¯ãªãã€é©åˆ‡ãªå Žæ‰€ã‹ã‚‰ãã®ãƒ‡ãƒŒã‚¿ã‚’読み取るようにしたす。
+
+/// note | æŠ€è¡“詳çް
+
+ファむルを含たない堎合、フォヌムからのデヌタは通垞「メディアタむプ」`application/x-www-form-urlencoded` ã§ã‚šãƒ³ã‚³ãƒŒãƒ‰ã•れたす。
+
+ただしフォヌムにファむルが含たれる堎合は、`multipart/form-data` ãšã—お゚ンコヌドされたす。`File` ã‚’䜿うず、**FastAPI** ã¯ãƒœãƒ‡ã‚£å†…の正しい郚分からファむルを取埗すべきであるず認識したす。
+
+これらの゚ンコヌディングやフォヌムフィヌルドの詳现は、<a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST" class="external-link" target="_blank"><abbr title="Mozilla Developer Network - Mozilla é–‹ç™ºè€…ネットワヌク">MDN</abbr> Web Docs ã® <code>POST</code></a> ã‚’参照しおください。
+
+///
+
+/// 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 (file)
index 0000000..0718679
--- /dev/null
@@ -0,0 +1,78 @@
+# ãƒ•ォヌムモデル { #form-models }
+
+FastAPI ã§ã¯ã€ãƒ•ォヌムフィヌルドを宣蚀するために Pydantic ãƒ¢ãƒ‡ãƒ«ã‚’䜿甚できたす。
+
+/// info | æƒ…å ±
+
+フォヌムを䜿うには、たず <a href="https://github.com/Kludex/python-multipart" class="external-link" target="_blank">`python-multipart`</a> ã‚’むンストヌルしたす。
+
+たず [仮想環境](../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 ã§ç¢ºèªã§ããŸã™:
+
+<div class="screenshot">
+<img src="/img/tutorial/request-form-models/image01.png">
+</div>
+
+## è¿œåŠ ã®ãƒ•ã‚©ãƒŒãƒ ãƒ•ã‚£ãƒŒãƒ«ãƒ‰ã‚’çŠæ­¢ { #forbid-extra-form-fields }
+
+䞀郚の特殊なナヌスケヌスおそらくあたり䞀般的ではありたせんでは、フォヌムフィヌルドを Pydantic ãƒ¢ãƒ‡ãƒ«ã§å®£èš€ã—たもののみに**制限**し、**远加**のフィヌルドを**犁止**したい堎合がありたす。
+
+/// note | å‚™è€ƒ
+
+これは FastAPI ãƒãƒŒã‚žãƒ§ãƒ³ `0.114.0` ä»¥é™ã§ã‚µãƒãƒŒãƒˆã•れおいたす。🀓
+
+///
+
+Pydantic ã®ãƒ¢ãƒ‡ãƒ«èš­å®šã§ã€`extra` ãƒ•ィヌルドを `forbid` ã«ã§ããŸã™:
+
+{* ../../docs_src/request_form_models/tutorial002_an_py310.py hl[12] *}
+
+クラむアントが䜙分なデヌタを送信しようずするず、**゚ラヌ**のレスポンスを受け取りたす。
+
+䟋えば、クラむアントが次のフォヌムフィヌルドを送ろうずした堎合:
+
+- `username`: `Rick`
+- `password`: `Portal Gun`
+- `extra`: `Mr. Poopybutthole`
+
+フィヌルド `extra` ã¯èš±å¯ã•れおいない旚の゚ラヌレスポンスが返されたす:
+
+```json
+{
+    "detail": [
+        {
+            "type": "extra_forbidden",
+            "loc": ["body", "extra"],
+            "msg": "Extra inputs are not permitted",
+            "input": "Mr. Poopybutthole"
+        }
+    ]
+}
+```
+
+## ãŸãšã‚ { #summary }
+
+FastAPI ã§ãƒ•ォヌムフィヌルドを宣蚀するために Pydantic ãƒ¢ãƒ‡ãƒ«ã‚’䜿甚できたす。😎
index 09e1277c8cc28239afaa330ded10d01a773ea933..9a4e299e91408f16dc42e5a7656cb7ecf314a25f 100644 (file)
@@ -16,13 +16,13 @@ $ pip install python-multipart
 
 ## `File`ず`Form`のむンポヌト { #import-file-and-form }
 
-{* ../../docs_src/request_forms_and_files/tutorial001_an_py39.py hl[3] *}
+{* ../../docs_src/request_forms_and_files/tutorial001_an_py310.py hl[3] *}
 
 ## `File`ず`Form`のパラメヌタの定矩 { #define-file-and-form-parameters }
 
 ãƒ•ァむルやフォヌムのパラメヌタは`Body`や`Query`の堎合ず同じように䜜成したす:
 
-{* ../../docs_src/request_forms_and_files/tutorial001_an_py39.py hl[10:12] *}
+{* ../../docs_src/request_forms_and_files/tutorial001_an_py310.py hl[10:12] *}
 
 ãƒ•ァむルずフォヌムフィヌルドがフォヌムデヌタずしおアップロヌドされ、ファむルずフォヌムフィヌルドを受け取りたす。
 
index 1bdc28670b937faa1d14954fa9e8530a71a429e4..dda2a4bf7fd2238176e22dc9895ede7a34b41407 100644 (file)
@@ -18,17 +18,17 @@ $ pip install python-multipart
 
 `fastapi`から`Form`をむンポヌトしたす:
 
-{* ../../docs_src/request_forms/tutorial001_an_py39.py hl[3] *}
+{* ../../docs_src/request_forms/tutorial001_an_py310.py hl[3] *}
 
 ## `Form`のパラメヌタの定矩 { #define-form-parameters }
 
 `Body`や`Query`の堎合ず同じようにフォヌムパラメヌタを䜜成したす:
 
-{* ../../docs_src/request_forms/tutorial001_an_py39.py hl[9] *}
+{* ../../docs_src/request_forms/tutorial001_an_py310.py hl[9] *}
 
 äŸ‹ãˆã°ã€OAuth2仕様が䜿甚できる方法の぀「パスワヌドフロヌ」ず呌ばれるでは、フォヌムフィヌルドずしお`username`ず`password`を送信する必芁がありたす。
 
-<abbr title="specification â€“ ä»•様">spec</abbr>では、フィヌルドの名前が`username`ず`password`であるこずず、JSONではなくフォヌムフィヌルドずしお送信されるこずを芁求しおいたす。
+<dfn title="仕様">仕様</dfn>では、フィヌルドの名前が正確に`username`ず`password`であるこずず、JSONではなくフォヌムフィヌルドずしお送信されるこずを芁求しおいたす。
 
 `Form`では`Body`および`Query`や`Path`、`Cookie`ず同じ蚭定を宣蚀するこずができたす。これには、バリデヌション、䟋、゚むリアス䟋えば`username`の代わりに`user-name`などが含たれたす。
 
@@ -56,13 +56,13 @@ HTMLフォヌム`<form></form>`がサヌバにデヌタを送信する方
 
 ã—かし、フォヌムがファむルを含む堎合は、`multipart/form-data`ずしお゚ンコヌドされたす。ファむルの扱いに぀いおは次の章で説明したす。
 
-これらの゚ンコヌディングやフォヌムフィヌルドの詳现に぀いおは、<a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST" class="external-link" target="_blank"><abbr title="Mozilla Developer Network">MDN</abbr>の<code>POST</code></a>のりェブドキュメントを参照しおください。
+これらの゚ンコヌディングやフォヌムフィヌルドの詳现に぀いおは、<a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST" class="external-link" target="_blank"><abbr title="Mozilla Developer Network - Mozilla é–‹ç™ºè€…ネットワヌク">MDN</abbr>の<code>POST</code></a>のりェブドキュメントを参照しおください。
 
 ///
 
 /// 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プロトコルの䞀郚です。
 
index 258eac8e67da9d3e667f0b0c88a13cff99ad24ae..07dc2012332001a93231548f1944c8ad70485d84 100644 (file)
@@ -41,7 +41,7 @@ FastAPIはこの戻り倀の型を䜿っお以䞋を行いたす:
 
 /// note | å‚™è€ƒ
 
-`response_model`ã\81¯ã\80\8cã\83\87ã\82³ã\83‹\83΋\82¿ã\80\8dã\83¡ã\82ϋ\83\83ã\83\89ïŒ\88`get`ã\80\81`post`ã\81ªã\81©ïŒ\89ã\81®ã\83\91ã\83©ã\83¡ã\83΋\82¿ã\81§ã\81\82ã\82\8bã\81\93ã\81šã\81«Ê³šÊ\84\8fã\81\97ã\81Šã\81\8fã\81 ã\81\95ã\81\84ã\80\82ã\81\99ã\81¹ã\81Šã\81®ã\83\91ã\83©ã\83¡ã\83΋\82¿ã\82\84ã\83\9cã\83\87ã\82£ã\81®ã\82\88ã\81\86ã\81«ã\80\81*path operation Ã©\96¢Ê\95°* ã®ãƒ‘ラメヌタではありたせん。
+`response_model`ã\81¯ã\80\8cã\83\87ã\82³ã\83‹\83΋\82¿ã\80\8dã\83¡ã\82ϋ\83\83ã\83\89ïŒ\88`get`ã\80\81`post`ã\81ªã\81©ïŒ\89ã\81®ã\83\91ã\83©ã\83¡ã\83΋\82¿ã\81§ã\81\99ã\80\82é\96¢Ê\95°ã\81®ã\83\91ã\83©ã\83¡ã\83΋\82¿ã\82\84ã\83\9cã\83\87ã\82£ã\81ªã\81©ã\81šã\81¯é\81\95ã\81\84ã\80\81*path operation Ã©\96¢Ê\95°*のパラメヌタではありたせん。
 
 ///
 
@@ -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レスポンスモデルを䜜成しようずしお倱敗したす。
 
-同様に、<abbr title='耇数の型のunionは「これらの型のいずれか」を意味したす。'>union</abbr>のように、耇数の型のうち1぀以䞊がPydantic型ずしお有効でないものを含む堎合も起こりたす。䟋えば次は倱敗したす ðŸ’¥:
+同様に、<dfn title="耇数の型のナニオンは「これらの型のいずれか」を意味したす。">ナニオン</dfn>のように、耇数の型のうち1぀以䞊がPydantic型ずしお有効でないものを含む堎合も起こりたす。䟋えば次は倱敗したす ðŸ’¥:
 
 {* ../../docs_src/response_model/tutorial003_04_py310.py hl[8] *}
 
index d3c2194162b840a08a1bd65323ad0f7e4448caa0..d4ac45da653a0f83c9b93677cb62b3f6d4d55eca 100644 (file)
@@ -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] *}
 
 ãã‚Œã‚‰ã¯å˜ãªã‚‹äŸ¿åˆ©ãªã‚‚のであり、同じ番号を保持しおいたす。しかし、その方法でぱディタの自動補完を䜿甚しおそれらを芋぀けるこずができたす。
 
index e526685c2f3e7b1f91d2021759ae52435cd710ac..76a6b0f9494f366a3cf986e28fd54271ad486489 100644 (file)
@@ -74,7 +74,7 @@ Pydanticモデルで`Field()`を䜿う堎合、远加の`examples`も宣蚀で
 
 ã“の堎合、examplesはそのボディデヌタの内郚**JSON Schema**の䞀郚になりたす。
 
-それでも、<abbr title="2023-08-26">執筆時点</abbr>では、ドキュメントUIの衚瀺を担圓するツヌルであるSwagger UIは、**JSON Schema**内のデヌタに察しお耇数の䟋を衚瀺するこずをサポヌトしおいたせん。しかし、回避策に぀いおは以䞋を読んでください。
+それでも、<dfn title="2023-08-26">執筆時点</dfn>では、ドキュメントUIの衚瀺を担圓するツヌルであるSwagger UIは、**JSON Schema**内のデヌタに察しお耇数の䟋を衚瀺するこずをサポヌトしおいたせん。しかし、回避策に぀いおは以䞋を読んでください。
 
 ### OpenAPI固有の`examples` { #openapi-specific-examples }
 
index 76ef04db8d6781f873d5482e21d3a8b69ac07d18..5bf04386a81537e5bd10657b035df857b41b8699 100644 (file)
@@ -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`を提䟛したす。
 
index 39b97cca52400fefa231749fd5157b853910824e..60378fd9814a3d63a46a5d56c6aa35d31b7d5b7f 100644 (file)
@@ -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] *}
 
 ã—かし、それはただそんなに有甚ではありたせん。
 
index 14f2c8f4487efae657714233270cc3c19b9a1d70..b96021b7ff774d792c3ce1efd4e50dab495043ab 100644 (file)
@@ -1,4 +1,4 @@
-# ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£å…¥é–€
+# ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£å…¥é–€ { #security }
 
 ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ã€èªèšŒã€èªå¯ã‚’扱うには倚くの方法がありたす。
 
 
 ã—かし、その前に、いく぀かの小さな抂念を確認したしょう。
 
-## ãŠæ€¥ãŽã§ã™ã‹ïŒŸ
+## ãŠæ€¥ãŽã§ã™ã‹ïŒŸ { #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` ãƒ¢ã‚žãƒ¥ãƒŒãƒ«ã®äž­ã§ã€ã“れらのセキュリティスキヌムごずにいく぀かのツヌルを提䟛し、これらのセキュリティメカニズムを簡単に䜿甚できるようにしたす。
 
index 186936f1ba3e7f55dcfed1c04176ed4ca6f577b9..0d6be90a24bfec1d975b9a1d589fee930402339f 100644 (file)
@@ -1,6 +1,6 @@
 # ãƒ‘スワヌドおよびハッシュ化によるOAuth2、JWTトヌクンによるBearer { #oauth2-with-password-and-hashing-bearer-with-jwt-tokens }
 
-これでセキュリティの流れが党おわかったので、<abbr title="JSON Web Tokens">JWT</abbr>トヌクンず安党なパスワヌドのハッシュ化を䜿甚しお、実際にアプリケヌションを安党にしおみたしょう。
+これでセキュリティの流れが党おわかったので、<abbr title="JSON Web Tokens - JSON Web Token">JWT</abbr>トヌクンず安党なパスワヌドのハッシュ化を䜿甚しお、実際にアプリケヌションを安党にしおみたしょう。
 
 ã“のコヌドは、アプリケヌションで実際に䜿甚したり、パスワヌドハッシュをデヌタベヌスに保存するずいった甚途に利甚できたす。
 
@@ -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 (file)
index 0000000..c371b0a
--- /dev/null
@@ -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 | è±†çŸ¥è­˜
+
+次の章では、パスワヌドハッシュ化ず <abbr title="JSON Web Tokens - JSON Web Token">JWT</abbr> ãƒˆãƒŒã‚¯ãƒ³ã‚’䜿った本圓に安党な実装を芋たす。
+
+しかし今は、必芁な特定の詳现に集䞭したしょう。
+
+///
+
+{* ../../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 }
+
+むンタラクティブドキュメントを開きたす: <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a>。
+
+### èªèšŒ { #authenticate }
+
+「Authorize」ボタンをクリックしたす。
+
+次の認蚌情報を䜿いたす:
+
+User: `johndoe`
+
+Password: `secret`
+
+<img src="/img/tutorial/security/image04.png">
+
+システムで認蚌されるず、次のように衚瀺されたす:
+
+<img src="/img/tutorial/security/image05.png">
+
+### è‡ªåˆ†ã®ãƒŠãƒŒã‚¶ãƒŒãƒ‡ãƒŒã‚¿ã‚’取埗 { #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"
+}
+```
+
+<img src="/img/tutorial/security/image06.png">
+
+錠前アむコンをクリックしおログアりトし、同じ操䜜を再床詊すず、次のような 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` ã«åŸºã¥ãå®Œå…šãªã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ã‚·ã‚¹ãƒ†ãƒ ã‚’実装するための道具が揃いたした。
+
+これらの道具を䜿えば、任意のデヌタベヌス、任意のナヌザヌ/デヌタモデルず互換性のあるセキュリティシステムを構築できたす。
+
+ただし、実際にはただ「安党」ではありたせん。
+
+次の章では、安党なパスワヌドハッシュラむブラリず <abbr title="JSON Web Tokens - JSON Web Token">JWT</abbr> ãƒˆãƒŒã‚¯ãƒ³ã®äœ¿ã„方を芋おいきたす。
diff --git a/docs/ja/docs/tutorial/sql-databases.md b/docs/ja/docs/tutorial/sql-databases.md
new file mode 100644 (file)
index 0000000..930e433
--- /dev/null
@@ -0,0 +1,357 @@
+# SQLリレヌショナルデヌタベヌス { #sql-relational-databases }
+
+FastAPI ã¯ SQLリレヌショナルデヌタベヌスの䜿甚を必須にはしたせん。必芁であれば、任意のデヌタベヌスを䜿甚できたす。
+
+ここでは <a href="https://sqlmodel.tiangolo.com/" class="external-link" target="_blank">SQLModel</a> ã‚’䜿った䟋を芋おいきたす。
+
+SQLModel ã¯ <a href="https://www.sqlalchemy.org/" class="external-link" target="_blank">SQLAlchemy</a> ãš Pydantic ã®äžŠã«æ§‹ç¯‰ã•れおいたす。FastAPI ãšåŒã˜äœœè€…により、SQL ãƒ‡ãƒŒã‚¿ãƒ™ãƒŒã‚¹ã‚’䜿う必芁がある FastAPI ã‚¢ãƒ—リに最適になるように䜜られおいたす。
+
+/// tip | è±†çŸ¥è­˜
+
+他の任意の SQL ã‚るいは NoSQL ã®ãƒ‡ãƒŒã‚¿ãƒ™ãƒŒã‚¹ãƒ©ã‚€ãƒ–ラリ堎合によっおは <abbr title="Object Relational Mapper - ã‚ªãƒ–ゞェクト関係マッパヌ: ã„く぀かのクラスが SQL ãƒ†ãƒŒãƒ–ルを衚し、そのむンスタンスがそれらのテヌブルの行を衚すラむブラリを指す専門甚語">"ORMs"</abbr> ãšå‘Œã°ã‚ŒãŸã™ïŒ‰ã‚’䜿うこずもできたす。FastAPI ã¯äœ•も匷制したせん。😎
+
+///
+
+SQLModel ã¯ SQLAlchemy ã‚’ベヌスにしおいるため、SQLAlchemy ãŒã‚µãƒãƒŒãƒˆã™ã‚‹ä»»æ„ã®ãƒ‡ãƒŒã‚¿ãƒ™ãƒŒã‚¹ïŒˆSQLModel ã‹ã‚‰ã‚‚サポヌトされたすを簡単に䜿えたす。䟋えば:
+
+* PostgreSQL
+* MySQL
+* SQLite
+* Oracle
+* Microsoft SQL Server ãªã©
+
+この䟋では、単䞀ファむルで動䜜し、Python ã«çµ±åˆã‚µãƒãƒŒãƒˆãŒã‚るため、SQLite ã‚’䜿いたす。぀たり、この䟋をそのたたコピヌしお実行できたす。
+
+本番アプリでは、PostgreSQL ã®ã‚ˆã†ãªãƒ‡ãƒŒã‚¿ãƒ™ãƒŒã‚¹ã‚µãƒŒãƒãƒŒã‚’䜿いたくなるかもしれたせん。
+
+/// tip | è±†çŸ¥è­˜
+
+フロント゚ンドやその他のツヌルを含む、FastAPI ãš PostgreSQL ã®å…¬åŒãƒ—ロゞェクトゞェネレヌタヌがありたす: <a href="https://github.com/fastapi/full-stack-fastapi-template" class="external-link" target="_blank">https://github.com/fastapi/full-stack-fastapi-template</a>
+
+///
+
+これはずおもシンプルで短いチュヌトリアルです。デヌタベヌスや SQL、より高床な機胜に぀いお孊びたい堎合は、<a href="https://sqlmodel.tiangolo.com/" class="external-link" target="_blank">SQLModel ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ</a>をご芧ください。
+
+## `SQLModel` ã®ã‚€ãƒ³ã‚¹ãƒˆãƒŒãƒ« { #install-sqlmodel }
+
+たずは [仮想環境](../virtual-environments.md){.internal-link target=_blank} ã‚’䜜成・有効化し、`sqlmodel` ã‚’むンストヌルしたす:
+
+<div class="termy">
+
+```console
+$ pip install sqlmodel
+---> 100%
+```
+
+</div>
+
+## å˜äž€ãƒ¢ãƒ‡ãƒ«ã§ã‚¢ãƒ—リ䜜成 { #create-the-app-with-a-single-model }
+
+たずは最も簡単な、単䞀の SQLModel ãƒ¢ãƒ‡ãƒ«ã ã‘を䜿うバヌゞョンを䜜りたす。
+
+埌で、䞋蚘のずおり耇数モデルにしおセキュリティず汎甚性を高めたす。🀓
+
+### ãƒ¢ãƒ‡ãƒ«ã®äœœæˆ { #create-models }
+
+`SQLModel` ã‚’むンポヌトしおデヌタベヌスモデルを䜜成したす:
+
+{* ../../docs_src/sql_databases/tutorial001_an_py310.py ln[1:11] hl[7:11] *}
+
+`Hero` ã‚¯ãƒ©ã‚¹ã¯ Pydantic ãƒ¢ãƒ‡ãƒ«ã«ã‚ˆãäŒŒãŠã„たす実際には内郚的に Pydantic ãƒ¢ãƒ‡ãƒ«ã§ã‚‚ありたす。
+
+いく぀かの違いがありたす:
+
+* `table=True` ã¯ SQLModel ã«å¯Ÿã—お「これはテヌブルモデルであり、SQL ãƒ‡ãƒŒã‚¿ãƒ™ãƒŒã‚¹ã®ãƒ†ãƒŒãƒ–ルを衚す。単なるデヌタモデル通垞の Pydantic ã‚¯ãƒ©ã‚¹ïŒ‰ã§ã¯ãªã„」ず䌝えたす。
+
+* `Field(primary_key=True)` ã¯ `id` ãŒ SQL ãƒ‡ãƒŒã‚¿ãƒ™ãƒŒã‚¹ã®ãƒ—ラむマリキヌであるこずを SQLModel ã«äŒãˆãŸã™ïŒˆSQL ã®ãƒ—ラむマリキヌに぀いおは SQLModel ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’参照しおください。
+
+    æ³š: ãƒ—ラむマリキヌのフィヌルドには `int | None` ã‚’䜿っおいたす。これは Python ã‚³ãƒŒãƒ‰å†…で `id=None` ã®ã‚ˆã†ã«ã€Œ`id` ãªã—でオブゞェクトを䜜成」し、保存時にデヌタベヌスが生成するこずを想定するためです。SQLModel ã¯ãƒ‡ãƒŒã‚¿ãƒ™ãƒŒã‚¹ãŒ `id` ã‚’提䟛するこずを理解し、スキヌマでは「NULL äžå¯ã® `INTEGER` åˆ—」を定矩したす。詳现は <a href="https://sqlmodel.tiangolo.com/tutorial/create-db-and-table/#primary-key-id" class="external-link" target="_blank">SQLModel ã®ãƒ—ラむマリキヌに関するドキュメント</a> ã‚’参照しおください。
+
+* `Field(index=True)` ã¯ã€ã“の列に察しお SQL ã®ã‚€ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã‚’䜜成するよう SQLModel ã«æŒ‡ç€ºã—たす。これにより、この列でフィルタしおデヌタを読む堎合に怜玢が高速になりたす。
+
+    `str` ãšå®£èš€ã•れたものは、SQL ã® `TEXT`デヌタベヌスによっおは `VARCHAR`型の列になるこずを SQLModel ã¯ç†è§£ã—たす。
+
+### Engine ã®äœœæˆ { #create-an-engine }
+
+SQLModel ã® `engine`内郚的には SQLAlchemy ã® `engine`は、デヌタベヌスぞの接続を保持したす。
+
+同じデヌタベヌスに接続するために、コヌド党䜓で 1 ã€ã® `engine` ã‚ªãƒ–ゞェクトを共有したす。
+
+{* ../../docs_src/sql_databases/tutorial001_an_py310.py ln[14:18] hl[14:15,17:18] *}
+
+`check_same_thread=False` ã‚’䜿うず、FastAPI ãŒç•°ãªã‚‹ã‚¹ãƒ¬ãƒƒãƒ‰ã§åŒã˜ SQLite ãƒ‡ãƒŒã‚¿ãƒ™ãƒŒã‚¹ã‚’䜿えるようになりたす。これは、䟝存関係などにより 1 ã€ã®ãƒªã‚¯ã‚šã‚¹ãƒˆãŒè€‡æ•°ã‚¹ãƒ¬ãƒƒãƒ‰ã‚’䜿う可胜性があるため、必芁です。
+
+心配はいりたせん。このコヌドの構成では、埌で「1 ãƒªã‚¯ã‚šã‚¹ãƒˆã«ã€ã 1 ã€ã® SQLModel ã‚»ãƒƒã‚·ãƒ§ãƒ³ã€ã‚’確実に䜿うようにしたす。実際、`check_same_thread` ã¯ãã‚Œã‚’実珟しようずしおいたす。
+
+### ãƒ†ãƒŒãƒ–ルの䜜成 { #create-the-tables }
+
+`SQLModel.metadata.create_all(engine)` ã‚’䜿っお、すべおのテヌブルモデルのテヌブルを䜜成する関数を远加したす。
+
+{* ../../docs_src/sql_databases/tutorial001_an_py310.py ln[21:22] hl[21:22] *}
+
+### Session äŸå­˜é–¢ä¿‚の䜜成 { #create-a-session-dependency }
+
+`Session` ã¯ã€ãƒ¡ãƒ¢ãƒªäžŠã§ã‚ªãƒ–ゞェクトを保持しお倉曎を远跡し、`engine` ã‚’䜿っおデヌタベヌスず通信したす。
+
+各リク゚ストごずに新しい `Session` ã‚’提䟛する、`yield` ã‚’䜿った FastAPI ã®äŸå­˜é–¢ä¿‚を䜜成したす。これにより、1 ãƒªã‚¯ã‚šã‚¹ãƒˆã«ã€ã 1 ã€ã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ã‚’䜿うこずが保蚌されたす。🀓
+
+続いお、この䟝存関係を䜿うコヌドを簡朔にするために、`Annotated` ã«ã‚ˆã‚‹äŸå­˜é–¢ä¿‚ `SessionDep` ã‚’䜜成したす。
+
+{* ../../docs_src/sql_databases/tutorial001_an_py310.py ln[25:30]  hl[25:27,30] *}
+
+### èµ·å‹•時にテヌブルを䜜成 { #create-database-tables-on-startup }
+
+アプリケヌションの起動時にデヌタベヌスのテヌブルを䜜成したす。
+
+{* ../../docs_src/sql_databases/tutorial001_an_py310.py ln[32:37] hl[35:37] *}
+
+ここでは、アプリケヌションのスタヌトアップむベントでテヌブルを䜜成しおいたす。
+
+本番では、アプリを起動する前にマむグレヌションスクリプトを実行するのが䞀般的でしょう。🀓
+
+/// tip | è±†çŸ¥è­˜
+
+SQLModel ã¯ Alembic ã‚’ラップしたマむグレヌションナヌティリティを提䟛予定ですが、珟時点では <a href="https://alembic.sqlalchemy.org/en/latest/" class="external-link" target="_blank">Alembic</a> ã‚’盎接䜿えたす。
+
+///
+
+### Hero ã®äœœæˆ { #create-a-hero }
+
+各 SQLModel ãƒ¢ãƒ‡ãƒ«ã¯ Pydantic ãƒ¢ãƒ‡ãƒ«ã§ã‚‚あるため、Pydantic ãƒ¢ãƒ‡ãƒ«ãšåŒã˜ã‚ˆã†ã«åž‹ã‚¢ãƒŽãƒ†ãƒŒã‚·ãƒ§ãƒ³ã§äœ¿ãˆãŸã™ã€‚
+
+䟋えば、`Hero` åž‹ã®ãƒ‘ラメヌタを宣蚀するず、JSON ãƒœãƒ‡ã‚£ã‹ã‚‰èª­ã¿èŸŒãŸã‚ŒãŸã™ã€‚
+
+同様に、関数の戻り倀の型ずしお宣蚀するず、そのデヌタ圢状が自動 API ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã® UI ã«è¡šç€ºã•れたす。
+
+{* ../../docs_src/sql_databases/tutorial001_an_py310.py ln[40:45] hl[40:45] *}
+
+ここでは `SessionDep` äŸå­˜é–¢ä¿‚`Session`を䜿っお、新しい `Hero` ã‚’ `Session` ã‚€ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã«è¿œåŠ ã—ã€ãƒ‡ãƒŒã‚¿ãƒ™ãƒŒã‚¹ã«ã‚³ãƒŸãƒƒãƒˆã—ã€`hero` ã®ãƒ‡ãƒŒã‚¿ã‚’リフレッシュしおから返したす。
+
+### Hero ã®å–埗 { #read-heroes }
+
+`select()` ã‚’䜿っおデヌタベヌスから `Hero` ã‚’取埗できたす。結果のペヌゞネヌションのために `limit` ãš `offset` ã‚’含められたす。
+
+{* ../../docs_src/sql_databases/tutorial001_an_py310.py ln[48:55] hl[51:52,54] *}
+
+### å˜äž€ã® Hero ã‚’取埗 { #read-one-hero }
+
+単䞀の `Hero` ã‚’取埗できたす。
+
+{* ../../docs_src/sql_databases/tutorial001_an_py310.py ln[58:63] hl[60] *}
+
+### Hero ã®å‰Šé™€ { #delete-a-hero }
+
+`Hero` ã‚’削陀するこずもできたす。
+
+{* ../../docs_src/sql_databases/tutorial001_an_py310.py ln[66:73] hl[71] *}
+
+### ã‚¢ãƒ—リの起動 { #run-the-app }
+
+アプリを起動したす:
+
+<div class="termy">
+
+```console
+$ fastapi dev main.py
+
+<span style="color: green;">INFO</span>:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+```
+
+</div>
+
+その埌 `/docs` ã® UI ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãšã€FastAPI ãŒã“れらのモデルを䜿っお API ã‚’ドキュメント化し、同時にデヌタのシリアラむズずバリデヌションにも䜿っおいるこずがわかりたす。
+
+<div class="screenshot">
+<img src="/img/tutorial/sql-databases/image01.png">
+</div>
+
+## è€‡æ•°ãƒ¢ãƒ‡ãƒ«ã§ã‚¢ãƒ—リを曎新 { #update-the-app-with-multiple-models }
+
+ここで、少しリファクタリングしおセキュリティず汎甚性を高めたしょう。
+
+前のアプリでは、UI äžŠã§ã‚¯ãƒ©ã‚€ã‚¢ãƒ³ãƒˆãŒäœœæˆã™ã‚‹ `Hero` ã® `id` ã‚’自分で決められおしたいたす。😱
+
+それは蚱可すべきではありたせん。すでに DB ã§å‰²ã‚Šåœ“お枈みの `id` ã‚’䞊曞きされる可胜性がありたす。`id` ã®æ±ºå®šã¯ã‚¯ãƒ©ã‚€ã‚¢ãƒ³ãƒˆã§ã¯ãªãã€ãƒãƒƒã‚¯ã‚šãƒ³ãƒ‰ãŸãŸã¯ãƒ‡ãƒŒã‚¿ãƒ™ãƒŒã‚¹ãŒè¡Œã†ã¹ãã§ã™ã€‚
+
+さらに、`secret_name` ã‚’䜜っおいたすが、珟状ではそれをどこでも返しおしたっおいたす。これではあたり「シヌクレット」ではありたせん... ðŸ˜…
+
+これらを、いく぀かの远加モデルで修正したす。ここで SQLModel ã®çœŸäŸ¡ãŒç™ºæ®ã•れたす。✚
+
+### è€‡æ•°ãƒ¢ãƒ‡ãƒ«ã®äœœæˆ { #create-multiple-models }
+
+SQLModel ã§ã¯ã€`table=True` ã®ã‚るモデルクラスがテヌブルモデルです。
+
+`table=True` ã®ãªã„モデルクラスはデヌタモデルで、実䜓は小さな機胜がいく぀か远加されたPydantic ãƒ¢ãƒ‡ãƒ«ã§ã™ã€‚🀓
+
+SQLModel ã§ã¯ç¶™æ‰¿ã‚’䜿っお、あらゆるケヌスでフィヌルドの重耇を避けられたす。
+
+#### `HeroBase` - ãƒ™ãƒŒã‚¹ã‚¯ãƒ©ã‚¹ { #herobase-the-base-class }
+
+たず、すべおのモデルで共有されるフィヌルドを持぀ `HeroBase` ãƒ¢ãƒ‡ãƒ«ã‚’䜜りたす:
+
+* `name`
+* `age`
+
+{* ../../docs_src/sql_databases/tutorial002_an_py310.py ln[7:9] hl[7:9] *}
+
+#### `Hero` - ãƒ†ãƒŒãƒ–ルモデル { #hero-the-table-model }
+
+次に、実際のテヌブルモデルである `Hero` ã‚’䜜りたす。他のモデルには垞に含たれない远加フィヌルドを持ちたす:
+
+* `id`
+* `secret_name`
+
+`Hero` ã¯ `HeroBase` ã‚’継承しおいるため、`HeroBase` ã§å®£èš€ã•れたフィヌルドも持ちたす。぀たり、`Hero` ã®å…šãƒ•ィヌルドは次のずおりです:
+
+* `id`
+* `name`
+* `age`
+* `secret_name`
+
+{* ../../docs_src/sql_databases/tutorial002_an_py310.py ln[7:14] hl[12:14] *}
+
+#### `HeroPublic` - å…¬é–‹ç”šãƒ‡ãƒŒã‚¿ãƒ¢ãƒ‡ãƒ« { #heropublic-the-public-data-model }
+
+次に、API ã®ã‚¯ãƒ©ã‚€ã‚¢ãƒ³ãƒˆã«è¿”す `HeroPublic` ãƒ¢ãƒ‡ãƒ«ã‚’䜜りたす。
+
+これは `HeroBase` ãšåŒã˜ãƒ•ィヌルドを持぀ため、`secret_name` ã¯å«ã¿ãŸã›ã‚“。
+
+これでヒヌロヌの正䜓は守られたす🥷
+
+たた、`id: int` ã‚’再宣蚀したす。これにより、API ã‚¯ãƒ©ã‚€ã‚¢ãƒ³ãƒˆãšã®é–“で「垞に `id` ãŒå­˜åœšã—、`int` ã§ã‚る`None` ã«ã¯ãªã‚‰ãªã„」ずいう契玄を結びたす。
+
+/// tip | è±†çŸ¥è­˜
+
+戻り倀のモデルで、倀が垞に存圚し垞に `int``None` ã§ã¯ãªã„であるこずを保蚌するず、API ã‚¯ãƒ©ã‚€ã‚¢ãƒ³ãƒˆåŽã®ã‚³ãƒŒãƒ‰ã¯ã¯ã‚‹ã‹ã«ã‚·ãƒ³ãƒ—ルに曞けたす。
+
+加えお、自動生成クラむアントのむンタヌフェヌスも簡朔になり、あなたの API ãšã‚„り取りする開発者䜓隓が向䞊したす。😎
+
+///
+
+`HeroPublic` ã®ãƒ•ィヌルドは `HeroBase` ãšåŒã˜ã§ã€`id` ã¯ `int``None` ã§ã¯ãªã„ずしお宣蚀されたす:
+
+* `id`
+* `name`
+* `age`
+
+{* ../../docs_src/sql_databases/tutorial002_an_py310.py ln[7:18] hl[17:18] *}
+
+#### `HeroCreate` - äœœæˆç”šãƒ‡ãƒŒã‚¿ãƒ¢ãƒ‡ãƒ« { #herocreate-the-data-model-to-create-a-hero }
+
+次に、クラむアントからのデヌタをバリデヌトする `HeroCreate` ãƒ¢ãƒ‡ãƒ«ã‚’䜜りたす。
+
+これは `HeroBase` ãšåŒã˜ãƒ•ィヌルドに加え、`secret_name` ã‚‚持ちたす。
+
+これで、クラむアントが新しいヒヌロヌを䜜成する際に `secret_name` ã‚’送信し、デヌタベヌスに保存されたすが、そのシヌクレット名は API ã§ã¯ã‚¯ãƒ©ã‚€ã‚¢ãƒ³ãƒˆã«è¿”されたせん。
+
+/// tip | è±†çŸ¥è­˜
+
+これはパスワヌドを扱う際の方法ず同じです。受け取りたすが、API ã§ã¯è¿”したせん。
+
+たた、保存前にパスワヌドの倀はハッシュ化し、平文のたた保存しないでください。
+
+///
+
+`HeroCreate` ã®ãƒ•ィヌルド:
+
+* `name`
+* `age`
+* `secret_name`
+
+{* ../../docs_src/sql_databases/tutorial002_an_py310.py ln[7:22] hl[21:22] *}
+
+#### `HeroUpdate` - æ›Žæ–°ç”šãƒ‡ãƒŒã‚¿ãƒ¢ãƒ‡ãƒ« { #heroupdate-the-data-model-to-update-a-hero }
+
+前のバヌゞョンのアプリにはヒヌロヌを曎新する方法がありたせんでしたが、耇数モデルを䜿えば可胜です。🎉
+
+`HeroUpdate` ãƒ‡ãƒŒã‚¿ãƒ¢ãƒ‡ãƒ«ã¯å°‘し特殊で、新しいヒヌロヌを䜜成するのに必芁なフィヌルドず同じフィヌルドをすべお持ちたすが、すべおのフィヌルドがオプショナルデフォルト倀を持぀です。これにより、曎新時には倉曎したいフィヌルドだけを送れたす。
+
+すべおのフィヌルドの型が実質的に倉わる`None` ã‚’含み、デフォルト倀が `None` ã«ãªã‚‹ïŒ‰ãŸã‚ã€ãƒ•ィヌルドは再宣蚀する必芁がありたす。
+
+すべおのフィヌルドを再宣蚀するので、厳密には `HeroBase` ã‚’継承する必芁はありたせん。䞀貫性のためにここでは継承しおいたすが、必須ではありたせん。奜みの問題です。🀷
+
+`HeroUpdate` ã®ãƒ•ィヌルド:
+
+* `name`
+* `age`
+* `secret_name`
+
+{* ../../docs_src/sql_databases/tutorial002_an_py310.py ln[7:28] hl[25:28] *}
+
+### `HeroCreate` ã§äœœæˆã— `HeroPublic` ã‚’返す { #create-with-herocreate-and-return-a-heropublic }
+
+耇数モデルが甚意できたので、それらを䜿うようにアプリの郚分を曎新したす。
+
+リク゚ストでは `HeroCreate` ãƒ‡ãƒŒã‚¿ãƒ¢ãƒ‡ãƒ«ã‚’受け取り、そこから `Hero` ãƒ†ãƒŒãƒ–ルモデルを䜜成したす。
+
+この新しいテヌブルモデル `Hero` ã¯ã€ã‚¯ãƒ©ã‚€ã‚¢ãƒ³ãƒˆã‹ã‚‰é€ã‚‰ã‚ŒãŸãƒ•ィヌルドを持ち、デヌタベヌスによっお生成された `id` ã‚‚持ちたす。
+
+関数からはこのテヌブルモデル `Hero` ã‚’そのたた返したす。しかし `response_model` ã« `HeroPublic` ãƒ‡ãƒŒã‚¿ãƒ¢ãƒ‡ãƒ«ã‚’指定しおいるため、FastAPI ãŒ `HeroPublic` ã‚’䜿っおデヌタをバリデヌト・シリアラむズしたす。
+
+{* ../../docs_src/sql_databases/tutorial002_an_py310.py ln[56:62] hl[56:58] *}
+
+/// tip | è±†çŸ¥è­˜
+
+今回は返华倀の型アノテヌション `-> HeroPublic` ã®ä»£ã‚ã‚Šã« `response_model=HeroPublic` ã‚’䜿いたす。返しおいる倀は実際には `HeroPublic` ã§ã¯ãªã„ためです。
+
+もし `-> HeroPublic` ãšå®£èš€ã™ã‚‹ãšã€ã‚šãƒ‡ã‚£ã‚¿ã‚„ Linter ã¯ïŒˆæ­£ã—く「`HeroPublic` ã§ã¯ãªã `Hero` ã‚’返しおいる」ず譊告したす。
+
+`response_model` ã«æŒ‡å®šã™ã‚‹ã“ずで、型アノテヌションや゚ディタ等の補助を厩さずに、FastAPI ã«ã‚·ãƒªã‚¢ãƒ©ã‚€ã‚ºã®ä»•事を任せられたす。
+
+///
+
+### `HeroPublic` ã§ Hero ã‚’取埗 { #read-heroes-with-heropublic }
+
+前ず同様に `Hero` ã‚’取埗できたす。再び `response_model=list[HeroPublic]` ã‚’䜿っお、デヌタが正しくバリデヌト・シリアラむズされるこずを保蚌したす。
+
+{* ../../docs_src/sql_databases/tutorial002_an_py310.py ln[65:72] hl[65] *}
+
+### `HeroPublic` ã§å˜äž€ã® Hero ã‚’取埗 { #read-one-hero-with-heropublic }
+
+単䞀のヒヌロヌを取埗したす:
+
+{* ../../docs_src/sql_databases/tutorial002_an_py310.py ln[75:80] hl[77] *}
+
+### `HeroUpdate` ã§ Hero ã‚’曎新 { #update-a-hero-with-heroupdate }
+
+ヒヌロヌを曎新できたす。ここでは HTTP ã® `PATCH` ã‚’䜿いたす。
+
+コヌドでは、クラむアントが送ったデヌタのみデフォルト倀ずしお入っおくる倀は陀倖を持぀ `dict` ã‚’取埗したす。これには `exclude_unset=True` ã‚’䜿いたす。これが䞻なコツです。🪄
+
+その埌、`hero_db.sqlmodel_update(hero_data)` ã‚’䜿っお、`hero_db` ã‚’ `hero_data` ã®å†…容で曎新したす。
+
+{* ../../docs_src/sql_databases/tutorial002_an_py310.py ln[83:93] hl[83:84,88:89] *}
+
+### å†åºŠ Hero ã‚’削陀 { #delete-a-hero-again }
+
+ヒヌロヌの削陀はほずんど倉わりたせん。
+
+ここはリファクタリング欲求を満たさないたたにしおおきたす。😅
+
+{* ../../docs_src/sql_databases/tutorial002_an_py310.py ln[96:103] hl[101] *}
+
+### ã‚¢ãƒ—リの再起動 { #run-the-app-again }
+
+アプリを再床起動したす:
+
+<div class="termy">
+
+```console
+$ fastapi dev main.py
+
+<span style="color: green;">INFO</span>:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+```
+
+</div>
+
+`/docs` ã® API UI ã«è¡Œããšã€å†…容が曎新されおおり、ヒヌロヌ䜜成時にクラむアントから `id` ã‚’受け取るこずは期埅されおいない、などが確認できたす。
+
+<div class="screenshot">
+<img src="/img/tutorial/sql-databases/image02.png">
+</div>
+
+## ãŸãšã‚ { #recap }
+
+<a href="https://sqlmodel.tiangolo.com/" class="external-link" target="_blank">SQLModel</a> ã‚’䜿っお SQL ãƒ‡ãƒŒã‚¿ãƒ™ãƒŒã‚¹ãšã‚„り取りし、デヌタモデルずテヌブルモデルでコヌドを簡朔にできたす。
+
+さらに倚くを孊ぶには SQLModel ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’ご芧ください。<a href="https://sqlmodel.tiangolo.com/tutorial/fastapi/" class="external-link" target="_blank">FastAPI ãš SQLModel ã‚’䜿うチュヌトリアル</a> ã‚‚ありたす。🚀
index c79789494caa677446b3ae94acf964c6f02af1ac..52e28d6b054997487dd57fd130117051cb61680a 100644 (file)
@@ -7,7 +7,7 @@
 * `StaticFiles` ã‚’むンポヌト。
 * `StaticFiles()` ã‚€ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’特定のパスに「マりント」。
 
-{* ../../docs_src/static_files/tutorial001_py39.py hl[2,6] *}
+{* ../../docs_src/static_files/tutorial001_py310.py hl[2,6] *}
 
 /// note | æŠ€è¡“詳çް
 
index 0ec6250f317f2ca747e5ac82bcbe49a28e306d19..b09f1af723ecf7cf20767cdc2dafddfd66d68239 100644 (file)
@@ -30,7 +30,7 @@ $ pip install httpx
 
 ãƒã‚§ãƒƒã‚¯ã—たい Python ã®æš™æº–的な匏ず共に、シンプルに `assert` æ–‡ã‚’蚘述したす (これも `pytest` ã®æš™æº–です)。
 
-{* ../../docs_src/app_testing/tutorial001_py39.py hl[2,12,15:18] *}
+{* ../../docs_src/app_testing/tutorial001_py310.py hl[2,12,15:18] *}
 
 /// tip | è±†çŸ¥è­˜
 
@@ -76,7 +76,7 @@ FastAPIアプリケヌションぞのリク゚ストの送信ずは別に、テ
 ãƒ•ァむル `main.py` ã« **FastAPI** ã‚¢ãƒ—リがありたす:
 
 
-{* ../../docs_src/app_testing/app_a_py39/main.py *}
+{* ../../docs_src/app_testing/app_a_py310/main.py *}
 
 ### ãƒ†ã‚¹ãƒˆãƒ•ァむル { #testing-file }
 
@@ -92,7 +92,7 @@ FastAPIアプリケヌションぞのリク゚ストの送信ずは別に、テ
 
 ã“のファむルは同じパッケヌゞ内にあるため、盞察むンポヌトを䜿っお `main` ãƒ¢ã‚žãƒ¥ãƒŒãƒ« (`main.py`) ã‹ã‚‰ã‚ªãƒ–ゞェクト `app` ã‚’むンポヌトできたす:
 
-{* ../../docs_src/app_testing/app_a_py39/test_main.py hl[3] *}
+{* ../../docs_src/app_testing/app_a_py310/test_main.py hl[3] *}
 
 
 ...そしお、これたでず同じようにテストコヌドを曞けたす。
index 6723230632a1e20f357b586c0dbddd5feffe141c..94af6ddae28b3cebe739cdcc46d3e814bf08c8c4 100644 (file)
@@ -50,7 +50,7 @@ $ cd awesome-project
 
 ## ä»®æƒ³ç’°å¢ƒã®äœœæˆ { #create-a-virtual-environment }
 
-Pythonプロゞェクトでの**初めおの**䜜業を開始する際には、**<abbr title="there are other options, this is a simple guideline â€“ ä»–の遞択肢もありたすが、これはシンプルなガむドラむンです">プロゞェクト内</abbr>**に仮想環境を䜜成しおください。
+Pythonプロゞェクトでの**初めおの**䜜業を開始する際には、**<dfn title="他の遞択肢もありたすが、これはシンプルなガむドラむンです">プロゞェクト内</dfn>**に仮想環境を䜜成しおください。
 
 /// tip | è±†çŸ¥è­˜
 
@@ -163,7 +163,7 @@ $ source .venv/Scripts/activate
 
 **新しいパッケヌゞ**を仮想環境にむンストヌルするたびに、環境をもう䞀床**有効化**しおください。
 
-こうするこずで、そのパッケヌゞがむンストヌルした**タヌミナル<abbr title="command line interface">CLI</abbr>プログラム**を䜿甚する堎合に、仮想環境内のものが確実に䜿われ、グロヌバル環境にむンストヌルされおいる別のものおそらく必芁なものずは異なるバヌゞョンを誀っお䜿甚するこずを防ぎたす。
+こうするこずで、そのパッケヌゞがむンストヌルした**タヌミナル<abbr title="command line interface - ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚€ãƒ³ã‚€ãƒ³ã‚¿ãƒŒãƒ•ェヌス">CLI</abbr>プログラム**を䜿甚する堎合に、仮想環境内のものが確実に䜿われ、グロヌバル環境にむンストヌルされおいる別のものおそらく必芁なものずは異なるバヌゞョンを誀っお䜿甚するこずを防ぎたす。
 
 ///