Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

🌐 Add Japanese translation for docs/ja/docs/tutorial/body-nested-models.md #1930

Merged
Merged
Show file tree
Hide file tree
Changes from 14 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/en/mkdocs.yml
Expand Up @@ -22,6 +22,7 @@ nav:
- Languages:
- en: /
- es: /es/
- ja: /ja/
- it: /it/
- pt: /pt/
- ru: /ru/
Expand Down
1 change: 1 addition & 0 deletions docs/es/mkdocs.yml
Expand Up @@ -22,6 +22,7 @@ nav:
- Languages:
- en: /
- es: /es/
- ja: /ja/
- it: /it/
- pt: /pt/
- ru: /ru/
Expand Down
443 changes: 443 additions & 0 deletions docs/ja/docs/index.md

Large diffs are not rendered by default.

244 changes: 244 additions & 0 deletions docs/ja/docs/tutorial/body-nested-models.md
@@ -0,0 +1,244 @@
# ボディ - 入れ子モデル

**FastAPI** を使用すると、深い入れ子になった任意のモデルを定義、検証、文書化、使用することができます(Pydanticのおかげです)。

## リストのフィールド

属性をサブタイプとして定義することができます。例えば、Pythonの`list`は以下のように定義できます:

```Python hl_lines="12"
{!../../../docs_src/body_nested_models/tutorial001.py!}
```

これにより、各項目の型は宣言されていませんが、`tags`はある項目のリストになります。

## サブタイプを持つリストのフィールド

しかし、Pythonにはサブタイプを使ってリストを宣言する方法があります:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

タイプパラメータを持つリストのフィールド

しかし、Pythonには型や「タイプパラメータ」を使ってリストを宣言する方法があります:
(this sentences is updated)


### typingの`List`をインポート

まず、Pythonの標準の`typing`モジュールから`List`をインポートします:

```Python hl_lines="1"
{!../../../docs_src/body_nested_models/tutorial002.py!}
```

### サブタイプを持つ`List`の宣言
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This section is updated. Could you check it and translate the latest document?


`list`や`dict`、`tuple`のようなサブタイプを持つ型を宣言します:

* `typing`モジュールからそれらをインストールします。
* サブタイプを角括弧(`[`と`]`)を使って「型引数」として渡します:

```Python
from typing import List

my_list: List[str]
```

型宣言の標準的なPythonの構文はこれだけです。

サブタイプを持つモデルの属性にも同じ標準の構文を使用してください。

そのため、以下の例では`tags`を具体的な「文字列のリスト」にすることができます:

```Python hl_lines="14"
{!../../../docs_src/body_nested_models/tutorial002.py!}
```

## セット型

しかし、よく考えてみると、タグは繰り返すべきではなく、おそらくユニークな文字列になるのではないかと気付いたとします。

そして、Pythonにはユニークな項目のセットのための特別なデータ型`set`があります。

そのため、以下のように、`Set`をインポートして`str`の`set`として`tags`を宣言することができます:

```Python hl_lines="1 14"
{!../../../docs_src/body_nested_models/tutorial003.py!}
```

これを使えば、データが重複しているリクエストを受けた場合でも、ユニークな項目のセットに変換されます。

そして、そのデータを出力すると、たとえソースに重複があったとしても、固有の項目のセットとして出力されます。

また、それに応じて注釈をつけたり、文書化したりします。

## 入れ子のモデル

Pydanticモデルの各属性には型があります。

しかし、その型はそれ自体が別のPydanticモデルである可能性があります。

そのため、特定の属性名、型、バリデーションを指定して、深くネストしたJSON`object`を宣言することができます。

すべては、任意の入れ子にされています。

### サブモデルの定義

例えば、`Image`モデルを定義することができます:

```Python hl_lines="9 10 11"
{!../../../docs_src/body_nested_models/tutorial004.py!}
```

### サブモデルの型として使用
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

サブモデルを型として使用


