FlaskやDjangoで使われるGunicornとは何か?
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開発のお役に立てれば幸いです。
ここまでお読みいただきありがとうございました。
Pythonの基礎から応用まで学べる
Python WebAcademy
Python WebAcademyでは、Pythonの基礎からアーキテクチャなどの応用的な内容まで幅広く学べます。また、ブラウザ上で直接Pythonコードを試すことができ、実践的なスキルを身につけることが可能です。
Pythonの学習を始めるインフラの学習はInfraAcademy
おすすめの記事