こんにちは、Pythonエンジニア育成推進協会 顧問理事の寺田です。私は試験の問題策定とコミュニティ連携を行う立場です。
Pythonの用途と言えば、AIやデータ分析関連など、様々な用途に使えるということが、Pythonが広く使われる理由の一つだと考えています。そして、昔からPythonにはWebを作る仕組みが充実しています。ただ、Pythonの標準ライブラリだけでWebシステムを作るには、やりにくい部分があるため、既存のサードパーティ製パッケージを使いこなして開発をスムーズにしたり、標準的な開発スタイルにのっとって作ったりというのがよくあります。
今回は最近注目が集まっている、PythonのWebフレームワークであるFastAPIについてお話したいと思います。
■PythonとWebフレームワーク
当協会ではWebに特化した試験は行っていませんが、WebとPythonの親和性は実は高いものだと考えています。私自身、この20年間はPythonをWebで利用することを中心に見てきたため、よりそう感じています。
Webを作る際、Pythonの標準ライブラリだけでだけでWebシステムを作るには、やりにくい部分があります。そのため、データ分析同様、Webという特有の分野に対して、既存のサードパーティ製パッケージを使いこなすことによって開発をスムーズにしたり、標準的な開発スタイルにのっとって作ったりというのがよくあるパターンとなります。
さて、そうなってくると、どのフレームワークを選ぶのかという問題が次に出てきます。
2025年秋時点では、Webフレームワークの選択肢の一つとして、Djangoがよく挙げられます。Djangoは歴史があり、長くメンテナンスもされているオールインワンパッケージなので、Webを作るための機能が一通り揃っています。それに対し、オールインワンとまではいかず、もう少しやりたいことを見通しよくできるようなものとして、マイクロフレームワークという世界があり、こちらを好んで使う方もいます。
どちらが良いかは、用途やどういうサイトを作るのかによって決まりますが、いろいろな選択肢をとることができます。
この20年間でいろいろなツールがありましたが、Djangoはずっとありますし、3~5年前には、FlaskやPyramid(ピラミッド)などが注目されていたこともありました。最近はFastAPIがセカンドチョイスまたはファーストチョイスされることが増えてきていると私の眼には映っています。
FastAPIについては最近では私自身も第1候補に選ぶくらいには使用しており、とてもいいなと感じています。というわけで、今回はFastAPIについてお話したいと思います。
■FastAPIの役割と選ばれる理由
FastAPIの作者、セバスチャンさんはPyCon JP 2025でキーノートスピーカーとして登壇しています。彼は7月にEuroPython、9月前半に台湾でもキーノートスピーカーとして招かれており、様々なところで講演を行っていることから、世界中でFastAPIが注目を集めていることがうかがえます。
私自身、EuroPythonとPyCon JP 2025で話を聞きました。講演ではFastAPIの裏話的な話を聞くことができましたが、それを聞けば、FastAPIに、彼の世界観や人生観が反映された丁寧な作りになっていることが理解できます。FastAPIにはいろいろなものを組み合わせる力や適切なドキュメント力、マイルストーンの立て方、マネージング能力、リーダーシップ力といった様々な技術力を兼ね備えた、非常に丁寧にまとめ上げられたフレームワークだと確信を持つことができました。それが世界中のPythonユーザーやWeb開発者のユーザーからも愛される要因なのかなと感じています。
さて、FastAPIに関して1つ気になることがあると思います。
それは、WebフレームワークなのにAPIという名前がついていることです。これはFastAPIの狙いとして、APIサーバを作るためのものであるということが強く込められているように思っています。
Webの世界では、ブラウザに何かを表示する世界と、裏側で内部の処理や、データベースに接続してデータを保存・取得するいう処理を行う世界があります。
つまり、FastAPIは内部処理やデータベースとの連携といった裏側の処理を中心とした機能となっており、レンダリングやデザインをするような見える部分の処理を1番の目的としていないフレームワークであるということになります。
■昨今Webの事情とFastAPI
昨今、Webの世界ではAPIサーバとフロントエンドの分離がかなり進んでおり、フロントエンドを作る時にはJavaScriptやTypeScriptを使用したツール(代表例:React、Vue.js)を使って表現することが増えています。そのため、Webの世界においてはフロントエンドとバックエンドの分離が進んでおり、Pythonでテンプレートを使ったサーバサイドレンダリングの重要度が少し減っている現状があると感じています。
FastAPIがフォーカスしているのは、「JSON形式のAPIを提供する部分」であり、ここが非常に得意なフレームワークです。もちろん、例えばDjangoやFlaskといった他のPythonフレームワークでもAPIサーバを作ることは一般的に行われています。一方で、フロントエンドはどうするか?という場面では、Reactや、ReactベースのNext.jsなど様々なフレームワークや、Vue.jsなどを使うことがあります。
その結果、サーバサイドでのテンプレートレンダリングが減っているということにつながっているのだと考えています。また、最近はスマホアプリなど様々なフロントエンドが必要とされていること、AIとの連携を含めればPythonがやりやすいことから、バックエンドはPythonで行うのが良いということが比較的認知されています。
ではそうなったときに、次に問題となるのが、フロントエンドをどうするかという点です。
Pythonでサーバサイドレンダリングを行うのか、Reactなどのフロントエンドフレームワークを使うのか、あるいはスマホアプリのようにネイティブアプリを作るのかというものですが、いずれにせよAPIサーバは必ず必要になりますので、そういう意味での役回りを担うことが多くなるのが、FastAPIになるのかなと思います。
ただ、FastAPIでもJinja2というPythonのテンプレートエンジンを組み込むこと自体はできます。私自身もその構成で使ったことがありますので、できることはできますし、そういう使い方をすることもできます。
■FastAPIの特長
FastAPIの大きな特長として2点お話します。
1)Pydanticとの組み合わせによるデータの検証
APIに特化したいとなったときに、APIサーバを作る時に何が欲しいかとなると、適切なJSONの入出力になるかと思います。
FastAPIは、裏側でPydantic (パイダンティック)というバリデーションライブラリが、データの検証をし、適切なデータが保証されます。、かつ、それをPythonのオブジェクトとすることができます。FastAPI=Pydanticだというようなことを言う人もいるぐらいには、FastAPIとPydanticは密接につながりあって成長してきたものになります。Pydantic自体は単独で使えるものであり、決してFastAPI専用ということではありませんが、FastAPIからみると一緒に使うことを前提に考えていくといいのかなと思います。
Webの世界では、検証する対象のデータがどういったものか分からない状況です。そうした時に、検証ツールがしっかりしていると、非常に安心して内部コードを作りやすくなります。そのため、Pydanticを使って適切なバリデーションし検証することで、適切なデータになってくれるということは、Pythonで外部の処理を書く側としては非常に助かる部分です。また、Pydanticで宣言するものが、最近のPythonの型ヒントやデータクラスと似ていて上手く利用しているものになりますので、最近のPythonのコーディングと非常に相性がいいと感じてます。
FastAPIを使わず、データクラスを使ったり、または型ヒントを書いたりということを常日頃しているものとしては、そこに違和感はありませんし、むしろ上手く組み合わさっているなと思います。
日ごろから型ヒントやデータクラスに慣れていない方にとっても、FastAPIとPydanticのドキュメントを読むことで、便利さを感じ取ることができると思いますので、今までクラスや型ヒントを苦手にしていた人にとっても非常に良い入り口になるのではないかと思います。
Pydanticとの連携によるデータの検証は、どんなデータが入ってくるのかを適切に書くことで、ドキュメンテーションを自動的に出すことができるという便利さがあります。ここで言うドキュメンテーションとは、OpenAPI(Swagger)の設定ファイルで、Webの画面でも自動的に確認できるものができます。
例えばフロントエンドをReact、バックエンドをPythonで作りたいというケースで、それぞれを別の会社やチームで作るといったことが最近増えていますが、その際のインターフェース仕様書として OpenAPI の仕様書を共有するのはよくあることだと思いますし、FastAPIはこうした利用が非常にしやすい作りになっています。
このあたりも、最近のWeb開発の主流にしっかり寄り添ったフレームワークになっていると強く感じられる部分です。
2)非同期処理
昨今の多くのWebフレームワークは、非同期処理が標準でサポートされることが徐々に増えており、その中でもFastAPIは非同期処理を前提として作られており、asyncというキーワードで非同期の環境を構築することができます。
Pythonにおいては、10年ほど前のバージョン3.5あたりから標準で非同期処理が言語仕様に取り入れられており、FastAPIはそれを活用する形になっています。非同期処理をするにあたって、コードの書き方が難しい、デバックが難しいというのはもちろんありますが、これもFastAPIを通じて慣れていくことも可能なのではないかと思います。
非同期処理の良いところは、データベースへのアクセスが重い時や、最近では汎用LLM(ChatGPTを代表とする大規模言語モデル)に問合せた結果を上手くWebとして返したいというような、時間がかかる外部のリソースを使う場合に有効です。
例えば、外部との通信が発生したときに1秒待たされる間に、Pythonでは一旦待機して戻ってくるのを待っていることになりますが、その間に他の処理をつづけられるようになります。そういう意味では、最近の外部のAPIを使うことが多い最近のWebにとっては、各種I/O待ち処理を非同期にできるということはメリットになります。FastAPIにはそれをすることができる仕組みが入っているため、最近のWeb業界で浸透しているのではないかと思っています。
FastAPIは、データ検証ができるPydanticやOpenAPIのドキュメンテーション、非同期処理など、標準でできることが備わっています。一度FastAPIに触れてみると良いのではないかと思います。
■さいごに
私としては、データクラスにしても、非同期にしても、これまで他の部分でもいろいろな方法で行ってきましたので、FastAPIの仕組みがすんなりと自分の中に入ってきたため、とてもうまく組み合わさった使いやすいものだと感じています。
とはいえ、初めて触れる人にと手はちょっと難しいと感じる部分は多いかとは思います。ただ、ドキュメンテーションがわかりやすく、見ながらでも経験してみてもらえると嬉しいと思います。
FastAPI自体は、OpenAI社のChatGPTをはじめとした様々なところで使われているという話をセバスチャンさんがトークで話していました。それくらい信頼度がある物だということがうかがえるかと思いますし、今後の成長がとても楽しみなツールだと思います。
PyCon JP2025でのセバスチャンさんの動画はまだ公開されていませんが、EuroPythonでの講演動画は公開されています。英語のトークではありますが見て頂くと、彼の考えやどのようにFastAPIを作ってきたか、進化させてきたかといったことが分かるかと思います。もし深堀したければ参考にしてみてください。
Keynote: Behind the scenes of FastAPI and friends for developers and builders — Sebastián Ramírez
