FastAPI¶
🌐 Translation by AI and humans
This translation was made by AI guided by humans. 🤝
It could have mistakes of misunderstanding the original meaning, or looking unnatural, etc. 🤖
You can improve this translation by helping us guide the AI LLM better.
FastAPI フレームワーク、高パフォーマンス、学びやすい、素早くコーディングできる、本番運用に対応
ドキュメント: https://fastapi.tiangolo.com
ソースコード: https://github.com/fastapi/fastapi
FastAPI は、Python の標準である型ヒントに基づいて Python で API を構築するための、モダンで、高速(高パフォーマンス)な Web フレームワークです。
主な特徴:
- 高速: NodeJS や Go 並みのとても高いパフォーマンス(Starlette と Pydantic のおかげです)。 利用可能な最も高速な Python フレームワークの一つです。
- 高速なコーディング: 開発速度を約 200%〜300% 向上させます。*
- 少ないバグ: 開発者起因のヒューマンエラーを約 40% 削減します。*
- 直感的: 素晴らしいエディタサポート。あらゆる場所で 補完 が使えます。デバッグ時間を削減します。
- 簡単: 簡単に利用・習得できるようにデザインされています。ドキュメントを読む時間を削減します。
- 短い: コードの重複を最小限にします。各パラメータ宣言から複数の機能を得られます。バグも減ります。
- 堅牢性: 自動対話型ドキュメントにより、本番環境向けのコードが得られます。
- Standards-based: API のオープンスタンダードに基づいており(そして完全に互換性があります)、OpenAPI(以前は Swagger として知られていました)や JSON Schema をサポートします。
* 本番アプリケーションを構築している社内開発チームのテストに基づく見積もりです。
Sponsors¶
Keystone Sponsor¶
Gold and Silver Sponsors¶
評価¶
"[...] 最近 FastAPI を使っています。 [...] 実際に私のチームの全ての Microsoft の機械学習サービス で使用する予定です。 そのうちのいくつかのコアな Windows 製品と Office 製品に統合されつつあります。"
"FastAPIライブラリを採用し、クエリで 予測値 を取得できる REST サーバを構築しました。 [for Ludwig]"
"Netflix は、危機管理オーケストレーションフレームワーク、Dispatch のオープンソースリリースを発表できることをうれしく思います。 [built with FastAPI]"
"私は FastAPI にワクワクしています。 めちゃくちゃ楽しいです!"
"正直、あなたが作ったものは超堅実で洗練されているように見えます。いろんな意味で、それは私が Hug にそうなってほしかったものです。誰かがそれを作るのを見るのは本当に刺激的です。"
"REST API を構築するための モダンなフレームワーク を学びたい方は、FastAPI [...] をチェックしてみてください。 [...] 高速で、使用・習得が簡単です [...]"
"私たちの API は FastAPI に切り替えました [...] きっと気に入ると思います [...]"
"本番運用の Python API を構築したい方には、FastAPI を強くおすすめします。美しく設計されており、使いやすく、高いスケーラビリティがあります。私たちの API ファースト開発戦略の 主要コンポーネント となり、Virtual TAC Engineer などの多くの自動化やサービスを推進しています。"
FastAPI ミニドキュメンタリー¶
2025 年末に公開された FastAPI ミニドキュメンタリーがあります。オンラインで視聴できます:
Typer、CLI 版 FastAPI¶
Web API の代わりにターミナルで使用する CLI アプリを構築する場合は、Typer を確認してください。
Typer は FastAPI の弟分です。そして、CLI 版 FastAPI を意図しています。 ⌨️ 🚀
必要条件¶
FastAPI は巨人の肩の上に立っています。
インストール¶
virtual environment を作成して有効化し、それから FastAPI をインストールします。
$ pip install "fastapi[standard]"
---> 100%
注: すべてのターミナルで動作するように、"fastapi[standard]" は必ずクォートで囲んでください。
アプリケーション例¶
作成¶
main.py ファイルを作成し、以下のコードを入力します。
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str | None = None):
return {"item_id": item_id, "q": q}
または async def を使います...
コードで async / await を使用する場合は、async def を使います。
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str | None = None):
return {"item_id": item_id, "q": q}
注:
わからない場合は、ドキュメントの async と await の "In a hurry?" セクションを確認してください。
実行¶
以下のコマンドでサーバーを起動します。
$ fastapi dev main.py
╭────────── FastAPI CLI - Development mode ───────────╮
│ │
│ Serving at: http://127.0.0.1:8000 │
│ │
│ API docs: http://127.0.0.1:8000/docs │
│ │
│ Running in development mode, for production use: │
│ │
│ fastapi run │
│ │
╰─────────────────────────────────────────────────────╯
INFO: Will watch for changes in these directories: ['/home/user/code/awesomeapp']
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [2248755] using WatchFiles
INFO: Started server process [2248757]
INFO: Waiting for application startup.
INFO: Application startup complete.
fastapi dev main.py コマンドについて
fastapi dev コマンドは main.py ファイルを読み取り、その中の FastAPI アプリを検出し、Uvicorn を使用してサーバーを起動します。
デフォルトでは、fastapi dev はローカル開発向けに自動リロードを有効にして起動します。
詳しくは FastAPI CLI docs を参照してください。
動作確認¶
ブラウザで http://127.0.0.1:8000/items/5?q=somequery を開きます。
以下の JSON のレスポンスが確認できます。
{"item_id": 5, "q": "somequery"}
すでに以下の API が作成されています。
- パス
/と/items/{item_id}で HTTP リクエストを受け取ります。 - 両方の パス は
GET操作(HTTP メソッド としても知られています)を取ります。 - パス
/items/{item_id}はintであるべき パスパラメータitem_idを持ちます。 - パス
/items/{item_id}はオプションのstrクエリパラメータqを持ちます。
自動対話型 API ドキュメント¶
次に、http://127.0.0.1:8000/docs にアクセスします。
自動対話型 API ドキュメントが表示されます(Swagger UI が提供しています)。

