サーバー・API 種別:フレームワーク 成熟度 安定 学習コスト 低

FastAPI

型ヒントからAPI仕様と検証を自動生成する、Pythonの非同期Webフレームワーク

分野「サーバー・API」:画面の裏側で、頼まれた処理をしてデータを返す係。 分野の役割とつながりは分野の解説へ。

別名:fastapi、Fast API、FastAPI (Python)

できること

FastAPI ができないこと

  • HTTPS の終端(TLS 証明書の処理は Nginx・Caddy・Traefik 等のプロキシに任せる前提)
  • 実行基盤の提供(サーバー・コンテナ・関数基盤は別に用意し、そこで ASGI サーバーを動かす)
  • 複数プロセス・複数サーバーにまたがる重いバックグラウンド処理(BackgroundTasks は同一プロセス内。Celery 等のジョブキューが別途必要)
  • Python 3.9 以前の環境での動作
  • ブラウザ側の画面構築(テンプレート描画はできるが、コンポーネント指向の UI は React 等の領分)

制約

先頭の行が、このツールで最も先に当たる制約。値はすべて出典の一次情報で確認したもの。

項目 影響 出典 検証日
対応 Python バージョン (主要制約) Python 3.10 以上(3.10〜3.14 を公式サポート) OS 同梱の古い Python や、3.9 で止まっているサーバーでは動かない。実行環境の Python を先に確認する github.com
同期関数と非同期関数の実行方式 def で書いた処理は外部スレッドプールで実行、async def はイベントループ上で直接実行される(依存関係の関数も同じ) async def の中でブロッキング I/O(同期 DB ドライバ、requests 等)を呼ぶとイベントループが止まり、全リクエストが待たされる。同期ライブラリを使う処理は def で書く fastapi.tiangolo.com
バージョン互換性の方針 0.x 系。MINOR バージョンで破壊的変更と新機能が入り、PATCH のみが非破壊 「fastapi>=0.112.0,<0.113.0」のように MINOR を固定しないと、依存更新で API が壊れる fastapi.tiangolo.com
既定のプロセス数 1 プロセス(fastapi run / uvicorn の既定)。--workers N で複製してマルチコアを使う 1 プロセスでは CPU コアを1つしか使えない。ワーカーを増やすとプロセス内メモリの状態(キャッシュ・接続)は共有されなくなる fastapi.tiangolo.com
HTTPS の扱い アプリケーションサーバー(Uvicorn)は HTTPS を処理せず、TLS 終端プロキシと平文 HTTP で通信する構成が公式の前提 公開時はプロキシ(Traefik、Caddy、Nginx、HAProxy)か、HTTPS を提供するホスティング基盤が別途必要になる fastapi.tiangolo.com
ファイルアップロードの前提 python-multipart の追加インストールが必要。File / Form パラメータと JSON の Body は同一エンドポイントで併用できない(HTTP の仕様上、1リクエストの本文は1形式) ファイルとメタデータを同時に受けるなら、メタデータも Form フィールドにするか、エンドポイントを分ける fastapi.tiangolo.com

典型的な落とし穴

  • async def のエンドポイントで同期の DB ドライバや requests を呼び、負荷をかけたときだけ全体が遅くなる
  • Starlette と Pydantic のバージョンに挙動が引きずられる。FastAPI だけでなく依存ごとロックファイルで固定する
  • 自動生成される /docs と /openapi.json を本番でも公開したままにし、内部 API の構造が外部から見える
  • --workers でプロセスを増やした後、プロセス内変数に置いたキャッシュや WebSocket 接続の一覧がワーカー間で食い違う

コスト

課金モデル
無料
跳ねる条件

MIT ライセンスで無償。費用は動かすサーバー・コンテナ・関数基盤の側で発生する

出典
github.com  検証

代替手段と差分

代替 何が違うか
Hono Hono は TypeScript で Web 標準 API のみを使い、Cloudflare Workers 等のエッジでも同じコードが動く。FastAPI は Python のデータ処理・AI ライブラリと同居でき、型ヒントから検証と OpenAPI を自動生成する
Go Go は標準ライブラリだけで HTTP サーバーを書け、単一バイナリで配布でき、並列処理が言語機能として軽い。FastAPI は書く量が少なく Python 資産を直接使えるが、CPU 負荷の高い処理と配布の軽さでは Go が勝る

このツールを代替として挙げているページ: Hono

選定判断

Python でデータ処理や AI 推論を HTTP API として公開する用途では第一候補。CPU 負荷の高い処理を1プロセスで並列に捌く必要がある場合、エッジ配置や単一バイナリ配布が要る場合は避け、Go か Hono へ

Starlette(Web 部分)と Pydantic(データ検証)の上に作られたフレームワークで、関数の型ヒントを書くだけで入力検証・シリアライズ・OpenAPI 仕様・対話型ドキュメントが揃う。Python 側にある pandas・PyTorch・各種 AI SDK をそのまま API 化できる点が、他言語のフレームワークに対する実質的な差である。

利用者が最初に当たるのは Python のバージョン要件(3.10 以上)で、次に当たるのが async def と def の使い分けである。async def の中に同期のブロッキング処理を書いても開発中は動くため、負荷がかかった本番で初めてイベントループの停止として現れる。