PythonのWebフレームワークに関して、迷っていませんか?
「どのフレームワークを採用しようか」と。
迷うなら、FastAPIで行きましょう。
私は、FastAPIで行くことを決めました。
本記事の内容
- FastAPIをPythonのWebフレームワークに採用
- FastAPIに決めた理由
それでは、上記に沿って説明していきます。
FastAPIをPythonのWebフレームワークに採用
「Python フレームワーク」
「Python Web フレームワーク」
上記キーワードをGoogleで検索すると、たくさん出てきます。
判明しただけでも、これだけのフレームワークが存在しています。
- Django
- bottle
- Flask
- Plone
- FastAPI
- Tornado
- Pyramid
- Quart
- Sanic
- Starlette
この中から選ぶなんて、無理ゲーですよ。
そうなると、人気のモノを選びたくなります。
人気のモノを選んでおけば、無難ですからね。
大きな失敗はありません。
それに人気のモノは、情報が多く存在しています。
特に、日本語での情報が多いと余計に人気者を選びたくなります。
でも、今回はFastAPIを選びました。
人気者というのであれば、DjangoかFlaskになるのでしょう。
もちろん、FastAPIを適当に選んだのではありません。
ちゃんとした理由があります。
以下では、その理由を説明していきます。
FastAPIに決めた理由
正直、フレームワークなんて些細な事です。
「フレームワークについて語っているのに何を言い出すのか?」
このように思うかもしれません。
でも、フレームワークなんてOSやWebサーバーに比べたら、小さい世界のことです。
実際、OSやWebサーバーの方が重要度は高いと言えます。
そのため、OSやWebサーバーありきでフレームワークを考えるべきなのです。
もっと言うと、「本当にプログラム言語がPythonでいいのか?」も検討すべきでしょう。
前提条件
ただ、今回はすでに以下の前提条件が存在しています。
OS | Ubuntu 18.04 |
Webサーバー | Nginx 1.14.0 |
アプリケーションサーバー | NGINX Unit |
プログラム言語 | Python 3.6.9 |
この条件下でフレームワークを決めるということです。
前提条件があれば、ある程度は絞り込めます。
アプリケーションサーバーには、NGINX Unitをインストールしています。
次の記事で詳しく解説しています。
なお、NGINX Unitを選んだ理由は、Nginxと同じ会社が開発しているからです。
これが最大の理由です。
あとは、比較的新しいということもあります。
OSやWebサーバーを選択したことにも理由はあります。
ただ、それをここで長々と説明するのはやめておきます。
ここでは、アプリケーションサーバーがポイントとなります。
NGINX Unitで利用可能なフレームワーク
以下のページにおいて、NGINX Unitで利用可能なフレームワークを確認できます。
https://unit.nginx.org/howto/#frameworks
- Django
- Flask
- FastAPI
- Pyramid
- Quart
- Sanic
- Starlette
10個から、7個に絞れました。
でも、まだ多いですね。
Python 3.6から利用可能なフレームワーク
Python3.5と3.6では、違いが結構あります。
その違いを吸収するようになっていることをマイナスと捉えます。
なぜなら、互換性があるということは、それだけ無駄な処理が走ると言えます。
よって、3.6からのみ(互換性なし)を重要視します。
Django | 指定ナシ(Python 2すら対象) |
Flask | Python 3 |
FastAPI | Python 3.6以上 |
Pyramid | Python 3 |
Quart | Python 3.5以上 |
Sanic | Python 3.6以上 |
Starlette | Python 3.5以上 |
互換性による負荷に関して言えば、Djangoはヤバそうです。
でも、過去の開発資産はそうそう簡単には捨てられないのですよね・・・
その点、新興勢力にはしがらみがありません。
そして、最もしがらみのないのがFastAPIとSanicになります。
以上より、FastAPIとSanicが候補に残りました。
Google Trendにおける比較
FastAPIとSanicそれぞれの検索トレンドの比較です。
期間は、この1年となります。
FastAPIの方が、勢いがありますね。
それに、現時点が100です。
つまり、勢いが伸び続けていると言えます。
Google Trendにおける比較は、FastAPIの圧勝です。
Githubにおける比較
「Python FastAPI」で検索したリポジトリ数とFastAPIのスター数です。
「Python Sanic」で検索したリポジトリ数とSanicのスター数です。
Githubにおける比較でも、FastAPIの勝利です。
Google Trendでの結果よりは、その差が小さくなりました。
まとめ
以上より、FastAPIをWebフレームワークに採用することにしました。
性能云々に関しても調査はしました。
ただ、性能比較データなんていくらでも捏造はできます。
捏造までいかなくても、データを収集する環境によっても変わってくるでしょう。
それに、記事を書いている人間の主観が、どうしても入ってしまいます。
そのため、なるべく機械的に採用する基準を設けました。
その結果が、FastAPIということでした。
さすがに、Google TrendとGithubの結果をコントロールするのは無理でしょう。
これで FastAPIがダメダメでも、私は何も後悔はしません。
FastAPIを採用することに決まったのは、単なるデータの結果に過ぎませんので。