diff --git a/docs/ja/docs/_llm-test.md b/docs/ja/docs/_llm-test.md index b3d9fc28cd..4c84a7c04c 100644 --- a/docs/ja/docs/_llm-test.md +++ b/docs/ja/docs/_llm-test.md @@ -11,7 +11,7 @@ * 翻訳が問題ないか確認します。 * 必要であれば、言語固有プロンプト、general プロンプト、または英語ドキュメントを改善します。 * その後、翻訳に残っている問題を手動で修正し、良い翻訳にします。 -* 良い翻訳を用意した状態でもう一度翻訳します。理想的な結果は、LLM が翻訳に一切変更を加えないことです。つまり general プロンプトと言語固有プロンプトが最良であることを意味します(時々いくつかランダムに見える変更を行うことがあります。理由は LLM は決定論的アルゴリズムではない ためです)。 +* 良い翻訳を用意した状態でもう一度翻訳します。理想的な結果は、LLM が翻訳に一切変更を加えないことです。つまり general プロンプトと言語固有プロンプトが最良であることを意味します(時々いくつかランダムに見える変更を行うことがあります。理由は [LLM は決定論的アルゴリズムではない](https://doublespeak.chat/#/handbook#deterministic-output) ためです)。 テスト内容: @@ -95,7 +95,7 @@ $ fastapi run 外部リンク -* スタイルへのリンク -* スクリプトへのリンク -* 画像へのリンク +* [内部リンク](index.md#installation) +* [外部リンク](https://sqlmodel.tiangolo.com/) +* [スタイルへのリンク](https://fastapi.tiangolo.com/css/styles.css) +* [スクリプトへのリンク](https://fastapi.tiangolo.com/js/logic.js) +* [画像へのリンク](https://fastapi.tiangolo.com/img/foo.jpg) リンクのテキストは翻訳し、リンク先のアドレスは翻訳版を指すようにしてください: -* FastAPI リンク +* [FastAPI リンク](https://fastapi.tiangolo.com/ja/) //// diff --git a/docs/ja/docs/advanced/additional-responses.md b/docs/ja/docs/advanced/additional-responses.md index 4c44257885..1d7c2f80e1 100644 --- a/docs/ja/docs/advanced/additional-responses.md +++ b/docs/ja/docs/advanced/additional-responses.md @@ -243,5 +243,5 @@ new_dict = {**old_dict, "new key": "new value"} レスポンスに正確に何を含められるかは、OpenAPI 仕様の次のセクションを参照してください: -- OpenAPI の Responses Object。ここには `Response Object` が含まれます。 -- OpenAPI の Response Object。`responses` パラメータ内の各レスポンスに、ここで定義されている要素を直接含められます。`description`、`headers`、`content`(ここで異なるメディアタイプや JSON Schema を宣言します)、`links` など。 +- [OpenAPI の Responses Object](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#responses-object)、ここには `Response Object` が含まれます。 +- [OpenAPI の Response Object](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#response-object)、`responses` パラメータ内の各レスポンスに、ここで定義されている要素を直接含められます。`description`、`headers`、`content`(ここで異なるメディアタイプや JSON Schema を宣言します)、`links` など。 diff --git a/docs/ja/docs/advanced/additional-status-codes.md b/docs/ja/docs/advanced/additional-status-codes.md index fdac52e837..ad9bd57dcd 100644 --- a/docs/ja/docs/advanced/additional-status-codes.md +++ b/docs/ja/docs/advanced/additional-status-codes.md @@ -38,4 +38,4 @@ 追加のステータスコードとレスポンスを直接返す場合、それらは OpenAPI スキーマ(API ドキュメント)には含まれません。FastAPI には、事前に何が返されるかを知る方法がないからです。 -しかし、[追加のレスポンス](additional-responses.md){.internal-link target=_blank} を使ってコード内にドキュメント化できます。 +しかし、[追加のレスポンス](additional-responses.md) を使ってコード内にドキュメント化できます。 diff --git a/docs/ja/docs/advanced/advanced-dependencies.md b/docs/ja/docs/advanced/advanced-dependencies.md index d38ce548d1..5181e39d82 100644 --- a/docs/ja/docs/advanced/advanced-dependencies.md +++ b/docs/ja/docs/advanced/advanced-dependencies.md @@ -132,7 +132,7 @@ SQLModel(または SQLAlchemy)でこの特定のユースケースがある このようにすると、セッションはデータベース接続を解放するため、他のリクエストがそれを使えるようになります。 -`yield` を持つ依存関係で早期終了が必要な別のユースケースがある場合は、あなたの具体的なユースケースと、なぜ `yield` を持つ依存関係の早期クローズが有益かを説明して、GitHub Discussion の質問を作成してください。 +`yield` を持つ依存関係で早期終了が必要な別のユースケースがある場合は、あなたの具体的なユースケースと、なぜ `yield` を持つ依存関係の早期クローズが有益かを説明して、[GitHub Discussion の質問](https://github.com/fastapi/fastapi/discussions/new?category=questions)を作成してください。 `yield` を持つ依存関係の早期クローズに納得できるユースケースがある場合は、早期クローズにオプトインする新しい方法を追加することを検討します。 @@ -144,7 +144,7 @@ FastAPI 0.110.0 より前では、`yield` を持つ依存関係を使い、そ ### バックグラウンドタスクと `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} はすでに実行済みでした。 +FastAPI 0.106.0 より前では、`yield` の後で例外を送出することはできませんでした。`yield` を持つ依存関係の終了コードはレスポンス送信「後」に実行されるため、[例外ハンドラ](../tutorial/handling-errors.md#install-custom-exception-handlers)はすでに実行済みでした。 これは主に、依存関係が "yield" した同じオブジェクトをバックグラウンドタスク内で利用できるようにするための設計でした。終了コードはバックグラウンドタスク完了後に実行されるからです。 diff --git a/docs/ja/docs/advanced/async-tests.md b/docs/ja/docs/advanced/async-tests.md index 067e9cc9a2..da2968dbf7 100644 --- a/docs/ja/docs/advanced/async-tests.md +++ b/docs/ja/docs/advanced/async-tests.md @@ -16,11 +16,11 @@ `TestClient` は、標準の pytest を使って通常の `def` のテスト関数から非同期の FastAPI アプリを呼び出すための「おまじない」を内部で行います。しかし、その「おまじない」はテスト関数自体が非同期の場合には機能しません。テストを非同期で実行すると、テスト関数内で `TestClient` は使えなくなります。 -`TestClient` は HTTPX を基に作られており、幸いなことに API のテストには HTTPX を直接利用できます。 +`TestClient` は [HTTPX](https://www.python-httpx.org) を基に作られており、幸いなことに API のテストには HTTPX を直接利用できます。 ## 例 { #example } -簡単な例として、[大きなアプリケーション](../tutorial/bigger-applications.md){.internal-link target=_blank} と [テスト](../tutorial/testing.md){.internal-link target=_blank} で説明したものに似たファイル構成を考えます: +簡単な例として、[大きなアプリケーション](../tutorial/bigger-applications.md) と [テスト](../tutorial/testing.md) で説明したものに似たファイル構成を考えます: ``` . @@ -60,7 +60,7 @@ $ pytest /// tip | 豆知識 -`TestClient` を使っていたときと異なり、テスト関数は `def` ではなく `async def` になっている点に注意してください。 +`TestClient` を使っていたときと異なり、テスト関数は `async def` ではなく `def` になっている点に注意してください。 /// @@ -84,7 +84,7 @@ response = client.get('/') /// warning | 注意 -アプリケーションが lifespan イベントに依存している場合、`AsyncClient` はそれらのイベントをトリガーしません。確実にトリガーするには、florimondmanca/asgi-lifespan の `LifespanManager` を使用してください。 +アプリケーションが lifespan イベントに依存している場合、`AsyncClient` はそれらのイベントをトリガーしません。確実にトリガーするには、[florimondmanca/asgi-lifespan](https://github.com/florimondmanca/asgi-lifespan#usage) の `LifespanManager` を使用してください。 /// @@ -94,6 +94,6 @@ response = client.get('/') /// tip | 豆知識 -テストに非同期関数呼び出しを統合した際に(例: MongoDB の MotorClient 使用時)、`RuntimeError: Task attached to a different loop` に遭遇した場合は、イベントループを必要とするオブジェクトは非同期関数内でのみインスタンス化するようにしてください。例えば `@app.on_event("startup")` コールバック内で行います。 +テストに非同期関数呼び出しを統合した際に(例: [MongoDB の MotorClient](https://stackoverflow.com/questions/41584243/runtimeerror-task-attached-to-a-different-loop) 使用時)、`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 index 67eaa99092..108c437709 100644 --- a/docs/ja/docs/advanced/behind-a-proxy.md +++ b/docs/ja/docs/advanced/behind-a-proxy.md @@ -16,9 +16,9 @@ プロキシのヘッダーは次のとおりです: -* X-Forwarded-For -* X-Forwarded-Proto -* X-Forwarded-Host +* [X-Forwarded-For](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-For) +* [X-Forwarded-Proto](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Proto) +* [X-Forwarded-Host](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Host) /// @@ -60,7 +60,7 @@ https://mysuperapp.com/items/ /// tip | 豆知識 -HTTPS について詳しく知りたい場合は、[HTTPS について](../deployment/https.md){.internal-link target=_blank} を参照してください。 +HTTPS について詳しく知りたい場合は、[HTTPS について](../deployment/https.md) を参照してください。 /// @@ -228,7 +228,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1 サーバー(Uvicorn)は、その `root_path` をアプリに渡す以外の用途では使用しない点に注意してください。 -しかし、ブラウザで http://127.0.0.1:8000/app にアクセスすると、通常どおりのレスポンスが表示されます: +しかし、ブラウザで [http://127.0.0.1:8000/app](http://127.0.0.1:8000/app) にアクセスすると、通常どおりのレスポンスが表示されます: ```JSON { @@ -251,9 +251,9 @@ Uvicorn は、プロキシが `http://127.0.0.1:8000/app` にアクセスして ## Traefik を使ったローカル検証 { #testing-locally-with-traefik } -Traefik を使えば、パスプレフィックスを削除する構成をローカルで簡単に試せます。 +[Traefik](https://docs.traefik.io/) を使えば、パスプレフィックスを削除する構成をローカルで簡単に試せます。 -Traefik をダウンロード してください。単一バイナリなので、圧縮ファイルを展開して端末から直接実行できます。 +[Traefik をダウンロード](https://github.com/containous/traefik/releases) してください。単一バイナリなので、圧縮ファイルを展開して端末から直接実行できます。 次の内容で `traefik.toml` というファイルを作成します: @@ -330,7 +330,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1 ### レスポンスの確認 { #check-the-responses } -ここで、Uvicorn のポートの URL http://127.0.0.1:8000/app にアクセスすると、通常どおりのレスポンスが表示されます: +ここで、Uvicorn のポートの URL [http://127.0.0.1:8000/app](http://127.0.0.1:8000/app) にアクセスすると、通常どおりのレスポンスが表示されます: ```JSON { @@ -345,7 +345,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1 /// -次に、Traefik のポートでプレフィックス付きの URL http://127.0.0.1:9999/api/v1/app を開きます。 +次に、Traefik のポートでプレフィックス付きの URL [http://127.0.0.1:9999/api/v1/app](http://127.0.0.1:9999/api/v1/app) を開きます。 同じレスポンスが得られます: @@ -370,13 +370,13 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1 「公式な」アクセス方法は、定義したパスプレフィックス付きのプロキシ経由です。したがって想定どおり、プレフィックスなしの URL で Uvicorn が直接提供するドキュメント UI にアクセスすると動作しません。プロキシ経由でアクセスされることを前提としているためです。 -http://127.0.0.1:8000/docs を確認してください: +[http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) を確認してください: しかし、プロキシ(ポート `9999`)を使った「公式」URL `/api/v1/docs` でドキュメント UI にアクセスすると、正しく動作します!🎉 -http://127.0.0.1:9999/api/v1/docs を確認してください: +[http://127.0.0.1:9999/api/v1/docs](http://127.0.0.1:9999/api/v1/docs) を確認してください: @@ -433,7 +433,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1 /// -ドキュメント UI(http://127.0.0.1:9999/api/v1/docs)では次のように表示されます: +ドキュメント UI([http://127.0.0.1:9999/api/v1/docs](http://127.0.0.1:9999/api/v1/docs))では次のように表示されます: @@ -461,6 +461,6 @@ OpenAPI 仕様の `servers` プロパティは任意です。 ## サブアプリケーションのマウント { #mounting-a-sub-application } -`root_path` を伴うプロキシを使用しつつサブアプリケーションをマウントする必要がある場合でも([サブアプリケーション - マウント](sub-applications.md){.internal-link target=_blank} 参照)、通常どおりに行えます。 +`root_path` を伴うプロキシを使用しつつサブアプリケーションをマウントする必要がある場合でも([サブアプリケーション - マウント](sub-applications.md) 参照)、通常どおりに行えます。 FastAPI は内部で `root_path` を適切に扱うため、そのまま動作します。✨ diff --git a/docs/ja/docs/advanced/custom-response.md b/docs/ja/docs/advanced/custom-response.md index 50a7891658..e66b1f4944 100644 --- a/docs/ja/docs/advanced/custom-response.md +++ b/docs/ja/docs/advanced/custom-response.md @@ -1,150 +1,134 @@ -# カスタムレスポンス - HTML、ストリーム、ファイル、その他のレスポンス { #custom-response-html-stream-file-others } +# カスタムレスポンス - HTML、ストリーム、ファイル、その他 { #custom-response-html-stream-file-others } -デフォルトでは、**FastAPI** は `JSONResponse` を使ってレスポンスを返します。 +デフォルトでは、**FastAPI** はJSONレスポンスを返します。 -[レスポンスを直接返す](response-directly.md){.internal-link target=_blank}で見たように、 `Response` を直接返すことでこの挙動をオーバーライドできます。 +[レスポンスを直接返す](response-directly.md)で見たように、`Response` を直接返してこの挙動を上書きできます。 -しかし、`Response` を直接返すと(または `JSONResponse` のような任意のサブクラスを返すと)、データは自動的に変換されず(`response_model` を宣言していても)、ドキュメントも自動生成されません(例えば、生成されるOpenAPIの一部としてHTTPヘッダー `Content-Type` に特定の「メディアタイプ」を含めるなど)。 +しかし、`Response`(または `JSONResponse` のような任意のサブクラス)を直接返す場合、(`response_model` を宣言していても)データは自動的に変換されず、ドキュメントも自動生成されません(例えば、生成されるOpenAPIの一部としてHTTPヘッダー `Content-Type` に特定の「メディアタイプ」を含めるなど)。 -`response_class` パラメータを使用して、*path operation デコレータ* で使用したい `Response`(任意の `Response` サブクラス)を宣言することもできます。 +一方で、*path operation デコレータ* の `response_class` パラメータを使って、使用したい `Response`(`Response` の任意のサブクラス)を宣言することもできます。 -*path operation 関数* から返されるコンテンツは、その `Response` に含まれます。 - -そしてその `Response` が、`JSONResponse` や `UJSONResponse` の場合のようにJSONメディアタイプ(`application/json`)なら、関数の返り値は *path operationデコレータ* に宣言した任意のPydantic `response_model` により自動的に変換(およびフィルタ)されます。 +*path operation 関数* から返したコンテンツは、その `Response` に格納されます。 /// note | 備考 -メディアタイプを指定せずにレスポンスクラスを利用すると、FastAPIはレスポンスにコンテンツがないことを期待します。そのため、生成されるOpenAPIドキュメントにレスポンスフォーマットが記載されません。 +メディアタイプを持たないレスポンスクラスを使用すると、FastAPIはレスポンスにコンテンツがないものと見なします。そのため、生成されるOpenAPIドキュメントにレスポンスフォーマットは記載されません。 /// -## `ORJSONResponse` を使う { #use-orjsonresponse } +## JSONレスポンス { #json-responses } -例えば、パフォーマンスを絞り出したい場合は、`orjson`をインストールし、レスポンスとして `ORJSONResponse` をセットできます。 +FastAPI はデフォルトでJSONレスポンスを返します。 -使いたい `Response` クラス(サブクラス)をインポートし、*path operationデコレータ* に宣言します。 +[レスポンスモデル](../tutorial/response-model.md) を宣言すると、FastAPI は Pydantic を使ってデータをJSONにシリアライズします。 -大きなレスポンスの場合、`Response` を直接返すほうが、辞書を返すよりもはるかに高速です。 +レスポンスモデルを宣言しない場合、FastAPI は [JSON Compatible Encoder](../tutorial/encoder.md) で説明した `jsonable_encoder` を使い、その結果を `JSONResponse` に入れます。 -これは、デフォルトではFastAPIがチュートリアルで説明した同じ[JSON Compatible Encoder](../tutorial/encoder.md){.internal-link target=_blank}を使って、内部の各アイテムを検査し、JSONとしてシリアライズ可能であることを確認するためです。これにより、例えばデータベースモデルのような**任意のオブジェクト**を返せます。 +`JSONResponse` のようにJSONメディアタイプ(`application/json`)を持つ `response_class` を宣言した場合、*path operation デコレータ* に宣言した任意のPydanticの `response_model` に従って、返すデータは自動的に変換(およびフィルタ)されます。ただし、そのデータは Pydantic でJSONのバイト列にシリアライズされるわけではなく、まず `jsonable_encoder` で変換された後に `JSONResponse` クラスへ渡され、Pythonの標準JSONライブラリでバイト列にシリアライズされます。 -しかし、返そうとしているコンテンツが **JSONでシリアライズ可能**であることが確実なら、それを直接レスポンスクラスに渡して、FastAPIがレスポンスクラスへ渡す前に返却コンテンツを `jsonable_encoder` に通すことで発生する追加のオーバーヘッドを回避できます。 +### JSONのパフォーマンス { #json-performance } -{* ../../docs_src/custom_response/tutorial001b_py310.py hl[2,7] *} +結論として、最大のパフォーマンスを得たい場合は、[レスポンスモデル](../tutorial/response-model.md) を使い、*path operation デコレータ* で `response_class` は宣言しないでください。 -/// info | 情報 - -パラメータ `response_class` は、レスポンスの「メディアタイプ」を定義するためにも利用されます。 - -この場合、HTTPヘッダー `Content-Type` には `application/json` がセットされます。 - -そして、OpenAPIにはそのようにドキュメントされます。 - -/// - -/// tip | 豆知識 - -`ORJSONResponse` はFastAPIでのみ利用可能で、Starletteでは利用できません。 - -/// +{* ../../docs_src/response_model/tutorial001_01_py310.py ln[15:17] hl[16] *} ## HTMLレスポンス { #html-response } -**FastAPI** からHTMLを直接返す場合は、`HTMLResponse` を使います。 +**FastAPI** からHTMLを直接返すには、`HTMLResponse` を使います。 -* `HTMLResponse` をインポートする。 -* *path operation デコレータ* のパラメータ `response_class` に `HTMLResponse` を渡す。 +* `HTMLResponse` をインポートする +* *path operation デコレータ* のパラメータ `response_class` に `HTMLResponse` を渡す {* ../../docs_src/custom_response/tutorial002_py310.py hl[2,7] *} /// info | 情報 -パラメータ `response_class` は、レスポンスの「メディアタイプ」を定義するためにも利用されます。 +パラメータ `response_class` は、レスポンスの「メディアタイプ」を定義するためにも使用されます。 -この場合、HTTPヘッダー `Content-Type` には `text/html` がセットされます。 +この場合、HTTPヘッダー `Content-Type` には `text/html` が設定されます。 -そして、OpenAPIにはそのようにドキュメントされます。 +そして、OpenAPIにもそのようにドキュメント化されます。 /// ### `Response` を返す { #return-a-response } -[レスポンスを直接返す](response-directly.md){.internal-link target=_blank}で見たように、レスポンスを返すことで、*path operation* の中でレスポンスを直接オーバーライドすることもできます。 +[レスポンスを直接返す](response-directly.md)で見たように、*path operation* の中でレスポンスを直接返して上書きすることもできます。 -上記と同じ例において、 `HTMLResponse` を返すと、このようになります: +上記と同じ例で、`HTMLResponse` を返すと次のようになります: {* ../../docs_src/custom_response/tutorial003_py310.py hl[2,7,19] *} /// warning | 注意 -*path operation関数* から直接返される `Response` は、OpenAPIにドキュメントされず(例えば、`Content-Type` がドキュメントされない)、自動的な対話的ドキュメントでも表示されません。 +*path operation 関数* から直接返される `Response` は、OpenAPIにドキュメント化されず(例えば `Content-Type` がドキュメント化されない)、自動生成の対話的ドキュメントにも表示されません。 /// /// info | 情報 -もちろん、実際の `Content-Type` ヘッダーやステータスコードなどは、返された `Response` オブジェクトに由来します。 +もちろん、実際の `Content-Type` ヘッダーやステータスコードなどは、返した `Response` オブジェクトに由来します。 /// -### OpenAPIドキュメントと `Response` のオーバーライド { #document-in-openapi-and-override-response } +### OpenAPIにドキュメント化しつつ `Response` を上書き { #document-in-openapi-and-override-response } -関数の中でレスポンスをオーバーライドしつつも、OpenAPI に「メディアタイプ」をドキュメント化したいなら、`response_class` パラメータを使用し、かつ `Response` オブジェクトを返します。 +関数の中からレスポンスを上書きしつつ、同時にOpenAPIで「メディアタイプ」をドキュメント化したい場合は、`response_class` パラメータを使用し、かつ `Response` オブジェクトを返します。 -`response_class` はOpenAPIの*path operation*のドキュメント化のためにのみ使用され、`Response` はそのまま使用されます。 +この場合、`response_class` はOpenAPIの *path operation* をドキュメント化するためだけに使われ、実際には返した `Response` がそのまま使用されます。 #### `HTMLResponse` を直接返す { #return-an-htmlresponse-directly } -例えば、このようになります: +例えば、次のようになります: {* ../../docs_src/custom_response/tutorial004_py310.py hl[7,21,23] *} -この例では、関数 `generate_html_response()` は、`str` のHTMLを返すのではなく、`Response` を生成して返しています。 +この例では、関数 `generate_html_response()` はHTMLの `str` を返すのではなく、すでに `Response` を生成して返しています。 -`generate_html_response()` を呼び出した結果を返すことにより、デフォルトの **FastAPI** の挙動をオーバーライドする `Response` をすでに返しています。 +`generate_html_response()` の呼び出し結果を返すことで、デフォルトの **FastAPI** の挙動を上書きする `Response` をすでに返しています。 -しかし、`response_class` にも `HTMLResponse` を渡しているため、**FastAPI** はOpenAPIと対話的ドキュメントで、`text/html` のHTMLとしてどのようにドキュメント化すればよいかを理解できます: +しかし、`response_class` にも `HTMLResponse` を渡しているため、**FastAPI** はOpenAPIおよび対話的ドキュメントで、それが `text/html` のHTMLであると正しくドキュメント化できます: ## 利用可能なレスポンス { #available-responses } -以下が利用可能なレスポンスの一部です。 +以下は利用可能なレスポンスの一部です。 -`Response` を使って他の何かを返せますし、カスタムのサブクラスも作れることを覚えておいてください。 +`Response` を使って他のものを返したり、カスタムサブクラスを作成することもできます。 /// note | 技術詳細 -`from starlette.responses import HTMLResponse` も利用できます。 +`from starlette.responses import HTMLResponse` を使うこともできます。 -**FastAPI** は開発者の利便性のために、`starlette.responses` と同じものを `fastapi.responses` として提供しています。しかし、利用可能なレスポンスのほとんどはStarletteから直接提供されます。 +**FastAPI** は開発者の利便性のために、`starlette.responses` と同じものを `fastapi.responses` として提供しています。ただし、利用可能なレスポンスの多くはStarletteから直接提供されています。 /// ### `Response` { #response } -メインの `Response` クラスで、他の全てのレスポンスはこれを継承しています。 +メインの `Response` クラスで、他のすべてのレスポンスはこれを継承しています。 直接返すことができます。 以下のパラメータを受け付けます。 -* `content` - `str` か `bytes`。 -* `status_code` - `int` のHTTPステータスコード。 -* `headers` - 文字列の `dict` 。 -* `media_type` - メディアタイプを示す `str` 。例えば `"text/html"` 。 +* `content` - `str` または `bytes` +* `status_code` - `int` のHTTPステータスコード +* `headers` - 文字列の `dict` +* `media_type` - メディアタイプを示す `str`。例: `"text/html"` -FastAPI(実際にはStarlette)は自動的にContent-Lengthヘッダーを含みます。また、`media_type` に基づいたContent-Typeヘッダーを含み、テキストタイプのためにcharsetを追加します。 +FastAPI(実際にはStarlette)は自動的に Content-Length ヘッダーを含めます。また、`media_type` に基づいた Content-Type ヘッダーを含め、テキストタイプには charset を追加します。 {* ../../docs_src/response_directly/tutorial002_py310.py hl[1,18] *} ### `HTMLResponse` { #htmlresponse } -上で読んだように、テキストやバイトを受け取り、HTMLレスポンスを返します。 +上で読んだように、テキストやバイト列を受け取り、HTMLレスポンスを返します。 ### `PlainTextResponse` { #plaintextresponse } -テキストやバイトを受け取り、プレーンテキストのレスポンスを返します。 +テキストやバイト列を受け取り、プレーンテキストのレスポンスを返します。 {* ../../docs_src/custom_response/tutorial005_py310.py hl[2,7,9] *} @@ -152,45 +136,19 @@ FastAPI(実際にはStarlette)は自動的にContent-Lengthヘッダーを データを受け取り、`application/json` としてエンコードされたレスポンスを返します。 -上で読んだように、**FastAPI** のデフォルトのレスポンスとして利用されます。 +これは、上で述べたように **FastAPI** のデフォルトのレスポンスです。 -### `ORJSONResponse` { #orjsonresponse } +/// note | 技術詳細 -上で読んだように、`orjson`を使った、高速な代替のJSONレスポンスです。 +ただし、レスポンスモデルや返却型を宣言した場合は、それが直接データのJSONシリアライズに使われ、適切なJSONのメディアタイプを持つレスポンスが `JSONResponse` クラスを使わずに直接返されます。 -/// info | 情報 - -これは、例えば `pip install orjson` で `orjson` をインストールする必要があります。 - -/// - -### `UJSONResponse` { #ujsonresponse } - -`ujson`を使った、代替のJSONレスポンスです。 - -/// info | 情報 - -これは、例えば `pip install ujson` で `ujson` をインストールする必要があります。 - -/// - -/// warning | 注意 - -`ujson` は、いくつかのエッジケースの取り扱いについて、Pythonにビルトインされた実装ほど注意深くありません。 - -/// - -{* ../../docs_src/custom_response/tutorial001_py310.py hl[2,7] *} - -/// tip | 豆知識 - -`ORJSONResponse` のほうが高速な代替かもしれません。 +これが最適なパフォーマンスを得る理想的な方法です。 /// ### `RedirectResponse` { #redirectresponse } -HTTPリダイレクトを返します。デフォルトでは307ステータスコード(Temporary Redirect)となります。 +HTTPリダイレクトを返します。デフォルトでは307ステータスコード(Temporary Redirect)を使用します。 `RedirectResponse` を直接返せます: @@ -202,56 +160,50 @@ HTTPリダイレクトを返します。デフォルトでは307ステータス {* ../../docs_src/custom_response/tutorial006b_py310.py hl[2,7,9] *} -その場合、*path operation*関数からURLを直接返せます。 +その場合、*path operation* 関数からURLを直接返せます。 -この場合に使用される `status_code` は `RedirectResponse` のデフォルトである `307` になります。 +この場合に使用される `status_code` は、`RedirectResponse` のデフォルトである `307` になります。 --- -また、`status_code` パラメータを `response_class` パラメータと組み合わせて使うこともできます: +さらに、`status_code` パラメータを `response_class` パラメータと組み合わせて使うこともできます: {* ../../docs_src/custom_response/tutorial006c_py310.py hl[2,7,9] *} ### `StreamingResponse` { #streamingresponse } -非同期ジェネレータ、または通常のジェネレータ/イテレータを受け取り、レスポンスボディをストリームします。 +非同期ジェネレータ、または通常のジェネレータ/イテレータ(`yield` を持つ関数)を受け取り、レスポンスボディをストリームします。 -{* ../../docs_src/custom_response/tutorial007_py310.py hl[2,14] *} +{* ../../docs_src/custom_response/tutorial007_py310.py hl[3,16] *} -#### ファイルライクオブジェクトで `StreamingResponse` を使う { #using-streamingresponse-with-file-like-objects } +/// note | 技術詳細 -file-like オブジェクト(例: `open()` で返されるオブジェクト)がある場合、そのfile-likeオブジェクトを反復処理するジェネレータ関数を作れます。 +`async` タスクは `await` に到達したときにのみキャンセルできます。`await` がない場合、ジェネレータ(`yield` を持つ関数)は適切にキャンセルできず、キャンセル要求後も実行が続く可能性があります。 -そうすれば、最初にすべてをメモリへ読み込む必要はなく、そのジェネレータ関数を `StreamingResponse` に渡して返せます。 +この小さな例では `await` が不要なため、イベントループにキャンセルを処理する機会を与えるために `await anyio.sleep(0)` を追加しています。 -これにはクラウドストレージとの連携、映像処理など、多くのライブラリが含まれます。 +これは大きなストリームや無限ストリームではさらに重要になります。 -{* ../../docs_src/custom_response/tutorial008_py310.py hl[2,10:12,14] *} - -1. これはジェネレータ関数です。内部に `yield` 文を含むため「ジェネレータ関数」です。 -2. `with` ブロックを使うことで、ジェネレータ関数が終わった後(つまりレスポンスの送信が完了した後)にfile-likeオブジェクトが確実にクローズされるようにします。 -3. この `yield from` は、`file_like` という名前のものを反復処理するように関数へ指示します。そして反復された各パートについて、そのパートをこのジェネレータ関数(`iterfile`)から来たものとして `yield` します。 - - つまり、内部的に「生成」の作業を別のものへ移譲するジェネレータ関数です。 - - このようにすることで `with` ブロックに入れられ、完了後にfile-likeオブジェクトが確実にクローズされます。 +/// /// tip | 豆知識 -ここでは `async` と `await` をサポートしていない標準の `open()` を使っているため、通常の `def` でpath operationを宣言している点に注意してください。 +`StreamingResponse` を直接返す代わりに、[データをストリームする](./stream-data.md) スタイルに従うことをおすすめします。こちらのほうがはるかに便利で、裏側でキャンセル処理も行ってくれます。 + +JSON Lines をストリームする場合は、[JSON Lines をストリームする](../tutorial/stream-json-lines.md) チュートリアルを参照してください。 /// ### `FileResponse` { #fileresponse } -レスポンスとしてファイルを非同期的にストリームします。 +ファイルをレスポンスとして非同期にストリームします。 -他のレスポンスタイプとは異なる引数のセットを受け取りインスタンス化します。 +他のレスポンスタイプとは異なる引数セットでインスタンス化します: -* `path` - ストリームするファイルのファイルパス。 -* `headers` - 含めたい任意のカスタムヘッダーの辞書。 -* `media_type` - メディアタイプを示す文字列。未設定の場合、ファイル名やパスからメディアタイプが推測されます。 -* `filename` - 設定した場合、レスポンスの `Content-Disposition` に含まれます。 +* `path` - ストリームするファイルのファイルパス +* `headers` - 含めたい任意のカスタムヘッダー(辞書) +* `media_type` - メディアタイプを示す文字列。未設定の場合、ファイル名やパスから推測されます +* `filename` - 設定した場合、レスポンスの `Content-Disposition` に含まれます ファイルレスポンスには、適切な `Content-Length`、`Last-Modified`、`ETag` ヘッダーが含まれます。 @@ -261,17 +213,17 @@ HTTPリダイレクトを返します。デフォルトでは307ステータス {* ../../docs_src/custom_response/tutorial009b_py310.py hl[2,8,10] *} -この場合、*path operation*関数からファイルパスを直接返せます。 +この場合、*path operation* 関数からファイルパスを直接返せます。 ## カスタムレスポンスクラス { #custom-response-class } -`Response` を継承した独自のカスタムレスポンスクラスを作成して利用できます。 +`Response` を継承して、独自のカスタムレスポンスクラスを作成し、使用できます。 -例えば、`orjson`を使いたいが、同梱の `ORJSONResponse` クラスで使われていないカスタム設定も使いたいとします。 +例えば、[`orjson`](https://github.com/ijl/orjson) を特定の設定で使いたいとします。 -例えば、インデントされ整形されたJSONを返したいので、orjsonオプション `orjson.OPT_INDENT_2` を使いたいとします。 +インデントされた整形済みJSONを返したいので、orjson のオプション `orjson.OPT_INDENT_2` を使いたいとします。 -`CustomORJSONResponse` を作れます。主に必要なのは、コンテンツを `bytes` として返す `Response.render(content)` メソッドを作ることです: +`CustomORJSONResponse` を作成できます。主に必要なのは、`bytes` を返す `Response.render(content)` メソッドを作ることです: {* ../../docs_src/custom_response/tutorial009c_py310.py hl[9:14,17] *} @@ -289,24 +241,32 @@ HTTPリダイレクトを返します。デフォルトでは307ステータス } ``` -もちろん、JSONの整形よりも、これを活用するもっと良い方法が見つかるはずです。 😉 +もちろん、JSONの整形以外にも、これを活用するもっと良い方法が見つかるはずです。 😉 + +### `orjson` か レスポンスモデルか { #orjson-or-response-model } + +もし求めているのがパフォーマンスであれば、`orjson` レスポンスを使うより、[レスポンスモデル](../tutorial/response-model.md) を使うほうが良い場合が多いです。 + +レスポンスモデルがあると、FastAPI は中間ステップ(他の場合に行われる `jsonable_encoder` による変換など)を介さずに、Pydantic を使ってデータをJSONにシリアライズします。 + +内部的には、Pydantic はJSONシリアライズに `orjson` と同じRust由来の仕組みを用いているため、レスポンスモデルを使うだけで最良のパフォーマンスが得られます。 ## デフォルトレスポンスクラス { #default-response-class } -**FastAPI** クラスのインスタンス、または `APIRouter` を作成する際に、デフォルトで使用するレスポンスクラスを指定できます。 +**FastAPI** クラスのインスタンスや `APIRouter` を作成する際に、デフォルトで使用するレスポンスクラスを指定できます。 これを定義するパラメータは `default_response_class` です。 -以下の例では、**FastAPI** はすべての*path operation*で、`JSONResponse` の代わりに `ORJSONResponse` をデフォルトとして使います。 +以下の例では、**FastAPI** はすべての *path operation* で、JSONの代わりにデフォルトで `HTMLResponse` を使用します。 {* ../../docs_src/custom_response/tutorial010_py310.py hl[2,4] *} /// tip | 豆知識 -これまでと同様に、*path operation*で `response_class` をオーバーライドできます。 +これまでと同様に、*path operation* ごとに `response_class` をオーバーライドできます。 /// ## その他のドキュメント { #additional-documentation } -OpenAPIでは `responses` を使ってメディアタイプやその他の詳細を宣言することもできます: [Additional Responses in OpenAPI](additional-responses.md){.internal-link target=_blank}。 +OpenAPIでは `responses` を使ってメディアタイプやその他の詳細を宣言することもできます: [OpenAPI の追加レスポンス](additional-responses.md)。 diff --git a/docs/ja/docs/advanced/dataclasses.md b/docs/ja/docs/advanced/dataclasses.md index 74f479f072..e3ad7afb63 100644 --- a/docs/ja/docs/advanced/dataclasses.md +++ b/docs/ja/docs/advanced/dataclasses.md @@ -2,11 +2,11 @@ FastAPI は **Pydantic** の上に構築されており、これまでにリクエストやレスポンスを宣言するために Pydantic モデルを使う方法を紹介してきました。 -しかし FastAPI は、同様の方法で `dataclasses` もサポートします: +しかし FastAPI は、同様の方法で [`dataclasses`](https://docs.python.org/3/library/dataclasses.html) もサポートします: {* ../../docs_src/dataclasses_/tutorial001_py310.py hl[1,6:11,18:19] *} -これは **Pydantic** によって引き続きサポートされています。Pydantic には `dataclasses` の内部サポート があるためです。 +これは **Pydantic** によって引き続きサポートされています。Pydantic には [`dataclasses` の内部サポート](https://docs.pydantic.dev/latest/concepts/dataclasses/#use-of-stdlib-dataclasses-with-basemodel) があるためです。 そのため、上記のように明示的に Pydantic を使っていないコードでも、FastAPI は標準の dataclass を Pydantic 独自の dataclass に変換するために Pydantic を使用しています。 @@ -74,7 +74,7 @@ dataclass は自動的に Pydantic の dataclass に変換されます。 いつもどおり、FastAPI では必要に応じて `def` と `async def` を組み合わせられます。 - どちらをいつ使うかの復習が必要な場合は、[`async` と `await`](../async.md#in-a-hurry){.internal-link target=_blank} に関するドキュメントの _"In a hurry?"_ セクションを参照してください。 + どちらをいつ使うかの復習が必要な場合は、[`async` と `await`](../async.md#in-a-hurry) に関するドキュメントの _"In a hurry?"_ セクションを参照してください。 9. この *path operation 関数* は(可能ではありますが)dataclass 自体は返さず、内部データを持つ辞書のリストを返しています。 @@ -88,7 +88,7 @@ dataclass は自動的に Pydantic の dataclass に変換されます。 `dataclasses` を他の Pydantic モデルと組み合わせたり、継承したり、自分のモデルに含めたりもできます。 -詳しくは、dataclasses に関する Pydantic ドキュメント を参照してください。 +詳しくは、[dataclasses に関する Pydantic ドキュメント](https://docs.pydantic.dev/latest/concepts/dataclasses/) を参照してください。 ## バージョン { #version } diff --git a/docs/ja/docs/advanced/events.md b/docs/ja/docs/advanced/events.md index fb79062fa8..e2cbe2eb04 100644 --- a/docs/ja/docs/advanced/events.md +++ b/docs/ja/docs/advanced/events.md @@ -150,11 +150,11 @@ async with lifespan(app): 技術が気になる方への細かな詳細です。🤓 -内部的には、ASGI の技術仕様において、これは Lifespan プロトコル の一部であり、`startup` と `shutdown` というイベントが定義されています。 +内部的には、ASGI の技術仕様において、これは [Lifespan プロトコル](https://asgi.readthedocs.io/en/latest/specs/lifespan.html) の一部であり、`startup` と `shutdown` というイベントが定義されています。 /// info | 情報 -Starlette の `lifespan` ハンドラについては、Starlette の Lifespan ドキュメントで詳しく読むことができます。 +Starlette の `lifespan` ハンドラについては、[Starlette の Lifespan ドキュメント](https://www.starlette.dev/lifespan/)で詳しく読むことができます。 コードの他の領域で使える lifespan の状態をどのように扱うかも含まれています。 @@ -162,4 +162,4 @@ Starlette の `lifespan` ハンドラについては、OpenAPI Generator があります。これは**多数のプログラミング言語**をサポートし、OpenAPI 仕様から SDK を生成できます。 +多用途な選択肢として [OpenAPI Generator](https://openapi-generator.tech/) があります。これは**多数のプログラミング言語**をサポートし、OpenAPI 仕様から SDK を生成できます。 -**TypeScript クライアント**向けには、Hey API が目的特化のソリューションで、TypeScript エコシステムに最適化された体験を提供します。 +**TypeScript クライアント**向けには、[Hey API](https://heyapi.dev/) が目的特化のソリューションで、TypeScript エコシステムに最適化された体験を提供します。 -他の SDK ジェネレータは OpenAPI.Tools でも見つけられます。 +他の SDK ジェネレータは [OpenAPI.Tools](https://openapi.tools/#sdk) でも見つけられます。 /// tip | 豆知識 @@ -24,15 +24,15 @@ FastAPI は自動的に **OpenAPI 3.1** の仕様を生成します。したが このセクションでは、FastAPI をスポンサーしている企業による、**ベンチャー支援**および**企業支援**のソリューションを紹介します。これらの製品は、高品質な生成 SDK に加えて、**追加機能**や**統合**を提供します。 -✨ [**FastAPI をスポンサーする**](../help-fastapi.md#sponsor-the-author){.internal-link target=_blank} ✨ ことで、これらの企業はフレームワークとその**エコシステム**の健全性と**持続可能性**を支援しています。 +✨ [**FastAPI をスポンサーする**](../help-fastapi.md#sponsor-the-author) ✨ ことで、これらの企業はフレームワークとその**エコシステム**の健全性と**持続可能性**を支援しています。 この支援は、FastAPI の**コミュニティ**(皆さん)への強いコミットメントの表明でもあり、**優れたサービス**の提供だけでなく、堅牢で発展するフレームワーク FastAPI を支える姿勢を示しています。🙇 例えば、次のようなものがあります: -* Speakeasy -* Stainless -* liblab +* [Speakeasy](https://speakeasy.com/editor?utm_source=fastapi+repo&utm_medium=github+sponsorship) +* [Stainless](https://www.stainless.com/?utm_source=fastapi&utm_medium=referral) +* [liblab](https://developers.liblab.com/tutorials/sdk-for-fastapi?utm_source=fastapi) これらのソリューションの中にはオープンソースや無料枠を提供するものもあり、金銭的コミットメントなしで試すことができます。他の商用 SDK ジェネレータも存在し、オンラインで見つけられます。🤓 @@ -66,7 +66,7 @@ npx @hey-api/openapi-ts -i http://localhost:8000/openapi.json -o src/client これで TypeScript SDK が `./src/client` に生成されます。 -`@hey-api/openapi-ts` のインストール方法や、生成物の詳細は公式サイトを参照してください。 +[`@hey-api/openapi-ts` のインストール方法](https://heyapi.dev/openapi-ts/get-started)や、[生成物の詳細](https://heyapi.dev/openapi-ts/output)は公式サイトを参照してください。 ### SDK の利用 { #using-the-sdk } diff --git a/docs/ja/docs/advanced/index.md b/docs/ja/docs/advanced/index.md index 1d0f7566cd..026405318f 100644 --- a/docs/ja/docs/advanced/index.md +++ b/docs/ja/docs/advanced/index.md @@ -2,7 +2,7 @@ ## さらなる機能 { #additional-features } -メインの[チュートリアル - ユーザーガイド](../tutorial/index.md){.internal-link target=_blank}だけで、**FastAPI**の主要な機能を一通り把握するには十分なはずです。 +メインの[チュートリアル - ユーザーガイド](../tutorial/index.md)だけで、**FastAPI**の主要な機能を一通り把握するには十分なはずです。 以降のセクションでは、その他のオプション、設定、追加機能を見ていきます。 @@ -16,6 +16,6 @@ ## 先にチュートリアルを読む { #read-the-tutorial-first } -メインの[チュートリアル - ユーザーガイド](../tutorial/index.md){.internal-link target=_blank}で得た知識があれば、**FastAPI**の機能の多くは引き続き利用できます。 +メインの[チュートリアル - ユーザーガイド](../tutorial/index.md)で得た知識があれば、**FastAPI**の機能の多くは引き続き利用できます。 また、以降のセクションでは、すでにそれを読んでいて、主要な考え方を理解していることを前提としています。 diff --git a/docs/ja/docs/advanced/middleware.md b/docs/ja/docs/advanced/middleware.md index 2883d53d82..018e660588 100644 --- a/docs/ja/docs/advanced/middleware.md +++ b/docs/ja/docs/advanced/middleware.md @@ -1,8 +1,8 @@ # 高度なミドルウェア { #advanced-middleware } -メインのチュートリアルでは、アプリケーションに[カスタムミドルウェア](../tutorial/middleware.md){.internal-link target=_blank}を追加する方法を学びました。 +メインのチュートリアルでは、アプリケーションに[カスタムミドルウェア](../tutorial/middleware.md)を追加する方法を学びました。 -そして、[`CORSMiddleware` を使った CORS の扱い方](../tutorial/cors.md){.internal-link target=_blank}も学びました。 +そして、[`CORSMiddleware` を使った CORS の扱い方](../tutorial/cors.md)も学びました。 このセクションでは、その他のミドルウェアの使い方を見ていきます。 @@ -91,7 +91,7 @@ HTTP Host Header 攻撃を防ぐため、すべての受信リクエストに正 例えば: -- Uvicorn の `ProxyHeadersMiddleware` -- MessagePack +- [Uvicorn の `ProxyHeadersMiddleware`](https://github.com/encode/uvicorn/blob/master/uvicorn/middleware/proxy_headers.py) +- [MessagePack](https://github.com/florimondmanca/msgpack-asgi) -他に利用可能なミドルウェアについては、Starlette のミドルウェアドキュメントASGI Awesome List を参照してください。 +他に利用可能なミドルウェアについては、[Starlette のミドルウェアドキュメント](https://www.starlette.dev/middleware/)や [ASGI Awesome List](https://github.com/florimondmanca/awesome-asgi) を参照してください。 diff --git a/docs/ja/docs/advanced/openapi-callbacks.md b/docs/ja/docs/advanced/openapi-callbacks.md index 283a80b210..31d17e270b 100644 --- a/docs/ja/docs/advanced/openapi-callbacks.md +++ b/docs/ja/docs/advanced/openapi-callbacks.md @@ -35,7 +35,7 @@ /// tip | 豆知識 -`callback_url` クエリパラメータは、Pydantic の Url 型を使用します。 +`callback_url` クエリパラメータは、Pydantic の [Url](https://docs.pydantic.dev/latest/api/networks/) 型を使用します。 /// @@ -66,7 +66,7 @@ httpx.post(callback_url, json={"description": "Invoice paid", "paid": True}) 実際のコールバックは単なる HTTP リクエストです。 -自分でコールバックを実装する場合は、HTTPXRequests のようなものを使えます。 +自分でコールバックを実装する場合は、[HTTPX](https://www.python-httpx.org) や [Requests](https://requests.readthedocs.io/) のようなものを使えます。 /// @@ -106,11 +106,11 @@ httpx.post(callback_url, json={"description": "Invoice paid", "paid": True}) 通常の *path operation* と異なる主な点が 2 つあります: * 実際のコードは不要です。あなたのアプリはこのコードを決して呼びません。これは *外部 API* をドキュメント化するためだけに使われます。したがって、関数本体は `pass` で構いません。 -* *パス* には、*あなたの API* に送られた元のリクエストのパラメータや一部を変数として使える OpenAPI 3 の式(後述)を含められます。 +* *パス* には、*あなたの API* に送られた元のリクエストのパラメータや一部を変数として使える [OpenAPI 3 の式](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#key-expression)(後述)を含められます。 ### コールバックのパス式 { #the-callback-path-expression } -コールバックの *パス* には、*あなたの API* に送られた元のリクエストの一部を含められる OpenAPI 3 の式を使用できます。 +コールバックの *パス* には、*あなたの API* に送られた元のリクエストの一部を含められる [OpenAPI 3 の式](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#key-expression)を使用できます。 この例では、`str` は次のとおりです: @@ -179,7 +179,7 @@ JSON ボディは次のような内容です: ### ドキュメントを確認 { #check-the-docs } -アプリを起動して http://127.0.0.1:8000/docs にアクセスします。 +アプリを起動して [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) にアクセスします。 あなたの *path operation* に「Callbacks」セクションが含まれ、*外部 API* がどうあるべきかが表示されているのが確認できます: diff --git a/docs/ja/docs/advanced/openapi-webhooks.md b/docs/ja/docs/advanced/openapi-webhooks.md index 368cfddd82..7f7a726807 100644 --- a/docs/ja/docs/advanced/openapi-webhooks.md +++ b/docs/ja/docs/advanced/openapi-webhooks.md @@ -48,7 +48,7 @@ Webhook では(`/items/` のような)*パス*を宣言しているわけで ### ドキュメントの確認 { #check-the-docs } -アプリを起動し、http://127.0.0.1:8000/docs にアクセスします。 +アプリを起動し、[http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) にアクセスします。 ドキュメントには通常の *path operations* に加えて、**webhooks** も表示されます: diff --git a/docs/ja/docs/advanced/path-operation-advanced-configuration.md b/docs/ja/docs/advanced/path-operation-advanced-configuration.md index f7e3406171..65b56dba4c 100644 --- a/docs/ja/docs/advanced/path-operation-advanced-configuration.md +++ b/docs/ja/docs/advanced/path-operation-advanced-configuration.md @@ -60,7 +60,7 @@ APIの関数名を `operationId` として利用したい場合、すべてのAP 追加のレスポンスについても、モデルやステータスコードなどとともに宣言できます。 -これについてはドキュメントに章全体があります。 [OpenAPIの追加レスポンス](additional-responses.md){.internal-link target=_blank} で読めます。 +これについてはドキュメントに章全体があります。 [OpenAPIの追加レスポンス](additional-responses.md) で読めます。 ## OpenAPI Extra { #openapi-extra } @@ -68,7 +68,7 @@ APIの関数名を `operationId` として利用したい場合、すべてのAP /// note | 技術詳細 -OpenAPI仕様では Operation Object と呼ばれています。 +OpenAPI仕様では [Operation Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#operation-object) と呼ばれています。 /// @@ -82,7 +82,7 @@ OpenAPI仕様では Starlette のドキュメントを参照してください。 +利用可能なすべてのパラメータやオプションについては、[Starlette のドキュメント](https://www.starlette.dev/responses/#set-cookie)を参照してください。 diff --git a/docs/ja/docs/advanced/response-directly.md b/docs/ja/docs/advanced/response-directly.md index 103e84c385..b5c9fc5cbf 100644 --- a/docs/ja/docs/advanced/response-directly.md +++ b/docs/ja/docs/advanced/response-directly.md @@ -1,22 +1,26 @@ # レスポンスを直接返す { #return-a-response-directly } -**FastAPI** の *path operation* では、通常は任意のデータを返すことができます: 例えば、 `dict`、`list`、Pydanticモデル、データベースモデルなどです。 +**FastAPI** の *path operation* では、通常は任意のデータを返すことができます: 例えば、`dict`、`list`、Pydanticモデル、データベースモデルなどです。 -デフォルトでは、**FastAPI** は [JSON互換エンコーダ](../tutorial/encoder.md){.internal-link target=_blank} で説明されている `jsonable_encoder` により、返す値を自動的にJSONに変換します。 +[レスポンスモデル](../tutorial/response-model.md) を宣言した場合、FastAPI は Pydantic を使ってデータをJSONにシリアライズします。 -このとき背後では、JSON互換なデータ (例えば`dict`) を、クライアントへ送信されるレスポンスとして利用される `JSONResponse` の中に含めます。 +レスポンスモデルを宣言しない場合、FastAPI は [JSON互換エンコーダ](../tutorial/encoder.md) で説明されている `jsonable_encoder` を使用し、その結果を `JSONResponse` に入れます。 -しかし、*path operation* から `JSONResponse` を直接返すこともできます。 +また、`JSONResponse` を直接作成して返すこともできます。 -これは例えば、カスタムヘッダーやcookieを返すときに便利です。 +/// tip + +通常は、`JSONResponse` を直接返すよりも、[レスポンスモデル](../tutorial/response-model.md) を使うほうがパフォーマンスが大幅に良くなります。これは、Pydantic によるシリアライズが Rust で実行されるためです。 + +/// ## `Response` を返す { #return-a-response } 実際は、`Response` やそのサブクラスを返すことができます。 -/// tip | 豆知識 +/// info -`JSONResponse` それ自体は、 `Response` のサブクラスです。 +`JSONResponse` それ自体は、`Response` のサブクラスです。 /// @@ -26,6 +30,8 @@ これは多くの柔軟性を提供します。任意のデータ型を返したり、任意のデータ宣言やバリデーションをオーバーライドできます。 +同時に多くの責任も伴います。返すデータが正しく、正しいフォーマットであり、シリアライズ可能であることなどを、あなたが保証しなければなりません。 + ## `jsonable_encoder` を `Response` の中で使う { #using-the-jsonable-encoder-in-a-response } **FastAPI** はあなたが返す `Response` に対して何も変更を加えないので、コンテンツが準備できていることを保証しなければなりません。 @@ -46,20 +52,32 @@ ## カスタム `Response` を返す { #returning-a-custom-response } -上記の例では必要な部分を全て示していますが、あまり便利ではありません。`item` を直接返すことができるし、**FastAPI** はそれを `dict` に変換して `JSONResponse` に含めてくれるなど。すべて、デフォルトの動作です。 +上記の例では必要な部分を全て示していますが、あまり便利ではありません。`item` を直接返すことができるし、**FastAPI** はそれを `dict` に変換して `JSONResponse` に含めてくれるなど。すべて、デフォルトの動作です。 では、これを使ってカスタムレスポンスをどう返すか見てみましょう。 -XMLレスポンスを返したいとしましょう。 +[XML](https://en.wikipedia.org/wiki/XML)レスポンスを返したいとしましょう。 XMLを文字列にし、`Response` に含め、それを返します。 {* ../../docs_src/response_directly/tutorial002_py310.py hl[1,18] *} +## Response Model の仕組み { #how-a-response-model-works } + +path operation で [Response Model - 戻り値の型](../tutorial/response-model.md) を宣言すると、**FastAPI** はそれを使って Pydantic によりデータをJSONにシリアライズします。 + +{* ../../docs_src/response_model/tutorial001_01_py310.py hl[16,21] *} + +これは Rust 側で行われるため、通常の Python と `JSONResponse` クラスで行う場合より、パフォーマンスははるかに良くなります。 + +`response_model` や戻り値の型を使用する場合、FastAPI はデータ変換に(低速になりうる)`jsonable_encoder` も `JSONResponse` クラスも使いません。 + +代わりに、response model(または戻り値の型)を使って Pydantic が生成した JSON のバイト列をそのまま用い、JSON 用の正しいメディアタイプ(`application/json`)を持つ `Response` を直接返します。 + ## 備考 { #notes } `Response` を直接返す場合、バリデーションや、変換 (シリアライズ) や、自動ドキュメントは行われません。 -しかし、[Additional Responses in OpenAPI](additional-responses.md){.internal-link target=_blank}に記載されたようにドキュメントを書くこともできます。 +しかし、[Additional Responses in OpenAPI](additional-responses.md)に記載されたようにドキュメントを書くこともできます。 後のセクションで、カスタム `Response` を使用・宣言しながら、自動的なデータ変換やドキュメンテーションを行う方法を説明します。 diff --git a/docs/ja/docs/advanced/response-headers.md b/docs/ja/docs/advanced/response-headers.md index 10aec78452..3a61f57428 100644 --- a/docs/ja/docs/advanced/response-headers.md +++ b/docs/ja/docs/advanced/response-headers.md @@ -20,7 +20,7 @@ `Response` を直接返す場合にもヘッダーを追加できます。 -[Response を直接返す](response-directly.md){.internal-link target=_blank} で説明したようにレスポンスを作成し、ヘッダーを追加のパラメータとして渡します: +[Response を直接返す](response-directly.md) で説明したようにレスポンスを作成し、ヘッダーを追加のパラメータとして渡します: {* ../../docs_src/response_headers/tutorial001_py310.py hl[10:12] *} @@ -36,6 +36,6 @@ ## カスタムヘッダー { #custom-headers } -独自のカスタムヘッダーは、`X-` プレフィックスを使って追加できることに注意してください。 +独自のカスタムヘッダーは、[`X-` プレフィックスを使って](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers)追加できることに注意してください。 -ただし、ブラウザのクライアントに見えるようにしたいカスタムヘッダーがある場合は、CORS 設定にそれらを追加する必要があります([CORS (Cross-Origin Resource Sharing)](../tutorial/cors.md){.internal-link target=_blank} を参照)。このとき、Starlette の CORS ドキュメントに記載の `expose_headers` パラメータを使用します。 +ただし、ブラウザのクライアントに見えるようにしたいカスタムヘッダーがある場合は、CORS 設定にそれらを追加する必要があります([CORS (Cross-Origin Resource Sharing)](../tutorial/cors.md) を参照)。このとき、[Starlette の CORS ドキュメント](https://www.starlette.dev/middleware/#corsmiddleware)に記載の `expose_headers` パラメータを使用します。 diff --git a/docs/ja/docs/advanced/security/http-basic-auth.md b/docs/ja/docs/advanced/security/http-basic-auth.md index 7ee56a039b..b8e47dcbb7 100644 --- a/docs/ja/docs/advanced/security/http-basic-auth.md +++ b/docs/ja/docs/advanced/security/http-basic-auth.md @@ -32,7 +32,7 @@ URL を最初に開こうとしたとき(またはドキュメントで「Exec 依存関係を使ってユーザー名とパスワードが正しいかを確認します。 -これには、Python 標準モジュール `secrets` を用いてユーザー名とパスワードを検証します。 +これには、Python 標準モジュール [`secrets`](https://docs.python.org/3/library/secrets.html) を用いてユーザー名とパスワードを検証します。 `secrets.compare_digest()` は `bytes` か、ASCII 文字(英語の文字)のみを含む `str` を受け取る必要があります。つまり、`Sebastián` のように `á` を含む文字ではそのままでは動作しません。 @@ -46,7 +46,7 @@ URL を最初に開こうとしたとき(またはドキュメントで「Exec ```Python if not (credentials.username == "stanleyjobson") or not (credentials.password == "swordfish"): - # Return some error + # 何らかのエラーを返す ... ``` diff --git a/docs/ja/docs/advanced/security/index.md b/docs/ja/docs/advanced/security/index.md index 069e2686cb..5b4c480fe9 100644 --- a/docs/ja/docs/advanced/security/index.md +++ b/docs/ja/docs/advanced/security/index.md @@ -2,11 +2,11 @@ ## 追加機能 { #additional-features } -[チュートリアル - ユーザーガイド: セキュリティ](../../tutorial/security/index.md){.internal-link target=_blank}で扱ったもの以外にも、セキュリティを扱うための追加機能がいくつかあります。 +[チュートリアル - ユーザーガイド: セキュリティ](../../tutorial/security/index.md)で扱ったもの以外にも、セキュリティを扱うための追加機能がいくつかあります。 /// tip | 豆知識 -次の節は必ずしも「高度」ではありません。 +次の節は**必ずしも「高度」ではありません**。 あなたのユースケースでは、その中のいずれかに解決策があるかもしれません。 @@ -14,6 +14,6 @@ ## まずチュートリアルを読む { #read-the-tutorial-first } -以下の節は、すでにメインの[チュートリアル - ユーザーガイド: セキュリティ](../../tutorial/security/index.md){.internal-link target=_blank}を読んでいることを前提とします。 +以下の節は、すでにメインの[チュートリアル - ユーザーガイド: セキュリティ](../../tutorial/security/index.md)を読んでいることを前提とします。 いずれも同じ概念に基づいていますが、いくつかの追加機能を利用できます。 diff --git a/docs/ja/docs/advanced/security/oauth2-scopes.md b/docs/ja/docs/advanced/security/oauth2-scopes.md index 7c6cfdbf03..3afc26e3ae 100644 --- a/docs/ja/docs/advanced/security/oauth2-scopes.md +++ b/docs/ja/docs/advanced/security/oauth2-scopes.md @@ -60,7 +60,7 @@ OAuth2 にとっては、単に文字列に過ぎません。 ## 全体像 { #global-view } -まず、メインの**チュートリアル - ユーザーガイド**にある [OAuth2(パスワード[ハッシュ化あり])、Bearer と JWT トークン](../../tutorial/security/oauth2-jwt.md){.internal-link target=_blank} の例から変更される部分を、スコープ付き OAuth2 を使って手早く見てみましょう。 +まず、メインの**チュートリアル - ユーザーガイド**にある [OAuth2(パスワード[ハッシュ化あり])、Bearer と JWT トークン](../../tutorial/security/oauth2-jwt.md) の例から変更される部分を、スコープ付き OAuth2 を使って手早く見てみましょう。 {* ../../docs_src/security/tutorial005_an_py310.py hl[5,9,13,47,65,106,108:116,122:126,130:136,141,157] *} @@ -271,4 +271,4 @@ API ドキュメントを開くと、認証して、許可するスコープを ## デコレータ `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` も使用できます。 +デコレータの `dependencies` パラメータに `Depends` の `list` を定義できるのと同様([path operation デコレータでの依存関係](../../tutorial/dependencies/dependencies-in-path-operation-decorators.md) 参照)、ここで `scopes` を指定した `Security` も使用できます。 diff --git a/docs/ja/docs/advanced/settings.md b/docs/ja/docs/advanced/settings.md index 5508ad6d91..e42ec845c6 100644 --- a/docs/ja/docs/advanced/settings.md +++ b/docs/ja/docs/advanced/settings.md @@ -8,7 +8,7 @@ /// tip | 豆知識 -環境変数について理解するには、[環境変数](../environment-variables.md){.internal-link target=_blank}を参照してください。 +環境変数について理解するには、[環境変数](../environment-variables.md)を参照してください。 /// @@ -20,11 +20,11 @@ ## Pydantic の `Settings` { #pydantic-settings } -幸いなことに、Pydantic には環境変数から来る設定を扱うための優れたユーティリティがあり、Pydantic: Settings management で提供されています。 +幸いなことに、Pydantic には環境変数から来る設定を扱うための優れたユーティリティがあり、[Pydantic: Settings management](https://docs.pydantic.dev/latest/concepts/pydantic_settings/) で提供されています。 ### `pydantic-settings` のインストール { #install-pydantic-settings } -まず、[仮想環境](../virtual-environments.md){.internal-link target=_blank}を作成して有効化し、`pydantic-settings` パッケージをインストールします: +まず、[仮想環境](../virtual-environments.md)を作成して有効化し、`pydantic-settings` パッケージをインストールします:
@@ -100,7 +100,7 @@ $ ADMIN_EMAIL="deadpool@example.com" APP_NAME="ChimichangApp" fastapi run main.p ## 別モジュールでの設定 { #settings-in-another-module } -[大規模アプリケーション - 複数ファイル](../tutorial/bigger-applications.md){.internal-link target=_blank} で見たように、これらの設定を別のモジュールファイルに置くこともできます。 +[大規模アプリケーション - 複数ファイル](../tutorial/bigger-applications.md) で見たように、これらの設定を別のモジュールファイルに置くこともできます。 たとえば、`config.py` というファイルに次のように書けます: @@ -112,7 +112,7 @@ $ ADMIN_EMAIL="deadpool@example.com" APP_NAME="ChimichangApp" fastapi run main.p /// tip | 豆知識 -[大規模アプリケーション - 複数ファイル](../tutorial/bigger-applications.md){.internal-link target=_blank} で見たように、`__init__.py` ファイルも必要です。 +[大規模アプリケーション - 複数ファイル](../tutorial/bigger-applications.md) で見たように、`__init__.py` ファイルも必要です。 /// @@ -172,7 +172,7 @@ $ ADMIN_EMAIL="deadpool@example.com" APP_NAME="ChimichangApp" fastapi run main.p /// -Pydantic は外部ライブラリを使ってこの種のファイルからの読み込みをサポートしています。詳細は Pydantic Settings: Dotenv (.env) support を参照してください。 +Pydantic は外部ライブラリを使ってこの種のファイルからの読み込みをサポートしています。詳細は [Pydantic Settings: Dotenv (.env) support](https://docs.pydantic.dev/latest/concepts/pydantic_settings/#dotenv-env-support) を参照してください。 /// tip | 豆知識 @@ -197,7 +197,7 @@ APP_NAME="ChimichangApp" /// tip | 豆知識 -`model_config` 属性は Pydantic の設定専用です。詳しくは Pydantic: Concepts: Configuration を参照してください。 +`model_config` 属性は Pydantic の設定専用です。詳しくは [Pydantic: Concepts: Configuration](https://docs.pydantic.dev/latest/concepts/config/) を参照してください。 /// @@ -291,7 +291,7 @@ participant execute as Execute function この方法は、ほとんどグローバル変数のように振る舞います。しかし、依存関数を使っているので、テストのために簡単にオーバーライドできます。 -`@lru_cache` は Python 標準ライブラリの `functools` の一部です。詳細は Python の `@lru_cache` ドキュメントを参照してください。 +`@lru_cache` は Python 標準ライブラリの `functools` の一部です。詳細は [Python の `@lru_cache` ドキュメント](https://docs.python.org/3/library/functools.html#functools.lru_cache)を参照してください。 ## まとめ { #recap } diff --git a/docs/ja/docs/advanced/sub-applications.md b/docs/ja/docs/advanced/sub-applications.md index f38da1423e..e9b17031b5 100644 --- a/docs/ja/docs/advanced/sub-applications.md +++ b/docs/ja/docs/advanced/sub-applications.md @@ -30,25 +30,25 @@ ### 自動 API ドキュメントの確認 { #check-the-automatic-api-docs } -では、`fastapi` コマンドでこのファイルを実行します: +では、`fastapi` コマンドを実行します:
```console -$ fastapi dev main.py +$ fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ```
-そして、http://127.0.0.1:8000/docs を開きます。 +そして、[http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) を開きます。 メインアプリ用の自動 API ドキュメントが表示され、そのアプリ自身の path operation のみが含まれます: -次に、サブアプリケーションのドキュメント http://127.0.0.1:8000/subapi/docs を開きます。 +次に、サブアプリケーションのドキュメント [http://127.0.0.1:8000/subapi/docs](http://127.0.0.1:8000/subapi/docs) を開きます。 サブアプリケーション用の自動 API ドキュメントが表示され、そのアプリ自身の path operation のみが、正しいサブパス接頭辞 `/subapi` の下で表示されます: @@ -64,4 +64,4 @@ $ fastapi dev main.py さらに、サブアプリケーション自身が別のサブアプリケーションをマウントしていても問題ありません。FastAPI がこれらの `root_path` をすべて自動的に処理するためです。 -`root_path` の詳細や明示的な指定方法については、[プロキシの背後で](behind-a-proxy.md){.internal-link target=_blank} の節で学べます。 +`root_path` の詳細や明示的な指定方法については、[プロキシの背後で](behind-a-proxy.md) の節で学べます。 diff --git a/docs/ja/docs/advanced/templates.md b/docs/ja/docs/advanced/templates.md index 3c4827b88e..5495b73a0b 100644 --- a/docs/ja/docs/advanced/templates.md +++ b/docs/ja/docs/advanced/templates.md @@ -8,7 +8,7 @@ Starlette によって提供され、**FastAPI** アプリで直接使える、 ## 依存関係のインストール { #install-dependencies } -[仮想環境](../virtual-environments.md){.internal-link target=_blank} を作成して有効化し、`jinja2` をインストールします: +[仮想環境](../virtual-environments.md) を作成して有効化し、`jinja2` をインストールします:
@@ -123,4 +123,4 @@ Item ID: 42 ## さらに詳しく { #more-details } -より詳しい内容(テンプレートのテスト方法など)については、Starlette のテンプレートに関するドキュメントを参照してください。 +より詳しい内容(テンプレートのテスト方法など)については、[Starlette のテンプレートに関するドキュメント](https://www.starlette.dev/templates/)を参照してください。 diff --git a/docs/ja/docs/advanced/testing-websockets.md b/docs/ja/docs/advanced/testing-websockets.md index 7f708ea1a2..745e636087 100644 --- a/docs/ja/docs/advanced/testing-websockets.md +++ b/docs/ja/docs/advanced/testing-websockets.md @@ -8,6 +8,6 @@ WebSocket をテストするのにも同じ `TestClient` を使用できます /// note | 備考 -詳細については、Starlette のドキュメント「WebSocket のテスト」を参照してください。 +詳細については、Starlette のドキュメント「[WebSocket のテスト](https://www.starlette.dev/testclient/#testing-websocket-sessions)」を参照してください。 /// diff --git a/docs/ja/docs/advanced/using-request-directly.md b/docs/ja/docs/advanced/using-request-directly.md index 1e564f5945..59d7290e67 100644 --- a/docs/ja/docs/advanced/using-request-directly.md +++ b/docs/ja/docs/advanced/using-request-directly.md @@ -15,7 +15,7 @@ ## `Request` オブジェクトの詳細 { #details-about-the-request-object } -**FastAPI** は内部的には **Starlette** の上にいくつかのツール層を載せたものなので、必要に応じて Starlette の `Request` オブジェクトを直接使えます。 +**FastAPI** は内部的には **Starlette** の上にいくつかのツール層を載せたものなので、必要に応じて Starlette の [`Request`](https://www.starlette.dev/requests/) オブジェクトを直接使えます。 また、`Request` オブジェクトから直接データ(例: ボディ)を取得する場合、そのデータは FastAPI によって検証・変換・ドキュメント化(OpenAPI による自動 API ユーザーインターフェース向け)されません。 @@ -45,7 +45,7 @@ path operation 関数の引数として `Request` 型のパラメータを宣言 ## `Request` のドキュメント { #request-documentation } -より詳しくは、公式 Starlette ドキュメントサイトの `Request` オブジェクトを参照してください。 +より詳しくは、[公式 Starlette ドキュメントサイトの `Request` オブジェクト](https://www.starlette.dev/requests/)を参照してください。 /// note | 技術詳細 diff --git a/docs/ja/docs/advanced/websockets.md b/docs/ja/docs/advanced/websockets.md index efc02079bb..802110b587 100644 --- a/docs/ja/docs/advanced/websockets.md +++ b/docs/ja/docs/advanced/websockets.md @@ -1,10 +1,10 @@ # WebSockets { #websockets } -**FastAPI**でWebSocketsが使用できます。 +**FastAPI**で[WebSockets](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API)が使用できます。 ## `websockets`のインストール { #install-websockets } -[仮想環境](../virtual-environments.md){.internal-link target=_blank}を作成し、それを有効化してから、「WebSocket」プロトコルを簡単に使えるようにするPythonライブラリの`websockets`をインストールしてください。 +[仮想環境](../virtual-environments.md)を作成し、それを有効化してから、「WebSocket」プロトコルを簡単に使えるようにするPythonライブラリの`websockets`をインストールしてください。
@@ -64,19 +64,19 @@ WebSocketルートでは、メッセージを待機して送信するために ` ## 試してみる { #try-it } -ファイル名が `main.py` である場合、以下でアプリケーションを実行します。 +コードを `main.py` に入れて、アプリケーションを実行します。
```console -$ fastapi dev main.py +$ fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ```
-ブラウザで http://127.0.0.1:8000 を開きます。 +ブラウザで [http://127.0.0.1:8000](http://127.0.0.1:8000) を開きます。 次のようなシンプルなページが表示されます。 @@ -115,25 +115,25 @@ WebSocketエンドポイントでは、`fastapi` から以下をインポート これはWebSocketであるため、`HTTPException` を発生させることはあまり意味がありません。代わりに `WebSocketException` を発生させます。 -クロージングコードは、仕様で定義された有効なコードの中から使用することができます。 +クロージングコードは、[仕様で定義された有効なコード](https://tools.ietf.org/html/rfc6455#section-7.4.1)の中から使用することができます。 /// ### 依存関係を用いてWebSocketsを試してみる { #try-the-websockets-with-dependencies } -ファイル名が `main.py` である場合、以下でアプリケーションを実行します。 +アプリケーションを実行します。
```console -$ fastapi dev main.py +$ fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ```
-ブラウザで http://127.0.0.1:8000 を開きます。 +ブラウザで [http://127.0.0.1:8000](http://127.0.0.1:8000) を開きます。 そこで、以下を設定できます。 @@ -174,7 +174,7 @@ Client #1596980209979 left the chat しかし、すべてがメモリ内の単一のリストで処理されるため、プロセスの実行中にのみ機能し、単一のプロセスでのみ機能することに注意してください。 -FastAPIと簡単に統合できて、RedisやPostgreSQLなどでサポートされている、より堅牢なものが必要なら、encode/broadcaster を確認してください。 +FastAPIと簡単に統合できて、RedisやPostgreSQLなどでサポートされている、より堅牢なものが必要なら、[encode/broadcaster](https://github.com/encode/broadcaster) を確認してください。 /// @@ -182,5 +182,5 @@ FastAPIと簡単に統合できて、RedisやPostgreSQLなどでサポートさ オプションの詳細については、Starletteのドキュメントを確認してください。 -* `WebSocket` クラス. -* クラスベースのWebSocket処理. +* [`WebSocket` クラス](https://www.starlette.dev/websockets/)。 +* [クラスベースのWebSocket処理](https://www.starlette.dev/endpoints/#websocketendpoint)。 diff --git a/docs/ja/docs/advanced/wsgi.md b/docs/ja/docs/advanced/wsgi.md index b06b4a3299..6895eb6584 100644 --- a/docs/ja/docs/advanced/wsgi.md +++ b/docs/ja/docs/advanced/wsgi.md @@ -1,6 +1,6 @@ # WSGI の組み込み - Flask、Django など { #including-wsgi-flask-django-others } -[サブアプリケーション - マウント](sub-applications.md){.internal-link target=_blank}、[プロキシの背後](behind-a-proxy.md){.internal-link target=_blank} で見たように、WSGI アプリケーションをマウントできます。 +[サブアプリケーション - マウント](sub-applications.md)、[プロキシの背後](behind-a-proxy.md) で見たように、WSGI アプリケーションをマウントできます。 そのために `WSGIMiddleware` を使用して、Flask や Django などの WSGI アプリをラップできます。 @@ -36,13 +36,13 @@ それ以外は **FastAPI** が処理します。 -実行して http://localhost:8000/v1/ にアクセスすると、Flask からのレスポンスが表示されます: +実行して [http://localhost:8000/v1/](http://localhost:8000/v1/) にアクセスすると、Flask からのレスポンスが表示されます: ```txt Hello, World from Flask! ``` -さらに http://localhost:8000/v2 にアクセスすると、FastAPI からのレスポンスが表示されます: +さらに [http://localhost:8000/v2](http://localhost:8000/v2) にアクセスすると、FastAPI からのレスポンスが表示されます: ```JSON { diff --git a/docs/ja/docs/alternatives.md b/docs/ja/docs/alternatives.md index 8b1ec072d6..34017b00e9 100644 --- a/docs/ja/docs/alternatives.md +++ b/docs/ja/docs/alternatives.md @@ -14,7 +14,7 @@ ## 以前のツール { #previous-tools } -### Django { #django } +### [Django](https://www.djangoproject.com/) { #django } Pythonのフレームワークの中で最もポピュラーで、広く信頼されています。Instagramのようなシステムの構築に使われています。 @@ -22,7 +22,7 @@ Pythonのフレームワークの中で最もポピュラーで、広く信頼 バックエンドでHTMLを生成するために作られたものであり、現代的なフロントエンド (ReactやVue.js、Angularなど) や、他のシステム (IoTデバイスなど) と通信するAPIを構築するために作られたものではありません。 -### Django REST Framework { #django-rest-framework } +### [Django REST Framework](https://www.django-rest-framework.org/) { #django-rest-framework } Django REST Frameworkは、Djangoを下敷きにしてWeb APIを構築する柔軟なツールキットとして、APIの機能を向上させるために作られました。 @@ -42,7 +42,7 @@ Django REST Framework は Tom Christie によって作成されました。Starl /// -### Flask { #flask } +### [Flask](https://flask.palletsprojects.com) { #flask } Flask は「マイクロフレームワーク」であり、データベースとの統合のようなDjangoがデフォルトで持つ多くの機能は含まれていません。 @@ -64,7 +64,7 @@ Flaskのシンプルさを考えると、APIを構築するのに適している /// -### Requests { #requests } +### [Requests](https://requests.readthedocs.io) { #requests } **FastAPI**は実際には**Requests**の代替ではありません。それらのスコープは大きく異なります。 @@ -106,7 +106,7 @@ def read_url(): /// -### Swagger / OpenAPI { #swagger-openapi } +### [Swagger](https://swagger.io/) / [OpenAPI](https://github.com/OAI/OpenAPI-Specification/) { #swagger-openapi } 私がDjango REST Frameworkに求めていた主な機能は、APIの自動的なドキュメント生成でした。 @@ -124,8 +124,8 @@ def read_url(): そして、標準に基づくユーザーインターフェースツールを統合しています。 -* Swagger UI -* ReDoc +* [Swagger UI](https://github.com/swagger-api/swagger-ui) +* [ReDoc](https://github.com/Rebilly/ReDoc) この二つは人気で安定したものとして選択されましたが、少し検索してみると、 (**FastAPI**と同時に使用できる) OpenAPIのための多くの代替となるツールを見つけることができます。 @@ -135,7 +135,7 @@ def read_url(): いくつかのFlask RESTフレームワークがありますが、それらを調査してみたところ、多くのものが不適切な問題が残ったまま、中断されたり放置されていることがわかりました。 -### Marshmallow { #marshmallow } +### [Marshmallow](https://marshmallow.readthedocs.io/en/stable/) { #marshmallow } APIシステムで必要とされる主な機能の一つに、コード (Python) からデータを取り出して、ネットワークを介して送れるものに変換するデータの「シリアライゼーション」があります。例えば、データベースのデータを含むオブジェクトをJSONオブジェクトに変換したり、`datetime` オブジェクトを文字列に変換するなどです。 @@ -153,7 +153,7 @@ APIが必要とするもう一つの大きな機能はデータのバリデー /// -### Webargs { #webargs } +### [Webargs](https://webargs.readthedocs.io/en/latest/) { #webargs } APIに求められる他の大きな機能として、受信したリクエストデータのパースがあります。 @@ -175,7 +175,7 @@ Webargsは、Marshmallowと同じ開発者により作られました。 /// -### APISpec { #apispec } +### [APISpec](https://apispec.readthedocs.io/en/stable/) { #apispec } MarshmallowとWebargsはバリデーション、パース、シリアライゼーションをプラグインとして提供しています。 @@ -205,7 +205,7 @@ OpenAPIという、APIについてのオープンな標準をサポートして /// -### Flask-apispec { #flask-apispec } +### [Flask-apispec](https://flask-apispec.readthedocs.io/en/latest/) { #flask-apispec } Webargs、Marshmallow、APISpecを連携させたFlaskプラグインです。 @@ -219,11 +219,11 @@ Flask、Flask-apispec、Marshmallow、Webargsの組み合わせは、**FastAPI** これを使うことで、いくつかのFlaskフルスタックジェネレータを作成することになりました。これらは私 (といくつかの外部のチーム) が今まで使ってきたメインのスタックです。 -* https://github.com/tiangolo/full-stack -* https://github.com/tiangolo/full-stack-flask-couchbase -* https://github.com/tiangolo/full-stack-flask-couchdb +* [https://github.com/tiangolo/full-stack](https://github.com/tiangolo/full-stack) +* [https://github.com/tiangolo/full-stack-flask-couchbase](https://github.com/tiangolo/full-stack-flask-couchbase) +* [https://github.com/tiangolo/full-stack-flask-couchdb](https://github.com/tiangolo/full-stack-flask-couchdb) -そして、これらのフルスタックジェネレーターは、[**FastAPI** Project Generators](project-generation.md){.internal-link target=_blank}の元となっていました。 +そして、これらのフルスタックジェネレーターは、[**FastAPI** Project Generators](project-generation.md)の元となっていました。 /// info | 情報 @@ -237,7 +237,7 @@ Flask-apispecはMarshmallowと同じ開発者により作成されました。 /// -### NestJS (とAngular) { #nestjs-and-angular } +### [NestJS](https://nestjs.com/) (と[Angular](https://angular.io/)) { #nestjs-and-angular } NestJSはAngularにインスパイアされたJavaScript (TypeScript) NodeJSフレームワークで、Pythonですらありません。 @@ -259,13 +259,13 @@ Angular 2にインスピレーションを受けた、統合された依存性 /// -### Sanic { #sanic } +### [Sanic](https://sanic.readthedocs.io/en/latest/) { #sanic } `asyncio`に基づいた、Pythonのフレームワークの中でも非常に高速なものの一つです。Flaskと非常に似た作りになっています。 /// note | 技術詳細 -Pythonの`asyncio`ループの代わりに、`uvloop`が利用されています。それにより、非常に高速です。 +Pythonの`asyncio`ループの代わりに、[`uvloop`](https://github.com/MagicStack/uvloop)が利用されています。それにより、非常に高速です。 `Uvicorn`と`Starlette`に明らかなインスピレーションを与えており、それらは現在オープンなベンチマークにおいてSanicより高速です。 @@ -279,7 +279,7 @@ Pythonの`asyncio`ループの代わりに、Falcon { #falcon } +### [Falcon](https://falconframework.org/) { #falcon } Falconはもう一つの高性能Pythonフレームワークで、ミニマムに設計されており、Hugのような他のフレームワークの基盤として動作します。 @@ -297,7 +297,7 @@ Hug (HugはFalconをベースにしています) と一緒に、**FastAPI**が`r /// -### Molten { #molten } +### [Molten](https://moltenframework.com/) { #molten } **FastAPI**を構築する最初の段階でMoltenを発見しました。そして、それは非常に似たようなアイデアを持っています。 @@ -321,7 +321,7 @@ Pydanticのようなデータのバリデーション、シリアライゼーシ /// -### Hug { #hug } +### [Hug](https://github.com/hugapi/hug) { #hug } Hugは、Pythonの型ヒントを利用してAPIパラメータの型宣言を実装した最初のフレームワークの1つです。これは素晴らしいアイデアで、他のツールが同じことをするきっかけとなりました。 @@ -337,7 +337,7 @@ OpenAPIやJSON Schemaのような標準に基づいたものではありませ /// info | 情報 -HugはTimothy Crosleyにより作成されました。彼は`isort`など、Pythonのファイル内のインポートの並び替えを自動的におこうなう素晴らしいツールの開発者です。 +HugはTimothy Crosleyにより作成されました。彼は[`isort`](https://github.com/timothycrosley/isort)など、Pythonのファイル内のインポートの並び替えを自動的におこうなう素晴らしいツールの開発者です。 /// @@ -351,7 +351,7 @@ Hugは、**FastAPI**がヘッダーやクッキーを設定するために関数 /// -### APIStar (<= 0.5) { #apistar-0-5 } +### [APIStar](https://github.com/encode/apistar) (<= 0.5) { #apistar-0-5 } **FastAPI**を構築することを決める直前に、**APIStar**サーバーを見つけました。それは私が探していたものがほぼすべて含まれており、素晴らしいデザインでした。 @@ -401,7 +401,7 @@ APIStarはTom Christieにより開発されました。以下の開発者でも ## **FastAPI**が利用しているもの { #used-by-fastapi } -### Pydantic { #pydantic } +### [Pydantic](https://docs.pydantic.dev/) { #pydantic } Pydanticは、Pythonの型ヒントを元にデータのバリデーション、シリアライゼーション、 (JSON Schemaを使用した) ドキュメントを定義するライブラリです。 @@ -413,11 +413,11 @@ Marshmallowに匹敵しますが、ベンチマークではMarshmallowよりも データのバリデーション、データのシリアライゼーション、自動的なモデルの (JSON Schemaに基づいた) ドキュメント化の全てを扱えます。 -**FastAPI**はJSON SchemaのデータをOpenAPIに利用します。 +**FastAPI**はそのJSON SchemaデータをOpenAPIに取り込みます (それ以外にも多くのことを行います)。 /// -### Starlette { #starlette } +### [Starlette](https://www.starlette.dev/) { #starlette } Starletteは、軽量なASGIフレームワーク/ツールキットで、高性能な非同期サービスの構築に最適です。 @@ -462,7 +462,7 @@ webに関するコアな部分を全て扱います。その上に機能を追 /// -### Uvicorn { #uvicorn } +### [Uvicorn](https://www.uvicorn.dev/) { #uvicorn } Uvicornは非常に高速なASGIサーバーで、uvloopとhttptoolsにより構成されています。 @@ -476,10 +476,10 @@ Starletteや**FastAPI**のサーバーとして推奨されています。 コマンドラインオプション `--workers` を使って、非同期のマルチプロセスサーバーにできます。 -詳細は[デプロイ](deployment/index.md){.internal-link target=_blank}の項目で確認してください。 +詳細は[デプロイ](deployment/index.md)の項目で確認してください。 /// ## ベンチマーク と スピード { #benchmarks-and-speed } -Uvicorn、Starlette、FastAPIの違いを理解、比較、確認するには、[ベンチマーク](benchmarks.md){.internal-link target=_blank}を確認してください。 +Uvicorn、Starlette、FastAPIの違いを理解、比較、確認するには、[ベンチマーク](benchmarks.md)を確認してください。 diff --git a/docs/ja/docs/async.md b/docs/ja/docs/async.md index bf4acda3f7..e2886d74e2 100644 --- a/docs/ja/docs/async.md +++ b/docs/ja/docs/async.md @@ -141,7 +141,7 @@ def results(): /// info | 情報 -美しいイラストは Ketrina Thompson によるものです。🎨 +美しいイラストは [Ketrina Thompson](https://www.instagram.com/ketrinadrawsalot) によるものです。🎨 /// @@ -207,7 +207,7 @@ def results(): /// info | 情報 -美しいイラストは Ketrina Thompson によるものです。🎨 +美しいイラストは [Ketrina Thompson](https://www.instagram.com/ketrinadrawsalot) によるものです。🎨 /// @@ -251,7 +251,7 @@ def results(): そして、それが **FastAPI** で得られるパフォーマンスの水準です。 -さらに、並列性と非同期性を同時に活用できるため、テストされた多くの NodeJS フレームワークより高い性能を発揮し、C に近いコンパイル言語である Go と同等の性能になります (すべて Starlette のおかげです)。 +さらに、並列性と非同期性を同時に活用できるため、テストされた多くの NodeJS フレームワークより高い性能を発揮し、C に近いコンパイル言語である Go と同等の性能になります [(すべて Starlette のおかげです)](https://www.techempower.com/benchmarks/#section=data-r17&hw=ph&test=query&l=zijmkf-1)。 ### 並行処理は並列処理より優れている? { #is-concurrency-better-than-parallelism } @@ -298,7 +298,7 @@ CPU バウンドな操作の一般的な例は、複雑な数値処理が必要 さらに、Python が **データサイエンス**、機械学習、特にディープラーニングの主要言語であるという事実も相まって、FastAPI はデータサイエンス/機械学習の Web API やアプリケーション (ほか多数) に非常に適しています。 -本番環境でこの並列性を実現する方法は、[デプロイ](deployment/index.md){.internal-link target=_blank} のセクションを参照してください。 +本番環境でこの並列性を実現する方法は、[デプロイ](deployment/index.md) のセクションを参照してください。 ## `async` と `await` { #async-and-await } @@ -363,13 +363,13 @@ async def read_burgers(): ### 自分で async コードを書く { #write-your-own-async-code } -Starlette (**FastAPI** も) は AnyIO の上に構築されており、標準ライブラリの asyncioTrio の両方に対応しています。 +Starlette (**FastAPI** も) は [AnyIO](https://anyio.readthedocs.io/en/stable/) の上に構築されており、標準ライブラリの [asyncio](https://docs.python.org/3/library/asyncio-task.html) と [Trio](https://trio.readthedocs.io/en/stable/) の両方に対応しています。 -特に、あなた自身のコード内で、より高度なパターンを必要とする発展的な並行処理のユースケースに対して、AnyIO を直接使えます。 +特に、あなた自身のコード内で、より高度なパターンを必要とする発展的な並行処理のユースケースに対して、[AnyIO](https://anyio.readthedocs.io/en/stable/) を直接使えます。 -仮に FastAPI を使っていなくても、AnyIO で独自の async アプリケーションを書けば、高い互換性と利点 (例: 構造化並行性) を得られます。 +仮に FastAPI を使っていなくても、[AnyIO](https://anyio.readthedocs.io/en/stable/) で独自の async アプリケーションを書けば、高い互換性と利点 (例: 構造化並行性) を得られます。 -私は AnyIO の上に薄い層として、型注釈を少し改善し、より良い**補完**や**インラインエラー**などを得るための別ライブラリも作りました。また、**理解**して**自分で async コードを書く**のに役立つフレンドリーなイントロ/チュートリアルもあります: Asyncer。特に、**async コードと通常の** (ブロッキング/同期) **コードを組み合わせる**必要がある場合に有用です。 +私は AnyIO の上に薄い層として、型注釈を少し改善し、より良い**補完**や**インラインエラー**などを得るための別ライブラリも作りました。また、**理解**して**自分で async コードを書く**のに役立つフレンドリーなイントロ/チュートリアルもあります: [Asyncer](https://asyncer.tiangolo.com/)。特に、**async コードと通常の** (ブロッキング/同期) **コードを組み合わせる**必要がある場合に有用です。 ### 非同期コードの他の形式 { #other-forms-of-asynchronous-code } @@ -381,7 +381,7 @@ Starlette (**FastAPI** も) は Gevent を使えましたが、コードの理解・デバッグ・思考がはるかに難しくなります。 +以前の Python ではスレッドや [Gevent](https://www.gevent.org/) を使えましたが、コードの理解・デバッグ・思考がはるかに難しくなります。 以前の NodeJS / ブラウザ JavaScript では「コールバック」を使っており、「コールバック地獄」を招きました。 @@ -419,15 +419,15 @@ Starlette (**FastAPI** も) は I/O を行うコードを使っていない限り、`async def` を使った方が良いです。 -それでも、どちらの状況でも、**FastAPI** はあなたが以前使っていたフレームワークよりも (少なくとも同等に) [高速である](index.md#performance){.internal-link target=_blank} 可能性が高いです。 +それでも、どちらの状況でも、**FastAPI** はあなたが以前使っていたフレームワークよりも (少なくとも同等に) [高速である](index.md#performance) 可能性が高いです。 ### 依存関係 { #dependencies } -[依存関係](tutorial/dependencies/index.md){.internal-link target=_blank} についても同様です。依存関係が `async def` ではなく標準の `def` 関数である場合、外部のスレッドプールで実行されます。 +[依存関係](tutorial/dependencies/index.md) についても同様です。依存関係が `async def` ではなく標準の `def` 関数である場合、外部のスレッドプールで実行されます。 ### サブ依存関係 { #sub-dependencies } -複数の依存関係や [サブ依存関係](tutorial/dependencies/sub-dependencies.md){.internal-link target=_blank} を (関数定義のパラメータとして) 相互に要求させられます。その一部は `async def`、他は通常の `def` で作られていても動作します。通常の `def` で作られたものは「await」される代わりに、外部スレッドプールからスレッド上で呼び出されます。 +複数の依存関係や [サブ依存関係](tutorial/dependencies/sub-dependencies.md) を (関数定義のパラメータとして) 相互に要求させられます。その一部は `async def`、他は通常の `def` で作られていても動作します。通常の `def` で作られたものは「await」される代わりに、外部スレッドプールからスレッド上で呼び出されます。 ### その他のユーティリティ関数 { #other-utility-functions } diff --git a/docs/ja/docs/benchmarks.md b/docs/ja/docs/benchmarks.md index fbfba2e637..b6ed4d6d29 100644 --- a/docs/ja/docs/benchmarks.md +++ b/docs/ja/docs/benchmarks.md @@ -1,6 +1,6 @@ # ベンチマーク { #benchmarks } -TechEmpowerの独立したベンチマークでは、Uvicornの下で動作する**FastAPI**アプリケーションは、利用可能な最速のPythonフレームワークの1つであり、下回っているのはStarletteとUvicorn自体(FastAPIによって内部で使用される)のみだと示されています。 +TechEmpowerの独立したベンチマークでは、Uvicornの下で動作する**FastAPI**アプリケーションは、[利用可能な最速のPythonフレームワークの1つ](https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7)であり、下回っているのはStarletteとUvicorn自体(FastAPIによって内部で使用される)のみだと示されています。 ただし、ベンチマークを確認し、比較する際には下記の内容に気を付けてください。 diff --git a/docs/ja/docs/deployment/cloud.md b/docs/ja/docs/deployment/cloud.md index 17699cdca6..8357464fbf 100644 --- a/docs/ja/docs/deployment/cloud.md +++ b/docs/ja/docs/deployment/cloud.md @@ -6,7 +6,7 @@ FastAPI アプリケーションは、実質的にどのようなクラウドプ ## FastAPI Cloud { #fastapi-cloud } -**FastAPI Cloud** は、**FastAPI** の作者と同じチームによって作られています。 +**[FastAPI Cloud](https://fastapicloud.com)** は、**FastAPI** の作者と同じチームによって作られています。 API の**構築**、**デプロイ**、**アクセス**までのプロセスを、最小限の手間で効率化します。 @@ -16,9 +16,9 @@ FastAPI Cloud は、*FastAPI and friends* オープンソースプロジェク ## クラウドプロバイダ - スポンサー { #cloud-providers-sponsors } -他にもいくつかのクラウドプロバイダが ✨ [**FastAPI をスポンサーしています**](../help-fastapi.md#sponsor-the-author){.internal-link target=_blank} ✨。🙇 +他にもいくつかのクラウドプロバイダが ✨ [**FastAPI をスポンサーしています**](../help-fastapi.md#sponsor-the-author) ✨。🙇 それらのガイドを参考にし、サービスを試してみるのもよいでしょう: -* Render -* Railway +* [Render](https://docs.render.com/deploy-fastapi?utm_source=deploydoc&utm_medium=referral&utm_campaign=fastapi) +* [Railway](https://docs.railway.com/guides/fastapi?utm_medium=integration&utm_source=docs&utm_campaign=fastapi) diff --git a/docs/ja/docs/deployment/concepts.md b/docs/ja/docs/deployment/concepts.md index 501a90bc93..9a23e8e914 100644 --- a/docs/ja/docs/deployment/concepts.md +++ b/docs/ja/docs/deployment/concepts.md @@ -29,7 +29,7 @@ ## セキュリティ - HTTPS { #security-https } -[前チャプターのHTTPSについて](https.md){.internal-link target=_blank}では、HTTPSがどのようにAPIを暗号化するのかについて学びました。 +[前チャプターのHTTPSについて](https.md)では、HTTPSがどのようにAPIを暗号化するのかについて学びました。 通常、アプリケーションサーバにとって**外部の**コンポーネントである**TLS Termination Proxy**によって提供されることが一般的です。このプロキシは通信の暗号化を担当します。 @@ -43,9 +43,9 @@ TLS Termination Proxyとして使用できるツールには以下のような * Caddy * 証明書の更新を自動的に処理 ✨ * Nginx - * 証明書更新のためにCertbotのような外部コンポーネントを使用 + * 証明書更新のために Certbot のような外部コンポーネントを使用 * HAProxy - * 証明書更新のためにCertbotのような外部コンポーネントを使用 + * 証明書更新のために Certbot のような外部コンポーネントを使用 * Nginx のような Ingress Controller を持つ Kubernetes * 証明書の更新に cert-manager のような外部コンポーネントを使用 * クラウド・プロバイダーがサービスの一部として内部的に処理(下記を参照👇) @@ -193,7 +193,7 @@ FastAPI アプリケーションでは、Uvicorn を実行する `fastapi` コ ### ワーカー・プロセス と ポート { #worker-processes-and-ports } -[HTTPSについて](https.md){.internal-link target=_blank}のドキュメントで、1つのサーバーで1つのポートとIPアドレスの組み合わせでリッスンできるのは1つのプロセスだけであることを覚えていますでしょうか? +[HTTPSについて](https.md)のドキュメントで、1つのサーバーで1つのポートとIPアドレスの組み合わせでリッスンできるのは1つのプロセスだけであることを覚えていますでしょうか? これはいまだに同じです。 @@ -250,7 +250,7 @@ FastAPI アプリケーションでは、Uvicorn を実行する `fastapi` コ これらの**コンテナ**やDockerそしてKubernetesに関する項目が、まだあまり意味をなしていなくても心配しないでください。 -コンテナ・イメージ、Docker、Kubernetesなどについては、将来の章で詳しく説明します: [コンテナ内のFastAPI - Docker](docker.md){.internal-link target=_blank}. +コンテナ・イメージ、Docker、Kubernetesなどについては、将来の章で詳しく説明します: [コンテナ内のFastAPI - Docker](docker.md). /// @@ -290,7 +290,7 @@ FastAPI アプリケーションでは、Uvicorn を実行する `fastapi` コ /// tip | 豆知識 -コンテナを使った具体的な例については、将来の章で紹介します: [コンテナ内のFastAPI - Docker](docker.md){.internal-link target=_blank}. +コンテナを使った具体的な例については、将来の章で紹介します: [コンテナ内のFastAPI - Docker](docker.md). /// diff --git a/docs/ja/docs/deployment/docker.md b/docs/ja/docs/deployment/docker.md index 883f98c985..6248e69b7c 100644 --- a/docs/ja/docs/deployment/docker.md +++ b/docs/ja/docs/deployment/docker.md @@ -1,6 +1,6 @@ # コンテナ内のFastAPI - Docker { #fastapi-in-containers-docker } -FastAPIアプリケーションをデプロイする場合、一般的なアプローチは**Linuxコンテナ・イメージ**をビルドすることです。基本的には **Docker**を用いて行われます。生成されたコンテナ・イメージは、いくつかの方法のいずれかでデプロイできます。 +FastAPIアプリケーションをデプロイする場合、一般的なアプローチは**Linuxコンテナ・イメージ**をビルドすることです。基本的には [**Docker**](https://www.docker.com/) を用いて行われます。生成されたコンテナ・イメージは、いくつかの方法のいずれかでデプロイできます。 Linuxコンテナの使用には、**セキュリティ**、**反復可能性(レプリカビリティ)**、**シンプリシティ**など、いくつかの利点があります。 @@ -60,16 +60,16 @@ Linuxコンテナは、ホスト(マシン、仮想マシン、クラウドサ Dockerは、**コンテナ・イメージ**と**コンテナ**を作成・管理するための主要なツールの1つです。 -そして、多くのツールや環境、データベース、アプリケーションに対応している予め作成された**公式のコンテナ・イメージ**をパブリックに提供しているDocker Hubというものがあります。 +そして、多くのツールや環境、データベース、アプリケーションに対応している予め作成された**公式のコンテナ・イメージ**をパブリックに提供している [Docker Hub](https://hub.docker.com/) というものがあります。 -例えば、公式イメージの1つにPython Imageがあります。 +例えば、公式イメージの1つに [Python Image](https://hub.docker.com/_/python) があります。 その他にも、データベースなどさまざまなイメージがあります: -* PostgreSQL -* MySQL -* MongoDB -* Redis, etc. +* [PostgreSQL](https://hub.docker.com/_/postgres) +* [MySQL](https://hub.docker.com/_/mysql) +* [MongoDB](https://hub.docker.com/_/mongo) +* [Redis](https://hub.docker.com/_/redis), etc. 予め作成されたコンテナ・イメージを使用することで、異なるツールを**組み合わせて**使用することが非常に簡単になります。例えば、新しいデータベースを試す場合に特に便利です。ほとんどの場合、**公式イメージ**を使い、環境変数で設定するだけで良いです。 @@ -111,7 +111,7 @@ FastAPI用の**Dockerイメージ**を、**公式Python**イメージに基づ 最も一般的な方法は、`requirements.txt` ファイルにパッケージ名とそのバージョンを 1 行ずつ書くことです。 -もちろん、[FastAPI バージョンについて](versions.md){.internal-link target=_blank}で読んだのと同じアイデアを使用して、バージョンの範囲を設定します。 +もちろん、[FastAPI バージョンについて](versions.md)で読んだのと同じアイデアを使用して、バージョンの範囲を設定します。 例えば、`requirements.txt` は次のようになります: @@ -238,7 +238,7 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80"] #### `CMD` を使う - Exec形式 { #use-cmd-exec-form } -Docker命令 `CMD` は2つの形式で書けます: +Docker命令 [`CMD`](https://docs.docker.com/reference/dockerfile/#cmd) は2つの形式で書けます: ✅ **Exec** 形式: @@ -254,11 +254,11 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80"] CMD fastapi run app/main.py --port 80 ``` -FastAPIが正常にシャットダウンでき、[lifespan events](../advanced/events.md){.internal-link target=_blank}がトリガーされるように、常に **exec** 形式を使用してください。 +FastAPIが正常にシャットダウンでき、[lifespan events](../advanced/events.md)がトリガーされるように、常に **exec** 形式を使用してください。 -詳しくは、shell形式とexec形式に関するDockerドキュメントをご覧ください。 +詳しくは、[shell形式とexec形式に関するDockerドキュメント](https://docs.docker.com/reference/dockerfile/#shell-and-exec-form)をご覧ください。 -これは `docker compose` を使用する場合にかなり目立つことがあります。より技術的な詳細は、このDocker ComposeのFAQセクションをご覧ください:Why do my services take 10 seconds to recreate or stop?。 +これは `docker compose` を使用する場合にかなり目立つことがあります。より技術的な詳細は、このDocker ComposeのFAQセクションをご覧ください:[Why do my services take 10 seconds to recreate or stop?](https://docs.docker.com/compose/faq/#why-do-my-services-take-10-seconds-to-recreate-or-stop)。 #### ディレクトリ構造 { #directory-structure } @@ -354,7 +354,7 @@ $ docker run -d --name mycontainer -p 80:80 myimage ## 確認する { #check-it } -Dockerコンテナのhttp://192.168.99.100/items/5?q=somequeryhttp://127.0.0.1/items/5?q=somequery (またはそれに相当するDockerホストを使用したもの)といったURLで確認できるはずです。 +Dockerコンテナの[http://192.168.99.100/items/5?q=somequery](http://192.168.99.100/items/5?q=somequery) や [http://127.0.0.1/items/5?q=somequery](http://127.0.0.1/items/5?q=somequery) (またはそれに相当するDockerホストを使用したもの)といったURLで確認できるはずです。 アクセスすると以下のようなものが表示されます: @@ -364,17 +364,17 @@ Dockerコンテナのhttp://192.168.99.100/docshttp://127.0.0.1/docs (またはそれに相当するDockerホストを使用したもの) +これらのURLにもアクセスできます: [http://192.168.99.100/docs](http://192.168.99.100/docs) や [http://127.0.0.1/docs](http://127.0.0.1/docs) (またはそれに相当するDockerホストを使用したもの) -アクセスすると、自動対話型APIドキュメント(Swagger UIが提供)が表示されます: +アクセスすると、自動対話型APIドキュメント([Swagger UI](https://github.com/swagger-api/swagger-ui)が提供)が表示されます: ![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png) ## 代替のAPIドキュメント { #alternative-api-docs } -また、http://192.168.99.100/redochttp://127.0.0.1/redoc (またはそれに相当するDockerホストを使用したもの)にもアクセスできます。 +また、[http://192.168.99.100/redoc](http://192.168.99.100/redoc) や [http://127.0.0.1/redoc](http://127.0.0.1/redoc) (またはそれに相当するDockerホストを使用したもの)にもアクセスできます。 -代替の自動ドキュメント(ReDocによって提供される)が表示されます: +代替の自動ドキュメント([ReDoc](https://github.com/Rebilly/ReDoc)によって提供される)が表示されます: ![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png) @@ -415,7 +415,7 @@ CMD ["fastapi", "run", "main.py", "--port", "80"] ## デプロイメントのコンセプト { #deployment-concepts } -コンテナという観点から、[デプロイのコンセプト](concepts.md){.internal-link target=_blank}に共通するいくつかについて、もう一度説明しましょう。 +コンテナという観点から、[デプロイのコンセプト](concepts.md)に共通するいくつかについて、もう一度説明しましょう。 コンテナは主に、アプリケーションの**ビルドとデプロイ**のプロセスを簡素化するためのツールですが、これらの**デプロイのコンセプト**を扱うための特定のアプローチを強制するものではなく、いくつかの戦略があります。 @@ -434,7 +434,7 @@ CMD ["fastapi", "run", "main.py", "--port", "80"] FastAPI アプリケーションの **コンテナ・イメージ**(および後で実行中の **コンテナ**)だけに焦点を当てると、通常、HTTPSは別のツールを用いて**外部で**処理されます。 -例えばTraefikのように、**HTTPS**と**証明書**の**自動**取得を扱う別のコンテナである可能性もあります。 +例えば [Traefik](https://traefik.io/) のように、**HTTPS**と**証明書**の**自動**取得を扱う別のコンテナである可能性もあります。 /// tip | 豆知識 @@ -564,7 +564,7 @@ Docker Composeで**単一サーバ**(クラスタではない)にデプロ /// info | 情報 -もしKubernetesを使用している場合, これはおそらくInit Containerでしょう。 +もしKubernetesを使用している場合, これはおそらく[Init Container](https://kubernetes.io/docs/concepts/workloads/pods/init-containers/)でしょう。 /// @@ -576,7 +576,7 @@ Docker Composeで**単一サーバ**(クラスタではない)にデプロ ### ベースDockerイメージ { #base-docker-image } -以前は、公式のFastAPI Dockerイメージがありました:tiangolo/uvicorn-gunicorn-fastapi。しかし、現在は非推奨です。⛔️ +以前は、公式のFastAPI Dockerイメージがありました:[tiangolo/uvicorn-gunicorn-fastapi](https://github.com/tiangolo/uvicorn-gunicorn-fastapi-docker)。しかし、現在は非推奨です。⛔️ おそらく、このベースDockerイメージ(またはその他の類似のもの)は**使用しない**方がよいでしょう。 @@ -606,7 +606,7 @@ Docker Composeで**単一サーバ**(クラスタではない)にデプロ ## `uv` を使ったDockerイメージ { #docker-image-with-uv } -uv を使ってプロジェクトのインストールと管理をしている場合は、uv Docker guideに従ってください。 +[uv](https://github.com/astral-sh/uv) を使ってプロジェクトのインストールと管理をしている場合は、[uv Docker guide](https://docs.astral.sh/uv/guides/integration/docker/)に従ってください。 ## まとめ { #recap } diff --git a/docs/ja/docs/deployment/fastapicloud.md b/docs/ja/docs/deployment/fastapicloud.md index 43d9ce0d02..3dd5685a2b 100644 --- a/docs/ja/docs/deployment/fastapicloud.md +++ b/docs/ja/docs/deployment/fastapicloud.md @@ -1,6 +1,6 @@ # FastAPI Cloud { #fastapi-cloud } -FastAPI Cloud に **コマンド1つ** でデプロイできます。まだならウェイティングリストにご登録ください。🚀 +[FastAPI Cloud](https://fastapicloud.com) に **コマンド1つ** でデプロイできます。まだならウェイティングリストにご登録ください。🚀 ## ログイン { #login } @@ -40,7 +40,7 @@ Deploying to FastAPI Cloud... ## FastAPI Cloud について { #about-fastapi-cloud } -**FastAPI Cloud** は、**FastAPI** の作者とチームによって開発されています。 +**[FastAPI Cloud](https://fastapicloud.com)** は、**FastAPI** の作者とチームによって開発されています。 最小限の手間で API を**構築**・**デプロイ**・**利用**できるように工程を簡素化します。 diff --git a/docs/ja/docs/deployment/https.md b/docs/ja/docs/deployment/https.md index 8e588aadc3..37ad7072c8 100644 --- a/docs/ja/docs/deployment/https.md +++ b/docs/ja/docs/deployment/https.md @@ -10,7 +10,7 @@ HTTPSは単に「有効」か「無効」かで決まるものだと思いがち /// -利用者の視点から **HTTPS の基本を学ぶ**に当たっては、次のリソースをオススメします: https://howhttps.works/. +利用者の視点から **HTTPS の基本を学ぶ**に当たっては、次のリソースをオススメします: [https://howhttps.works/](https://howhttps.works/). さて、**開発者の視点**から、HTTPSについて考える際に念頭に置くべきことをいくつかみていきましょう: @@ -28,13 +28,13 @@ HTTPSは単に「有効」か「無効」かで決まるものだと思いがち * **デフォルトでは**、**IPアドレスごとに1つのHTTPS証明書**しか持てないことになります。 * これは、サーバーの規模やアプリケーションの規模に寄りません。 * しかし、これには**解決策**があります。 -* **TLS**プロトコル(HTTPの前に、TCPレベルで暗号化を処理するもの)には、**SNI**と呼ばれる**拡張**があります。 +* **TLS**プロトコル(HTTPの前に、TCPレベルで暗号化を処理するもの)には、**[SNI](https://en.wikipedia.org/wiki/Server_Name_Indication)**と呼ばれる**拡張**があります。 * このSNI拡張機能により、1つのサーバー(**単一のIPアドレス**を持つ)が**複数のHTTPS証明書**を持ち、**複数のHTTPSドメイン/アプリケーション**にサービスを提供できるようになります。 * これが機能するためには、**パブリックIPアドレス**でリッスンしている、サーバー上で動作している**単一の**コンポーネント(プログラム)が、サーバー内の**すべてのHTTPS証明書**を持っている必要があります。 * セキュアな接続を取得した**後**でも、通信プロトコルは**HTTPのまま**です。 * コンテンツは**HTTPプロトコル**で送信されているにもかかわらず、**暗号化**されています。 -サーバー(マシン、ホストなど)上で**1つのプログラム/HTTPサーバー**を実行させ、**HTTPSに関する全てのこと**を管理するのが一般的です。**暗号化された HTTPS リクエスト** を受信し、**復号化された HTTP リクエスト** を同じサーバーで実行されている実際の HTTP アプリケーション(この場合は **FastAPI** アプリケーション)に送信し、アプリケーションから **HTTP レスポンス** を受け取り、適切な **HTTPS 証明書** を使用して **暗号化** し、そして**HTTPS** を使用してクライアントに送り返します。このサーバーはしばしば **TLS Termination Proxy**と呼ばれます。 +サーバー(マシン、ホストなど)上で**1つのプログラム/HTTPサーバー**を実行させ、**HTTPSに関する全てのこと**を管理するのが一般的です。**暗号化された HTTPS リクエスト** を受信し、**復号化された HTTP リクエスト** を同じサーバーで実行されている実際の HTTP アプリケーション(この場合は **FastAPI** アプリケーション)に送信し、アプリケーションから **HTTP レスポンス** を受け取り、適切な **HTTPS 証明書** を使用して **暗号化** し、そして**HTTPS** を使用してクライアントに送り返します。このサーバーはしばしば **[TLS Termination Proxy](https://en.wikipedia.org/wiki/TLS_termination_proxy)**と呼ばれます。 TLS Termination Proxyとして使えるオプションには、以下のようなものがあります: @@ -50,7 +50,7 @@ Let's Encrypt以前は、これらの**HTTPS証明書**は信頼できる第三 これらの証明書を取得するための手続きは面倒で、かなりの書類を必要とし、証明書はかなり高価なものでした。 -しかしその後、**Let's Encrypt** が作られました。 +しかしその後、**[Let's Encrypt](https://letsencrypt.org/)** が作られました。 これはLinux Foundationのプロジェクトから生まれたものです。 自動化された方法で、**HTTPS証明書を無料で**提供します。これらの証明書は、すべての標準的な暗号化セキュリティを使用し、また短命(約3ヶ月)ですが、こういった寿命の短さによって、**セキュリティは実際に優れています**。 @@ -68,7 +68,7 @@ Let's Encrypt以前は、これらの**HTTPS証明書**は信頼できる第三 おそらくクラウドサーバー(仮想マシン)かそれに類するものを手に入れ、固定の **パブリックIPアドレス**を持つことになるでしょう。 -DNSサーバーでは、**取得したドメイン**をあなたのサーバーのパプリック**IPアドレス**に向けるレコード(「`A record`」)を設定します。 +DNSサーバーでは、**取得したドメイン**をあなたのサーバーのパブリック**IPアドレス**に向けるレコード(「`A record`」)を設定します。 これはおそらく、最初の1回だけあり、すべてをセットアップするときに行うでしょう。 @@ -80,7 +80,7 @@ DNSサーバーでは、**取得したドメイン**をあなたのサーバー ### DNS { #dns } -では、実際のHTTPSの部分に注目してみよう。 +では、実際のHTTPSの部分に注目してみましょう。 まず、ブラウザは**DNSサーバー**に**ドメインに対するIP**が何であるかを確認します。今回は、`someapp.example.com`とします。 @@ -100,7 +100,7 @@ TLS接続を確立するためのクライアントとサーバー間のこの ### SNI拡張機能付きのTLS { #tls-with-sni-extension } -サーバー内の**1つのプロセス**だけが、特定 の**IPアドレス**の特定の**ポート** で待ち受けることができます。 +サーバー内の**1つのプロセス**だけが、特定の**IPアドレス**の特定の**ポート**で待ち受けることができます。 同じIPアドレスの他のポートで他のプロセスがリッスンしている可能性もありますが、IPアドレスとポートの組み合わせごとに1つだけです。 @@ -204,9 +204,9 @@ TLS Termination Proxyは次に、事前に合意が取れている暗号(`someap プロキシヘッダーは次のとおりです: -* X-Forwarded-For -* X-Forwarded-Proto -* X-Forwarded-Host +* [X-Forwarded-For](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-For) +* [X-Forwarded-Proto](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Proto) +* [X-Forwarded-Host](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Host) /// @@ -222,7 +222,7 @@ TLS Termination Proxyは次に、事前に合意が取れている暗号(`someap /// tip | 豆知識 -これについては、[Behind a Proxy - Enable Proxy Forwarded Headers](../advanced/behind-a-proxy.md#enable-proxy-forwarded-headers){.internal-link target=_blank} のドキュメントで詳しく学べます。 +これについては、[Behind a Proxy - Enable Proxy Forwarded Headers](../advanced/behind-a-proxy.md#enable-proxy-forwarded-headers) のドキュメントで詳しく学べます。 /// diff --git a/docs/ja/docs/deployment/index.md b/docs/ja/docs/deployment/index.md index eba6eae6ea..9a3e1068e6 100644 --- a/docs/ja/docs/deployment/index.md +++ b/docs/ja/docs/deployment/index.md @@ -16,7 +16,7 @@ 複数のツールを組み合わせて自分で**サーバーをデプロイ**することもできますし、作業の一部を代行してくれる **クラウドサービス** を使うこともできます。ほかにも選択肢があります。 -たとえば、FastAPI の開発チームである私たちは、クラウドへの FastAPI アプリのデプロイを可能な限り合理化し、FastAPI を使って開発するのと同じ開発者体験を提供するために、**FastAPI Cloud** を構築しました。 +たとえば、FastAPI の開発チームである私たちは、クラウドへの FastAPI アプリのデプロイを可能な限り合理化し、FastAPI を使って開発するのと同じ開発者体験を提供するために、[**FastAPI Cloud**](https://fastapicloud.com) を構築しました。 **FastAPI** アプリケーションをデプロイする際に、おそらく念頭に置くべき主要な概念をいくつか紹介します(ただし、そのほとんどは他の種類の Web アプリケーションにも当てはまります)。 diff --git a/docs/ja/docs/deployment/manually.md b/docs/ja/docs/deployment/manually.md index 1931cd87e5..1c0d59a715 100644 --- a/docs/ja/docs/deployment/manually.md +++ b/docs/ja/docs/deployment/manually.md @@ -52,11 +52,11 @@ FastAPI は、Python の Web フレームワークとサーバーのための標 他にもいくつかの選択肢があります: -* Uvicorn: 高性能な ASGI サーバー。 -* Hypercorn: HTTP/2 や Trio に対応する ASGI サーバーなど。 -* Daphne: Django Channels のために作られた ASGI サーバー。 -* Granian: Python アプリケーション向けの Rust 製 HTTP サーバー。 -* NGINX Unit: 軽量で多用途な Web アプリケーションランタイム。 +* [Uvicorn](https://www.uvicorn.dev/): 高性能な ASGI サーバー。 +* [Hypercorn](https://hypercorn.readthedocs.io/): HTTP/2 や Trio に対応する ASGI サーバーなど。 +* [Daphne](https://github.com/django/daphne): Django Channels のために作られた ASGI サーバー。 +* [Granian](https://github.com/emmett-framework/granian): Python アプリケーション向けの Rust 製 HTTP サーバー。 +* [NGINX Unit](https://unit.nginx.org/howto/fastapi/): 軽量で多用途な Web アプリケーションランタイム。 ## サーバーマシンとサーバープログラム { #server-machine-and-server-program } @@ -74,7 +74,7 @@ FastAPI をインストールすると、本番サーバーの Uvicorn が同梱 ただし、ASGI サーバーを手動でインストールすることもできます。 -[仮想環境](../virtual-environments.md){.internal-link target=_blank}を作成して有効化し、サーバーアプリケーションをインストールしてください。 +[仮想環境](../virtual-environments.md)を作成して有効化し、サーバーアプリケーションをインストールしてください。 例として、Uvicorn をインストールするには: @@ -94,7 +94,7 @@ $ pip install "uvicorn[standard]" `standard` を付けると、Uvicorn は推奨の追加依存関係もインストールして使用します。 -その中には、`asyncio` の高性能なドロップイン代替であり、大きな並行実行性能の向上をもたらす `uvloop` も含まれます。 +その中には、`uvloop` も含まれます。これは `asyncio` の高性能なドロップイン代替で、大きな並行実行性能の向上をもたらします。 `pip install "fastapi[standard]"` のように FastAPI をインストールした場合は、すでに `uvicorn[standard]` も含まれます。 diff --git a/docs/ja/docs/deployment/server-workers.md b/docs/ja/docs/deployment/server-workers.md index 933b875d76..c4c6e93557 100644 --- a/docs/ja/docs/deployment/server-workers.md +++ b/docs/ja/docs/deployment/server-workers.md @@ -13,13 +13,13 @@ アプリケーションをデプロイする際には、**複数のコア**を利用し、そしてより多くのリクエストを処理できるようにするために、プロセスの**レプリケーション**を持つことを望むでしょう。 -前のチャプターである[デプロイメントのコンセプト](concepts.md){.internal-link target=_blank}にて見てきたように、有効な戦略がいくつかあります。 +前のチャプターである[デプロイメントのコンセプト](concepts.md)にて見てきたように、有効な戦略がいくつかあります。 ここでは、`fastapi` コマンド、または `uvicorn` コマンドを直接使って、**ワーカープロセス**付きの **Uvicorn** を使う方法を紹介します。 /// info | 情報 -DockerやKubernetesなどのコンテナを使用している場合は、次の章で詳しく説明します: [コンテナ内のFastAPI - Docker](docker.md){.internal-link target=_blank}。 +DockerやKubernetesなどのコンテナを使用している場合は、次の章で詳しく説明します: [コンテナ内のFastAPI - Docker](docker.md)。 特に**Kubernetes**上で実行する場合は、おそらくワーカーは使わず、代わりに**コンテナごとに単一のUvicornプロセス**を実行したいはずですが、それについてはその章の後半で説明します。 @@ -126,7 +126,7 @@ $ uvicorn main:app --host 0.0.0.0 --port 8080 --workers 4 ## コンテナとDocker { #containers-and-docker } -次章の[コンテナ内のFastAPI - Docker](docker.md){.internal-link target=_blank}では、その他の**デプロイメントのコンセプト**を扱うために使える戦略をいくつか説明します。 +次章の[コンテナ内のFastAPI - Docker](docker.md)では、その他の**デプロイメントのコンセプト**を扱うために使える戦略をいくつか説明します。 単一のUvicornプロセスを実行するために、**ゼロから独自のイメージを構築する**方法も紹介します。これは簡単なプロセスで、**Kubernetes**のような分散コンテナ管理システムを使う場合に、おそらくやりたいことでしょう。 diff --git a/docs/ja/docs/deployment/versions.md b/docs/ja/docs/deployment/versions.md index 7980b8be2a..36e22636c8 100644 --- a/docs/ja/docs/deployment/versions.md +++ b/docs/ja/docs/deployment/versions.md @@ -4,7 +4,7 @@ 新機能が高頻度で追加され、定期的にバグが修正され、コードは継続的に改善されています。 -これが現在のバージョンがいまだに `0.x.x` な理由であり、それぞれのバージョンは破壊的な変更がなされる可能性があります。これは、セマンティック バージョニングの規則に則っています。 +これが現在のバージョンがいまだに `0.x.x` な理由であり、それぞれのバージョンは破壊的な変更がなされる可能性があります。これは、[セマンティック バージョニング](https://semver.org/)の規則に則っています。 **FastAPI** を使用すると本番用アプリケーションを今すぐ作成できます(そして、おそらくあなたはしばらく前からそうしているはずです)。必要なのは、残りのコードと正しく動作するバージョンを使用していることを確認することだけです。 @@ -34,7 +34,7 @@ fastapi[standard]>=0.112.0,<0.113.0 ## 利用可能なバージョン { #available-versions } -利用可能なバージョン(例: 現在の最新が何かを確認するため)は、[Release Notes](../release-notes.md){.internal-link target=_blank} で確認できます。 +利用可能なバージョン(例: 現在の最新が何かを確認するため)は、[Release Notes](../release-notes.md) で確認できます。 ## バージョンについて { #about-versions } @@ -66,7 +66,7 @@ fastapi>=0.45.0,<0.46.0 アプリケーションにテストを追加すべきです。 -**FastAPI** では非常に簡単に実現できます(Starlette のおかげです)。ドキュメントを確認して下さい: [テスト](../tutorial/testing.md){.internal-link target=_blank} +**FastAPI** では非常に簡単に実現できます(Starlette のおかげです)。ドキュメントを確認して下さい: [テスト](../tutorial/testing.md) テストを追加したら、**FastAPI** のバージョンをより新しいものにアップグレードし、テストを実行することで全てのコードが正しく動作するか確認できます。 diff --git a/docs/ja/docs/environment-variables.md b/docs/ja/docs/environment-variables.md index 4deae70446..846f328461 100644 --- a/docs/ja/docs/environment-variables.md +++ b/docs/ja/docs/environment-variables.md @@ -2,7 +2,7 @@ /// tip | 豆知識 -もし、「環境変数」とは何か、それをどう使うかを既に知っている場合は、このセクションをスキップして構いません。 +もし「環境変数」とは何か、それをどう使うかを既に知っている場合は、このセクションをスキップして構いません。 /// @@ -19,10 +19,10 @@
```console -// You could create an env var MY_NAME with +// 環境変数 MY_NAME を作成する例 $ export MY_NAME="Wade Wilson" -// Then you could use it with other programs, like +// その後、他のプログラムで利用できます。例えば $ echo "Hello $MY_NAME" Hello Wade Wilson @@ -37,10 +37,10 @@ Hello Wade Wilson
```console -// Create an env var MY_NAME +// 環境変数 MY_NAME を作成 $ $Env:MY_NAME = "Wade Wilson" -// Use it with other programs, like +// 他のプログラムで利用、例えば $ echo "Hello $Env:MY_NAME" Hello Wade Wilson @@ -65,7 +65,7 @@ print(f"Hello {name} from Python") /// tip | 豆知識 -`os.getenv()` の第2引数は、デフォルトで返される値です。 +[`os.getenv()`](https://docs.python.org/3.8/library/os.html#os.getenv) の第2引数は、返されるデフォルト値です。 指定しない場合、デフォルトは`None`ですが、ここでは使用するデフォルト値として`"World"`を指定しています。 @@ -78,20 +78,20 @@ print(f"Hello {name} from Python")
```console -// Here we don't set the env var yet +// ここではまだ環境変数を設定していません $ python main.py -// As we didn't set the env var, we get the default value +// 環境変数を設定していないため、デフォルト値が使われます Hello World from Python -// But if we create an environment variable first +// しかし、先に環境変数を作成すると $ export MY_NAME="Wade Wilson" -// And then call the program again +// それからもう一度プログラムを実行すると $ python main.py -// Now it can read the environment variable +// すると環境変数を読み取れます Hello Wade Wilson from Python ``` @@ -105,20 +105,20 @@ Hello Wade Wilson from Python
```console -// Here we don't set the env var yet +// ここではまだ環境変数を設定していません $ python main.py -// As we didn't set the env var, we get the default value +// 環境変数を設定していないため、デフォルト値が使われます Hello World from Python -// But if we create an environment variable first +// しかし、先に環境変数を作成すると $ $Env:MY_NAME = "Wade Wilson" -// And then call the program again +// それからもう一度プログラムを実行すると $ python main.py -// Now it can read the environment variable +// すると環境変数を読み取れます Hello Wade Wilson from Python ``` @@ -136,14 +136,14 @@ Hello Wade Wilson from Python
```console -// Create an env var MY_NAME in line for this program call +// このプログラム呼び出し用に同じ行で環境変数 MY_NAME を作成 $ MY_NAME="Wade Wilson" python main.py -// Now it can read the environment variable +// これで環境変数を読み取れます Hello Wade Wilson from Python -// The env var no longer exists afterwards +// その後は環境変数は存在しません $ python main.py Hello World from Python @@ -153,7 +153,7 @@ Hello World from Python /// tip | 豆知識 -詳しくは The Twelve-Factor App: 設定 を参照してください。 +詳しくは [The Twelve-Factor App: 設定](https://12factor.net/config) を参照してください。 /// @@ -163,7 +163,7 @@ Hello World from Python つまり、環境変数からPythonで読み取る**あらゆる値**は **`str`になり**、他の型への変換やバリデーションはコード内で行う必要があります。 -環境変数を使って**アプリケーション設定**を扱う方法については、[高度なユーザーガイド - Settings and Environment Variables](./advanced/settings.md){.internal-link target=_blank} で詳しく学べます。 +環境変数を使って**アプリケーション設定**を扱う方法については、[高度なユーザーガイド - Settings and Environment Variables](./advanced/settings.md)で詳しく学べます。 ## `PATH`環境変数 { #path-environment-variable } @@ -285,13 +285,13 @@ $ C:\opt\custompython\bin\python //// -この情報は、[Virtual Environments](virtual-environments.md){.internal-link target=_blank} について学ぶ際にも役立ちます。 +この情報は、[Virtual Environments](virtual-environments.md)について学ぶ際にも役立ちます。 ## まとめ { #conclusion } これで、**環境変数**とは何か、Pythonでどのように使用するかについて、基本的な理解が得られたはずです。 -環境変数についての詳細は、Wikipedia の環境変数 も参照してください。 +環境変数についての詳細は、[Wikipedia の環境変数](https://en.wikipedia.org/wiki/Environment_variable)も参照してください。 多くの場合、環境変数がどのように役立ち、すぐに適用できるのかはあまり明確ではありません。しかし、開発中のさまざまなシナリオで何度も登場するため、知っておくとよいでしょう。 diff --git a/docs/ja/docs/fastapi-cli.md b/docs/ja/docs/fastapi-cli.md index 20cc9c2fb8..298ed91416 100644 --- a/docs/ja/docs/fastapi-cli.md +++ b/docs/ja/docs/fastapi-cli.md @@ -1,15 +1,15 @@ # FastAPI CLI { #fastapi-cli } -**FastAPI CLI** は、FastAPI アプリの提供、FastAPI プロジェクトの管理などに使用できるコマンドラインプログラムです。 +**FastAPI CLI** は、FastAPI アプリの提供、FastAPI プロジェクトの管理などに使用できるコマンドラインプログラムです。 -FastAPI をインストールすると(例: `pip install "fastapi[standard]"`)、`fastapi-cli` というパッケージが含まれます。このパッケージがターミナルで使用する `fastapi` コマンドを提供します。 +FastAPI をインストールすると(例: `pip install "fastapi[standard]"`)、ターミナルで実行できるコマンドラインプログラムが付属します。 開発用に FastAPI アプリを起動するには、`fastapi dev` コマンドを使用できます:
```console -$ fastapi dev main.py +$ fastapi dev FastAPI Starting development server 🚀 @@ -46,13 +46,66 @@ $ fastapi dev Uvicorn(高性能で本番運用向けの ASGI サーバー)を使用します。😎 +内部的には、**FastAPI CLI** は [Uvicorn](https://www.uvicorn.dev)(高性能で本番運用向けの ASGI サーバー)を使用します。😎 + +`fastapi` CLI は、実行する FastAPI アプリを自動検出しようとします。既定では、`main.py` の中にある `app` という名前のオブジェクト(ほかにもいくつかの変種)であると仮定します。 + +ただし、使用するアプリを明示的に設定することもできます。 + +## `pyproject.toml` でアプリの `entrypoint` を設定 { #configure-the-app-entrypoint-in-pyproject-toml } + +`pyproject.toml` に次のように、アプリの場所を設定できます: + +```toml +[tool.fastapi] +entrypoint = "main:app" +``` + +この `entrypoint` により、`fastapi` コマンドは次のようにアプリを import する必要があると認識します: + +```python +from main import app +``` + +もしコード構成が次のような場合: + +``` +. +├── backend +│   ├── main.py +│   ├── __init__.py +``` + +`entrypoint` は次のように設定します: + +```toml +[tool.fastapi] +entrypoint = "backend.main:app" +``` + +これは次と同等です: + +```python +from backend.main import app +``` + +### パス指定での `fastapi dev` { #fastapi-dev-with-path } + +`fastapi dev` コマンドにファイルパスを渡すこともでき、使用する FastAPI アプリオブジェクトを推測します: + +```console +$ fastapi dev main.py +``` + +ただし、そのたびに `fastapi` コマンドを呼び出す際に正しいパスを渡す必要があります。 + +さらに、[VS Code 拡張機能](editor-support.md) や [FastAPI Cloud](https://fastapicloud.com) など、ほかのツールがそれを見つけられない場合があります。そのため、`pyproject.toml` の `entrypoint` を使用することを推奨します。 ## `fastapi dev` { #fastapi-dev } @@ -68,8 +121,8 @@ FastAPI CLI は、Python プログラムへのパス(例: `main.py`)を受 多くの場合(そして推奨されるのは)、上位に HTTPS を終端する「termination proxy」を置きます。これはアプリのデプロイ方法に依存し、プロバイダが代行する場合もあれば、自分で設定する必要がある場合もあります。 -/// tip | 豆知識 +/// tip -詳しくは、[デプロイのドキュメント](deployment/index.md){.internal-link target=_blank}を参照してください。 +詳しくは、[デプロイのドキュメント](deployment/index.md)を参照してください。 /// diff --git a/docs/ja/docs/features.md b/docs/ja/docs/features.md index 40a1d2e60d..cfde6592d2 100644 --- a/docs/ja/docs/features.md +++ b/docs/ja/docs/features.md @@ -6,8 +6,8 @@ ### オープンスタンダード準拠 { #based-on-open-standards } -* API 作成のための OpenAPIpath operations、パラメータ、リクエストボディ、セキュリティなどの宣言を含みます。 -* JSON Schema によるデータモデルの自動ドキュメント化(OpenAPI 自体が JSON Schema に基づいています)。 +* API 作成のための [**OpenAPI**](https://github.com/OAI/OpenAPI-Specification)。パス オペレーション、パラメータ、リクエストボディ、セキュリティなどの宣言を含みます。 +* [**JSON Schema**](https://json-schema.org/) によるデータモデルの自動ドキュメント化(OpenAPI 自体が JSON Schema に基づいています)。 * 入念な調査のうえ、これらの標準を中心に設計されています。後付けのレイヤーではありません。 * これにより、多くの言語で自動 **クライアントコード生成** が可能です。 @@ -15,11 +15,11 @@ 対話的な API ドキュメントと探索的な Web ユーザーインターフェース。フレームワークは OpenAPI に基づいているため、複数のオプションがあり、デフォルトで 2 つ含まれます。 -* Swagger UI。インタラクティブに探索しつつ、ブラウザから直接 API を呼び出してテストできます。 +* [**Swagger UI**](https://github.com/swagger-api/swagger-ui)。インタラクティブに探索しつつ、ブラウザから直接 API を呼び出してテストできます。 ![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-03-swagger-02.png) -* ReDoc による代替の API ドキュメント。 +* [**ReDoc**](https://github.com/Rebilly/ReDoc) による代替の API ドキュメント。 ![ReDoc](https://fastapi.tiangolo.com/img/index/index-06-redoc-02.png) @@ -27,7 +27,7 @@ すべて標準の **Python の型** 宣言(Pydantic に感謝)に基づいています。新しい構文を学ぶ必要はありません。標準的でモダンな Python だけです。 -(FastAPI を使わない場合でも)Python の型の使い方を 2 分で復習したい場合は、短いチュートリアル [Python Types](python-types.md){.internal-link target=_blank} を参照してください。 +(FastAPI を使わない場合でも)Python の型の使い方を 2 分で復習したい場合は、短いチュートリアル [Python の型](python-types.md) を参照してください。 型を使った標準的な Python を記述します: @@ -36,13 +36,13 @@ from datetime import date from pydantic import BaseModel -# 変数を str として宣言 -# そして関数内でエディタ支援を受ける +# Declare a variable as a str +# and get editor support inside the function def main(user_id: str): return user_id -# Pydantic モデル +# A Pydantic model class User(BaseModel): id: int name: str @@ -75,7 +75,7 @@ my_second_user: User = User(**second_user_data) フレームワーク全体が使いやすく直感的になるよう設計されており、最高の開発体験を確保するため、開発開始前から複数のエディタであらゆる判断が検証されています。 -Python 開発者調査では、最もよく使われる機能の 1 つが「オートコンプリート」であることが明らかです。 +Python 開発者調査では、[最もよく使われる機能の 1 つが「オートコンプリート」であることが明らかです](https://www.jetbrains.com/research/python-developers-survey-2017/#tools-and-features)。 **FastAPI** はその要求を満たすことを基盤にしています。オートコンプリートはどこでも機能します。 @@ -83,11 +83,11 @@ Python 開発者調査では、Visual Studio Code の場合: +* [Visual Studio Code](https://code.visualstudio.com/) の場合: ![editor support](https://fastapi.tiangolo.com/img/vscode-completion.png) -* PyCharm の場合: +* [PyCharm](https://www.jetbrains.com/pycharm/) の場合: ![editor support](https://fastapi.tiangolo.com/img/pycharm-completion.png) @@ -124,7 +124,7 @@ Python 開発者調査では、Starlette と完全に互換性があり(かつそれに基づいています)。そのため、手元の Starlette の追加コードも動作します。 +**FastAPI** は [**Starlette**](https://www.starlette.dev/) と完全に互換性があり(かつそれに基づいています)。そのため、手元の Starlette の追加コードも動作します。 `FastAPI` は実際には `Starlette` のサブクラスです。すでに Starlette を知っている、あるいは使っているなら、ほとんどの機能は同じように動作します。 **FastAPI** では **Starlette** のすべての機能が利用できます(FastAPI は強化された Starlette にすぎません): -* 圧倒的なパフォーマンス。利用可能な最速クラスの Python フレームワークの 1 つで、**NodeJS** や **Go** と同等です。 +* 圧倒的なパフォーマンス。[利用可能な最速クラスの Python フレームワークの 1 つで、**NodeJS** や **Go** と同等です](https://github.com/encode/starlette#performance)。 * **WebSocket** のサポート。 * プロセス内バックグラウンドタスク。 * 起動およびシャットダウンイベント。 @@ -177,7 +177,7 @@ FastAPI には、非常に使いやすく、かつ非常に強力な Pydantic と完全に互換性があり(かつそれに基づいています)。そのため、手元の Pydantic の追加コードも動作します。 +**FastAPI** は [**Pydantic**](https://docs.pydantic.dev/) と完全に互換性があり(かつそれに基づいています)。そのため、手元の Pydantic の追加コードも動作します。 Pydantic に基づく外部ライブラリ(データベース用の ORMODM など)も含まれます。 diff --git a/docs/ja/docs/help-fastapi.md b/docs/ja/docs/help-fastapi.md index ed91bb19f6..3ae18449fa 100644 --- a/docs/ja/docs/help-fastapi.md +++ b/docs/ja/docs/help-fastapi.md @@ -12,7 +12,7 @@ FastAPIや他のユーザー、作者を応援したいですか? ## ニュースレターを購読 { #subscribe-to-the-newsletter } -[**FastAPI and friends** ニュースレター](newsletter.md){.internal-link target=_blank}(配信はまれです)を購読すると、次の情報をキャッチアップできます: +[**FastAPI and friends** ニュースレター](newsletter.md)(配信はまれです)を購読すると、次の情報をキャッチアップできます: * FastAPI と関連プロジェクトのニュース 🚀 * ガイド 📝 @@ -22,17 +22,17 @@ FastAPIや他のユーザー、作者を応援したいですか? ## X (Twitter) で FastAPI をフォロー { #follow-fastapi-on-x-twitter } -**X (Twitter)** で @fastapi をフォローして、**FastAPI** の最新情報を受け取りましょう。🐦 +[**X (Twitter)** で @fastapi をフォロー](https://x.com/fastapi)して、**FastAPI** の最新情報を受け取りましょう。🐦 ## GitHubで **FastAPI** にStar { #star-fastapi-in-github } -GitHubでFastAPIに「Star」をつけることができます(右上部のStarボタンをクリック): https://github.com/fastapi/fastapi。⭐️ +GitHubでFastAPIに「Star」をつけることができます(右上部のStarボタンをクリック): [https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi)。⭐️ スターを増やすことで、他のユーザーの目につきやすくなり、すでに多くの人の役に立っていることが伝わります。 ## GitHubレポジトリのリリースをWatch { #watch-the-github-repository-for-releases } -GitHubでFastAPIを「Watch」できます(右上部の「Watch」ボタンをクリック): https://github.com/fastapi/fastapi。👀 +GitHubでFastAPIを「Watch」できます(右上部の「Watch」ボタンをクリック): [https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi)。👀 そこで「Releases only」を選択できます。 @@ -40,45 +40,45 @@ GitHubでFastAPIを「Watch」できます(右上部の「Watch」ボタンを ## 開発者とつながる { #connect-with-the-author } -作者である私(Sebastián Ramírez / `tiangolo`)とつながれます。 +作者である[私(Sebastián Ramírez / `tiangolo`)](https://tiangolo.com)とつながれます。 できること: -* **GitHub** でフォロー。 +* [**GitHub** でフォロー](https://github.com/tiangolo)。 * 役に立つかもしれない、私が作成した他のオープンソースプロジェクトを見られます。 * 新しいオープンソースプロジェクトを作成したときにわかります。 -* **X (Twitter)** でフォロー または Mastodon。 +* [**X (Twitter)** でフォロー](https://x.com/tiangolo) または [Mastodon](https://fosstodon.org/@tiangolo)。 * あなたがどのようにFastAPIを使っているか教えてください(聞けると嬉しいです)。 * 新しいツールの告知やリリースを聞けます。 - * さらに、X (Twitter) の @fastapi(別アカウント)もフォローできます。 -* **LinkedIn** でフォロー。 + * さらに、[X (Twitter) の @fastapi](https://x.com/fastapi)(別アカウント)もフォローできます。 +* [**LinkedIn** でフォロー](https://www.linkedin.com/in/tiangolo/)。 * 新しいツールの告知やリリースを聞けます(ただしX (Twitter) の方をよく使っています 🤷‍♂)。 -* **Dev.to****Medium** で執筆内容を読む(またはフォロー)。 +* [**Dev.to**](https://dev.to/tiangolo) や [**Medium**](https://medium.com/@tiangolo) で執筆内容を読む(またはフォロー)。 * 私のアイデアや、作成したツールに関する記事を読めます。 * 新しい記事を公開したときに読めます。 ## **FastAPI** についてツイート { #tweet-about-fastapi } -**FastAPI** についてツイートして、なぜ気に入っているのかを私や他の人に教えてください。🎉 +[**FastAPI** についてツイート](https://x.com/compose/tweet?text=I'm loving @fastapi because... https://github.com/fastapi/fastapi)して、なぜ気に入っているのかを私や他の人に教えてください。🎉 **FastAPI** がどのように使われているか、どこを気に入っているか、どのプロジェクト/会社で使っているか等、聞けると嬉しいです。 ## FastAPIに投票 { #vote-for-fastapi } -* Slantで **FastAPI** に投票。 -* AlternativeToで **FastAPI** に投票。 -* StackShare で **FastAPI** を使っていると宣言。 +* [Slantで **FastAPI** に投票](https://www.slant.co/options/34241/~fastapi-review)。 +* [AlternativeToで **FastAPI** に投票](https://alternativeto.net/software/fastapi/about/)。 +* [StackShare で **FastAPI** を使っていると宣言](https://stackshare.io/pypi-fastapi)。 ## GitHubで質問に困っている人を助ける { #help-others-with-questions-in-github } 次の場所で、他の人の質問を手助けできます: -* GitHub Discussions -* GitHub Issues +* [GitHub Discussions](https://github.com/fastapi/fastapi/discussions/categories/questions?discussions_q=category%3AQuestions+is%3Aunanswered) +* [GitHub Issues](https://github.com/fastapi/fastapi/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Aquestion+-label%3Aanswered+) 多くの場合、その質問の答えをすでに知っているかもしれません。🤓 -もし多くの人の質問に答えて助けてくれたなら、あなたは公式の[FastAPI Expert](fastapi-people.md#fastapi-experts){.internal-link target=_blank}になります。🎉 +もし多くの人の質問に答えて助けてくれたなら、あなたは公式の[FastAPI Expert](fastapi-people.md#fastapi-experts)になります。🎉 最も大事なポイントは「親切であること」を心がけることです。人はフラストレーションを抱えてやって来るので、必ずしも最良の聞き方をしているとは限りませんが、できる限り親切に対応しましょう。🤗 @@ -98,13 +98,13 @@ GitHubでFastAPIを「Watch」できます(右上部の「Watch」ボタンを * 質問が理解できない場合は、さらに「詳細」を尋ねます。 -### 問題を再現する { #reproduce-the-problem } +### 问題を再現する { #reproduce-the-problem } 多くのケースや質問は、その人の「元のコード」に関係しています。 しばしばコードの断片だけが共有されますが、それでは問題を「再現」するには不十分です。 -* ローカルで同じエラーや挙動を確認できるように、またはユースケースをよりよく理解できるように、**コピー&ペースト**して実行できる最小の再現可能な例の提供を依頼できます。 +* ローカルで同じエラーや挙動を確認できるように、またはユースケースをよりよく理解できるように、**コピー&ペースト**して実行できる[最小の再現可能な例](https://stackoverflow.com/help/minimal-reproducible-example)の提供を依頼できます。 * とても寛大な気分なら、問題の説明だけをもとに、あなた自身でそのような**例を作成**してみることもできます。ただし時間がかかる可能性が高いので、まずは問題の明確化を依頼した方が良い場合もあります。 @@ -125,7 +125,7 @@ GitHubでFastAPIを「Watch」できます(右上部の「Watch」ボタンを ## GitHubレポジトリをWatch { #watch-the-github-repository } -GitHubでFastAPIを「Watch」できます(右上部の「Watch」ボタンをクリック): https://github.com/fastapi/fastapi。👀 +GitHubでFastAPIを「Watch」できます(右上部の「Watch」ボタンをクリック): [https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi)。👀 「Releases only」ではなく「Watching」を選択すると、新しい issue や質問が作成されたときに通知を受け取れます。新しい issue のみ、Discussions のみ、PR のみ、など通知対象を絞ることもできます。 @@ -133,7 +133,7 @@ GitHubでFastAPIを「Watch」できます(右上部の「Watch」ボタンを ## 質問する { #ask-questions } -GitHubレポジトリで新しい質問を作成できます。例えば: +GitHubレポジトリで[新しい質問](https://github.com/fastapi/fastapi/discussions/new?category=questions)を作成できます。例えば: * **質問**をする、または**問題**について尋ねる。 * 新しい**機能**を提案する。 @@ -196,12 +196,12 @@ GitHubレポジトリでこのファイルを編集して共有。 +* 自分が作成/発見した FastAPI に関する記事・動画・ポッドキャストを、[このファイルを編集](https://github.com/fastapi/fastapi/edit/master/docs/en/data/external_links.yml)して共有。 * 該当セクションの先頭にリンクを追加してください。 -* 自分の言語への[ドキュメント翻訳を手伝う](contributing.md#translations){.internal-link target=_blank}。 +* 自分の言語への[ドキュメント翻訳を手伝う](contributing.md#translations)。 * 他の人が作成した翻訳のレビューも手伝えます。 * 新しいドキュメントセクションの提案。 * 既存のissue/バグの修正。 @@ -218,8 +218,8 @@ GitHubレポジトリでDiscord チャットサーバー 👥 に参加し、FastAPI コミュニティのみんなと交流しましょう。 +👥 [Discord チャットサーバー](https://discord.gg/VQjSZaeJmf) 👥 に参加し、FastAPI コミュニティのみんなと交流しましょう。 /// tip | 豆知識 -質問は GitHub Discussions に投稿してください。そこなら[FastAPI Experts](fastapi-people.md#fastapi-experts){.internal-link target=_blank}から助けてもらえる可能性がずっと高いです。 +質問は [GitHub Discussions](https://github.com/fastapi/fastapi/discussions/new?category=questions) に投稿してください。そこなら[FastAPI Experts](fastapi-people.md#fastapi-experts)から助けてもらえる可能性がずっと高いです。 チャットは一般的な会話のみに使いましょう。 @@ -243,13 +243,13 @@ GitHubレポジトリでGitHub sponsors を通じて作者(私)を支援できます。プランに応じて、ドキュメントにバッジが表示されるなどの特典がある場合があります。🎁 +あなたの**製品/会社**が **FastAPI** に依存している、または関連しており、そのユーザーにリーチしたい場合は、[GitHub sponsors](https://github.com/sponsors/tiangolo) を通じて作者(私)を支援できます。プランに応じて、ドキュメントにバッジが表示されるなどの特典がある場合があります。🎁 --- diff --git a/docs/ja/docs/history-design-future.md b/docs/ja/docs/history-design-future.md index 1465557080..8364002886 100644 --- a/docs/ja/docs/history-design-future.md +++ b/docs/ja/docs/history-design-future.md @@ -1,6 +1,6 @@ # 歴史、設計、そしてこれから { #history-design-and-future } -少し前に、**FastAPI**のユーザーに以下の様に尋ねられました: +しばらく前に、[ある **FastAPI** ユーザーが質問しました](https://github.com/fastapi/fastapi/issues/3#issuecomment-454956920): > このプロジェクトの歴史は?何もないところから、数週間ですごいものができているようです。 [...] @@ -14,7 +14,7 @@ **FastAPI** の歴史は、その前身の歴史が大部分を占めています。 -[代替ツールから受けたインスピレーションと比較](alternatives.md){.internal-link target=_blank}のセクションでこう述べています: +[代替手段](alternatives.md)のセクションでこう述べています:
@@ -44,7 +44,7 @@ もっとも人気のあるPythonエディターでいくつかのアイデアをテストしました。PyCharm、VS Code、Jediベースのエディターです。 -最新の Python開発者調査で、それらのエディターがユーザーの80%をカバーしていました。 +最新の [Python開発者調査](https://www.jetbrains.com/research/python-developers-survey-2018/#development-tools)で、それらのエディターがユーザーの80%をカバーしていました。 これは、**FastAPI**がPython開発者の80%が使用しているエディターで特別にテストされたことを意味します。また、ほとんどの他のエディターも同様に動作する傾向があるため、この恩恵は事実上すべてのエディターでうけられるはずです。 @@ -54,11 +54,11 @@ ## 要件 { #requirements } -いくつかの代替手法を試したあと、私は**Pydantic**の強みを利用することを決めました。 +いくつかの代替手法を試したあと、私は[**Pydantic**](https://docs.pydantic.dev/)の強みを利用することを決めました。 そして、JSON Schemaに完全に準拠するようにしたり、制約宣言を定義するさまざまな方法をサポートしたり、いくつかのエディターでのテストに基づいてエディターのサポート (型チェック、自動補完) を改善するために貢献しました。 -開発中、もう1つの重要な鍵となる**Starlette**にも貢献しました。 +開発中、もう1つの重要な鍵となる[**Starlette**](https://www.starlette.dev/)にも貢献しました。 ## 開発 { #development } @@ -76,4 +76,4 @@ **FastAPI**には大きな未来が待っています。 -そして、[あなたの助け](help-fastapi.md){.internal-link target=_blank}を大いに歓迎します。 +そして、[あなたの助け](help-fastapi.md)を大いに歓迎します。 diff --git a/docs/ja/docs/how-to/authentication-error-status-code.md b/docs/ja/docs/how-to/authentication-error-status-code.md index 9bef476444..ec5e25b75b 100644 --- a/docs/ja/docs/how-to/authentication-error-status-code.md +++ b/docs/ja/docs/how-to/authentication-error-status-code.md @@ -2,7 +2,7 @@ FastAPI バージョン `0.122.0` より前は、統合されたセキュリティユーティリティが認証に失敗してクライアントへエラーを返す際、HTTP ステータスコード `403 Forbidden` を使用していました。 -FastAPI バージョン `0.122.0` 以降では、より適切な HTTP ステータスコード `401 Unauthorized` を使用し、HTTP 仕様に従ってレスポンスに妥当な `WWW-Authenticate` ヘッダーを含めます。RFC 7235RFC 9110。 +FastAPI バージョン `0.122.0` 以降では、より適切な HTTP ステータスコード `401 Unauthorized` を使用し、HTTP 仕様に従ってレスポンスに妥当な `WWW-Authenticate` ヘッダーを含めます。[RFC 7235](https://datatracker.ietf.org/doc/html/rfc7235#section-3.1), [RFC 9110](https://datatracker.ietf.org/doc/html/rfc9110#name-401-unauthorized)。 しかし、何らかの理由でクライアントが従来の挙動に依存している場合は、セキュリティクラスでメソッド `make_not_authenticated_error` をオーバーライドすることで、その挙動に戻せます。 diff --git a/docs/ja/docs/how-to/conditional-openapi.md b/docs/ja/docs/how-to/conditional-openapi.md index 0febe1ef67..b6281ed06f 100644 --- a/docs/ja/docs/how-to/conditional-openapi.md +++ b/docs/ja/docs/how-to/conditional-openapi.md @@ -10,7 +10,7 @@ もしセキュリティ上の欠陥がソースコードにあるならば、それは存在したままです。 -ドキュメンテーションを非表示にするのは、単にあなたのAPIへのアクセス方法を難解にするだけでなく、同時にあなた自身の本番環境でのAPIのデバッグを困難にしてしまう可能性があります。単純に、 秘匿によるセキュリティ の一つの形態として考えられるでしょう。 +ドキュメンテーションを非表示にするのは、単にあなたのAPIへのアクセス方法を難解にするだけでなく、同時にあなた自身の本番環境でのAPIのデバッグを困難にしてしまう可能性があります。単純に、[秘匿によるセキュリティ](https://en.wikipedia.org/wiki/Security_through_obscurity) の一つの形態として考えられるでしょう。 もしあなたのAPIのセキュリティを強化したいなら、いくつかのよりよい方法があります。例を示すと、 diff --git a/docs/ja/docs/how-to/configure-swagger-ui.md b/docs/ja/docs/how-to/configure-swagger-ui.md index 8be7adc84c..2950918575 100644 --- a/docs/ja/docs/how-to/configure-swagger-ui.md +++ b/docs/ja/docs/how-to/configure-swagger-ui.md @@ -1,6 +1,6 @@ # Swagger UI の設定 { #configure-swagger-ui } -いくつかの追加の Swagger UI パラメータを設定できます。 +いくつかの追加の [Swagger UI パラメータ](https://swagger.io/docs/open-source-tools/swagger-ui/usage/configuration/)を設定できます。 設定するには、`FastAPI()` のアプリオブジェクトを作成するとき、または `get_swagger_ui_html()` 関数に `swagger_ui_parameters` 引数を渡します。 @@ -50,7 +50,7 @@ FastAPI には、多くのユースケースに適した既定の設定パラメ ## その他の Swagger UI パラメータ { #other-swagger-ui-parameters } -利用可能な他のすべての設定については、公式の Swagger UI パラメータのドキュメントを参照してください。 +利用可能な他のすべての設定については、公式の [Swagger UI パラメータのドキュメント](https://swagger.io/docs/open-source-tools/swagger-ui/usage/configuration/)を参照してください。 ## JavaScript 専用の設定 { #javascript-only-settings } diff --git a/docs/ja/docs/how-to/custom-docs-ui-assets.md b/docs/ja/docs/how-to/custom-docs-ui-assets.md index c0c9745b28..eb1b96c5af 100644 --- a/docs/ja/docs/how-to/custom-docs-ui-assets.md +++ b/docs/ja/docs/how-to/custom-docs-ui-assets.md @@ -54,7 +54,7 @@ Swagger UI がこの処理を裏側で行いますが、そのためにこの「 ### テスト { #test-it } -これで、http://127.0.0.1:8000/docs にアクセスしてページを再読み込みすると、新しい CDN からそれらのアセットが読み込まれるはずです。 +これで、[http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) にアクセスしてページを再読み込みすると、新しい CDN からそれらのアセットが読み込まれるはずです。 ## ドキュメント用 JavaScript と CSS のセルフホスティング { #self-hosting-javascript-and-css-for-docs } @@ -93,12 +93,12 @@ Swagger UI がこの処理を裏側で行いますが、そのためにこの「 **Swagger UI** では次のファイルを使用します: -- `swagger-ui-bundle.js` -- `swagger-ui.css` +- [`swagger-ui-bundle.js`](https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui-bundle.js) +- [`swagger-ui.css`](https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui.css) そして **ReDoc** では次のファイルを使用します: -- `redoc.standalone.js` +- [`redoc.standalone.js`](https://cdn.jsdelivr.net/npm/redoc@2/bundles/redoc.standalone.js) その後、ファイル構成は次のようになります: @@ -122,7 +122,7 @@ Swagger UI がこの処理を裏側で行いますが、そのためにこの「 ### 静的ファイルのテスト { #test-the-static-files } -アプリケーションを起動し、http://127.0.0.1:8000/static/redoc.standalone.js にアクセスします。 +アプリケーションを起動し、[http://127.0.0.1:8000/static/redoc.standalone.js](http://127.0.0.1:8000/static/redoc.standalone.js) にアクセスします。 **ReDoc** 用の非常に長い JavaScript ファイルが表示されるはずです。 @@ -180,6 +180,6 @@ Swagger UI がこの処理を裏側で行いますが、そのためにこの「 ### 静的ファイル UI のテスト { #test-static-files-ui } -これで、WiFi を切断して http://127.0.0.1:8000/docs にアクセスし、ページを再読み込みできるはずです。 +これで、WiFi を切断して [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) にアクセスし、ページを再読み込みできるはずです。 インターネットに接続していなくても、API のドキュメントを表示し、API と対話できます。 diff --git a/docs/ja/docs/how-to/custom-request-and-route.md b/docs/ja/docs/how-to/custom-request-and-route.md index ae64f31097..d2b0806e44 100644 --- a/docs/ja/docs/how-to/custom-request-and-route.md +++ b/docs/ja/docs/how-to/custom-request-and-route.md @@ -18,7 +18,7 @@ FastAPI を始めたばかりの場合は、このセクションは読み飛ば ユースケースの例: -* JSON ではないリクエストボディを JSON に変換する(例: `msgpack`)。 +* JSON ではないリクエストボディを JSON に変換する(例: [`msgpack`](https://msgpack.org/index.html))。 * gzip 圧縮されたリクエストボディの解凍。 * すべてのリクエストボディの自動ロギング。 @@ -32,7 +32,7 @@ gzip のリクエストを解凍するために、カスタムの `Request` サ /// tip | 豆知識 -これは仕組みを示すためのサンプルです。Gzip 対応が必要な場合は、用意されている [`GzipMiddleware`](../advanced/middleware.md#gzipmiddleware){.internal-link target=_blank} を使用できます。 +これは仕組みを示すためのサンプルです。Gzip 対応が必要な場合は、用意されている [`GzipMiddleware`](../advanced/middleware.md#gzipmiddleware) を使用できます。 /// @@ -66,7 +66,7 @@ gzip のリクエストを解凍するために、カスタムの `Request` サ そしてこの 2 つ(`scope` と `receive`)が、新しい `Request` インスタンスを作成するために必要なものです。 -`Request` について詳しくは、Starlette の Requests に関するドキュメント を参照してください。 +`Request` について詳しくは、[Starlette の Requests に関するドキュメント](https://www.starlette.dev/requests/) を参照してください。 /// @@ -82,7 +82,7 @@ gzip のリクエストを解凍するために、カスタムの `Request` サ /// tip | 豆知識 -同じ問題を解決するには、`RequestValidationError` 用のカスタムハンドラで `body` を使う方がずっと簡単でしょう([エラー処理](../tutorial/handling-errors.md#use-the-requestvalidationerror-body){.internal-link target=_blank})。 +同じ問題を解決するには、`RequestValidationError` 用のカスタムハンドラで `body` を使う方がずっと簡単でしょう([エラー処理](../tutorial/handling-errors.md#use-the-requestvalidationerror-body))。 ただし、この例も有効で、内部コンポーネントとどのようにやり取りするかを示しています。 diff --git a/docs/ja/docs/how-to/extending-openapi.md b/docs/ja/docs/how-to/extending-openapi.md index df5b3cd35a..e9ef9923fd 100644 --- a/docs/ja/docs/how-to/extending-openapi.md +++ b/docs/ja/docs/how-to/extending-openapi.md @@ -37,7 +37,7 @@ 上記の情報を使って、同じユーティリティ関数で OpenAPI スキーマを生成し、必要な部分を上書きできます。 -たとえば、カスタムロゴを含めるための ReDoc の OpenAPI 拡張を追加してみましょう。 +たとえば、[カスタムロゴを含めるための ReDoc の OpenAPI 拡張](https://github.com/Rebilly/ReDoc/blob/master/docs/redoc-vendor-extensions.md#x-logo)を追加してみましょう。 ### 通常の **FastAPI** { #normal-fastapi } @@ -75,6 +75,6 @@ OpenAPI スキーマの `info`「オブジェクト」にカスタムの `x-logo ### 確認 { #check-it } -http://127.0.0.1:8000/redoc にアクセスすると、カスタムロゴ(この例では **FastAPI** のロゴ)が使われていることが確認できます: +[http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc) にアクセスすると、カスタムロゴ(この例では **FastAPI** のロゴ)が使われていることが確認できます: diff --git a/docs/ja/docs/how-to/general.md b/docs/ja/docs/how-to/general.md index 8879c68eb9..ca2de8f3fb 100644 --- a/docs/ja/docs/how-to/general.md +++ b/docs/ja/docs/how-to/general.md @@ -4,36 +4,40 @@ ## データのフィルタリング - セキュリティ { #filter-data-security } -返すべき以上のデータを返さないようにするには、[チュートリアル - レスポンスモデル - 戻り値の型](../tutorial/response-model.md){.internal-link target=_blank} を参照してください。 +返すべき以上のデータを返さないようにするには、[チュートリアル - レスポンスモデル - 戻り値の型](../tutorial/response-model.md) を参照してください。 + +## レスポンス性能の最適化 - レスポンスモデル - 戻り値の型 { #optimize-response-performance-response-model-return-type } + +JSON データを返す際の性能を最適化するには、戻り値の型またはレスポンスモデルを使用してください。そうすることで、Pydantic が Python を経由せずに Rust 側で JSON へのシリアライズを処理します。詳細は [チュートリアル - レスポンスモデル - 戻り値の型](../tutorial/response-model.md) を参照してください。 ## ドキュメントのタグ - OpenAPI { #documentation-tags-openapi } -*path operations* にタグを追加し、ドキュメント UI でグループ化するには、[チュートリアル - path operation の設定 - タグ](../tutorial/path-operation-configuration.md#tags){.internal-link target=_blank} を参照してください。 +*path operations* にタグを追加し、ドキュメント UI でグループ化するには、[チュートリアル - path operation の設定 - タグ](../tutorial/path-operation-configuration.md#tags) を参照してください。 ## ドキュメントの概要と説明 - OpenAPI { #documentation-summary-and-description-openapi } -*path operations* に概要と説明を追加し、ドキュメント UI に表示するには、[チュートリアル - path operation の設定 - 概要と説明](../tutorial/path-operation-configuration.md#summary-and-description){.internal-link target=_blank} を参照してください。 +*path operations* に概要と説明を追加し、ドキュメント UI に表示するには、[チュートリアル - path operation の設定 - 概要と説明](../tutorial/path-operation-configuration.md#summary-and-description) を参照してください。 ## ドキュメントのレスポンス説明 - OpenAPI { #documentation-response-description-openapi } -ドキュメント UI に表示されるレスポンスの説明を定義するには、[チュートリアル - path operation の設定 - レスポンスの説明](../tutorial/path-operation-configuration.md#response-description){.internal-link target=_blank} を参照してください。 +ドキュメント UI に表示されるレスポンスの説明を定義するには、[チュートリアル - path operation の設定 - レスポンスの説明](../tutorial/path-operation-configuration.md#response-description) を参照してください。 ## *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} を参照してください。 +*path operation* を非推奨にし、ドキュメント UI に表示するには、[チュートリアル - path operation の設定 - 非推奨](../tutorial/path-operation-configuration.md#deprecate-a-path-operation) を参照してください。 ## 任意のデータを JSON 互換に変換 { #convert-any-data-to-json-compatible } -任意のデータを JSON 互換に変換するには、[チュートリアル - JSON 互換エンコーダ](../tutorial/encoder.md){.internal-link target=_blank} を参照してください。 +任意のデータを JSON 互換に変換するには、[チュートリアル - JSON 互換エンコーダ](../tutorial/encoder.md) を参照してください。 ## OpenAPI メタデータ - ドキュメント { #openapi-metadata-docs } -ライセンス、バージョン、連絡先などを含むメタデータを OpenAPI スキーマに追加するには、[チュートリアル - メタデータとドキュメントの URL](../tutorial/metadata.md){.internal-link target=_blank} を参照してください。 +ライセンス、バージョン、連絡先などを含むメタデータを OpenAPI スキーマに追加するには、[チュートリアル - メタデータとドキュメントの URL](../tutorial/metadata.md) を参照してください。 ## OpenAPI のカスタム URL { #openapi-custom-url } -OpenAPI の URL をカスタマイズ(または削除)するには、[チュートリアル - メタデータとドキュメントの URL](../tutorial/metadata.md#openapi-url){.internal-link target=_blank} を参照してください。 +OpenAPI の URL をカスタマイズ(または削除)するには、[チュートリアル - メタデータとドキュメントの URL](../tutorial/metadata.md#openapi-url) を参照してください。 ## OpenAPI ドキュメントの URL { #openapi-docs-urls } -自動生成されるドキュメント UI が使用する URL を変更するには、[チュートリアル - メタデータとドキュメントの URL](../tutorial/metadata.md#docs-urls){.internal-link target=_blank} を参照してください。 +自動生成されるドキュメント UI が使用する URL を変更するには、[チュートリアル - メタデータとドキュメントの URL](../tutorial/metadata.md#docs-urls) を参照してください。 diff --git a/docs/ja/docs/how-to/graphql.md b/docs/ja/docs/how-to/graphql.md index bd0d223498..d1356b59a9 100644 --- a/docs/ja/docs/how-to/graphql.md +++ b/docs/ja/docs/how-to/graphql.md @@ -18,18 +18,18 @@ **ASGI** をサポートする **GraphQL** ライブラリの一部を以下に示します。**FastAPI** と組み合わせて使用できます: -* Strawberry 🍓 - * FastAPI 向けドキュメントあり -* Ariadne - * FastAPI 向けドキュメントあり -* Tartiflette - * ASGI 連携用の Tartiflette ASGI あり -* Graphene - * starlette-graphene3 あり +* [Strawberry](https://strawberry.rocks/) 🍓 + * [FastAPI 向けドキュメント](https://strawberry.rocks/docs/integrations/fastapi)あり +* [Ariadne](https://ariadnegraphql.org/) + * [FastAPI 向けドキュメント](https://ariadnegraphql.org/docs/fastapi-integration)あり +* [Tartiflette](https://tartiflette.io/) + * ASGI 連携用の [Tartiflette ASGI](https://tartiflette.github.io/tartiflette-asgi/) あり +* [Graphene](https://graphene-python.org/) + * [starlette-graphene3](https://github.com/ciscorn/starlette-graphene3) あり ## Strawberry で GraphQL { #graphql-with-strawberry } -**GraphQL** が必要、または利用したい場合は、**Strawberry** を**推奨**します。**FastAPI** の設計に最も近く、すべてが**型アノテーション**に基づいています。 +**GraphQL** が必要、または利用したい場合は、[**Strawberry**](https://strawberry.rocks/) を**推奨**します。**FastAPI** の設計に最も近く、すべてが**型アノテーション**に基づいています。 ユースケースによっては他のライブラリを選ぶ方がよい場合もありますが、私に尋ねられれば、おそらく **Strawberry** を試すことを勧めるでしょう。 @@ -37,24 +37,24 @@ FastAPI と Strawberry を統合する方法の簡単なプレビューです: {* ../../docs_src/graphql_/tutorial001_py310.py hl[3,22,25] *} -詳細は Strawberry のドキュメントをご覧ください。 +詳細は [Strawberry のドキュメント](https://strawberry.rocks/)をご覧ください。 -また、Strawberry と FastAPI の連携に関するドキュメントもあります。 +また、[Strawberry と FastAPI](https://strawberry.rocks/docs/integrations/fastapi) の連携に関するドキュメントもあります。 ## Starlette の旧 `GraphQLApp` { #older-graphqlapp-from-starlette } -以前の Starlette には、Graphene と統合するための `GraphQLApp` クラスが含まれていました。 +以前の Starlette には、[Graphene](https://graphene-python.org/) と統合するための `GraphQLApp` クラスが含まれていました。 -これは Starlette からは非推奨になりましたが、もしそれを使用しているコードがある場合は、同じユースケースをカバーし、**ほぼ同一のインターフェース**を持つ starlette-graphene3 へ容易に**移行**できます。 +これは Starlette からは非推奨になりましたが、もしそれを使用しているコードがある場合は、同じユースケースをカバーし、**ほぼ同一のインターフェース**を持つ [starlette-graphene3](https://github.com/ciscorn/starlette-graphene3) へ容易に**移行**できます。 /// tip | 豆知識 -GraphQL が必要であれば、依然として Strawberry の利用を推奨します。独自のクラスや型ではなく、型アノテーションに基づいているためです。 +GraphQL が必要であれば、依然として [Strawberry](https://strawberry.rocks/) の利用を推奨します。独自のクラスや型ではなく、型アノテーションに基づいているためです。 /// ## さらに学ぶ { #learn-more } -**GraphQL** については、公式 GraphQL ドキュメントでさらに学べます。 +**GraphQL** については、[公式 GraphQL ドキュメント](https://graphql.org/)でさらに学べます。 上記の各ライブラリについては、リンク先のドキュメントをご参照ください。 diff --git a/docs/ja/docs/how-to/index.md b/docs/ja/docs/how-to/index.md index b1cd177852..9d9348abfc 100644 --- a/docs/ja/docs/how-to/index.md +++ b/docs/ja/docs/how-to/index.md @@ -8,6 +8,6 @@ /// tip | 豆知識 -**FastAPI を学ぶ**ことを体系的に進めたい場合(推奨)、代わりに [チュートリアル - ユーザーガイド](../tutorial/index.md){.internal-link target=_blank} を章ごとに読んでください。 +**FastAPI を学ぶ**ことを体系的に進めたい場合(推奨)、代わりに [チュートリアル - ユーザーガイド](../tutorial/index.md) を章ごとに読んでください。 /// 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 index f1414ac281..320be14443 100644 --- 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 @@ -22,7 +22,7 @@ Python の最新機能を使いたい場合は、Pydantic v2 を使用してい ## 公式ガイド { #official-guide } -Pydantic には v1 から v2 への公式の 移行ガイド があります。 +Pydantic には v1 から v2 への公式の [移行ガイド](https://docs.pydantic.dev/latest/migration/) があります。 変更点、検証がより正確で厳密になった点、注意事項などが含まれます。 @@ -30,7 +30,7 @@ Pydantic には v1 から v2 への公式の `bump-pydantic` を使用できます。 +同じ Pydantic チームが提供する [`bump-pydantic`](https://github.com/pydantic/bump-pydantic) を使用できます。 このツールは必要なコード変更のほとんどを自動で行います。 @@ -88,7 +88,7 @@ graph TB style V2Field fill:#f9fff3 ``` -...but, you can have separated models using Pydantic v1 and v2 in the same app. +...しかし、同じアプリ内で Pydantic v1 と v2 を別々のモデルとして分けて使うことは可能です。 ```mermaid graph TB diff --git a/docs/ja/docs/how-to/testing-database.md b/docs/ja/docs/how-to/testing-database.md index af9ad75090..76d448e02a 100644 --- a/docs/ja/docs/how-to/testing-database.md +++ b/docs/ja/docs/how-to/testing-database.md @@ -1,7 +1,7 @@ # データベースのテスト { #testing-a-database } -データベース、SQL、SQLModel については、SQLModel ドキュメントで学べます。🤓 +データベース、SQL、SQLModel については、[SQLModel ドキュメント](https://sqlmodel.tiangolo.com/)で学べます。🤓 -FastAPI と一緒に SQLModel を使うためのミニ チュートリアルがあります。✨ +FastAPI と一緒に SQLModel を使うためのミニ [チュートリアル](https://sqlmodel.tiangolo.com/tutorial/fastapi/)があります。✨ -そのチュートリアルには、SQL データベースのテストに関するセクションも含まれています。😎 +そのチュートリアルには、[SQL データベースのテスト](https://sqlmodel.tiangolo.com/tutorial/fastapi/tests/)に関するセクションも含まれています。😎 diff --git a/docs/ja/docs/index.md b/docs/ja/docs/index.md index 90368b4ae3..a8b9741985 100644 --- a/docs/ja/docs/index.md +++ b/docs/ja/docs/index.md @@ -11,25 +11,25 @@ FastAPI フレームワーク、高パフォーマンス、学びやすい、素早くコーディングできる、本番運用に対応

- + Test - + Coverage - + Package version - + Supported Python versions

--- -**ドキュメント**: https://fastapi.tiangolo.com +**ドキュメント**: [https://fastapi.tiangolo.com/ja](https://fastapi.tiangolo.com/ja) -**ソースコード**: https://github.com/fastapi/fastapi +**ソースコード**: [https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi) --- @@ -44,7 +44,7 @@ FastAPI は、Python の標準である型ヒントに基づいて Python で AP * **簡単**: 簡単に利用・習得できるようにデザインされています。ドキュメントを読む時間を削減します。 * **短い**: コードの重複を最小限にします。各パラメータ宣言から複数の機能を得られます。バグも減ります。 * **堅牢性**: 自動対話型ドキュメントにより、本番環境向けのコードが得られます。 -* **Standards-based**: API のオープンスタンダードに基づいており(そして完全に互換性があります)、OpenAPI(以前は Swagger として知られていました)や JSON Schema をサポートします。 +* **Standards-based**: API のオープンスタンダードに基づいており(そして完全に互換性があります)、[OpenAPI](https://github.com/OAI/OpenAPI-Specification)(以前は Swagger として知られていました)や [JSON Schema](https://json-schema.org/) をサポートします。 * 本番アプリケーションを構築している社内開発チームのテストに基づく見積もりです。 @@ -55,51 +55,51 @@ FastAPI は、Python の標準である型ヒントに基づいて Python で AP ### Keystone Sponsor { #keystone-sponsor } {% for sponsor in sponsors.keystone -%} - + {% endfor -%} ### Gold and Silver Sponsors { #gold-and-silver-sponsors } {% for sponsor in sponsors.gold -%} - + {% endfor -%} {%- for sponsor in sponsors.silver -%} - + {% endfor %} -その他のスポンサー +[その他のスポンサー](https://fastapi.tiangolo.com/ja/fastapi-people/#sponsors) ## 評価 { #opinions } "_[...] 最近 **FastAPI** を使っています。 [...] 実際に私のチームの全ての **Microsoft の機械学習サービス** で使用する予定です。 そのうちのいくつかのコアな **Windows** 製品と **Office** 製品に統合されつつあります。_" -
Kabir Khan - Microsoft (ref)
+
Kabir Khan - Microsoft (ref)
--- "_FastAPIライブラリを採用し、クエリで **予測値** を取得できる **REST** サーバを構築しました。 [for Ludwig]_" -
Piero Molino, Yaroslav Dudin, and Sai Sumanth Miryala - Uber (ref)
+
Piero Molino, Yaroslav Dudin, and Sai Sumanth Miryala - Uber (ref)
--- "_**Netflix** は、**危機管理**オーケストレーションフレームワーク、**Dispatch** のオープンソースリリースを発表できることをうれしく思います。 [built with **FastAPI**]_" -
Kevin Glisson, Marc Vilanova, Forest Monsen - Netflix (ref)
+
Kevin Glisson, Marc Vilanova, Forest Monsen - Netflix (ref)
--- "_私は **FastAPI** にワクワクしています。 めちゃくちゃ楽しいです!_" -
Brian Okken - Python Bytes podcast host (ref)
+
Brian Okken - [Python Bytes](https://pythonbytes.fm/episodes/show/123/time-to-right-the-py-wrongs?time_in_sec=855) podcast host (ref)
--- "_正直、あなたが作ったものは超堅実で洗練されているように見えます。いろんな意味で、それは私が **Hug** にそうなってほしかったものです。誰かがそれを作るのを見るのは本当に刺激的です。_" -
Timothy Crosley - Hug creator (ref)
+
Timothy Crosley - [Hug](https://github.com/hugapi/hug) creator (ref)
--- @@ -107,27 +107,27 @@ FastAPI は、Python の標準である型ヒントに基づいて Python で AP "_私たちの **API** は **FastAPI** に切り替えました [...] きっと気に入ると思います [...]_" -
Ines Montani - Matthew Honnibal - Explosion AI founders - spaCy creators (ref) - (ref)
+
Ines Montani - Matthew Honnibal - [Explosion AI](https://explosion.ai) founders - [spaCy](https://spacy.io) creators (ref) - (ref)
--- "_本番運用の Python API を構築したい方には、**FastAPI** を強くおすすめします。**美しく設計**されており、**使いやすく**、**高いスケーラビリティ**があります。私たちの API ファースト開発戦略の **主要コンポーネント** となり、Virtual TAC Engineer などの多くの自動化やサービスを推進しています。_" -
Deon Pillsbury - Cisco (ref)
+
Deon Pillsbury - Cisco (ref)
--- ## FastAPI ミニドキュメンタリー { #fastapi-mini-documentary } -2025 年末に公開された FastAPI ミニドキュメンタリーがあります。オンラインで視聴できます: +2025 年末に公開された [FastAPI ミニドキュメンタリー](https://www.youtube.com/watch?v=mpR8ngthqiE)があります。オンラインで視聴できます: -FastAPI Mini Documentary +FastAPI Mini Documentary ## **Typer**、CLI 版 FastAPI { #typer-the-fastapi-of-clis } - + -Web API の代わりにターミナルで使用する CLI アプリを構築する場合は、**Typer** を確認してください。 +Web API の代わりにターミナルで使用する CLI アプリを構築する場合は、[**Typer**](https://typer.tiangolo.com/) を確認してください。 **Typer** は FastAPI の弟分です。そして、**CLI 版 FastAPI** を意図しています。 ⌨️ 🚀 @@ -135,12 +135,12 @@ Web API の代わりにターミナルで使用する Starlette -* データの部分は Pydantic +* [Starlette](https://www.starlette.dev/)(Web 部分) +* [Pydantic](https://docs.pydantic.dev/)(データ部分) ## インストール { #installation } -virtual environment を作成して有効化し、それから FastAPI をインストールします。 +[仮想環境](https://fastapi.tiangolo.com/ja/virtual-environments/) を作成して有効化し、それから FastAPI をインストールします。
@@ -199,7 +199,7 @@ async def read_item(item_id: int, q: str | None = None): **注**: -わからない場合は、ドキュメントの `async` と `await` の _"In a hurry?"_ セクションを確認してください。 +わからない場合は、_「In a hurry?」_ セクションの [ドキュメントの `async` と `await`](https://fastapi.tiangolo.com/ja/async/#in-a-hurry) を確認してください。 @@ -210,7 +210,7 @@ async def read_item(item_id: int, q: str | None = None):
```console -$ fastapi dev main.py +$ fastapi dev ╭────────── FastAPI CLI - Development mode ───────────╮ │ │ @@ -235,19 +235,19 @@ INFO: Application startup complete.
-fastapi dev main.py コマンドについて +fastapi dev コマンドについて -`fastapi dev` コマンドは `main.py` ファイルを読み取り、その中の **FastAPI** アプリを検出し、Uvicorn を使用してサーバーを起動します。 +`fastapi dev` コマンドは `main.py` ファイルを自動的に読み取り、その中の **FastAPI** アプリを検出し、[Uvicorn](https://www.uvicorn.dev) を使用してサーバーを起動します。 デフォルトでは、`fastapi dev` はローカル開発向けに自動リロードを有効にして起動します。 -詳しくは FastAPI CLI docs を参照してください。 +詳しくは [FastAPI CLI docs](https://fastapi.tiangolo.com/ja/fastapi-cli/) を参照してください。
### 動作確認 { #check-it } -ブラウザで http://127.0.0.1:8000/items/5?q=somequery を開きます。 +ブラウザで [http://127.0.0.1:8000/items/5?q=somequery](http://127.0.0.1:8000/items/5?q=somequery) を開きます。 以下の JSON のレスポンスが確認できます。 @@ -264,17 +264,17 @@ INFO: Application startup complete. ### 自動対話型 API ドキュメント { #interactive-api-docs } -次に、http://127.0.0.1:8000/docs にアクセスします。 +次に、[http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) にアクセスします。 -自動対話型 API ドキュメントが表示されます(Swagger UI が提供しています)。 +自動対話型 API ドキュメントが表示されます([Swagger UI](https://github.com/swagger-api/swagger-ui) が提供しています)。 ![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png) ### 代替 API ドキュメント { #alternative-api-docs } -次に、http://127.0.0.1:8000/redoc にアクセスします。 +次に、[http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc) にアクセスします。 -代替の自動ドキュメントが表示されます(ReDoc が提供しています)。 +代替の自動ドキュメントが表示されます([ReDoc](https://github.com/Rebilly/ReDoc) が提供しています)。 ![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png) @@ -316,7 +316,7 @@ def update_item(item_id: int, item: Item): ### 自動対話型 API ドキュメントのアップグレード { #interactive-api-docs-upgrade } -次に、http://127.0.0.1:8000/docs にアクセスします。 +次に、[http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) にアクセスします。 * 自動対話型 API ドキュメントは新しいボディも含めて自動でアップデートされます。 @@ -332,7 +332,7 @@ def update_item(item_id: int, item: Item): ### 代替 API ドキュメントのアップグレード { #alternative-api-docs-upgrade } -次に、http://127.0.0.1:8000/redoc にアクセスします。 +次に、[http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc) にアクセスします。 * 代替のドキュメントにも新しいクエリパラメータやボディが反映されます。 @@ -442,7 +442,7 @@ item: Item * 非常に強力で使いやすい **依存性注入** システム。 * **JWT トークン**を用いた **OAuth2** や **HTTP Basic** 認証のサポートを含む、セキュリティと認証。 * **深くネストされた JSON モデル**を宣言するための、より高度な(しかし同様に簡単な)手法(Pydantic のおかげです)。 -* Strawberry および他のライブラリによる **GraphQL** 統合。 +* [Strawberry](https://strawberry.rocks) および他のライブラリによる **GraphQL** 統合。 * 以下のようなたくさんのおまけ機能(Starlette のおかげです): * **WebSockets** * HTTPX と `pytest` に基づく極めて簡単なテスト @@ -452,24 +452,10 @@ item: Item ### アプリをデプロイ(任意) { #deploy-your-app-optional } -必要に応じて FastAPI アプリを FastAPI Cloud にデプロイできます。まだの場合はウェイティングリストに参加してください。 🚀 +必要に応じて FastAPI アプリを [FastAPI Cloud](https://fastapicloud.com) にデプロイできます。まだの場合はウェイティングリストに参加してください。 🚀 すでに **FastAPI Cloud** アカウント(ウェイティングリストから招待されました 😉)がある場合は、1 コマンドでアプリケーションをデプロイできます。 -デプロイ前に、ログインしていることを確認してください。 - -
- -```console -$ fastapi login - -You are logged in to FastAPI Cloud 🚀 -``` - -
- -次に、アプリをデプロイします。 -
```console @@ -488,7 +474,7 @@ Deploying to FastAPI Cloud... #### FastAPI Cloud について { #about-fastapi-cloud } -**FastAPI Cloud** は **FastAPI** の作者と同じチームによって作られています。 +**[FastAPI Cloud](https://fastapicloud.com)** は **FastAPI** の作者と同じチームによって作られています。 最小限の労力で API を **構築**、**デプロイ**、**アクセス** するためのプロセスを効率化します。 @@ -504,9 +490,9 @@ FastAPI はオープンソースであり、標準に基づいています。選 ## パフォーマンス { #performance } -独立した TechEmpower のベンチマークでは、Uvicorn で動作する **FastAPI** アプリケーションが、利用可能な最も高速な Python フレームワークの一つであり、Starlette と Uvicorn(FastAPI で内部的に使用されています)にのみ下回っていると示されています。(*) +独立した TechEmpower のベンチマークでは、Uvicorn で動作する **FastAPI** アプリケーションが、[利用可能な最も高速な Python フレームワークの一つ](https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7)であり、Starlette と Uvicorn(FastAPI で内部的に使用されています)にのみ下回っていると示されています。(*) -詳細は Benchmarks セクションをご覧ください。 +詳細は [Benchmarks](https://fastapi.tiangolo.com/ja/benchmarks/) セクションをご覧ください。 ## 依存関係 { #dependencies } @@ -518,19 +504,19 @@ FastAPI を `pip install "fastapi[standard]"` でインストールすると、` Pydantic によって使用されるもの: -* email-validator - メール検証のため。 +* [`email-validator`](https://github.com/JoshData/python-email-validator) - メール検証のため。 Starlette によって使用されるもの: -* httpx - `TestClient` を使用したい場合に必要です。 -* jinja2 - デフォルトのテンプレート設定を使用したい場合に必要です。 -* python-multipart - `request.form()` とともに、フォームの 「parsing」 をサポートしたい場合に必要です。 +* [`httpx`](https://www.python-httpx.org) - `TestClient` を使用したい場合に必要です。 +* [`jinja2`](https://jinja.palletsprojects.com) - デフォルトのテンプレート設定を使用したい場合に必要です。 +* [`python-multipart`](https://github.com/Kludex/python-multipart) - `request.form()` とともに、フォームの 「parsing」 をサポートしたい場合に必要です。 FastAPI によって使用されるもの: -* uvicorn - アプリケーションをロードして提供するサーバーのため。これには `uvicorn[standard]` も含まれ、高性能なサービングに必要な依存関係(例: `uvloop`)が含まれます。 +* [`uvicorn`](https://www.uvicorn.dev) - アプリケーションをロードして提供するサーバーのため。これには `uvicorn[standard]` も含まれ、高性能なサービングに必要な依存関係(例: `uvloop`)が含まれます。 * `fastapi-cli[standard]` - `fastapi` コマンドを提供します。 - * これには `fastapi-cloud-cli` が含まれ、FastAPI アプリケーションを FastAPI Cloud にデプロイできます。 + * これには `fastapi-cloud-cli` が含まれ、FastAPI アプリケーションを [FastAPI Cloud](https://fastapicloud.com) にデプロイできます。 ### `standard` 依存関係なし { #without-standard-dependencies } @@ -546,13 +532,13 @@ FastAPI によって使用されるもの: 追加のオプション Pydantic 依存関係: -* pydantic-settings - 設定管理のため。 -* pydantic-extra-types - Pydantic で使用する追加の型のため。 +* [`pydantic-settings`](https://docs.pydantic.dev/latest/usage/pydantic_settings/) - 設定管理のため。 +* [`pydantic-extra-types`](https://docs.pydantic.dev/latest/usage/types/extra_types/extra_types/) - Pydantic で使用する追加の型のため。 追加のオプション FastAPI 依存関係: -* orjson - `ORJSONResponse` を使用したい場合に必要です。 -* ujson - `UJSONResponse` を使用したい場合に必要です。 +* [`orjson`](https://github.com/ijl/orjson) - `ORJSONResponse` を使用したい場合に必要です。 +* [`ujson`](https://github.com/esnme/ultrajson) - `UJSONResponse` を使用したい場合に必要です。 ## ライセンス { #license } diff --git a/docs/ja/docs/project-generation.md b/docs/ja/docs/project-generation.md index c930fb557c..b6550e3ac3 100644 --- a/docs/ja/docs/project-generation.md +++ b/docs/ja/docs/project-generation.md @@ -4,7 +4,7 @@ このテンプレートを使って開始できます。初期セットアップ、セキュリティ、データベース、いくつかのAPIエンドポイントがすでに用意されています。 -GitHubリポジトリ: Full Stack FastAPI Template +GitHubリポジトリ: [Full Stack FastAPI Template](https://github.com/tiangolo/full-stack-fastapi-template) ## Full Stack FastAPI テンプレート - 技術スタックと機能 { #full-stack-fastapi-template-technology-stack-and-features } diff --git a/docs/ja/docs/python-types.md b/docs/ja/docs/python-types.md index a6b46c256d..67336c31ef 100644 --- a/docs/ja/docs/python-types.md +++ b/docs/ja/docs/python-types.md @@ -231,7 +231,7 @@ def some_function(data: Any): {!> ../../docs_src/python_types/tutorial008b_py310.py!} ``` -これは `item` が `int` または `str` になり得ることを意味します. +これは `item` が `int` または `str` になり得ることを意味します。 #### `None` の可能性 { #possibly-none } @@ -269,7 +269,7 @@ def some_function(data: Any): ## Pydantic のモデル { #pydantic-models } -Pydantic はデータ検証を行うための Python ライブラリです。 +[Pydantic](https://docs.pydantic.dev/) はデータ検証を行うための Python ライブラリです。 データの「形」を属性付きのクラスとして宣言します。 @@ -285,13 +285,13 @@ Pydantic の公式ドキュメントからの例: /// info | 情報 -Pydantic の詳細はドキュメントを参照してください。 +[ Pydantic の詳細はドキュメントを参照してください](https://docs.pydantic.dev/)。 /// **FastAPI** はすべて Pydantic をベースにしています。 -すべてのことは [チュートリアル - ユーザーガイド](tutorial/index.md){.internal-link target=_blank} で実際に見ることができます。 +すべてのことは [チュートリアル - ユーザーガイド](tutorial/index.md) で実際に見ることができます。 ## メタデータアノテーション付き型ヒント { #type-hints-with-metadata-annotations } @@ -337,12 +337,12 @@ Python 自体は、この `Annotated` で何かをするわけではありませ * OpenAPI を使用して API を **ドキュメント化** します: * これは自動の対話型ドキュメントのユーザーインターフェイスで使われます。 -すべてが抽象的に聞こえるかもしれません。心配しないでください。 この全ての動作は [チュートリアル - ユーザーガイド](tutorial/index.md){.internal-link target=_blank} で見ることができます。 +すべてが抽象的に聞こえるかもしれません。心配しないでください。 この全ての動作は [チュートリアル - ユーザーガイド](tutorial/index.md) で見ることができます。 重要なのは、Python の標準的な型を使うことで、(クラスやデコレータなどを追加するのではなく)1 つの場所で **FastAPI** が多くの作業を代わりにやってくれているということです。 /// info | 情報 -すでにすべてのチュートリアルを終えて、型についての詳細を見るためにこのページに戻ってきた場合は、良いリソースとして `mypy` の「チートシート」 があります。 +すでにすべてのチュートリアルを終えて、型についての詳細を見るためにこのページに戻ってきた場合は、良いリソースとして [`mypy` の「チートシート`](https://mypy.readthedocs.io/en/latest/cheat_sheet_py3.html) があります。 /// diff --git a/docs/ja/docs/tutorial/background-tasks.md b/docs/ja/docs/tutorial/background-tasks.md index d32c141b5b..0bacbb3947 100644 --- a/docs/ja/docs/tutorial/background-tasks.md +++ b/docs/ja/docs/tutorial/background-tasks.md @@ -63,7 +63,7 @@ ## 技術的な詳細 { #technical-details } -`BackgroundTasks` クラスは、`starlette.background`から直接取得されます。 +`BackgroundTasks` クラスは、[`starlette.background`](https://www.starlette.dev/background/) から直接取得されます。 これは、FastAPI に直接インポート/インクルードされるため、`fastapi` からインポートできる上に、`starlette.background`から別の `BackgroundTask` (末尾に `s` がない) を誤ってインポートすることを回避できます。 @@ -71,11 +71,11 @@ それでも、FastAPI で `BackgroundTask` を単独で使用することは可能ですが、コード内でオブジェクトを作成し、それを含むStarlette `Response` を返す必要があります。 -詳細については、Starlette のバックグラウンドタスクに関する公式ドキュメントを参照して下さい。 +詳細については、[Starlette のバックグラウンドタスクに関する公式ドキュメント](https://www.starlette.dev/background/)を参照して下さい。 ## 注意 { #caveat } -大量のバックグラウンド計算が必要であり、必ずしも同じプロセスで実行する必要がない場合 (たとえば、メモリや変数などを共有する必要がない場合)、Celery のようなより大きな他のツールを使用するとメリットがあるかもしれません。 +大量のバックグラウンド計算が必要であり、必ずしも同じプロセスで実行する必要がない場合 (たとえば、メモリや変数などを共有する必要がない場合)、[Celery](https://docs.celeryq.dev) のようなより大きな他のツールを使用するとメリットがあるかもしれません。 これらは、より複雑な構成、RabbitMQ や Redis などのメッセージ/ジョブキューマネージャーを必要とする傾向がありますが、複数のプロセス、特に複数のサーバーでバックグラウンドタスクを実行できます。 diff --git a/docs/ja/docs/tutorial/bigger-applications.md b/docs/ja/docs/tutorial/bigger-applications.md index 9c1cc0fe69..3518eaed39 100644 --- a/docs/ja/docs/tutorial/bigger-applications.md +++ b/docs/ja/docs/tutorial/bigger-applications.md @@ -58,17 +58,17 @@ from app.routers import items ```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 +├── app # "app" は Python パッケージ +│   ├── __init__.py # このファイルにより "app" は「Python パッケージ」になる +│   ├── main.py # "main" モジュール(例: import app.main) +│   ├── dependencies.py # "dependencies" モジュール(例: import app.dependencies) +│   └── routers # "routers" は「Python サブパッケージ」 +│   │ ├── __init__.py # このファイルにより "routers" は「Python サブパッケージ」になる +│   │ ├── items.py # "items" サブモジュール(例: import app.routers.items) +│   │ └── users.py # "users" サブモジュール(例: import app.routers.users) +│   └── internal # "internal" は「Python サブパッケージ」 +│   ├── __init__.py # このファイルにより "internal" は「Python サブパッケージ」になる +│   └── admin.py # "admin" サブモジュール(例: import app.internal.admin) ``` ## `APIRouter` { #apirouter } @@ -123,7 +123,7 @@ from app.routers import items この例を簡単にするために架空のヘッダーを使っています。 -しかし実際には、組み込みの [Security utilities](security/index.md){.internal-link target=_blank} を使う方が良い結果になります。 +しかし実際には、組み込みの [Security utilities](security/index.md) を使う方が良い結果になります。 /// @@ -169,7 +169,7 @@ async def read_item(item_id: str): /// tip | 豆知識 -[*path operation デコレータ*の依存関係](dependencies/dependencies-in-path-operation-decorators.md){.internal-link target=_blank} と同様に、*path operation 関数*には値は渡されない点に注意してください。 +[*path operation デコレータ*の依存関係](dependencies/dependencies-in-path-operation-decorators.md) と同様に、*path operation 関数*には値は渡されない点に注意してください。 /// @@ -185,8 +185,8 @@ async def read_item(item_id: str): * すべてに事前定義した `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} を追加することもできます。 + * ルーターの依存関係が先に実行され、その後に[デコレータ内の `dependencies`](dependencies/dependencies-in-path-operation-decorators.md)、次に通常のパラメータ依存関係が続きます。 + * [`scopes` を伴う `Security` 依存関係](../advanced/security/oauth2-scopes.md) を追加することもできます。 /// tip | 豆知識 @@ -303,7 +303,7 @@ from ...dependencies import get_token_header 通常どおり `FastAPI` クラスをインポートして作成します。 -さらに、各 `APIRouter` の依存関係と組み合わされる[グローバル依存関係](dependencies/global-dependencies.md){.internal-link target=_blank}も宣言できます: +さらに、各 `APIRouter` の依存関係と組み合わされる[グローバル依存関係](dependencies/global-dependencies.md)も宣言できます: {* ../../docs_src/bigger_applications/app_an_py310/main.py hl[1,3,7] title["app/main.py"] *} @@ -353,7 +353,7 @@ from .routers import items, users from app.routers import items, users ``` -Python のパッケージとモジュールについて詳しくは、公式の Python モジュールに関するドキュメントをご覧ください。 +Python のパッケージとモジュールについて詳しくは、[公式の Python モジュールに関するドキュメント](https://docs.python.org/3/tutorial/modules.html)をご覧ください。 /// @@ -465,6 +465,37 @@ from .routers.users import router /// +## `pyproject.toml` の `entrypoint` を設定 { #configure-the-entrypoint-in-pyproject-toml } + +FastAPI の `app` オブジェクトは `app/main.py` にあるので、`pyproject.toml` で `entrypoint` を次のように設定できます: + +```toml +[tool.fastapi] +entrypoint = "app.main:app" +``` + +これは次のようにインポートするのと同等です: + +```python +from app.main import app +``` + +このようにすると、`fastapi` コマンドがアプリの場所を把握できます。 + +/// Note | 備考 + +コマンドにパスを渡すこともできます。例えば: + +```console +$ fastapi dev app/main.py +``` + +しかし、そのたびに `fastapi` コマンドを呼ぶ際、正しいパスを渡すのを忘れないようにする必要があります。 + +さらに、[VS Code Extension](../editor-support.md) や [FastAPI Cloud](https://fastapicloud.com) など、他のツールが見つけられない場合があります。そのため、`pyproject.toml` の `entrypoint` を使うことを推奨します。 + +/// + ## 自動APIドキュメントの確認 { #check-the-automatic-api-docs } アプリを実行します: @@ -472,14 +503,14 @@ from .routers.users import router
```console -$ fastapi dev app/main.py +$ fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ```
-そして http://127.0.0.1:8000/docs を開きます。 +そして [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) を開きます。 すべてのサブモジュール由来のパスを含む自動 API ドキュメントが表示され、正しいパス(および prefix)と正しいタグが使われているのが分かります: diff --git a/docs/ja/docs/tutorial/body-nested-models.md b/docs/ja/docs/tutorial/body-nested-models.md index ab78b8f86a..5187eb14e5 100644 --- a/docs/ja/docs/tutorial/body-nested-models.md +++ b/docs/ja/docs/tutorial/body-nested-models.md @@ -96,7 +96,7 @@ Pydanticモデルの各属性には型があります。 `str`や`int`、`float`などの通常の単数型の他にも、`str`を継承したより複雑な単数型を使うこともできます。 -すべてのオプションをみるには、Pydanticの型の概要を確認してください。次の章でいくつかの例をみることができます。 +すべてのオプションをみるには、[Pydantic の型の概要](https://docs.pydantic.dev/latest/concepts/types/)を確認してください。次の章でいくつかの例をみることができます。 例えば、`Image`モデルのように`url`フィールドがある場合、`str`の代わりにPydanticの`HttpUrl`のインスタンスとして宣言することができます: diff --git a/docs/ja/docs/tutorial/body-updates.md b/docs/ja/docs/tutorial/body-updates.md index 310530c690..a4fa8bd7be 100644 --- a/docs/ja/docs/tutorial/body-updates.md +++ b/docs/ja/docs/tutorial/body-updates.md @@ -2,7 +2,7 @@ ## `PUT`による置換での更新 { #update-replacing-with-put } -項目を更新するにはHTTPの`PUT`操作を使用することができます。 +項目を更新するには[HTTPの`PUT`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PUT)操作を使用することができます。 `jsonable_encoder`を用いて、入力データをJSONとして保存できるデータに変換することができます(例:NoSQLデータベース)。例えば、`datetime`を`str`に変換します。 @@ -28,7 +28,7 @@ ## `PATCH`による部分的な更新 { #partial-updates-with-patch } -また、HTTPの`PATCH`操作でデータを*部分的に*更新することもできます。 +また、[HTTPの`PATCH`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PATCH)操作でデータを*部分的に*更新することもできます。 つまり、更新したいデータだけを送信して、残りはそのままにしておくことができます。 @@ -68,7 +68,7 @@ まとめると、部分的な更新を適用するには、次のようにします: -* (オプションで)`PATCH`の代わりに`PUT`を使用します。 +* (オプションで)`PUT`の代わりに`PATCH`を使用します。 * 保存されているデータを取得します。 * そのデータをPydanticモデルにいれます。 * 入力モデルからデフォルト値を含まない`dict`を生成します(`exclude_unset`を使用します)。 @@ -95,6 +95,6 @@ そのため、すべての属性を省略できる部分的な変更を受け取りたい場合は、すべての属性をオプションとしてマークしたモデルを用意する必要があります(デフォルト値または`None`を使用して)。 -**更新** のためのオプション値がすべて設定されているモデルと、**作成** のための必須値が設定されているモデルを区別するには、[追加モデル](extra-models.md){.internal-link target=_blank}で説明されている考え方を利用することができます。 +**更新** のためのオプション値がすべて設定されているモデルと、**作成** のための必須値が設定されているモデルを区別するには、[追加モデル](extra-models.md)で説明されている考え方を利用することができます。 /// diff --git a/docs/ja/docs/tutorial/body.md b/docs/ja/docs/tutorial/body.md index 7c939bdfa0..9f100738c0 100644 --- a/docs/ja/docs/tutorial/body.md +++ b/docs/ja/docs/tutorial/body.md @@ -6,7 +6,7 @@ APIはほとんどの場合 **レスポンス** ボディを送信する必要があります。しかしクライアントは、常に **リクエストボディ** を送信する必要があるとは限りません。場合によっては、クエリパラメータ付きのパスだけをリクエストして、ボディを送信しないこともあります。 -**リクエスト**ボディを宣言するには、Pydantic モデルを使用し、その強力な機能とメリットをすべて利用します。 +**リクエスト**ボディを宣言するには、[Pydantic](https://docs.pydantic.dev/) モデルを使用し、その強力な機能とメリットをすべて利用します。 /// info | 情報 @@ -73,7 +73,7 @@ APIはほとんどの場合 **レスポンス** ボディを送信する必要 * データが無効な場合は、どこで何が不正なデータだったのかを正確に示す、分かりやすい明確なエラーを返します。 * 受け取ったデータをパラメータ `item` に渡します。 * 関数内で `Item` 型として宣言したため、すべての属性とその型について、エディタサポート(補完など)も利用できます。 -* モデル向けの JSON Schema 定義を生成します。プロジェクトにとって意味があるなら、他の場所でも好きなように利用できます。 +* モデル向けの [JSON Schema](https://json-schema.org) 定義を生成します。プロジェクトにとって意味があるなら、他の場所でも好きなように利用できます。 * それらのスキーマは生成されるOpenAPIスキーマの一部となり、自動ドキュメントの UIs で使用されます。 ## 自動ドキュメント { #automatic-docs } @@ -102,15 +102,15 @@ APIはほとんどの場合 **レスポンス** ボディを送信する必要 これをサポートするために、Pydantic自体にもいくつかの変更が加えられました。 -前述のスクリーンショットは Visual Studio Code で撮影されたものです。 +前述のスクリーンショットは [Visual Studio Code](https://code.visualstudio.com) で撮影されたものです。 -ただし、PyCharm や、他のほとんどのPythonエディタでも同じエディタサポートを得られます: +ただし、[PyCharm](https://www.jetbrains.com/pycharm/) や、他のほとんどのPythonエディタでも同じエディタサポートを得られます: /// tip | 豆知識 -エディタとして PyCharm を使用している場合、Pydantic PyCharm Plugin を使用できます。 +エディタとして [PyCharm](https://www.jetbrains.com/pycharm/) を使用している場合、[Pydantic PyCharm Plugin](https://github.com/koxudaxi/pydantic-pycharm-plugin/) を使用できます。 以下により、Pydanticモデルに対するエディタサポートが改善されます: @@ -163,4 +163,4 @@ FastAPIは、デフォルト値 `= None` があるため、`q` の値が必須 ## Pydanticを使わない方法 { #without-pydantic } -Pydanticモデルを使いたくない場合は、**Body** パラメータも使用できます。[Body - Multiple Parameters: Singular values in body](body-multiple-params.md#singular-values-in-body){.internal-link target=_blank} のドキュメントを参照してください。 +Pydanticモデルを使いたくない場合は、**Body** パラメータも使用できます。[Body - 複数のパラメータ: ボディ内の単一値](body-multiple-params.md#singular-values-in-body) のドキュメントを参照してください。 diff --git a/docs/ja/docs/tutorial/cors.md b/docs/ja/docs/tutorial/cors.md index 5136a7fd5f..3716b179b9 100644 --- a/docs/ja/docs/tutorial/cors.md +++ b/docs/ja/docs/tutorial/cors.md @@ -1,6 +1,6 @@ # CORS (Cross-Origin Resource Sharing) { #cors-cross-origin-resource-sharing } -CORSまたは「Cross-Origin Resource Sharing」 は、ブラウザで実行されているフロントエンドにバックエンドと通信するJavaScriptコードがあり、そのバックエンドがフロントエンドとは異なる「オリジン」にある状況を指します。 +[CORSまたは「Cross-Origin Resource Sharing」](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) は、ブラウザで実行されているフロントエンドにバックエンドと通信するJavaScriptコードがあり、そのバックエンドがフロントエンドとは異なる「オリジン」にある状況を指します。 ## オリジン { #origin } @@ -56,10 +56,10 @@ * `allow_origins` - オリジン間リクエストを許可するオリジンのリスト。例えば、`['https://example.org', 'https://www.example.org']`。`['*']`を使用して任意のオリジンを許可できます。 * `allow_origin_regex` - オリジン間リクエストを許可するオリジンの正規表現文字列。例えば、`'https://.*\.example\.org'`。 * `allow_methods` - オリジン間リクエストで許可するHTTPメソッドのリスト。デフォルトは `['GET']` です。`['*']`を使用してすべての標準メソッドを許可できます。 -* `allow_headers` - オリジン間リクエストでサポートするHTTPリクエストヘッダーのリスト。デフォルトは `[]` です。`['*']`を使用して、すべてのヘッダーを許可できます。シンプルなCORSリクエストでは、 `Accept` 、 `Accept-Language` 、 `Content-Language` 、 `Content-Type` ヘッダーが常に許可されます。 +* `allow_headers` - オリジン間リクエストでサポートするHTTPリクエストヘッダーのリスト。デフォルトは `[]` です。`['*']`を使用して、すべてのヘッダーを許可できます。[シンプルなCORSリクエスト](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests)では、 `Accept` 、 `Accept-Language` 、 `Content-Language` 、 `Content-Type` ヘッダーが常に許可されます。 * `allow_credentials` - オリジン間リクエストでCookieをサポートする必要があることを示します。デフォルトは `False` です。 - `allow_credentials` が `True` に設定されている場合、`allow_origins`、`allow_methods`、`allow_headers` のいずれも `['*']` に設定できません。これらはすべて明示的に指定する必要があります。 + `allow_credentials` が `True` に設定されている場合、`allow_origins`、`allow_methods`、`allow_headers` のいずれも `['*']` に設定できません。これらはすべて[明示的に指定](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#credentialed_requests_and_wildcards)する必要があります。 * `expose_headers` - ブラウザからアクセスできるようにするレスポンスヘッダーを示します。デフォルトは `[]` です。 * `max_age` - ブラウザがCORSレスポンスをキャッシュする最大時間を秒単位で設定します。デフォルトは `600` です。 @@ -78,7 +78,7 @@ ## より詳しい情報 { #more-info } -CORSについてより詳しい情報は、Mozilla CORS documentation を参照して下さい。 +CORSについてより詳しい情報は、[Mozilla CORS documentation](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) を参照して下さい。 /// note | 技術詳細 diff --git a/docs/ja/docs/tutorial/debugging.md b/docs/ja/docs/tutorial/debugging.md index 9d88ba42b5..023e988dce 100644 --- a/docs/ja/docs/tutorial/debugging.md +++ b/docs/ja/docs/tutorial/debugging.md @@ -59,7 +59,7 @@ Pythonによって自動的に作成されたファイル内の内部変数 `__n ```Python from myapp import app -# Some more code +# その他のコード ``` その場合、`myapp.py` 内の自動的に作成された変数 `__name__` は、値として `"__main__"` を持ちません。 @@ -74,7 +74,7 @@ from myapp import app /// info | 情報 -より詳しい情報は、公式Pythonドキュメントを参照してください。 +より詳しい情報は、[公式Pythonドキュメント](https://docs.python.org/3/library/__main__.html)を参照してください。 /// diff --git a/docs/ja/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md b/docs/ja/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md index d0a2b16721..573ccc1f96 100644 --- a/docs/ja/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md +++ b/docs/ja/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md @@ -32,7 +32,7 @@ この例では、架空のカスタムヘッダー `X-Key` と `X-Token` を使用しています。 -しかし実際のケースでセキュリティを実装する際は、統合された[Security utilities(次の章)](../security/index.md){.internal-link target=_blank}を使うことで、より多くの利点を得られます。 +しかし実際のケースでセキュリティを実装する際は、統合された[Security utilities(次の章)](../security/index.md)を使うことで、より多くの利点を得られます。 /// @@ -62,7 +62,7 @@ ## *path operation*のグループに対する依存関係 { #dependencies-for-a-group-of-path-operations } -後で、より大きなアプリケーションを(おそらく複数ファイルで)構造化する方法([Bigger Applications - Multiple Files](../../tutorial/bigger-applications.md){.internal-link target=_blank})について読むときに、*path operation*のグループに対して単一の`dependencies`パラメータを宣言する方法を学びます。 +後で、より大きなアプリケーションを(おそらく複数ファイルで)構造化する方法([Bigger Applications - Multiple Files](../../tutorial/bigger-applications.md))について読むときに、*path operation*のグループに対して単一の`dependencies`パラメータを宣言する方法を学びます。 ## グローバル依存関係 { #global-dependencies } diff --git a/docs/ja/docs/tutorial/dependencies/dependencies-with-yield.md b/docs/ja/docs/tutorial/dependencies/dependencies-with-yield.md index 380dcb536b..83e4f88098 100644 --- a/docs/ja/docs/tutorial/dependencies/dependencies-with-yield.md +++ b/docs/ja/docs/tutorial/dependencies/dependencies-with-yield.md @@ -14,8 +14,8 @@ FastAPIは、いくつかの`@contextlib.contextmanager`または -* `@contextlib.asynccontextmanager` +* [`@contextlib.contextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.contextmanager) または +* [`@contextlib.asynccontextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.asynccontextmanager) これらは **FastAPI** の依存関係として使用するのに有効です。 @@ -87,7 +87,7 @@ FastAPIは、いくつかのContext Managersのおかげで動作します。 +これはPythonの[コンテキストマネージャ](https://docs.python.org/3/library/contextlib.html)のおかげで動作します。 **FastAPI** はこれを実現するために内部的に使用しています。 @@ -111,7 +111,7 @@ FastAPIは、いくつかのファイルを読み込むには`with`を使用することができます: +例えば、[ファイルを読み込むには`with`を使用することができます](https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files): ```Python with open("./somefile.txt") as f: @@ -264,7 +264,7 @@ with open("./somefile.txt") as f: /// -Pythonでは、以下の2つのメソッドを持つクラスを作成する: `__enter__()`と`__exit__()`ことでコンテキストマネージャを作成することができます。 +Pythonでは、[以下の2つのメソッドを持つクラスを作成する: `__enter__()`と`__exit__()`](https://docs.python.org/3/reference/datamodel.html#context-managers)ことでコンテキストマネージャを作成することができます。 また、依存関数の中で`with`や`async with`文を使用することによって`yield`を持つ **FastAPI** の依存関係の中でそれらを使用することができます: @@ -272,10 +272,10 @@ Pythonでは、`@contextlib.contextmanager` または -* `@contextlib.asynccontextmanager` +* [`@contextlib.contextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.contextmanager) または +* [`@contextlib.asynccontextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.asynccontextmanager) これらを使って、関数を単一の`yield`でデコレートすることができます。 diff --git a/docs/ja/docs/tutorial/dependencies/global-dependencies.md b/docs/ja/docs/tutorial/dependencies/global-dependencies.md index 284da2181b..35a77a5f76 100644 --- a/docs/ja/docs/tutorial/dependencies/global-dependencies.md +++ b/docs/ja/docs/tutorial/dependencies/global-dependencies.md @@ -2,14 +2,14 @@ アプリケーションの種類によっては、アプリ全体に依存関係を追加したい場合があります。 -[`dependencies` を path operation のデコレータに追加](dependencies-in-path-operation-decorators.md){.internal-link target=_blank}できるのと同様に、`FastAPI` アプリケーション自体にも追加できます。 +[`dependencies` を path operation のデコレータに追加](dependencies-in-path-operation-decorators.md)できるのと同様に、`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 に対して適用されます。 +また、[`dependencies` を path operation のデコレータに追加](dependencies-in-path-operation-decorators.md)する節で説明した考え方はすべて引き続き当てはまりますが、この場合はアプリ内のすべての path operation に対して適用されます。 ## path operation のグループに対する依存関係 { #dependencies-for-groups-of-path-operations } -後で、複数ファイルを含む大規模アプリケーションの構成方法([大規模アプリケーション - 複数ファイル](../../tutorial/bigger-applications.md){.internal-link target=_blank})を読むと、path operation のグループに対して 1 つの `dependencies` パラメータを宣言する方法を学びます。 +後で、複数ファイルを含む大規模アプリケーションの構成方法([大規模アプリケーション - 複数ファイル](../../tutorial/bigger-applications.md))を読むと、path operation のグループに対して 1 つの `dependencies` パラメータを宣言する方法を学びます。 diff --git a/docs/ja/docs/tutorial/dependencies/index.md b/docs/ja/docs/tutorial/dependencies/index.md index 64cb4f79e4..a3cf3e26b5 100644 --- a/docs/ja/docs/tutorial/dependencies/index.md +++ b/docs/ja/docs/tutorial/dependencies/index.md @@ -57,7 +57,7 @@ FastAPI はバージョン 0.95.0 で `Annotated` のサポートを追加し( 古いバージョンを使用している場合、`Annotated` を使おうとするとエラーになります。 -`Annotated` を使用する前に、少なくとも 0.95.1 まで [FastAPI のバージョンをアップグレード](../../deployment/versions.md#upgrading-the-fastapi-versions){.internal-link target=_blank} してください。 +`Annotated` を使用する前に、少なくとも 0.95.1 まで [FastAPI のバージョンをアップグレード](../../deployment/versions.md#upgrading-the-fastapi-versions) してください。 /// @@ -152,7 +152,7 @@ commons: Annotated[dict, Depends(common_parameters)] /// note | 備考 -わからない場合は、ドキュメントの[Async: *"In a hurry?"*](../../async.md#in-a-hurry){.internal-link target=_blank}の中の`async`と`await`についてのセクションを確認してください。 +わからない場合は、ドキュメントの[Async: *「急いでいますか?」*](../../async.md#in-a-hurry)の中の`async`と`await`についてのセクションを確認してください。 /// diff --git a/docs/ja/docs/tutorial/encoder.md b/docs/ja/docs/tutorial/encoder.md index 33cc6ae48c..e4745faf7c 100644 --- a/docs/ja/docs/tutorial/encoder.md +++ b/docs/ja/docs/tutorial/encoder.md @@ -12,7 +12,7 @@ JSON互換のデータのみを受信するデータベース`fake_db`がある 例えば、`datetime`オブジェクトはJSONと互換性がないので、受け取られません。 -そのため、`datetime`オブジェクトはISO形式のデータを含む`str`に変換されなければなりません。 +そのため、`datetime`オブジェクトは[ISO形式](https://en.wikipedia.org/wiki/ISO_8601)のデータを含む`str`に変換されなければなりません。 同様に、このデータベースはPydanticモデル(属性を持つオブジェクト)を受け取らず、`dict`だけを受け取ります。 @@ -24,7 +24,7 @@ Pydanticモデルのようなオブジェクトを受け取り、JSON互換版 この例では、Pydanticモデルを`dict`に、`datetime`を`str`に変換します。 -呼び出した結果は、Pythonの標準の`json.dumps()`でエンコードできるものです。 +呼び出した結果は、Pythonの標準の[`json.dumps()`](https://docs.python.org/3/library/json.html#json.dumps)でエンコードできるものです。 これはJSON形式のデータを含む大きな`str`を(文字列として)返しません。JSONと互換性のある値とサブの値を持つPython標準のデータ構造(例:`dict`)を返します。 diff --git a/docs/ja/docs/tutorial/extra-data-types.md b/docs/ja/docs/tutorial/extra-data-types.md index 4ed84e86f8..1bbfeb71e3 100644 --- a/docs/ja/docs/tutorial/extra-data-types.md +++ b/docs/ja/docs/tutorial/extra-data-types.md @@ -36,7 +36,7 @@ * `datetime.timedelta`: * Pythonの`datetime.timedelta`です。 * リクエストとレスポンスでは合計秒数の`float`で表現されます。 - * Pydanticでは「ISO 8601 time diff encoding」として表現することも可能です。詳細はドキュメントを参照してください。 + * Pydanticでは「ISO 8601 time diff encoding」として表現することも可能です。[詳細はドキュメントを参照してください](https://docs.pydantic.dev/latest/concepts/serialization/#custom-serializers)。 * `frozenset`: * リクエストとレスポンスでは`set`と同じように扱われます: * リクエストでは、リストが読み込まれ、重複を排除して`set`に変換されます。 @@ -49,7 +49,7 @@ * `Decimal`: * Pythonの標準的な`Decimal`です。 * リクエストとレスポンスでは`float`と同じように扱われます。 -* Pydanticの全ての有効な型はこちらで確認できます: Pydantic data types。 +* 有効なPydanticのデータ型はここで確認できます: [Pydantic のデータ型](https://docs.pydantic.dev/latest/usage/types/types/)。 ## 例 { #example } diff --git a/docs/ja/docs/tutorial/extra-models.md b/docs/ja/docs/tutorial/extra-models.md index 951e8b35e4..20883068c2 100644 --- a/docs/ja/docs/tutorial/extra-models.md +++ b/docs/ja/docs/tutorial/extra-models.md @@ -12,7 +12,7 @@ ユーザーの平文のパスワードは絶対に保存しないでください。常に検証できる「安全なハッシュ」を保存してください。 -知らない方は、[セキュリティの章](security/simple-oauth2.md#password-hashing){.internal-link target=_blank}で「パスワードハッシュ」とは何かを学ぶことができます。 +知らない方は、[セキュリティの章](security/simple-oauth2.md#password-hashing)で「パスワードハッシュ」とは何かを学ぶことができます。 /// @@ -162,11 +162,11 @@ UserInDB( OpenAPIでは`anyOf`で定義されます。 -そのためには、標準的なPythonの型ヒント`typing.Union`を使用します: +そのためには、標準的なPythonの型ヒント[`typing.Union`](https://docs.python.org/3/library/typing.html#typing.Union)を使用します: /// note | 備考 -`Union`を定義する場合は、最も具体的な型を先に、その後により具体性の低い型を含めてください。以下の例では、より具体的な`PlaneItem`が`Union[PlaneItem, CarItem]`内で`CarItem`より前に来ています。 +[`Union`](https://docs.pydantic.dev/latest/concepts/types/#unions)を定義する場合は、最も具体的な型を先に、その後により具体性の低い型を含めてください。以下の例では、より具体的な`PlaneItem`が`Union[PlaneItem, CarItem]`内で`CarItem`より前に来ています。 /// diff --git a/docs/ja/docs/tutorial/first-steps.md b/docs/ja/docs/tutorial/first-steps.md index 37d71a9f72..26cb49159c 100644 --- a/docs/ja/docs/tutorial/first-steps.md +++ b/docs/ja/docs/tutorial/first-steps.md @@ -11,7 +11,7 @@
```console -$ fastapi dev main.py +$ fastapi dev FastAPI Starting development server 🚀 @@ -58,7 +58,7 @@ INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ### チェック { #check-it } -ブラウザでhttp://127.0.0.1:8000を開きます。 +ブラウザで[http://127.0.0.1:8000](http://127.0.0.1:8000)を開きます。 次のようなJSONレスポンスが表示されます: @@ -68,17 +68,17 @@ INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ### 対話的APIドキュメント { #interactive-api-docs } -次に、http://127.0.0.1:8000/docsにアクセスします。 +次に、[http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)にアクセスします。 -自動生成された対話的APIドキュメントが表示されます (Swagger UIで提供): +自動生成された対話的APIドキュメントが表示されます([Swagger UI](https://github.com/swagger-api/swagger-ui)で提供): ![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png) ### 代替APIドキュメント { #alternative-api-docs } -次に、http://127.0.0.1:8000/redocにアクセスします。 +次に、[http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc)にアクセスします。 -先ほどとは異なる、自動生成された対話的APIドキュメントが表示されます (ReDocによって提供): +先ほどとは異なる、自動生成された対話的APIドキュメントが表示されます([ReDoc](https://github.com/Rebilly/ReDoc)によって提供): ![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png) @@ -92,7 +92,7 @@ INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) #### API「スキーマ」 { #api-schema } -ここでは、OpenAPIはAPIのスキーマ定義の方法を規定する仕様です。 +ここでは、[OpenAPI](https://github.com/OAI/OpenAPI-Specification)はAPIのスキーマ定義の方法を規定する仕様です。 このスキーマ定義はAPIパス、受け取り可能なパラメータなどが含まれます。 @@ -110,7 +110,7 @@ OpenAPIはAPIのためのAPIスキーマを定義します。そして、その 素のOpenAPIスキーマがどのようなものか興味がある場合、FastAPIはすべてのAPIの説明を含むJSON(スキーマ)を自動的に生成します。 -次の場所で直接確認できます: http://127.0.0.1:8000/openapi.json. +次の場所で直接確認できます: [http://127.0.0.1:8000/openapi.json](http://127.0.0.1:8000/openapi.json). 次のようなJSONが表示されます。 @@ -143,9 +143,58 @@ OpenAPIスキーマは、FastAPIに含まれている2つのインタラクテ また、APIと通信するクライアント用のコードを自動的に生成するために使用することもできます。たとえば、フロントエンド、モバイル、またはIoTアプリケーションです。 +### `pyproject.toml`でアプリの`entrypoint`を設定 { #configure-the-app-entrypoint-in-pyproject-toml } + +`pyproject.toml`でアプリの場所を次のように設定できます: + +```toml +[tool.fastapi] +entrypoint = "main:app" +``` + +この`entrypoint`は、`fastapi`コマンドに対して、次のようにアプリをインポートすべきであることを伝えます: + +```python +from main import app +``` + +もしコード構成が次のようになっている場合: + +``` +. +├── backend +│   ├── main.py +│   ├── __init__.py +``` + +このときは`entrypoint`を次のように設定します: + +```toml +[tool.fastapi] +entrypoint = "backend.main:app" +``` + +これは次と同等です: + +```python +from backend.main import app +``` + +### パス付きの`fastapi dev` { #fastapi-dev-with-path } + +`fastapi dev`コマンドにファイルパスを渡すこともでき、使用すべきFastAPIのappオブジェクトを推測します: + +```console +$ fastapi dev main.py +``` + +ただし、その場合は毎回`fastapi`コマンドを呼ぶたびに正しいパスを渡すことを覚えておく必要があります。 + +さらに、他のツール(たとえば、[VS Code 拡張機能](../editor-support.md)や[FastAPI Cloud](https://fastapicloud.com))が見つけられない場合があります。そのため、`pyproject.toml`の`entrypoint`を使うことを推奨します。 + ### アプリをデプロイ(任意) { #deploy-your-app-optional } -任意でFastAPIアプリをFastAPI Cloudにデプロイできます。まだなら、待機リストに登録してください。 🚀 +任意でFastAPIアプリを[FastAPI Cloud](https://fastapicloud.com)にデプロイできます。まだなら、待機リストに登録してください。 🚀 すでに**FastAPI Cloud**アカウントがある場合(待機リストから招待済みの場合😉)、1コマンドでアプリケーションをデプロイできます。 @@ -191,7 +240,7 @@ Deploying to FastAPI Cloud... `FastAPI`は`Starlette`を直接継承するクラスです。 -`FastAPI`でもStarletteのすべての機能を利用可能です。 +`FastAPI`でも[Starlette](https://www.starlette.dev/)のすべての機能を利用可能です。 /// @@ -272,7 +321,7 @@ APIを構築するときは、通常、これらの特定のHTTPメソッドを * パス `/` * get オペレーション -/// info | `@decorator` Info +/// info | `@decorator` 情報 Pythonにおける`@something`シンタックスはデコレータと呼ばれます。 @@ -335,7 +384,7 @@ Pythonにおける`@something`シンタックスはデコレータと呼ばれ /// note | 備考 -違いが分からない場合は、[Async: *"急いでいますか?"*](../async.md#in-a-hurry){.internal-link target=_blank}を確認してください。 +違いが分からない場合は、[Async: *「急いでいますか?」*](../async.md#in-a-hurry)を確認してください。 /// @@ -351,11 +400,11 @@ JSONに自動的に変換されるオブジェクトやモデルは他にもた ### Step 6: デプロイする { #step-6-deploy-it } -**FastAPI Cloud**に1コマンドでアプリをデプロイします: `fastapi deploy`. 🎉 +**[FastAPI Cloud](https://fastapicloud.com)**に1コマンドでアプリをデプロイします: `fastapi deploy`. 🎉 #### FastAPI Cloudについて { #about-fastapi-cloud } -**FastAPI Cloud**は、**FastAPI**の作者とそのチームによって開発されています。 +**[FastAPI Cloud](https://fastapicloud.com)**は、**FastAPI**の作者とそのチームによって開発されています。 最小限の労力でAPIの**構築**、**デプロイ**、**アクセス**を行うプロセスを合理化します。 diff --git a/docs/ja/docs/tutorial/handling-errors.md b/docs/ja/docs/tutorial/handling-errors.md index dc74e3f6cc..8d0190cb0b 100644 --- a/docs/ja/docs/tutorial/handling-errors.md +++ b/docs/ja/docs/tutorial/handling-errors.md @@ -81,7 +81,7 @@ Pythonの例外なので、`return`ではなく、`raise`です。 ## カスタム例外ハンドラのインストール { #install-custom-exception-handlers } -カスタム例外ハンドラはStarletteと同じ例外ユーティリティを使用して追加することができます。 +カスタム例外ハンドラは[Starletteと同じ例外ユーティリティ](https://www.starlette.dev/exceptions/)を使用して追加することができます。 あなた(または使用しているライブラリ)が`raise`するかもしれないカスタム例外`UnicornException`があるとしましょう。 diff --git a/docs/ja/docs/tutorial/index.md b/docs/ja/docs/tutorial/index.md index d298abc62d..8182c92ae9 100644 --- a/docs/ja/docs/tutorial/index.md +++ b/docs/ja/docs/tutorial/index.md @@ -15,7 +15,7 @@
```console -$ fastapi dev main.py +$ fastapi dev FastAPI Starting development server 🚀 @@ -62,7 +62,7 @@ $ fastapi dev @@ -76,7 +76,7 @@ $ pip install "fastapi[standard]" /// note | 備考 -`pip install "fastapi[standard]"` でインストールすると、`fastapi-cloud-cli` を含むいくつかのデフォルトのオプション標準依存関係が付属します。これにより、FastAPI Cloud にデプロイできます。 +`pip install "fastapi[standard]"` でインストールすると、`fastapi-cloud-cli` を含むいくつかのデフォルトのオプション標準依存関係が付属します。これにより、[FastAPI Cloud](https://fastapicloud.com) にデプロイできます。 これらのオプション依存関係が不要な場合は、代わりに `pip install fastapi` をインストールできます。 @@ -84,6 +84,12 @@ $ pip install "fastapi[standard]" /// +/// tip | 豆知識 + +FastAPI には [VS Code の公式拡張機能](https://marketplace.visualstudio.com/items?itemName=FastAPILabs.fastapi-vscode)(および Cursor)があります。path operation エクスプローラー、path operation 検索、テスト内の CodeLens ナビゲーション(テストから定義へジャンプ)、そして FastAPI Cloud へのデプロイやログなど、さまざまな機能をエディターから利用できます。 + +/// + ## 高度なユーザーガイド { #advanced-user-guide } この **チュートリアル - ユーザーガイド** の後で、後から読める **高度なユーザーガイド** もあります。 diff --git a/docs/ja/docs/tutorial/metadata.md b/docs/ja/docs/tutorial/metadata.md index 3b70bf2f41..6802e6c9aa 100644 --- a/docs/ja/docs/tutorial/metadata.md +++ b/docs/ja/docs/tutorial/metadata.md @@ -14,7 +14,7 @@ OpenAPI仕様および自動APIドキュメントUIで使用される次のフ | `version` | `string` | APIのバージョンです。これはOpenAPIのバージョンではなく、あなた自身のアプリケーションのバージョンです。たとえば `2.5.0` です。 | | `terms_of_service` | `str` | APIの利用規約へのURLです。指定する場合、URLである必要があります。 | | `contact` | `dict` | 公開されるAPIの連絡先情報です。複数のフィールドを含められます。
contact fields
ParameterTypeDescription
namestr連絡先の個人/組織を識別する名前です。
urlstr連絡先情報を指すURLです。URL形式である必要があります。
emailstr連絡先の個人/組織のメールアドレスです。メールアドレス形式である必要があります。
| -| `license_info` | `dict` | 公開されるAPIのライセンス情報です。複数のフィールドを含められます。
license_info fields
ParameterTypeDescription
namestr必須license_info が設定されている場合)。APIに使用されるライセンス名です。
identifierstrAPIの SPDX ライセンス式です。identifier フィールドは url フィールドと同時に指定できません。 OpenAPI 3.1.0、FastAPI 0.99.0 以降で利用できます。
urlstrAPIに使用されるライセンスへのURLです。URL形式である必要があります。
| +| `license_info` | `dict` | 公開されるAPIのライセンス情報です。複数のフィールドを含められます。
license_info fields
ParameterTypeDescription
namestr必須license_info が設定されている場合)。APIに使用されるライセンス名です。
identifierstrAPIの [SPDX](https://spdx.org/licenses/) ライセンス式です。identifier フィールドは url フィールドと同時に指定できません。 OpenAPI 3.1.0、FastAPI 0.99.0 以降で利用できます。
urlstrAPIに使用されるライセンスへのURLです。URL形式である必要があります。
| 以下のように設定できます: @@ -76,7 +76,7 @@ OpenAPI 3.1.0 および FastAPI 0.99.0 以降では、`license_info` を `url` /// info | 情報 -タグの詳細は [Path Operation Configuration](path-operation-configuration.md#tags){.internal-link target=_blank} を参照してください。 +タグの詳細は [Path Operation の設定](path-operation-configuration.md#tags) を参照してください。 /// diff --git a/docs/ja/docs/tutorial/middleware.md b/docs/ja/docs/tutorial/middleware.md index 103d6e2c06..20192d0805 100644 --- a/docs/ja/docs/tutorial/middleware.md +++ b/docs/ja/docs/tutorial/middleware.md @@ -15,7 +15,7 @@ `yield` を使った依存関係をもつ場合は、終了コードはミドルウェアの *後に* 実行されます。 -バックグラウンドタスク ([バックグラウンドタスク](background-tasks.md){.internal-link target=_blank} セクションで説明します。後で確認できます) がある場合は、それらは全てのミドルウェアの *後に* 実行されます。 +バックグラウンドタスク ([バックグラウンドタスク](background-tasks.md) セクションで説明します。後で確認できます) がある場合は、それらは全てのミドルウェアの *後に* 実行されます。 /// @@ -35,9 +35,9 @@ /// tip | 豆知識 -カスタムの独自ヘッダーは `X-` プレフィックスを使用して追加できる点に注意してください。 +カスタムの独自ヘッダーは [`X-` プレフィックスを使用](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers)して追加できる点に注意してください。 -ただし、ブラウザのクライアントに表示させたいカスタムヘッダーがある場合は、StarletteのCORSドキュメントに記載されているパラメータ `expose_headers` を使用して、それらをCORS設定に追加する必要があります ([CORS (Cross-Origin Resource Sharing)](cors.md){.internal-link target=_blank})。 +ただし、ブラウザのクライアントに表示させたいカスタムヘッダーがある場合は、[CORS (Cross-Origin Resource Sharing)](cors.md) の設定に、[StarletteのCORSドキュメント](https://www.starlette.dev/middleware/#corsmiddleware)に記載されているパラメータ `expose_headers` を使用して、それらを追加する必要があります。 /// @@ -61,7 +61,7 @@ /// tip | 豆知識 -ここでは、これらのユースケースに対してより正確になり得るため、`time.time()` の代わりに `time.perf_counter()` を使用しています。 🤓 +ここでは、これらのユースケースに対してより正確になり得るため、`time.time()` の代わりに [`time.perf_counter()`](https://docs.python.org/3/library/time.html#time.perf_counter) を使用しています。 🤓 /// @@ -90,6 +90,6 @@ app.add_middleware(MiddlewareB) ## その他のミドルウェア { #other-middlewares } -他のミドルウェアの詳細については、[高度なユーザーガイド: 高度なミドルウェア](../advanced/middleware.md){.internal-link target=_blank}を参照してください。 +他のミドルウェアの詳細については、[高度なユーザーガイド: 高度なミドルウェア](../advanced/middleware.md)を参照してください。 次のセクションでは、ミドルウェアを使用して CORS を処理する方法について説明します。 diff --git a/docs/ja/docs/tutorial/path-operation-configuration.md b/docs/ja/docs/tutorial/path-operation-configuration.md index 556cc6b148..25a2783ea1 100644 --- a/docs/ja/docs/tutorial/path-operation-configuration.md +++ b/docs/ja/docs/tutorial/path-operation-configuration.md @@ -58,7 +58,7 @@ 説明文は長くて複数行におよぶ傾向があるので、関数docstring内に*path operation*の説明文を宣言できます。すると、**FastAPI** は説明文を読み込んでくれます。 -docstringにMarkdownを記述すれば、正しく解釈されて表示されます。(docstringのインデントを考慮して) +docstringに[Markdown](https://en.wikipedia.org/wiki/Markdown)を記述すれば、正しく解釈されて表示されます。(docstringのインデントを考慮して) {* ../../docs_src/path_operation_configuration/tutorial004_py310.py hl[17:25] *} diff --git a/docs/ja/docs/tutorial/path-params-numeric-validations.md b/docs/ja/docs/tutorial/path-params-numeric-validations.md index ab3240f042..55930eece2 100644 --- a/docs/ja/docs/tutorial/path-params-numeric-validations.md +++ b/docs/ja/docs/tutorial/path-params-numeric-validations.md @@ -14,7 +14,7 @@ FastAPI はバージョン 0.95.0 で`Annotated`のサポートを追加し( 古いバージョンの場合、`Annotated`を使おうとするとエラーになります。 -`Annotated`を使用する前に、FastAPI のバージョンを少なくとも 0.95.1 まで[アップグレードしてください](../deployment/versions.md#upgrading-the-fastapi-versions){.internal-link target=_blank}。 +`Annotated`を使用する前に、FastAPI のバージョンを少なくとも 0.95.1 まで[アップグレードしてください](../deployment/versions.md#upgrading-the-fastapi-versions)。 /// @@ -122,7 +122,7 @@ Pythonはその`*`で何かをすることはありませんが、それ以降 ## まとめ { #recap } -`Query`と`Path`(そしてまだ見たことない他のもの)では、[クエリパラメータと文字列の検証](query-params-str-validations.md){.internal-link target=_blank}と同じようにメタデータと文字列の検証を宣言することができます。 +`Query`と`Path`(そしてまだ見たことない他のもの)では、[クエリパラメータと文字列の検証](query-params-str-validations.md)と同じようにメタデータと文字列の検証を宣言することができます。 また、数値のバリデーションを宣言することもできます: diff --git a/docs/ja/docs/tutorial/path-params.md b/docs/ja/docs/tutorial/path-params.md index 5b78eb7b1f..8556b1c375 100644 --- a/docs/ja/docs/tutorial/path-params.md +++ b/docs/ja/docs/tutorial/path-params.md @@ -6,7 +6,7 @@ Pythonのformat文字列と同様のシンタックスで「パスパラメー パスパラメータ `item_id` の値は、引数 `item_id` として関数に渡されます。 -したがって、この例を実行して http://127.0.0.1:8000/items/foo にアクセスすると、次のレスポンスが表示されます。 +したがって、この例を実行して [http://127.0.0.1:8000/items/foo](http://127.0.0.1:8000/items/foo) にアクセスすると、次のレスポンスが表示されます。 ```JSON {"item_id":"foo"} @@ -28,7 +28,7 @@ Pythonのformat文字列と同様のシンタックスで「パスパラメー ## データ変換 { #data-conversion } -この例を実行し、ブラウザで http://127.0.0.1:8000/items/3 を開くと、次のレスポンスが表示されます: +この例を実行し、ブラウザで [http://127.0.0.1:8000/items/3](http://127.0.0.1:8000/items/3) を開くと、次のレスポンスが表示されます: ```JSON {"item_id":3} @@ -44,7 +44,7 @@ Pythonのformat文字列と同様のシンタックスで「パスパラメー ## データバリデーション { #data-validation } -しかしブラウザで http://127.0.0.1:8000/items/foo を開くと、次のHTTPエラーが表示されます: +しかしブラウザで [http://127.0.0.1:8000/items/foo](http://127.0.0.1:8000/items/foo) を開くと、次のHTTPエラーが表示されます: ```JSON { @@ -64,7 +64,7 @@ Pythonのformat文字列と同様のシンタックスで「パスパラメー これは、パスパラメータ `item_id` が `int` ではない値 `"foo"` だからです。 -http://127.0.0.1:8000/items/4.2 で見られるように、`int` のかわりに `float` が与えられた場合にも同様なエラーが表示されます。 +[http://127.0.0.1:8000/items/4.2](http://127.0.0.1:8000/items/4.2) で見られるように、`int` のかわりに `float` が与えられた場合にも同様なエラーが表示されます。 /// check | 確認 @@ -78,7 +78,7 @@ Pythonのformat文字列と同様のシンタックスで「パスパラメー ## ドキュメント { #documentation } -そしてブラウザで http://127.0.0.1:8000/docs を開くと、以下の様な自動的に生成された対話的なAPIドキュメントが表示されます。 +そしてブラウザで [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) を開くと、以下の様な自動的に生成された対話的なAPIドキュメントが表示されます。 @@ -92,9 +92,9 @@ Pythonのformat文字列と同様のシンタックスで「パスパラメー ## 標準ベースのメリット、ドキュメンテーションの代替物 { #standards-based-benefits-alternative-documentation } -また、生成されたスキーマが OpenAPI 標準に従っているので、互換性のあるツールが多数あります。 +また、生成されたスキーマが [OpenAPI](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md) 標準に従っているので、互換性のあるツールが多数あります。 -このため、**FastAPI**自体が代替のAPIドキュメントを提供します(ReDocを使用)。これは、 http://127.0.0.1:8000/redoc にアクセスすると確認できます。 +このため、**FastAPI**自体が代替のAPIドキュメントを提供します(ReDocを使用)。これは、 [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc) にアクセスすると確認できます。 @@ -102,7 +102,7 @@ Pythonのformat文字列と同様のシンタックスで「パスパラメー ## Pydantic { #pydantic } -すべてのデータバリデーションは Pydantic によって内部で実行されるため、Pydanticの全てのメリットが得られます。そして、安心して利用することができます。 +すべてのデータバリデーションは [Pydantic](https://docs.pydantic.dev/) によって内部で実行されるため、Pydanticの全てのメリットが得られます。そして、安心して利用することができます。 `str`、 `float` 、 `bool` および他の多くの複雑なデータ型を型宣言に使用できます。 diff --git a/docs/ja/docs/tutorial/query-params-str-validations.md b/docs/ja/docs/tutorial/query-params-str-validations.md index dda4e120bf..d340598019 100644 --- a/docs/ja/docs/tutorial/query-params-str-validations.md +++ b/docs/ja/docs/tutorial/query-params-str-validations.md @@ -35,13 +35,13 @@ FastAPI はバージョン 0.95.0 で `Annotated` のサポートを追加し( 古いバージョンの場合、`Annotated` を使おうとするとエラーになります。 -`Annotated` を使う前に、FastAPI のバージョンを少なくとも 0.95.1 にするために、[FastAPI のバージョンをアップグレード](../deployment/versions.md#upgrading-the-fastapi-versions){.internal-link target=_blank}してください。 +`Annotated` を使う前に、FastAPI のバージョンを少なくとも 0.95.1 にするために、[FastAPI のバージョンをアップグレード](../deployment/versions.md#upgrading-the-fastapi-versions)してください。 /// ## `q` パラメータの型で `Annotated` を使う { #use-annotated-in-the-type-for-the-q-parameter } -以前、[Python Types Intro](../python-types.md#type-hints-with-metadata-annotations){.internal-link target=_blank} で `Annotated` を使ってパラメータにメタデータを追加できると説明したことを覚えていますか? +以前、[Python Types Intro](../python-types.md#type-hints-with-metadata-annotations) で `Annotated` を使ってパラメータにメタデータを追加できると説明したことを覚えていますか? いよいよ FastAPI で使うときです。 🚀 @@ -158,7 +158,7 @@ FastAPI なしで同じ関数を **別の場所** から **呼び出しても** `Annotated` を使わずに **(古い)デフォルト値スタイル** を使う場合、FastAPI なしでその関数を **別の場所** で呼び出すとき、正しく動かすために関数へ引数を渡すことを **覚えておく** 必要があります。そうしないと値が期待と異なります(例えば `str` の代わりに `QueryInfo` か、それに類するものになります)。また、エディターも警告せず、Python もその関数の実行で文句を言いません。内部の処理がエラーになるときに初めて問題が出ます。 -`Annotated` は複数のメタデータアノテーションを持てるので、Typer のような別ツールと同じ関数を使うこともできます。 🚀 +`Annotated` は複数のメタデータアノテーションを持てるので、[Typer](https://typer.tiangolo.com/) のような別ツールと同じ関数を使うこともできます。 🚀 ## バリデーションをさらに追加する { #add-more-validations } @@ -348,7 +348,7 @@ http://127.0.0.1:8000/items/?item-query=foobaritems さて、このパラメータが気に入らなくなったとしましょう。 -それを使っているクライアントがいるので、しばらくは残しておく必要がありますが、ドキュメントにはdeprecatedと明記しておきたいです。 +それを使っているクライアントがいるので、しばらくは残しておく必要がありますが、ドキュメントには廃止予定と明記しておきたいです。 その場合、`Query`にパラメータ`deprecated=True`を渡します: @@ -370,11 +370,11 @@ http://127.0.0.1:8000/items/?item-query=foobaritems その場合、通常のバリデーション(例: 値が `str` であることの検証)の後に適用される **カスタムバリデータ関数** を使えます。 -これを行うには、`Annotated` の中で Pydantic の `AfterValidator` を使います。 +これを行うには、`Annotated` の中で [Pydantic の `AfterValidator`](https://docs.pydantic.dev/latest/concepts/validators/#field-after-validator) を使います。 /// tip | 豆知識 -Pydantic には `BeforeValidator` などもあります。 🤓 +Pydantic には [`BeforeValidator`](https://docs.pydantic.dev/latest/concepts/validators/#field-before-validator) などもあります。 🤓 /// diff --git a/docs/ja/docs/tutorial/query-params.md b/docs/ja/docs/tutorial/query-params.md index d32c9822b8..51e4eb944f 100644 --- a/docs/ja/docs/tutorial/query-params.md +++ b/docs/ja/docs/tutorial/query-params.md @@ -183,6 +183,6 @@ http://127.0.0.1:8000/items/foo-item?needy=sooooneedy /// tip | 豆知識 -[パスパラメータ](path-params.md#predefined-values){.internal-link target=_blank}と同様に `Enum` を使用できます。 +[パスパラメータ](path-params.md#predefined-values)と同様に `Enum` を使用できます。 /// diff --git a/docs/ja/docs/tutorial/request-files.md b/docs/ja/docs/tutorial/request-files.md index 538cf64744..30a494afb0 100644 --- a/docs/ja/docs/tutorial/request-files.md +++ b/docs/ja/docs/tutorial/request-files.md @@ -4,9 +4,9 @@ /// info | 情報 -アップロードされたファイルを受け取るには、まず `python-multipart` をインストールします。 +アップロードされたファイルを受け取るには、まず [`python-multipart`](https://github.com/Kludex/python-multipart) をインストールします。 -[仮想環境](../virtual-environments.md){.internal-link target=_blank}を作成して有効化し、次のようにインストールしてください: +[仮想環境](../virtual-environments.md)を作成して有効化し、次のようにインストールしてください: ```console $ pip install python-multipart @@ -63,8 +63,8 @@ $ pip install python-multipart - 最大サイズまではメモリに保持し、それを超えるとディスクに格納されるファイルです。 - そのため、画像・動画・大きなバイナリなどの大きなファイルでも、メモリを使い果たすことなくうまく動作します。 - アップロードされたファイルからメタデータを取得できます。 -- file-like な `async` インターフェースを持ちます。 -- 実際の Python の `SpooledTemporaryFile` オブジェクトを公開しており、file-like オブジェクトを期待する他のライブラリにそのまま渡せます。 +- [file-like](https://docs.python.org/3/glossary.html#term-file-like-object) な `async` インターフェースを持ちます。 +- 実際の Python の [`SpooledTemporaryFile`](https://docs.python.org/3/library/tempfile.html#tempfile.SpooledTemporaryFile) オブジェクトを公開しており、file-like オブジェクトを期待する他のライブラリにそのまま渡せます。 ### `UploadFile` { #uploadfile } @@ -72,7 +72,7 @@ $ pip install python-multipart - `filename`: アップロード時の元のファイル名を表す `str`(例: `myimage.jpg`) - `content_type`: コンテントタイプ(MIME タイプ / メディアタイプ)を表す `str`(例: `image/jpeg`) -- `file`: `SpooledTemporaryFile`file-like なオブジェクト)。これは実際の Python のファイルオブジェクトで、「file-like」オブジェクトを期待する関数やライブラリに直接渡せます。 +- `file`: [`SpooledTemporaryFile`](https://docs.python.org/3/library/tempfile.html#tempfile.SpooledTemporaryFile)([file-like](https://docs.python.org/3/glossary.html#term-file-like-object) なオブジェクト)。これは実際の Python のファイルオブジェクトで、「file-like」オブジェクトを期待する関数やライブラリに直接渡せます。 `UploadFile` には次の `async` メソッドがあります。いずれも内部で対応するファイルメソッド(内部の `SpooledTemporaryFile`)を呼び出します。 @@ -121,7 +121,7 @@ HTML フォーム(`
`)がサーバーにデータを送る方法 ただしフォームにファイルが含まれる場合は、`multipart/form-data` としてエンコードされます。`File` を使うと、**FastAPI** はボディ内の正しい部分からファイルを取得すべきであると認識します。 -これらのエンコーディングやフォームフィールドの詳細は、MDN Web Docs の POST を参照してください。 +これらのエンコーディングやフォームフィールドの詳細は、[MDN Web Docs の `POST`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST) を参照してください。 /// diff --git a/docs/ja/docs/tutorial/request-form-models.md b/docs/ja/docs/tutorial/request-form-models.md index 071867964b..62aa9e2985 100644 --- a/docs/ja/docs/tutorial/request-form-models.md +++ b/docs/ja/docs/tutorial/request-form-models.md @@ -1,12 +1,12 @@ # フォームモデル { #form-models } -FastAPI では、フォームフィールドを宣言するために Pydantic モデルを使用できます。 +FastAPI では、フォームフィールドを宣言するために **Pydantic モデル**を使用できます。 /// info | 情報 -フォームを使うには、まず `python-multipart` をインストールします。 +フォームを使うには、まず [`python-multipart`](https://github.com/Kludex/python-multipart) をインストールします。 -まず [仮想環境](../virtual-environments.md){.internal-link target=_blank} を作成して有効化し、そのうえでインストールしてください。例えば: +まず [仮想環境](../virtual-environments.md) を作成して有効化し、そのうえでインストールしてください。例えば: ```console $ pip install python-multipart diff --git a/docs/ja/docs/tutorial/request-forms-and-files.md b/docs/ja/docs/tutorial/request-forms-and-files.md index 9a4e299e91..651f07ff01 100644 --- a/docs/ja/docs/tutorial/request-forms-and-files.md +++ b/docs/ja/docs/tutorial/request-forms-and-files.md @@ -4,9 +4,9 @@ /// info | 情報 -アップロードされたファイルやフォームデータを受信するには、まず`python-multipart`をインストールします。 +アップロードされたファイルやフォームデータを受信するには、まず[`python-multipart`](https://github.com/Kludex/python-multipart)をインストールします。 -[仮想環境](../virtual-environments.md){.internal-link target=_blank}を作成し、それを有効化してから、例えば次のようにインストールしてください: +[仮想環境](../virtual-environments.md)を作成し、それを有効化してから、例えば次のようにインストールしてください: ```console $ pip install python-multipart diff --git a/docs/ja/docs/tutorial/request-forms.md b/docs/ja/docs/tutorial/request-forms.md index dda2a4bf7f..c6b2a921a6 100644 --- a/docs/ja/docs/tutorial/request-forms.md +++ b/docs/ja/docs/tutorial/request-forms.md @@ -4,9 +4,9 @@ JSONの代わりにフィールドを受け取る場合は、`Form`を使用し /// info | 情報 -フォームを使うためには、まず`python-multipart`をインストールします。 +フォームを使うためには、まず[`python-multipart`](https://github.com/Kludex/python-multipart)をインストールします。 -必ず[仮想環境](../virtual-environments.md){.internal-link target=_blank}を作成して有効化してから、例えば次のようにインストールしてください: +必ず[仮想環境](../virtual-environments.md)を作成して有効化してから、例えば次のようにインストールしてください: ```console $ pip install python-multipart @@ -56,7 +56,7 @@ HTMLフォーム(`
`)がサーバにデータを送信する方 しかし、フォームがファイルを含む場合は、`multipart/form-data`としてエンコードされます。ファイルの扱いについては次の章で説明します。 -これらのエンコーディングやフォームフィールドの詳細については、MDNPOSTのウェブドキュメントを参照してください。 +これらのエンコーディングやフォームフィールドの詳細については、[MDN の `POST` ウェブドキュメント](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST)を参照してください。 /// diff --git a/docs/ja/docs/tutorial/response-model.md b/docs/ja/docs/tutorial/response-model.md index 07dc201233..b4024e0a02 100644 --- a/docs/ja/docs/tutorial/response-model.md +++ b/docs/ja/docs/tutorial/response-model.md @@ -13,6 +13,7 @@ FastAPIはこの戻り値の型を使って以下を行います: * OpenAPIの *path operation* に、レスポンス用の **JSON Schema** を追加します。 * これは**自動ドキュメント**で使用されます。 * 自動クライアントコード生成ツールでも使用されます。 +* 返却データを Pydantic を使ってJSONに**シリアライズ**します。Pydantic は内部が**Rust**で実装されているため、**非常に高速**です。 しかし、最も重要なのは: @@ -73,9 +74,9 @@ FastAPIはこの `response_model` を使って、データのドキュメント /// info | 情報 -`EmailStr` を使用するには、最初に `email-validator` をインストールしてください。 +`EmailStr` を使用するには、最初に [`email-validator`](https://github.com/JoshData/python-email-validator) をインストールしてください。 -[仮想環境](../virtual-environments.md){.internal-link target=_blank}を作成して有効化してから、例えば次のようにインストールしてください: +[仮想環境](../virtual-environments.md)を作成して有効化してから、例えば次のようにインストールしてください: ```console $ pip install email-validator @@ -181,7 +182,7 @@ Pydanticフィールドとして有効ではないものを返し、ツール( ### レスポンスを直接返す { #return-a-response-directly } -最も一般的なケースは、[高度なドキュメントで後述する「Responseを直接返す」](../advanced/response-directly.md){.internal-link target=_blank}場合です。 +最も一般的なケースは、[高度なドキュメントで後述する「Responseを直接返す」](../advanced/response-directly.md)場合です。 {* ../../docs_src/response_model/tutorial003_02_py310.py hl[8,10:11] *} @@ -257,7 +258,7 @@ Pydanticフィールドとして有効ではないものを返し、ツール( * `response_model_exclude_defaults=True` * `response_model_exclude_none=True` -`exclude_defaults` と `exclude_none` については、Pydanticのドキュメントで説明されている通りです。 +`exclude_defaults` と `exclude_none` については、[Pydanticのドキュメント](https://docs.pydantic.dev/1.10/usage/exporting_models/#modeldict)で説明されている通りです。 /// diff --git a/docs/ja/docs/tutorial/response-status-code.md b/docs/ja/docs/tutorial/response-status-code.md index d4ac45da65..9237ac784d 100644 --- a/docs/ja/docs/tutorial/response-status-code.md +++ b/docs/ja/docs/tutorial/response-status-code.md @@ -20,7 +20,7 @@ /// info | 情報 -`status_code`は代わりに、Pythonの`http.HTTPStatus`のように、`IntEnum`を受け取ることもできます。 +`status_code`は代わりに、Pythonの[`http.HTTPStatus`](https://docs.python.org/3/library/http.html#http.HTTPStatus)のように、`IntEnum`を受け取ることもできます。 /// @@ -66,7 +66,7 @@ HTTPでは、レスポンスの一部として3桁の数字のステータスコ /// tip | 豆知識 -それぞれのステータスコードとどのコードが何のためのコードなのかについて詳細はMDN documentation about HTTP status codesを参照してください。 +それぞれのステータスコードとどのコードが何のためのコードなのかについての詳細は、[MDN のHTTPステータスコードに関するドキュメント](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status)を参照してください。 /// @@ -92,10 +92,10 @@ HTTPでは、レスポンスの一部として3桁の数字のステータスコ また、`from starlette import status`を使うこともできます。 -**FastAPI** は、`開発者の利便性を考慮して、fastapi.status`と同じ`starlette.status`を提供しています。しかし、これはStarletteから直接提供されています。 +**FastAPI** は、開発者の利便性を考慮して、fastapi.statusと同じ`starlette.status`を提供しています。しかし、これはStarletteから直接提供されています。 /// ## デフォルトの変更 { #changing-the-default } -後に、[高度なユーザーガイド](../advanced/response-change-status-code.md){.internal-link target=_blank}で、ここで宣言しているデフォルトとは異なるステータスコードを返す方法を見ていきます。 +後に、[高度なユーザーガイド](../advanced/response-change-status-code.md)で、ここで宣言しているデフォルトとは異なるステータスコードを返す方法を見ていきます。 diff --git a/docs/ja/docs/tutorial/schema-extra-example.md b/docs/ja/docs/tutorial/schema-extra-example.md index 76a6b0f949..87ee85f402 100644 --- a/docs/ja/docs/tutorial/schema-extra-example.md +++ b/docs/ja/docs/tutorial/schema-extra-example.md @@ -12,7 +12,7 @@ その追加情報は、そのモデルの出力**JSON Schema**にそのまま追加され、APIドキュメントで使用されます。 -Pydanticのドキュメント: Configurationで説明されているように、`dict`を受け取る属性`model_config`を使用できます。 +[Pydanticのドキュメント: Configuration](https://docs.pydantic.dev/latest/api/config/)で説明されているように、`dict`を受け取る属性`model_config`を使用できます。 生成されるJSON Schemaに表示したい追加データ(`examples`を含む)を含む`dict`を使って、`"json_schema_extra"`を設定できます。 @@ -145,12 +145,12 @@ JSON Schemaには`examples`がなかったため、OpenAPIは自身が改変し OpenAPIは、仕様の他の部分にも`example`と`examples`フィールドを追加しました: -* `Parameter Object`(仕様内)。FastAPIの以下で使用されました: +* [`Parameter Object`(仕様内)](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#parameter-object)。FastAPIの以下で使用されました: * `Path()` * `Query()` * `Header()` * `Cookie()` -* `Request Body Object`。仕様内の`Media Type Object`の`content`フィールド(仕様内)。FastAPIの以下で使用されました: +* [`Request Body Object`、`Media Type Object`の`content`フィールド(仕様内)](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#media-type-object)。FastAPIの以下で使用されました: * `Body()` * `File()` * `Form()` @@ -163,7 +163,7 @@ OpenAPIは、仕様の他の部分にも`example`と`examples`フィールドを ### JSON Schemaの`examples`フィールド { #json-schemas-examples-field } -しかしその後、JSON Schemaは新しいバージョンの仕様に`examples`フィールドを追加しました。 +しかしその後、JSON Schemaは新しいバージョンの仕様に[`examples`](https://json-schema.org/draft/2019-09/json-schema-validation.html#rfc.section.9.5)フィールドを追加しました。 そして、新しいOpenAPI 3.1.0は、この新しいフィールド`examples`を含む最新バージョン(JSON Schema 2020-12)に基づくようになりました。 diff --git a/docs/ja/docs/tutorial/security/first-steps.md b/docs/ja/docs/tutorial/security/first-steps.md index 5bf04386a8..e678ebce1c 100644 --- a/docs/ja/docs/tutorial/security/first-steps.md +++ b/docs/ja/docs/tutorial/security/first-steps.md @@ -26,11 +26,11 @@ /// info | 情報 -`python-multipart` パッケージは、`pip install "fastapi[standard]"` コマンドを実行すると **FastAPI** と一緒に自動的にインストールされます。 +[`python-multipart`](https://github.com/Kludex/python-multipart) パッケージは、`pip install "fastapi[standard]"` コマンドを実行すると **FastAPI** と一緒に自動的にインストールされます。 しかし、`pip install fastapi` コマンドを使用する場合、`python-multipart` パッケージはデフォルトでは含まれません。 -手動でインストールするには、[仮想環境](../../virtual-environments.md){.internal-link target=_blank}を作成して有効化し、次のコマンドでインストールしてください: +手動でインストールするには、[仮想環境](../../virtual-environments.md)を作成して有効化し、次のコマンドでインストールしてください: ```console $ pip install python-multipart @@ -45,7 +45,7 @@ $ pip install python-multipart
```console -$ fastapi dev main.py +$ fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ``` @@ -54,7 +54,7 @@ $ fastapi dev main.py ## 確認 { #check-it } -次のインタラクティブなドキュメントにアクセスしてください: http://127.0.0.1:8000/docs。 +次のインタラクティブなドキュメントにアクセスしてください: [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)。 下記のように見えるでしょう: @@ -140,7 +140,7 @@ OAuth2は、バックエンドやAPIがユーザーを認証するサーバー 相対URLを使っているので、APIが`https://example.com/`にある場合、`https://example.com/token`を参照します。しかし、APIが`https://example.com/api/v1/`にある場合は`https://example.com/api/v1/token`を参照することになります。 -相対 URL を使うことは、[プロキシの背後](../../advanced/behind-a-proxy.md){.internal-link target=_blank}のような高度なユースケースでもアプリケーションを動作させ続けるために重要です。 +相対 URL を使うことは、[プロキシの背後](../../advanced/behind-a-proxy.md)のような高度なユースケースでもアプリケーションを動作させ続けるために重要です。 /// diff --git a/docs/ja/docs/tutorial/security/oauth2-jwt.md b/docs/ja/docs/tutorial/security/oauth2-jwt.md index 0d6be90a24..9c527121ea 100644 --- a/docs/ja/docs/tutorial/security/oauth2-jwt.md +++ b/docs/ja/docs/tutorial/security/oauth2-jwt.md @@ -24,13 +24,13 @@ eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4 1週間後、トークンが期限切れとなるとどうなるでしょうか?ユーザーは認可されず、新しいトークンを得るために再びサインインしなければなりません。また、ユーザー(または第三者)がトークンを修正して有効期限を変更しようとした場合、署名が一致しないため、トークンの修正を検知できます。 -JWT トークンを使って遊んでみたいという方は、https://jwt.io をチェックしてください。 +JWT トークンを使って遊んでみたいという方は、[https://jwt.io](https://jwt.io/) をチェックしてください。 ## `PyJWT` のインストール { #install-pyjwt } PythonでJWTトークンの生成と検証を行うために、`PyJWT`をインストールする必要があります。 -[仮想環境](../../virtual-environments.md){.internal-link target=_blank}を作成し、アクティベートしてから、`pyjwt`をインストールしてください。 +[仮想環境](../../virtual-environments.md)を作成し、アクティベートしてから、`pyjwt`をインストールしてください。
@@ -46,7 +46,7 @@ $ pip install pyjwt RSAやECDSAのようなデジタル署名アルゴリズムを使用する予定がある場合は、cryptographyライブラリの依存関係`pyjwt[crypto]`をインストールしてください。 -詳細はPyJWT Installation docsで確認できます。 +詳細は[PyJWT Installation docs](https://pyjwt.readthedocs.io/en/latest/installation.html)で確認できます。 /// @@ -72,7 +72,7 @@ pwdlib は、パスワードのハッシュを処理するための優れたPyth 推奨されるアルゴリズムは「Argon2」です。 -[仮想環境](../../virtual-environments.md){.internal-link target=_blank}を作成し、アクティベートしてから、Argon2付きでpwdlibをインストールしてください。 +[仮想環境](../../virtual-environments.md)を作成し、アクティベートしてから、Argon2付きでpwdlibをインストールしてください。
@@ -200,7 +200,7 @@ IDの衝突を回避するために、ユーザーのJWTトークンを作成す ## 確認 { #check-it } -サーバーを実行し、ドキュメントに移動します:http://127.0.0.1:8000/docs。 +サーバーを実行し、ドキュメントに移動します:[http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)。 次のようなユーザーインターフェイスが表示されます: diff --git a/docs/ja/docs/tutorial/security/simple-oauth2.md b/docs/ja/docs/tutorial/security/simple-oauth2.md index c371b0acf6..842cd02e5b 100644 --- a/docs/ja/docs/tutorial/security/simple-oauth2.md +++ b/docs/ja/docs/tutorial/security/simple-oauth2.md @@ -146,7 +146,7 @@ UserInDB( /// info | 情報 -`**user_dict` のより完全な解説は、[**追加モデル**のドキュメント](../extra-models.md#about-user-in-dict){.internal-link target=_blank}を参照してください。 +`**user_dict` のより完全な解説は、[**追加モデル**のドキュメント](../extra-models.md#about-user-in-dict)を参照してください。 /// @@ -188,7 +188,7 @@ UserInDB( アクティブなユーザーの場合にのみ `current_user` を取得したいとします。 -そこで、`get_current_user` を依存関係として利用する追加の依存関係 `get_current_active_user` を作成します。 +そこで、`get_current_active_user` を依存関係として利用する追加の依存関係 `get_current_active_user` を作成します。 これら2つの依存関係は、ユーザーが存在しない、または非アクティブである場合に、HTTPエラーを返すだけです。 @@ -216,7 +216,7 @@ HTTP(エラー)ステータスコード 401「UNAUTHORIZED」は、`WWW-Auth ## 動作確認 { #see-it-in-action } -インタラクティブドキュメントを開きます: http://127.0.0.1:8000/docs。 +インタラクティブドキュメントを開きます: [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)。 ### 認証 { #authenticate } diff --git a/docs/ja/docs/tutorial/sql-databases.md b/docs/ja/docs/tutorial/sql-databases.md index 930e433de4..13c71fdb2a 100644 --- a/docs/ja/docs/tutorial/sql-databases.md +++ b/docs/ja/docs/tutorial/sql-databases.md @@ -2,9 +2,9 @@ FastAPI は SQL(リレーショナル)データベースの使用を必須にはしません。必要であれば、任意のデータベースを使用できます。 -ここでは SQLModel を使った例を見ていきます。 +ここでは [SQLModel](https://sqlmodel.tiangolo.com/) を使った例を見ていきます。 -SQLModel は SQLAlchemy と Pydantic の上に構築されています。FastAPI と同じ作者により、SQL データベースを使う必要がある FastAPI アプリに最適になるように作られています。 +SQLModel は [SQLAlchemy](https://www.sqlalchemy.org/) と Pydantic の上に構築されています。FastAPI と同じ作者により、SQL データベースを使う必要がある FastAPI アプリに最適になるように作られています。 /// tip | 豆知識 @@ -26,15 +26,15 @@ SQLModel は SQLAlchemy をベースにしているため、SQLAlchemy がサポ /// tip | 豆知識 -フロントエンドやその他のツールを含む、FastAPI と PostgreSQL の公式プロジェクトジェネレーターがあります: https://github.com/fastapi/full-stack-fastapi-template +フロントエンドやその他のツールを含む、FastAPI と PostgreSQL の公式プロジェクトジェネレーターがあります: [https://github.com/fastapi/full-stack-fastapi-template](https://github.com/fastapi/full-stack-fastapi-template) /// -これはとてもシンプルで短いチュートリアルです。データベースや SQL、より高度な機能について学びたい場合は、SQLModel のドキュメントをご覧ください。 +これはとてもシンプルで短いチュートリアルです。データベースや SQL、より高度な機能について学びたい場合は、[SQLModel のドキュメント](https://sqlmodel.tiangolo.com/)をご覧ください。 ## `SQLModel` のインストール { #install-sqlmodel } -まずは [仮想環境](../virtual-environments.md){.internal-link target=_blank} を作成・有効化し、`sqlmodel` をインストールします: +まずは [仮想環境](../virtual-environments.md) を作成・有効化し、`sqlmodel` をインストールします:
@@ -65,7 +65,7 @@ $ pip install sqlmodel * `Field(primary_key=True)` は `id` が SQL データベースのプライマリキーであることを SQLModel に伝えます(SQL のプライマリキーについては SQLModel ドキュメントを参照してください)。 - 注: プライマリキーのフィールドには `int | None` を使っています。これは Python コード内で `id=None` のように「`id` なしでオブジェクトを作成」し、保存時にデータベースが生成することを想定するためです。SQLModel はデータベースが `id` を提供することを理解し、スキーマでは「NULL 不可の `INTEGER` 列」を定義します。詳細は SQLModel のプライマリキーに関するドキュメント を参照してください。 + 注: プライマリキーのフィールドには `int | None` を使っています。これは Python コード内で `id=None` のように「`id` なしでオブジェクトを作成」し、保存時にデータベースが生成することを想定するためです。SQLModel はデータベースが `id` を提供することを理解し、スキーマでは「NULL 不可の `INTEGER` 列」を定義します。詳細は [SQLModel のプライマリキーに関するドキュメント](https://sqlmodel.tiangolo.com/tutorial/create-db-and-table/#primary-key-id) を参照してください。 * `Field(index=True)` は、この列に対して SQL のインデックスを作成するよう SQLModel に指示します。これにより、この列でフィルタしてデータを読む場合に検索が高速になります。 @@ -111,7 +111,7 @@ SQLModel の `engine`(内部的には SQLAlchemy の `engine`)は、デー /// tip | 豆知識 -SQLModel は Alembic をラップしたマイグレーションユーティリティを提供予定ですが、現時点では Alembic を直接使えます。 +SQLModel は Alembic をラップしたマイグレーションユーティリティを提供予定ですが、現時点では [Alembic](https://alembic.sqlalchemy.org/en/latest/) を直接使えます。 /// @@ -152,7 +152,7 @@ SQLModel は Alembic をラップしたマイグレーションユーティリ
```console -$ fastapi dev main.py +$ fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ``` @@ -337,7 +337,7 @@ SQLModel では継承を使って、あらゆるケースでフィールドの
```console -$ fastapi dev main.py +$ fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ``` @@ -352,6 +352,6 @@ $ fastapi dev main.py ## まとめ { #recap } -SQLModel を使って SQL データベースとやり取りし、データモデルとテーブルモデルでコードを簡潔にできます。 +[SQLModel](https://sqlmodel.tiangolo.com/) を使って SQL データベースとやり取りし、データモデルとテーブルモデルでコードを簡潔にできます。 -さらに多くを学ぶには SQLModel のドキュメントをご覧ください。FastAPI と SQLModel を使うチュートリアル もあります。🚀 +さらに多くを学ぶには SQLModel のドキュメントをご覧ください。[FastAPI と SQLModel を使うチュートリアル](https://sqlmodel.tiangolo.com/tutorial/fastapi/) もあります。🚀 diff --git a/docs/ja/docs/tutorial/static-files.md b/docs/ja/docs/tutorial/static-files.md index 52e28d6b05..81f281c2eb 100644 --- a/docs/ja/docs/tutorial/static-files.md +++ b/docs/ja/docs/tutorial/static-files.md @@ -23,7 +23,7 @@ これは、マウントされたアプリケーションが完全に独立しているため、`APIRouter` とは異なります。メインアプリケーションのOpenAPIとドキュメントには、マウントされたアプリケーションの内容などは含まれません。 -これについて詳しくは、[高度なユーザーガイド](../advanced/index.md){.internal-link target=_blank} をご覧ください。 +これについて詳しくは、[高度なユーザーガイド](../advanced/index.md) をご覧ください。 ## 詳細 { #details } @@ -37,4 +37,4 @@ ## より詳しい情報 { #more-info } -詳細とオプションについては、Starletteの静的ファイルに関するドキュメントを確認してください。 +詳細とオプションについては、[Starletteの静的ファイルに関するドキュメント](https://www.starlette.dev/staticfiles/)を確認してください。 diff --git a/docs/ja/docs/tutorial/testing.md b/docs/ja/docs/tutorial/testing.md index b09f1af723..0277d73b74 100644 --- a/docs/ja/docs/tutorial/testing.md +++ b/docs/ja/docs/tutorial/testing.md @@ -1,18 +1,18 @@ # テスト { #testing } -Starlette のおかげで、**FastAPI** アプリケーションのテストは簡単で楽しいものになっています。 +[Starlette](https://www.starlette.dev/testclient/) のおかげで、**FastAPI** アプリケーションのテストは簡単で楽しいものになっています。 -HTTPX がベースで、さらにその設計は Requests をベースにしているため、とても馴染みがあり直感的です。 +[HTTPX](https://www.python-httpx.org) がベースで、さらにその設計は Requests をベースにしているため、とても馴染みがあり直感的です。 -これを使用すると、**FastAPI** と共に pytest を直接利用できます。 +これを使用すると、**FastAPI** と共に [pytest](https://docs.pytest.org/) を直接利用できます。 ## `TestClient` を使用 { #using-testclient } -/// info | 情報 +/// info -`TestClient` を使用するには、まず `httpx` をインストールします。 +`TestClient` を使用するには、まず [`httpx`](https://www.python-httpx.org) をインストールします。 -[仮想環境](../virtual-environments.md){.internal-link target=_blank} を作成し、それを有効化してから、例えば以下のようにインストールしてください: +[仮想環境](../virtual-environments.md) を作成し、それを有効化してから、例えば以下のようにインストールしてください: ```console $ pip install httpx @@ -32,7 +32,7 @@ $ pip install httpx {* ../../docs_src/app_testing/tutorial001_py310.py hl[2,12,15:18] *} -/// tip | 豆知識 +/// tip テスト関数は `async def` ではなく、通常の `def` であることに注意してください。 @@ -50,9 +50,9 @@ $ pip install httpx /// -/// tip | 豆知識 +/// tip -FastAPIアプリケーションへのリクエストの送信とは別に、テストで `async` 関数 (非同期データベース関数など) を呼び出したい場合は、高度なチュートリアルの[Async Tests](../advanced/async-tests.md){.internal-link target=_blank} を参照してください。 +FastAPIアプリケーションへのリクエストの送信とは別に、テストで `async` 関数 (非同期データベース関数など) を呼び出したい場合は、高度なチュートリアルの[Async Tests](../advanced/async-tests.md) を参照してください。 /// @@ -64,7 +64,7 @@ FastAPIアプリケーションへのリクエストの送信とは別に、テ ### **FastAPI** アプリファイル { #fastapi-app-file } -[Bigger Applications](bigger-applications.md){.internal-link target=_blank} で説明されている、次のようなファイル構成があるとします: +[Bigger Applications](bigger-applications.md) で説明されている、次のようなファイル構成があるとします: ``` . @@ -142,13 +142,13 @@ FastAPIアプリケーションへのリクエストの送信とは別に、テ * *ヘッダー* を渡すには、`headers` パラメータに `dict` を渡します。 * *cookies* の場合、 `cookies` パラメータに `dict` です。 -(`httpx` または `TestClient` を使用して) バックエンドにデータを渡す方法の詳細は、HTTPXのドキュメントを確認してください。 +(`httpx` または `TestClient` を使用して) バックエンドにデータを渡す方法の詳細は、[HTTPXのドキュメント](https://www.python-httpx.org)を確認してください。 -/// info | 情報 +/// info `TestClient` は、Pydanticモデルではなく、JSONに変換できるデータを受け取ることに注意してください。 -テストにPydanticモデルがあり、テスト中にそのデータをアプリケーションに送信したい場合は、[JSON互換エンコーダ](encoder.md){.internal-link target=_blank} で説明されている `jsonable_encoder` が利用できます。 +テストにPydanticモデルがあり、テスト中にそのデータをアプリケーションに送信したい場合は、[JSON互換エンコーダ](encoder.md) で説明されている `jsonable_encoder` が利用できます。 /// @@ -156,7 +156,7 @@ FastAPIアプリケーションへのリクエストの送信とは別に、テ その後、`pytest` をインストールするだけです。 -[仮想環境](../virtual-environments.md){.internal-link target=_blank} を作成し、それを有効化してから、例えば以下のようにインストールしてください: +[仮想環境](../virtual-environments.md) を作成し、それを有効化してから、例えば以下のようにインストールしてください:
diff --git a/docs/ja/docs/virtual-environments.md b/docs/ja/docs/virtual-environments.md index 94af6ddae2..21b7cd4727 100644 --- a/docs/ja/docs/virtual-environments.md +++ b/docs/ja/docs/virtual-environments.md @@ -21,7 +21,7 @@ Pythonプロジェクトの作業では、**仮想環境**(または類似の /// info | 情報 このページでは、**仮想環境**の使用方法と、そのはたらきについて説明します。 -もし**すべてを管理するツール**(Pythonのインストールも含む)を導入する準備ができているなら、uv をお試しください。 +もし**すべてを管理するツール**(Pythonのインストールも含む)を導入する準備ができているなら、[uv](https://github.com/astral-sh/uv) をお試しください。 /// @@ -83,7 +83,7 @@ $ python -m venv .venv //// tab | `uv` -もし `uv` をインストール済みなら、仮想環境を作成するために `uv` を使うこともできます。 +もし [`uv`](https://github.com/astral-sh/uv) をインストール済みなら、仮想環境を作成するために `uv` を使うこともできます。
@@ -147,7 +147,7 @@ $ .venv\Scripts\Activate.ps1 //// tab | Windows Bash -もしWindowsでBashを使用している場合 (Git Bashなど): +もしWindowsでBashを使用している場合 ([Git Bash](https://gitforwindows.org/)など):
@@ -213,7 +213,7 @@ C:\Users\user\code\awesome-project\.venv\Scripts\python /// tip | 豆知識 -もし `uv` を使用している場合は、 `pip` の代わりに `uv` を使ってインストールを行うため、 `pip` をアップグレードする必要はありません 😎。 +もし [`uv`](https://github.com/astral-sh/uv) を使用している場合は、 `pip` の代わりに `uv` を使ってインストールを行うため、 `pip` をアップグレードする必要はありません 😎。 /// @@ -265,7 +265,7 @@ $ python -m ensurepip --upgrade /// tip | 豆知識 -もし `uv` を使用して仮想環境を作成した場合、すでにこの作業は済んでいるので、この手順をスキップできます 😎。 +もし [`uv`](https://github.com/astral-sh/uv) を使用して仮想環境を作成した場合、すでにこの作業は済んでいるので、この手順をスキップできます 😎。 /// @@ -337,7 +337,7 @@ $ pip install "fastapi[standard]" //// tab | `uv` -もし `uv` を使用できるなら: +もし [`uv`](https://github.com/astral-sh/uv) を使用できるなら:
@@ -369,7 +369,7 @@ $ pip install -r requirements.txt //// tab | `uv` -もし `uv` を使用できるなら: +もし [`uv`](https://github.com/astral-sh/uv) を使用できるなら:
@@ -413,8 +413,8 @@ Hello World 設定例: -* VS Code -* PyCharm +* [VS Code](https://code.visualstudio.com/docs/python/environments#_select-and-activate-an-environment) +* [PyCharm](https://www.jetbrains.com/help/pycharm/creating-virtual-environment.html) /// tip | 豆知識 @@ -452,7 +452,7 @@ $ deactivate ## なぜ仮想環境? { #why-virtual-environments } -FastAPIを使った作業をするには、Python のインストールが必要です。 +FastAPIを使った作業をするには、[Python](https://www.python.org/) のインストールが必要です。 それから、FastAPIや、使用したいその他の**パッケージ**を**インストール**する必要があります。 @@ -561,7 +561,7 @@ $ pip install "fastapi[standard]"
-FastAPIのコードを含む圧縮ファイルが、通常は PyPI からダウンロードされます。 +FastAPIのコードを含む圧縮ファイルが、通常は [PyPI](https://pypi.org/project/fastapi/) からダウンロードされます。 また、FastAPIが依存する他のパッケージも**ダウンロード**されます。 @@ -624,7 +624,7 @@ $ .venv\Scripts\Activate.ps1 //// tab | Windows Bash -あるいは、WindowsでBashを使用している場合 (Git Bashなど): +あるいは、WindowsでBashを使用している場合 ([Git Bash](https://gitforwindows.org/)など):
@@ -636,13 +636,13 @@ $ source .venv/Scripts/activate //// -これによって、いくつかの [環境変数](environment-variables.md){.internal-link target=_blank} が作成・修正され、次に実行されるコマンドで使用できるようになります。 +これによって、いくつかの [環境変数](environment-variables.md) が作成・修正され、次に実行されるコマンドで使用できるようになります。 これらの環境変数のひとつに、 `PATH` 変数があります。 /// tip | 豆知識 -`PATH` 変数についての詳細は [環境変数](environment-variables.md#path-environment-variable){.internal-link target=_blank} を参照してください。 +`PATH` 変数についての詳細は [環境変数](environment-variables.md#path-environment-variable) を参照してください。 /// @@ -835,7 +835,7 @@ I solemnly swear 🐺 仮想環境、パッケージの依存関係(requirements)、プロジェクトの管理には、多くの**代替手段**があります。 -準備が整い、パッケージの依存関係、仮想環境など**プロジェクト全体の管理**ツールを使いたいと考えたら、uv を試してみることをおすすめします。 +準備が整い、パッケージの依存関係、仮想環境など**プロジェクト全体の管理**ツールを使いたいと考えたら、[uv](https://github.com/astral-sh/uv) を試してみることをおすすめします。 `uv` では以下のような多くのことができます: