Back to Blog

FlaskやDjangoで使われるGunicornとは何か?

flask

2024年7月8日

こんにちは!

今回の記事では、FlaskやDjangoで使われるGunicorn(読み:グニコーン・ジーユニコーン)とは何か、について解説します。

FlaskやDjangoを本番環境で動作させる時に使用するのが、Gunicorn(Green Unicorn)です。Gunicornは、PythonのWSGI HTTPサーバーであり、アプリケーションを効果的に運用するためのなツールです。

本記事では、Gunicornについて詳細に解説し、なぜ優れているのか、そしてどのようにセットアップするかを説明します。

Gunicornとは?

まずは、Gunicornの概要について解説します!

Gunicornは、2009年にBenoit Chesneauによって開発されました。

GunicornはWSGIの標準をサポートしており、Pythonで書かれたWebアプリケーションを運用するためのサーバーとして機能します。FlaskやDjangoなどのPythonのWebフレームワークで広く利用されています。

Gunicornは、UNIXベースのシステムで動作し、軽量で高性能なHTTPサーバーとして設計されています。

WSGIとは?

そもそもWSGIとは何なのでしょうか?

WSGI(Web Server Gateway Interface 読み:ウィズギー)は、PythonでWebアプリケーションを開発するための標準インターフェースです。

WSGIは、WebサーバーとWebアプリケーション間の通信を定義し、互換性を持たせるための仕様です。これにより、開発者は特定のサーバーに依存せずにアプリケーションを構築でき、さまざまなWSGIサーバー上で実行できます。

Gunicornの特徴

Gunicornには以下のような特徴があります。

  • シンプルな設定と使いやすさ
  • 高いパフォーマンス
  • 広範な互換性

1. シンプルな設定と使いやすさ

特徴の1つ目が、「シンプルな設定と使いやすさ」です。

Gunicornはシンプルな設計を持ち、設定や使用方法が非常に直感的です。

基本的なコマンドライン操作で簡単にサーバーを起動でき、詳細な設定は設定ファイルを使用して行えます。

後ほどGunicornの使い方について解説します。

2. 高いパフォーマンス

特徴の2つ目は、「高いパフォーマンス」です。

Gunicornは、プリフォークワーカーモデルを使用しており、高いパフォーマンスを提供します。

プリフォークワーカーモデルは、サーバーが起動時に複数のワーカープロセスをフォーク(生成)し、リクエストを並行処理します。

これにより、同時に多数のリクエストを処理でき、サーバーのスループットが向上します。スループットとは、コンピュータやネットワーク機器が単位時間あたりに処理できるデータ量のことを指します。

3. 広範な互換性

特徴の3つ目は、「広範囲な互換性」です。

Gunicornは、Flask、Django、Pyramidなど、多くのPythonのWebフレームワークと互換性があります。これにより、幅広いプロジェクトで使用でき、プロダクション環境でのデプロイを簡素化します。

PythonのWebフレームワークについては、こちらの記事で詳しく解説しています。

【関連記事】 PythonのWebフレームワークには何があるの?【Flask、Django、FastAPI・・・】

FlaskでのGunicornの使用

次に、FlaskアプリケーションでGunicornを使用する方法を具体的に見ていきましょう。

Flaskのインストールと簡単なアプリケーションの作成

まず、Flaskをインストールし、簡単なアプリケーションを作成します

pip install flask

app.pyを以下のように設定します。

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello, World!"

if __name__ == "__main__":
    app.run()

これは、URLにアクセスしたら、”Hello, World!”を出力するプログラムです。

続いて、Gunicornをインストールします。

Gunicornのインストールと実行

Gunicornのインストールは、以下のコマンドを実行します。

pip install gunicorn

Gunicornを使用してFlaskアプリケーションを実行するには、以下のコマンドを実行します。

gunicorn -w 4 -b 127.0.0.1:8000 app:app

以下のコマンドを実行すると、GunicornがFlaskアプリケーションを実行し、指定されたアドレスとポート(http://127.0.0.1:8000)でリクエストを待ち受けます。

Gunicornコマンドの解説

先ほど、Flaskを起動するために、gunicornコマンドを実行しました。ここでは、gunicornコマンドの使い方について解説します。

gunicornコマンドの書式

gunicornコマンドの書式はこちらです。

gunicorn [オプション] Pythonのモジュールパス

gunicornコマンドのオプション

オプション説明
-w, –workersワーカープロセスの数を指定します。例:-w 4
-b, –bindバインドするアドレスを指定します。例:-b 127.0.0.1:8000
-t, –timeoutリクエストタイムアウトの秒数を指定します。例:-t 120
-k, –worker-class使用するワーカークラスを指定します。例:-k gevent
–access-logfileアクセスログの出力ファイルを指定します。
–error-logfileエラーログの出力ファイルを指定します。

Gunicornの設定ファイル

Gunicornコマンドの設定はオプションで指定する方法と、設定ファイルに記述する方法があります。

gunicorn_config.pyファイルに以下のように記述します。

bind = "127.0.0.1:8000"
workers = 4
worker_class = "gevent"
timeout = 120

そして、gunicornコマンドを実行する際に、-cオプションを指定して、設定ファイルを読み込みます。

gunicorn -c gunicorn_config.py app:app

NginxとGunicornを組み合わせる

本番環境では、GunicornをNginxなどのリバースプロキシと組み合わせて使用することが一般的です。Nginxは、静的ファイルの提供、負荷分散、SSL終端などの機能を提供し、Gunicornの前面に配置されます。

設定方法については、こちらの記事で詳しく解説しているので、興味のある方はご覧ください。

【関連記事】Flask+Nginx+Gunicornの環境をDockerで構築する方法

まとめ

今回の記事では、Gunicornについて解説しました。

Gunicornの概要や特徴、使い方やコマンドの使用方法などをお伝えしました。FlaskやDjangoのアプリケーションをリリースする際に、Gunicornを使うことになると思うので、覚えておきましょう。

本記事が、あなたのWeb開発のお役に立てれば幸いです。

ここまでお読みいただきありがとうございました。

Webの知識を作りながら学ぶ
Flask WebAcademy

SNSアプリやチャットアプリ、さまざまなアプリを作りながら学べる実践的なカリキュラム

詳細を見る