
初心者には「Flask × Gunicorn」構成がおすすめ
PythonでWEBアプリを作りたい初心者には、Flask(シンプルなフレームワーク)とGunicorn(軽量なWEBサーバ)の組み合わせが最もおすすめです。理由は以下の通りです。
- 構成がシンプル:最小限のコードで動作するため、理解しやすい
- 学習リソースが豊富:日本語・英語問わずチュートリアルが多い
- 本番環境にも対応可能:Gunicornを使えば商用アプリにも十分対応できる
本記事ではこの「Flask × Gunicorn」構成を軸に、他の主要なWEBサーバやフレームワーク(Django、uWSGI、Hypercorn、Daphne)についても解説します。「どのサーバを選べばよいか?」「何が違うのか?」といった疑問をスッキリ解消し、最初の一歩を安心して踏み出せる内容を目指しています。
- Flaskとは?Python初心者に最適なマイクロフレームワーク
- Gunicornとは?Pythonアプリに最適な本番向けWEBサーバ
- Djangoとは?機能が揃った大規模開発向けフレームワーク
- その他のWEBサーバ:uWSGI、Hypercorn、Daphne
- 目的別おすすめ構成まとめ
- Flask × Gunicorn の環境構築手順(ローカル開発編)
- 1. Python仮想環境の作成
- 2. FlaskとGunicornのインストール
- 3. Flaskアプリの作成
- 4. 開発用サーバで動作確認
- 5. Gunicornでアプリを起動
- 6. 補足:FlaskとGunicornの役割の違い
- まとめ:まずは「動かす→理解する→拡張する」
Flaskとは?Python初心者に最適なマイクロフレームワーク
Flask(フラスク)はPythonでWEBアプリケーションを作るための軽量なフレームワークです。「マイクロフレームワーク」と呼ばれ、必要最低限の機能だけを備えており、開発者が必要に応じてライブラリを組み合わせて拡張していくスタイルです。
- 公式サイト: https://flask.palletsprojects.com/
- 主な用途: REST API、簡易ダッシュボード、学習用プロジェクト
# Flaskの最小構成例
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, Flask!"
このコードを実行するだけで「Hello, Flask!」というページが表示されるWEBアプリが完成します。開発環境では flask run
コマンドでローカルサーバが起動しますが、本番環境ではGunicornなどの外部WEBサーバとの併用が必要です。
Gunicornとは?Pythonアプリに最適な本番向けWEBサーバ
Gunicorn(Green Unicorn)は、FlaskやDjangoといったWSGIアプリケーションを安全・高速に公開できるPython向けWEBサーバです。開発用サーバよりも遥かに安定しており、複数のプロセスで同時にリクエストを処理するため、アクセスが増えても耐えられる設計です。
- 対応: WSGI(同期処理)
- 長所: 軽量、高速、構成がシンプル
- 短所: 非同期処理(ASGI)には対応していない
# FlaskアプリをGunicornで本番起動
gunicorn app:app --bind 0.0.0.0:8000
GunicornはFlaskと特に相性がよく、Flask公式ドキュメントでも推奨されています。軽量で習得しやすく、初学者が構成を理解するには最適な選択肢です。
Djangoとは?機能が揃った大規模開発向けフレームワーク
Django(ジャンゴ)は、PythonのフルスタックWEBフレームワークです。ログイン認証、管理画面、フォーム処理など、WEBアプリに必要な機能が最初から備わっており、開発スピードを大きく向上させてくれます。
- 向いている開発: 管理画面を含む業務システム、CMS、ECサイト
- 公式サイト: https://www.djangoproject.com/
# DjangoアプリをGunicornで起動する例
gunicorn myproject.wsgi:application --bind 0.0.0.0:8000
Djangoは学習に時間がかかるものの、その分だけ再利用性と拡張性が高く、企業の業務システムにも多く採用されています。Flaskよりも規模の大きな開発に向いています。

