MENU

FastAPI — 型ヒントとASGIで非同期APIを書くPythonフレームワーク

FastAPI アイキャッチ
FastAPI

FastAPIは2018年12月、コロンビア出身のセバスティアン・ラミレス(Sebastián Ramírez、tiangolo)が公開したPython製の非同期Webフレームワークです。Pythonの型ヒント(PEP 484)をそのままAPIスキーマとして利用し、PydanticでJSONを検証、Starletteで非同期HTTP処理を行うという三段構成により、コード量を抑えつつ自動ドキュメント生成と高速レスポンスを両立しました。公開からわずか数年でGitHubスター数8万超、Stack Overflow開発者調査でも上位常連となり、Python製APIの新興標準となっています。

目次

この記事の目次

  1. FastAPIの三本柱
  2. FastAPIが急成長した経緯
  3. 実務での書き方
  4. Flask・Django・Goフレームワークとの比較
  5. まとめ

FastAPIの三本柱

FastAPIの三本柱

FastAPIの設計上の特徴は、関数の引数に書いた型ヒントから自動的にリクエスト解析・検証・ドキュメント生成までを行うことです。たとえば def create_item(item: Item) と書けば、ItemクラスがPydanticのBaseModelである限り、リクエストボディがJSONとしてパースされ、型・必須項目・範囲が自動チェックされます。OpenAPI(旧Swagger)仕様もこの情報から組み立てられ、/docsにアクセスするとSwagger UI、/redocでReDocが表示されます。

下層のHTTP処理はエンセプロ・コリン・ライト(Tom Christie)の手によるStarletteが担当し、ASGI規格に沿った非同期I/Oを実現します。WebSocket、Server-Sent Events、バックグラウンドタスクなど現代的なAPI機能はStarlette由来のものが多く、FastAPIはその上に型ベースの開発者体験を載せる構造です。Pydantic v2(2023年公開)以降は内部実装がRust製となり、検証速度も大幅に向上しました。

FastAPIが急成長した経緯

FastAPIが急成長した経緯

tiangoloは元々開発者用ツールDocArrayや機械学習APIの実装で知られており、「型ヒントを活用したAPI記述」というアイデアを2018年12月にFastAPIとして公開しました。発表時から「Node.jsやGoに匹敵する高速さ」「型から自動でOpenAPIが生成される」という売り文句が支持を集め、2019〜2020年にかけてGitHubのスター数が爆発的に増加。

2020年にはMicrosoftがプロジェクト「Project Cosmos」内でFastAPIを採用したことが公表され、Netflix、Uber、Cloudflare、Spotifyなどもバックエンドの一部にFastAPIを使うようになりました。2023年6月にはPydanticがv2に移行し、ベンチマークでパフォーマンスがさらに向上。Sebastián Ramírez本人は2024年からSequoia Capitalの支援を受けて専属開発に移行し、FastAPIの企業向けサービスFastAPI Cloud / FastAPI Labsが整備されています。

実務での書き方

実務での書き方

FastAPIアプリの最小例は、Pydanticで入出力モデルを書き、@app.post('/items/')デコレータで関数を登録するだけです。そのうえでuvicorn main:app --reloadと起動すれば、ASGIサーバー上でAPIが立ち上がります。認証・DB接続・キャッシュなど横断的な依存は、Dependsという関数で依存性注入する仕組みが用意されており、Flaskにおける拡張機能の取り回しよりも統一感ある形で書けます。

本番ではuvicorn+GunicornあるいはHypercornを使い、フロントにnginxやCloudflareを置く構成が多く、Docker+Kubernetesでスケールアウトする例が一般化しています。ORMはSQLAlchemy 2.0(async対応)かSQLModel(tiangolo自身が作ったFastAPI向けORM)を組み合わせるのが定番。テストはStarlette由来のTestClientを使い、同期的にエンドポイントを叩ける点も移行コストを下げています。

Flask・Django・Goフレームワークとの比較

Flask・Django・Goフレームワークとの比較

FastAPIと比較されるのは、まず同じPython圏のFlaskとDjangoです。新規でJSON APIだけ書く案件であればFastAPIが第一候補で、テンプレートエンジンや管理画面が必要であればDjangoとDjango REST Frameworkの組み合わせ、軽量で同期処理中心のサーバーにはFlaskが向きます。FastAPIはASGIサーバーが必須となるためデプロイ環境を選びますが、現代のKubernetes/Cloud Runでは標準的に対応しています。

Python以外との比較では、Go言語のGin/EchoやTypeScript圏のNestJSが対抗馬として挙がります。ランタイム性能で言えばGoが優位ですが、機械学習・データ系のライブラリを使う必要があるならPythonで完結させた方が運用は楽。NestJSはAngular風の依存性注入をTypeScriptで実現しており、TypeScriptで統一したいプロジェクトと相性が良い構造です。「型に基づいた自動仕様生成」という設計思想は、言語をまたいで似た形に収斂しつつあります。

まとめ

FastAPIは「Pythonの型ヒントをAPIスキーマに使う」というシンプルな着想を、Pydantic・Starletteと組み合わせて実用レベルに仕上げた成功例です。新規APIサーバーをPythonで書くなら、まず検討する選択肢として定着しました。今後もASGIエコシステムの発展とともに、運用面での成熟が進む見込みです。

※本記事はIT用語辞典の手書きドラフトです。公開前に最新情報・出典を確認のうえ加筆修正してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次