そして、それを属性の型として使用することができます:

```Python hl_lines="20"
{!../../../docs_src/body_nested_models/tutorial004.py!}
```

これは **FastAPI** が以下のようなボディを期待することを意味します:

```JSON
{
"name": "Foo",
"description": "The pretender",
"price": 42.0,
"tax": 3.2,
"tags": ["rock", "metal", "bar"],
"image": {
"url": "http://example.com/baz.jpg",
"name": "The Foo live"
}
}
```

繰り返しになりますが、**FastAPI** を使用して、その宣言を行うだけで以下のようになります:

* 入れ子になったモデルでもエディタのサポート(補完など)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

繰り返しになりますが、FastAPI を使用して、その宣言を行うだけで以下のような恩恵を受けられます:

  • 入れ子になったモデルでも対応可能なエディタのサポート(補完など)

* データ変換
* データの検証
* 自動文書化

## 特殊な型とバリデーション

`str`や`int`、`float`のような通常の単数型の他にも、`str`を継承したより複雑な単数型を使うこともできます。

すべてのオプションをみるには、<a href="https://pydantic-docs.helpmanual.io/usage/types/" class="external-link" target="_blank">Pydanticのエキゾチック な型</a>のドキュメントを確認してください。次の章でいくつかの例をみることができます。

例えば、`Image`モデルのように`url`フィールドがある場合、`str`の代わりにPydanticの`HttpUrl`を指定することができます:

```Python hl_lines="4 10"
{!../../../docs_src/body_nested_models/tutorial005.py!}
```

文字列は有効なURLであることが確認され、そのようにJSONスキーマ・OpenAPIで文書化されます。

## サブモデルのリストを持つ属性

Pydanticモデルを`list`や`set`などのサブタイプとして使用することもできます:

```Python hl_lines="20"
{!../../../docs_src/body_nested_models/tutorial006.py!}
```

これは、次のようなJSONボディを期待します(変換、検証、ドキュメントなど):

```JSON hl_lines="11"
{
"name": "Foo",
"description": "The pretender",
"price": 42.0,
"tax": 3.2,
"tags": [
"rock",
"metal",
"bar"
],
"images": [
{
"url": "http://example.com/baz.jpg",
"name": "The Foo live"
},
{
"url": "http://example.com/dave.jpg",
"name": "The Baz"
}
]
}
```

!!! info "情報"
`images`キーが画像オブジェクトのリストを持つようになったことに注目してください。

## 深く入れ子にされたモデル

深く入れ子になった任意のモデルを定義することができます:

```Python hl_lines="9 14 20 23 27"
{!../../../docs_src/body_nested_models/tutorial007.py!}
```

!!! info "情報"
`Offer`は`Item`のリストであり、オプションの`Image`のリストを持っていることに注目してください。

## 純粋なリストのボディ

期待するJSONボディのトップレベルの値がJSON`array`(Pythonの`list`)であれば、Pydanticモデルと同じように、関数のパラメータで型を宣言することができます:

```Python
images: List[Image]
```

以下のように:

```Python hl_lines="15"
{!../../../docs_src/body_nested_models/tutorial008.py!}
```

## あらゆる場所でのエディタサポート

エディタのサポートもどこでも受けることができます。

以下のようにリストの中の項目でも:

<img src="https://fastapi.tiangolo.com/img/tutorial/body-nested-models/image01.png">

Pydanticモデルではなく、`dict`を直接使用している場合はこのようなエディタのサポートは得られません。

しかし、それらについて心配する必要はありません。入力された辞書は自動的に変換され、出力も自動的にJSONに変換されます。

## 任意の`dict`のボディ

また、ある型のキーと別の型の値を持つ`dict`としてボディを宣言することもできます。

有効なフィールド・属性名を事前に知る必要がありません(Pydanticモデルの場合のように)。

これは、まだ知らないキーを受け取りたいときに便利だと思います。