その他のWEBサーバ:uWSGI、Hypercorn、Daphne
uWSGI
uWSGIは非常に多機能なWEBサーバで、FlaskやDjangoなどのWSGIアプリを本番環境で動かすために使用されます。
プロセスマネジメント、ロードバランシング、UNIXソケット通信などに対応しており、大規模・高負荷な環境に適しています。
- 長所: 柔軟な構成が可能、本格運用向き
- 短所: 設定が複雑で初心者には難しい
Hypercorn
HypercornはASGIに対応したWEBサーバです。非同期処理が可能なFastAPIやQuartなどのフレームワークに適しており、HTTP/2、WebSocket、QUICなどの最新技術にも対応しています。
- 用途: リアルタイム処理や高負荷なAPI
- 注意点: FlaskやDjango(WSGIアプリ)では恩恵が少ない
Daphne
Daphneは、Django Channelsと組み合わせて使うASGIサーバです。WebSocket通信などのリアルタイム機能を提供するために特化して設計されています。
- 強み: チャット、通知、ライブ更新などに最適
- 弱点: 設定がやや難しく、Channelsの理解が前提
目的別おすすめ構成まとめ
目的 | フレームワーク | WEBサーバ | 理由 |
---|---|---|---|
まず試してみたい | Flask | Gunicorn | シンプル・学習コストが低い |
本格的な業務システムを作りたい | Django | uWSGI / Gunicorn | 機能が豊富で大規模開発に強い |
非同期・リアルタイム機能を使いたい | FastAPI / Django + Channels | Hypercorn / Daphne | ASGI対応、WebSocket処理に適応 |
Flask × Gunicorn の環境構築手順(ローカル開発編)
ここでは、初心者の方向けに、Flaskアプリをローカル環境で作成し、Gunicornを使って起動するまでの流れをステップバイステップで紹介します。Pythonがインストールされていれば、すぐに試せる内容です。
1. Python仮想環境の作成
プロジェクト用のディレクトリを作り、仮想環境を作成・起動します。これにより、他のPythonプロジェクトと依存関係が干渉しません。
mkdir flask_app
cd flask_app
python -m venv venv
source venv/bin/activate # Windowsの場合: venv\Scripts\activate
2. FlaskとGunicornのインストール
仮想環境がアクティブな状態で、FlaskとGunicornをインストールします。
pip install flask gunicorn
3. Flaskアプリの作成
以下のコードを app.py
という名前で保存します。これが最小構成のFlaskアプリです。
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, Flask!"
4. 開発用サーバで動作確認
Flaskには開発者向けの簡易サーバが用意されています。以下のコマンドで起動します。
export FLASK_APP=app.py # Windows: set FLASK_APP=app.py
flask run
ブラウザで http://localhost:5000
にアクセスし、「Hello, Flask!」と表示されれば成功です。
5. Gunicornでアプリを起動
本番に近い形で起動してみましょう。以下のコマンドでGunicornがFlaskアプリを起動します。
gunicorn app:app --bind 127.0.0.1:8000
この状態でも http://localhost:8000
にアクセスすれば同じ結果が表示されます。Gunicornを通すことで、複数プロセスでの並列処理や負荷耐性のある実行が可能になります。
6. 補足:FlaskとGunicornの役割の違い
- Flask: Pythonで書かれたWEBアプリの「本体(ロジック)」
- Gunicorn: Flaskアプリを外部からのリクエストに応じて「実行するサーバ」
開発初期は flask run
でも構いませんが、将来的な拡張や実運用を見据えるなら、Gunicornのような本番用サーバでの起動にも慣れておくと良いでしょう。
まとめ:まずは「動かす→理解する→拡張する」
PythonでWEBアプリを作る第一歩は、構成をシンプルにして「まず動かす」ことです。
その点で、「Flask × Gunicorn」は最小構成でありながら本番にも使える優れた構成です。まずは小さなアプリを作って、後からDjangoや非同期処理などを学んでいくのが、最もスムーズな成長ルートです。