代替 API ドキュメント¶
次に、http://127.0.0.1:8000/redoc にアクセスします。
代替の自動ドキュメントが表示されます(ReDoc が提供しています)。

アップグレード例¶
次に、PUT リクエストからボディを受け取るために main.py ファイルを修正しましょう。
Pydantic によって、標準的な Python の型を使ってボディを宣言します。
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
price: float
is_offer: bool | None = None
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str | None = None):
return {"item_id": item_id, "q": q}
@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
return {"item_name": item.name, "item_id": item_id}
fastapi dev サーバーは自動でリロードされるはずです。
自動対話型 API ドキュメントのアップグレード¶
次に、http://127.0.0.1:8000/docs にアクセスします。
- 自動対話型 API ドキュメントは新しいボディも含めて自動でアップデートされます。

- 「Try it out」ボタンをクリックします。パラメータを入力して API と直接やりとりできます。

- 次に、「Execute」ボタンをクリックします。ユーザーインターフェースは API と通信し、パラメータを送信し、結果を取得して画面に表示します。

代替 API ドキュメントのアップグレード¶
次に、http://127.0.0.1:8000/redoc にアクセスします。
- 代替のドキュメントにも新しいクエリパラメータやボディが反映されます。

まとめ¶
要約すると、関数のパラメータとして、パラメータやボディなどの型を 一度だけ 宣言します。
標準的な最新の Python の型を使います。
新しい構文や特定のライブラリのメソッドやクラスなどを覚える必要はありません。
単なる標準的な Python です。
例えば、int の場合:
item_id: int
または、より複雑な Item モデルの場合:
item: Item
...そして、この一度の宣言で、以下のようになります。
- 以下を含むエディタサポート:
- 補完。
- 型チェック。
- データの検証:
- データが無効な場合に自動で明確なエラーを返します。
- 深い入れ子になった JSON オブジェクトでも検証が可能です。
- 入力データの 変換: ネットワークから Python のデータや型へ。以下から読み取ります:
- JSON。
- パスパラメータ。
- クエリパラメータ。
- Cookie。
- ヘッダー。
- フォーム。
- ファイル。
- 出力データの 変換: Python のデータや型からネットワークデータへ(JSON として)変換します:
- Python の型(
str、int、float、bool、listなど)の変換。 datetimeオブジェクト。UUIDオブジェクト。- データベースモデル。
- ...などなど。
- Python の型(
- 2 つの代替ユーザーインターフェースを含む自動対話型 API ドキュメント:
- Swagger UI。
- ReDoc。
前のコード例に戻ると、FastAPI は次のように動作します。
GETおよびPUTリクエストのパスにitem_idがあることを検証します。GETおよびPUTリクエストに対してitem_idがint型であることを検証します。- そうでない場合、クライアントは有用で明確なエラーを受け取ります。
GETリクエストに対して、qという名前のオプションのクエリパラメータ(http://127.0.0.1:8000/items/foo?q=somequeryのような)が存在するかどうかを調べます。qパラメータは= Noneで宣言されているため、オプションです。Noneがなければ必須になります(PUTの場合のボディと同様です)。
PUTリクエストを/items/{item_id}に送信する場合、ボディを JSON として読み込みます:- 必須の属性
nameがあり、strであるべきことを確認します。 - 必須の属性
priceがあり、floatでなければならないことを確認します。 - オプションの属性
is_offerがあり、存在する場合はboolであるべきことを確認します。 - これらはすべて、深くネストされた JSON オブジェクトに対しても動作します。
- 必須の属性
- JSON への/からの変換を自動的に行います。
- OpenAPI ですべてを文書化し、以下で利用できます:
- 対話型ドキュメントシステム。
- 多くの言語に対応した自動クライアントコード生成システム。
- 2 つの対話型ドキュメント Web インターフェースを直接提供します。
まだ表面的な部分に触れただけですが、仕組みはすでにイメージできているはずです。
以下の行を変更してみてください。
return {"item_name": item.name, "item_id": item_id}
...以下の:
... "item_name": item.name ...
...を:
... "item_price": item.price ...
...に変更し、エディタが属性を自動補完し、その型を知ることを確認してください。

より多くの機能を含む、より完全な例については、Tutorial - User Guide を参照してください。
ネタバレ注意: tutorial - user guide には以下が含まれます。
- ヘッダー、Cookie、フォームフィールド、ファイルなど、他のさまざまな場所からの パラメータ 宣言。
maximum_lengthやregexのような 検証制約 を設定する方法。- 非常に強力で使いやすい 依存性注入 システム。
- JWT トークンを用いた OAuth2 や HTTP Basic 認証のサポートを含む、セキュリティと認証。
- 深くネストされた JSON モデルを宣言するための、より高度な(しかし同様に簡単な)手法(Pydantic のおかげです)。
- Strawberry および他のライブラリによる GraphQL 統合。
- 以下のようなたくさんのおまけ機能(Starlette のおかげです):
- WebSockets
- HTTPX と
pytestに基づく極めて簡単なテスト - CORS
- Cookie Sessions
- ...などなど。
アプリをデプロイ(任意)¶
必要に応じて FastAPI アプリを FastAPI Cloud にデプロイできます。まだの場合はウェイティングリストに参加してください。 🚀
すでに FastAPI Cloud アカウント(ウェイティングリストから招待されました 😉)がある場合は、1 コマンドでアプリケーションをデプロイできます。
デプロイ前に、ログインしていることを確認してください。
$ fastapi login
You are logged in to FastAPI Cloud 🚀
次に、アプリをデプロイします。
$ fastapi deploy
Deploying to FastAPI Cloud...
✅ Deployment successful!
🐔 Ready the chicken! Your app is ready at https://myapp.fastapicloud.dev
これで完了です!その URL でアプリにアクセスできます。 ✨
FastAPI Cloud について¶
FastAPI Cloud は FastAPI の作者と同じチームによって作られています。
最小限の労力で API を 構築、デプロイ、アクセス するためのプロセスを効率化します。
FastAPI でアプリを構築するのと同じ 開発者体験 を、クラウドへの デプロイ にももたらします。 🎉
FastAPI Cloud は FastAPI and friends オープンソースプロジェクトの主要スポンサーであり、資金提供元です。 ✨
他のクラウドプロバイダにデプロイ¶
FastAPI はオープンソースであり、標準に基づいています。選択した任意のクラウドプロバイダに FastAPI アプリをデプロイできます。
各クラウドプロバイダのガイドに従って、FastAPI アプリをデプロイしてください。 🤓
パフォーマンス¶
独立した TechEmpower のベンチマークでは、Uvicorn で動作する FastAPI アプリケーションが、利用可能な最も高速な Python フレームワークの一つであり、Starlette と Uvicorn(FastAPI で内部的に使用されています)にのみ下回っていると示されています。(*)
詳細は Benchmarks セクションをご覧ください。
依存関係¶
FastAPI は Pydantic と Starlette に依存しています。
standard 依存関係¶
FastAPI を pip install "fastapi[standard]" でインストールすると、standard グループのオプション依存関係が含まれます。
Pydantic によって使用されるもの:
email-validator- メール検証のため。
Starlette によって使用されるもの:
httpx-TestClientを使用したい場合に必要です。jinja2- デフォルトのテンプレート設定を使用したい場合に必要です。python-multipart-request.form()とともに、フォームの 「parsing」 をサポートしたい場合に必要です。
FastAPI によって使用されるもの:
uvicorn- アプリケーションをロードして提供するサーバーのため。これにはuvicorn[standard]も含まれ、高性能なサービングに必要な依存関係(例:uvloop)が含まれます。fastapi-cli[standard]-fastapiコマンドを提供します。- これには
fastapi-cloud-cliが含まれ、FastAPI アプリケーションを FastAPI Cloud にデプロイできます。
- これには
standard 依存関係なし¶
standard のオプション依存関係を含めたくない場合は、pip install "fastapi[standard]" の代わりに pip install fastapi でインストールできます。
fastapi-cloud-cli なし¶
標準の依存関係を含めつつ fastapi-cloud-cli を除外して FastAPI をインストールしたい場合は、pip install "fastapi[standard-no-fastapi-cloud-cli]" でインストールできます。
追加のオプション依存関係¶
追加でインストールしたい依存関係があります。
追加のオプション Pydantic 依存関係:
pydantic-settings- 設定管理のため。pydantic-extra-types- Pydantic で使用する追加の型のため。
追加のオプション FastAPI 依存関係:
ライセンス¶
このプロジェクトは MIT ライセンスの条項の下でライセンスされています。