---

他にも、`int`のように他の型のキーを持ちたい場合などに便利です。

それをここで見ていきましょう。

この場合、`int`のキーと`float`の値を持つものであれば、どんな`dict`でも受け入れることができます:

```Python hl_lines="15"
{!../../../docs_src/body_nested_models/tutorial009.py!}
```

!!! tip "豆知識"
JSONはキーとして`str`しかサポートしていないことに注意してください。

しかしPydanticには自動データ変換機能があります。

これは、APIクライアントがキーとして文字列しか送信できなくても、それらの文字列に純粋な整数が含まれている限り、Pydanticが変換して検証することを意味します。

そして、`weights`として受け取る`dict`は、実際には`int`のキーと`float`の値を持つことになります。

## まとめ

**FastAPI** を使用すると、Pydanticモデルが提供する最大限の柔軟性を持ちながら、コードをシンプルに短く、エレガントに保つことができます。

以下のような利点があります:

* エディタのサポート(どこでも補完!)
* データ変換(別名:構文解析・シリアライズ)
* データの検証
* スキーマ文書
* 自動文書化
81 changes: 81 additions & 0 deletions docs/ja/docs/tutorial/index.md
@@ -0,0 +1,81 @@
# チュートリアル - ユーザーガイド - はじめに

このチュートリアルは**FastAPI**のほぼすべての機能の使い方を段階的に紹介します。

各セクションは前のセクションを踏まえた内容になっています。しかし、トピックごとに分割されているので、特定のAPIの要求を満たすようなトピックに直接たどり着けるようになっています。

また、将来的にリファレンスとして機能するように構築されています。

従って、後でこのチュートリアルに戻ってきて必要なものを確認できます。

## コードを実行する

すべてのコードブロックをコピーして直接使用できます(実際にテストされたPythonファイルです)。

いずれかの例を実行するには、コードを `main.py`ファイルにコピーし、` uvicorn`を次のように起動します:

<div class="termy">

```console
$ uvicorn main:app --reload

<span style="color: green;">INFO</span>: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
<span style="color: green;">INFO</span>: Started reloader process [28720]
<span style="color: green;">INFO</span>: Started server process [28722]
<span style="color: green;">INFO</span>: Waiting for application startup.
<span style="color: green;">INFO</span>: Application startup complete.
```

</div>

コードを記述またはコピーし、編集してローカルで実行することを**強くお勧めします**。

また、エディターで使用することで、書く必要のあるコードの少なさ、すべての型チェック、自動補完などのFastAPIの利点を実感できます。

---

## FastAPIをインストールする

最初のステップは、FastAPIのインストールです。

チュートリアルのために、すべてのオプションの依存関係と機能をインストールしたいとき:

<div class="termy">

```console
$ pip install fastapi[all]

---> 100%
```

</div>

...これには、コードを実行するサーバーとして使用できる `uvicorn`も含まれます。

!!! note "備考"
パーツ毎にインストールすることも可能です。

以下は、アプリケーションを本番環境にデプロイする際に行うであろうものです:

```
pip install fastapi
```

また、サーバーとして動作するように`uvicorn` をインストールします:
Also install `uvicorn` to work as the server:

```
pip install uvicorn
```

そして、使用したい依存関係をそれぞれ同様にインストールします。

## 高度なユーザーガイド

**高度なユーザーガイド**もあり、**チュートリアル - ユーザーガイド**の後で読むことができます。

**高度なユーザーガイド**は**チュートリアル - ユーザーガイド**に基づいており、同じ概念を使用し、いくつかの追加機能を紹介しています。

ただし、最初に**チュートリアル - ユーザーガイド**(現在読んでいる内容)をお読みください。

**チュートリアル-ユーザーガイド**だけで完全なアプリケーションを構築できるように設計されています。加えて、**高度なユーザーガイド**の中からニーズに応じたアイデアを使用して、様々な拡張が可能です。