Webサーバーの選び方|内蔵サーバーと本番用の違い
「Webサーバーって何をするもの?」「開発のときに使ったサーバーをそのまま公開していいの?」に答える1ページです。内蔵サーバー、Waitress、Gunicorn、Uvicorn、nginxの役割分担を整理します。
笑うPython男
サーバー選びは地味だけど大事な話。開発用の簡易サーバーを本番に使うのは、仮設トイレで店を開くようなものだよ。本気でやるなら、最初からちゃんとした店構えにしな。
Webサーバーの仕事とは
Webサーバーは、ブラウザからのリクエストを受け取り、アプリに渡して、返ってきたレスポンスをブラウザへ届ける「受付係」です。PythonのWebアプリでは、この受付係とアプリ本体は別々の部品になっています。
- アプリ(Flask、FastAPIなど):中身の処理をする人
- Webサーバー(WSGI/ASGIサーバー):受付と受け渡しをする人
この分業のおかげで、開発中と本番で受付係だけを取り替えることができます。
開発用:内蔵サーバーで十分
Flaskの app.run() や、FastAPI開発で使う簡易起動は、学習と動作確認のための内蔵サーバーです。自分のパソコンで試す分にはこれで十分。ただし、同時アクセスや安全性を想定していないので、そのままインターネットに公開するのは非推奨です。画面にも「開発用サーバーだから本番で使うな」という趣旨の警告が出ます。
本番用:代表的な受付係たち
| 名前 | 対応 | 特徴 |
|---|---|---|
| Waitress | WSGI(Flask、Django) | Windowsでも動く純Python製。迷ったらこれ |
| Gunicorn | WSGI(Flask、Django) | Linux環境の定番。Windowsでは使えない |
| Uvicorn | ASGI(FastAPI) | 非同期対応のFastAPIで標準的な選択肢 |
| nginx | リバースプロキシ | 表の門番。静的ファイル配信やHTTPSを担当し、後ろのアプリサーバーへ中継する |
よくある本番構成は「nginx(門番)+ GunicornやWaitress(受付)+ アプリ」という三段構えです。ただし小規模な公開なら、アプリサーバー単体でも運用できます。
選び方:迷ったらこの順でOK
- 学習・自分のPC内だけ → 内蔵サーバー
- Windowsで本番っぽく動かしたい → Waitress
- LinuxサーバーにFlask/Djangoを公開 → Gunicorn(+必要に応じてnginx)
- FastAPIを公開 → Uvicorn(+必要に応じてnginx)
- Render等の公開サービスを使う → サーバーの面倒はサービス側が肩代わりしてくれることが多い(設定画面の案内に従う)
笑うPython男
最初は内蔵サーバーで何も困らないんだ。それで物足りなくなったときが、乗り換えどき。順番を飛ばして最初から三段構えにすると、どこで詰まったか分からなくなるよ。
注意:公開サービスの無料枠では、使えるサーバーの種類や起動方法が決められている場合があります。設定前に各サービスの公式ドキュメントで確認してください。無料枠の条件は変わりやすいものです。