

高岡智則
年齢:33歳 性別:男性 職業:Webディレクター(兼ライティング・SNS運用担当) 居住地:東京都杉並区・永福町の1LDKマンション 出身地:神奈川県川崎市 身長:176cm 体系:細身〜普通(最近ちょっとお腹が気になる) 血液型:A型 誕生日:1992年11月20日 最終学歴:明治大学・情報コミュニケーション学部卒 通勤:京王井の頭線で渋谷まで(通勤20分) 家族構成:一人暮らし、実家には両親と2歳下の妹 恋愛事情:独身。彼女は2年いない(本人は「忙しいだけ」と言い張る)
asgiサーバー・とは?
asgiサーバー・とは、ウェブアプリケーションとウェブサーバーの間のやり取りを取り決める共通のインターフェースです。ASGI は Asynchronous Server Gateway Interface の略で、従来の WSGI の限界を乗り越えるために設計されました。
WSGI は同期処理に特化しており、同時に多くの接続を処理するのが苦手でした。そのため、チャットアプリやリアルタイム機能を持つアプリには不向きでした。
これに対して ASGI は非同期処理を前提としており、WebSocket や長いポーリング、イベント駆動型の処理を効率よく扱えます。これにより、FastAPI や Django Channels のような現代的なフレームワークと組み合わせて、同時接続を多く扱えるウェブアプリが作れるようになりました。
ASGI サーバーはアプリと実世界のネットワークの橋渡しを行います。アプリは非同期で動くコードを実装し、サーバーはイベントループを回して接続を受け取り、データを適切なタイミングでアプリへ渡します。
代表的な ASGI サーバーには uvicorn、daphne、hypercorn などがあります。最もよく使われる組み合わせは FastAPI や Starlette を uvicorn で動かすパターンです。コマンド例としては、uvicorn your_app:app --reload のように、アプリのエントリーポイントを指定して起動します。
実運用では Gunicorn のようなプロセス管理ツールと組み合わせて、UvicornWorker で動かすことも多いです。これにより複数のワーカーを使ってリクエストを並列処理できます。
以下の表は、WSGI と ASGI の違いをざっくり比較したものです。
| WSGI | ASGI | |
|---|---|---|
| 対応 | 同期のみ | 同期と非同期の両方 |
| 代表サーバー | gunicorn, uWSGI | uvicorn, daphne, hypercorn |
| 適用例 | 従来のウェブページ中心 | WebSocket を使う通知・チャット・リアルタイム処理 |
初心者が最初に覚えるポイントは、まずASGIが非同期処理を活用している点と、uvicorn を使って動かすのが手軽だという点です。自分の作るアプリがリアルタイム機能を必要とするなら、ASGI サーバーを選ぶと良いでしょう。
よくある誤解として、ASGI は WebSocket のみを扱うと思われがちですが、それだけではありません。HTTP リクエストの処理も非同期で行えるため、通常のウェブページ表示にも十分対応します。
最後に、導入の手順を簡単にまとめます。まずは Python の仮想環境を作成し、ASGI に対応したフレームワークをインストールします。次に uvicorn などのサーバーをインストールし、アプリのエントリポイントを指定して起動します。開発中は --reload オプションを使うとコード変更が自動で反映されて便利です。
asgiサーバーの同意語
- ASGI対応サーバー
- ASGI仕様に準拠し、ASGIアプリを実行できるWebサーバー。非同期処理を前提に設計されています。
- ASGI互換サーバー
- ASGI仕様と互換性を持つサーバーで、ASGIアプリを問題なく動かせることを意味します。
- ASGI実装サーバー
- ASGIインターフェースを実装しているサーバーで、ASGIアプリの実行を可能にします。
- ASGI準拠サーバー
- ASGI規格に準拠したサーバー。仕様に沿って動作することを指します。
- ASGI対応Webサーバー
- WebサーバーとしてASGIに対応しており、非同期処理をサポートします。
- Python向けASGIサーバー
- Python環境で動作するASGIサーバー。DaphneやUvicornなどが代表例です。
- 非同期対応サーバー(ASGI対応)
- ASGIの非同期仕様を実装・対応しているサーバーで、同様の用途に使われます。
- ASGIインターフェース対応サーバー
- ASGIインターフェースを実装・対応しているサーバーのこと。
- ASGI実行基盤
- ASGIアプリを実行するための基盤となるサーバー。アプリとサーバーの橋渡しを担います。
- ASGI対応アプリ実行プラットフォーム
- ASGIアプリを動かすためのプラットフォーム的役割を果たすサーバー。
asgiサーバーの対義語・反対語
- WSGIサーバー
- ASGIは非同期・イベント駆動を前提としたサーバーインターフェースであるのに対し、WSGIサーバーは同期処理が基本のインターフェース。つまり、同時接続の処理や長時間の接続を非同期で効率的に扱う点が異なる点が対になるものとして挙げられます。
- 同期サーバー
- リクエスト処理を直列に行うタイプのサーバー。ASGIサーバーが持つ非同期実行・イベント駆動の強みと対照的で、同時接続処理の効率が低くなることが多いと考えられます。
- イベント駆動でないサーバー
- イベント駆動(非同期)機構を持たないサーバー。ASGIの特徴である並行処理を活かせず、リソースの有効活用が難しい点が対になる表現です。
- CGIサーバー
- 古典的なCGIを用いるサーバーで、リクエストごとに新規プロセスを立ち上げる設計が多く、非同期処理を前提とするASGIサーバーとは設計思想が異なります。
- 従来型サーバー
- 現代の非同期処理やWebSocket対応などを前提としない、従来の設計思想のサーバー。ASGIサーバーの新しい機能と対になるイメージです。
- 単一スレッドサーバー
- 1つのスレッドで処理を回す構成のサーバー。ASGIサーバーが推奨する並行処理・非同期実行とは相性が悪いことが多く、対となる概念として挙げられます。
asgiサーバーの共起語
- ASGI
- Asynchronous Server Gateway Interfaceの略。Pythonの非同期ウェブアプリを動かす標準的なインターフェース。
- ASGIサーバー
- ASGIアプリを実行する実体のサーバー。HTTPリクエストやWebSocketを受け取り、アプリへ渡してレスポンスを返す機能を持つ。
- ASGIアプリ
- ASGI仕様に準拠したアプリケーション。スコープとイベントのやり取りでリクエストを処理する。
- WSGI
- Web Server Gateway Interfaceの略。従来の同期版インターフェースで、ASGIの前提となる基盤。
- uvicorn
- 高性能なASGIサーバー。FastAPIやStarletteなどのアプリを高速で動かす定番の実装。
- gunicorn
- 汎用サーバーでWSGI/ASGIの両方に対応。複数ワーカーで並列実行して同時接続を処理する。
- daphne
- Django Channelsと組み合わせて使われるASGIサーバーのひとつ。
- Hypercorn
- ASGIサーバーの一つ。HTTP/2やWebSocketなど最新機能をサポートすることがある。
- Starlette
- 軽量なASGIフレームワーク。API作成時にASGIサーバーと組み合わせて使われる。
- FastAPI
- ASGIベースの高速なWebフレームワーク。自動ドキュメント生成などが特徴。
- Django
- 人気の高いWebフレームワーク。ASGIサポートを使って非同期処理にも対応。
- Tornado
- 非同期Webフレームワーク/サーバー。ASGI対応を通じて他のASGIサーバーと連携することがある。
- nginx
- リバースプロキシとしてASGIサーバーの前段でTLS終端・負荷分散を担うことが多い。
- WebSocket
- ASGIが提供する二方向の長期接続。リアルタイム機能を実現する。
- HTTP/1.1
- HTTPの基本プロトコル。ASGIサーバーはこのリクエスト/レスポンスを処理する。
- HTTP/2
- HTTPの改良版で並列リクエストを効率化。ASGIサーバーの一部は対応している。
- HTTP/3
- HTTPの新世代プロトコル。一部のASGIサーバーで実験的に採用されている。
- asyncio
- Pythonの非同期IOを実現する標準ライブラリ。ASGIの動作基盤となる。
- イベントループ
- 非同期処理を回す中心的な仕組み。ASGIサーバーの実装にも関わる。
- リクエスト
- クライアントからASGIアプリへ渡されるHTTPリクエスト。
- レスポンス
- ASGIアプリが返すHTTPレスポンス。
- ヘルスチェック
- サーバーの稼働状態を監視するエンドポイントや機能。
- 負荷分散
- 複数のワーカー/サーバーへリクエストを分配して処理能力を向上させる仕組み。
- スケーリング
- トラフィックの増減に合わせてリソースを拡大・縮小すること。
- ロードバランサ
- 複数のサーバーへリクエストを配分する機器またはソフトウェア(例: nginx, HAProxy)。
asgiサーバーの関連用語
- ASGI
- ASGIとは、サーバーと非同期Webアプリをつなぐ公式仕様です。HTTPやWebSocket、ライフサイクルイベントなどを1つの統一インターフェースで扱えます。
- WSGI
- WSGIは従来の同期的なWebアプリとサーバーの標準です。ASGIの前身で、非同期やWebSocketには対応していません。
- ASGIサーバー
- ASGIアプリを実行するサーバー。HTTPやWebSocket、ライフサイクルイベントに対応します。
- Uvicorn
- Pythonでよく使われる高速なASGIサーバー。asyncioとuvloopを活用し、FastAPIやStarletteと相性が良いです。
- Daphne
- TwistedベースのASGIサーバー。Django Channelsとの組み合わせで使われることが多いです。
- Hypercorn
- ASGIサーバーの一つ。HTTP/1.1だけでなくHTTP/2やWebSocketもサポートします。
- Gunicorn(uvicornワーカー)
- GunicornはWSGI/ASGIを動かすサーバー。uvicornのワーカーを使えばASGIアプリを動かせます。
- ASGIアプリケーション
- ASGI仕様に準拠したPythonコード。scope/receive/sendを介してイベントを受け取り、レスポンスを返します。
- ASGI仕様
- ASGIアプリとサーバーが従う公式仕様。リクエストの流れ、イベントの種類、スコープ、ライフサイクルなどを定義します。
- scope
- ASGIアプリへ渡されるリクエスト情報の辞書。typeはhttpやwebsocketなど。パスやメソッド、ヘッダなどを含みます。
- receive
- ASGIアプリとサーバーの間で受信イベントを受け取る非同期関数。リクエストボディの断片などが来ます。
- send
- ASGIアプリからサーバーへレスポンスやイベントを送る非同期関数。
- lifespan
- アプリの起動と終了を通知するイベント。startup/shutdownを通じて初期化や後片付けを行います。
- WebSocket
- ASGIで使われる二方向のリアルタイム通信。接続、メッセージの受信・送信をイベントとして扱います。
- HTTP
- ASGIのHTTPリクエスト/レスポンスを扱うプロトコル。scope/receive/sendを組み合わせて処理します。
- ASGIミドルウェア
- ASGIアプリの前後に挟んで共通処理を追加する部品。認証、ロギング、エラーハンドリングなどを実現します。
- Django Channels
- Django向けのリアルタイム機能をASGIで実現する拡張。WebSocketなどの処理をサポートします。
- FastAPI
- ASGI対応の高速なWebフレームワーク。自動生成ドキュメントなどを備え、UvicornなどのASGIサーバーで動かします。
- Starlette
- 軽量なASGIフレームワーク/基盤。FastAPIの土台にもなります。
- Sanic
- 非同期フレームワークで、ASGI対応のアプリを開発できます。
- リバースプロキシ(Nginx/Caddy)
- TLS終端や静的ファイル配布、ロードバランシングを担当する前段サーバー。ASGIサーバーの前に配置します。
- 開発時の自動リロード
- コード変更を検知してサーバーを自動再起動する機能。開発時に便利ですが本番環境には向きません。
- 非同期I/O (asyncio)
- Pythonの非同期処理モデル。ASGIサーバーはこれを利用して多くの接続を同時に処理します。
- TLS終端
- 通信の暗号化を前段のリバースプロキシで終端させ、バックエンドのASGIサーバーへは平文で渡す構成が一般的です。



















