はじめに
新たに配属されるプロジェクトで使用する FastAPI の勉強しております 。
学習したことのアウトプットも兼ねて FastAPI の特徴についてまとめました!!
FastAPI について
FastAPI は、Python を用いたモダンで、高パフォーマンスな、Web フレームワークです。Google Trends で人気の傾向を見てみると、Flask や Django と比べて少しずつ右肩上がりになっています。
GitHub のスター数では、Flask 抜いて Django に迫る勢いです。
FastAPI は、機械学習との相性の良さなどから Microsoft、Netflix、Uber などの大手のテクノロジー企業によって使用されています。
また、Chroma(VectorDB)などの OSS でも活用されています。

FastAPI の特徴
FastAPI のポイントとしては、以下の 3 つになります。
-
Uvicorn(ASGI サーバー)の利用を前提とするため、非常に高速
-
Swagger UI または ReDoc により、フロントエンドとのインテグレーションが容易
-
安全で信頼性の高いアプリケーションが簡単に作成可能
ポイント1:Uvicorn(ASGI サーバー)の利用を前提とするため、非常に高速
FastAPI は、Flask や Django などの他のフレームワークと比較しても非常に高速です。さらに、NodeJS や Go 並みのとても高いパフォーマンスを発揮します。
-
ASGI (Asynchronous Server Gateway Interface)の利用
FastAPIは、uvicornなどのASGI(Asynchronous Server Gateway Interface)サーバーで実行されることを前提としているため、非同期処理が可能で高速に動作します。また、ASGIフレームワーク/ツールキットの一つであるStarletteを利用することで、ルーティングなどの汎用的な処理を簡単に実装できます。 -
ベンチマークテスト
TechEmpower の Web Framework Benchmarks を見ると Flask や Django よりも高いパフォーマンス、多言語(js,go)と比べても遜色のないパフォーマンスを確認することができます。
ポイント2:Swagger UI または ReDoc により、フロントエンドとのインテグレーションが容易
FastApi は Swagger UI や ReDoc のような API ドキュメントが自動生成されます。
そのため、API 開発において非常に有用で、特にフロントエンドとのインテグレーションが容易になるため、開発の効率化とコミュニケーションの円滑化につながります。
ノウハウや事前知識がなくても、スキーマ駆動開発を違和感なく自然に始めることができます。
例:Swagger UI
利用者(フロントエンドエンジニア)は実際に動かしながら開発が可能

ポイント3:安全で信頼性の高いアプリケーションが簡単に作成可能
FastAPI は、Pydantic という Python のデータバリデーションと型宣言ライブラリを利用しています。そのため、データの型チェックとバリデーションをシンプルに行うことができます。
-
スキーマのバリデーション
リクエストボディやパラメータのデータを型安全にバリデーションし、エラーも自動で処理。これにより、安全で信頼性の高いアプリケーションを簡単に作成可能になります。
スキーマで定義した型と異なる値を設定すると、422 Validation Error が返されます
その他 FastAPI の機能
-
セキュリティ機能
- FastAPI は OAuth2.0 によるセキュリティトークンを使用した認証と認可の実装が可能
- PassLib を使用して、ユーザーのパスワードを安全にハッシュ化が可能
- CORS 設定が容易に行え、異なるドメイン間でのリソース共有の制御が可能
-
依存性の注入(Dependency Injection)
FastAPI では、Depends という関数を使用して、依存関係を宣言することができ、コードの再利用性が高まり、テストしやすく、保守しやすいプログラムを作成可能
まとめ
FastAPI がどういうものかについてまとめました。もう少し知識が深まり、より技術的な部分のアウトプットも出していけたらと思います。
使ってみた印象としては、Django と比べたら実装の方法がわかりやすく使いやすいなと感じています。実際に開発を行って、機械学習との相性の良さやAPIのパフォーマンスの良さを実感したいと思っています。
ただし、必要最低限の機能しかないので、別途機能を追加する必要があると感じました。例えば、Dependency Injection の場合、Singleton に対応しずらい問題があり、Python の DI ライブラリの Dependency Injector と併用するなどの対応が必要となります。
参考資料
https://fastapi.tiangolo.com/
https://zenn.dev/sh0nk/books/537bb028709ab9
https://qiita.com/bee2/items/d629d8acc102cf92b7b2
Writted by. I.T(20代/入社1年目)