asgiサーバー・とは?初心者でもわかる仕組みと使い方共起語・同意語・対義語も併せて解説!

  • このエントリーをはてなブックマークに追加
asgiサーバー・とは?初心者でもわかる仕組みと使い方共起語・同意語・対義語も併せて解説!
この記事を書いた人

高岡智則

年齢: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 サーバーには uvicorndaphnehypercorn などがあります。最もよく使われる組み合わせは FastAPI や Starlette を uvicorn で動かすパターンです。コマンド例としては、uvicorn your_app:app --reload のように、アプリのエントリーポイントを指定して起動します。

実運用では Gunicorn のようなプロセス管理ツールと組み合わせて、UvicornWorker で動かすことも多いです。これにより複数のワーカーを使ってリクエストを並列処理できます。

以下の表は、WSGI と ASGI の違いをざっくり比較したものです。

<th>観点
WSGIASGI
対応同期のみ同期と非同期の両方
代表サーバーgunicorn, uWSGIuvicorn, 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サーバーへは平文で渡す構成が一般的です。

asgiサーバーのおすすめ参考サイト


インターネット・コンピュータの人気記事

awstatsとは?初心者でもわかる使い方と基本解説共起語・同意語・対義語も併せて解説!
16103viws
bing・とは?初心者のための基本ガイド:検索エンジンの仕組みと使い方共起語・同意語・対義語も併せて解説!
2628viws
着信転送とは?初心者向けガイドで分かる使い方と設定のコツ共起語・同意語・対義語も併せて解説!
1148viws
差し込み印刷・とは?初心者でもすぐわかる使い方と仕組みガイド共起語・同意語・対義語も併せて解説!
1146viws
com端子・とは?初心者にも分かる基礎ガイド|シリアルポートの使い方と歴史を解説共起語・同意語・対義語も併せて解説!
1023viws
7zファイル・とは?初心者でもわかる使い方と特徴を解説共起語・同意語・対義語も併せて解説!
980viws
全角文字とは?初心者向け解説|全角と半角の違いをやさしく学ぶ共起語・同意語・対義語も併せて解説!
967viws
充電アダプターとは何かを徹底解説|初心者でも分かる基本と選び方のコツ共起語・同意語・対義語も併せて解説!
964viws
リマインドメールとは?初心者にもわかる基本ガイドと使い方のコツ共起語・同意語・対義語も併せて解説!
859viws
pinロックとは?初心者が知っておくべき基本と使い方ガイド共起語・同意語・対義語も併せて解説!
854viws
none とは?初心者にもやさしく解説する意味と使い方ガイド共起語・同意語・対義語も併せて解説!
794viws
16進数カラーコード・とは?初心者でもつまずかない基礎と使い方ガイド共起語・同意語・対義語も併せて解説!
791viws
asp・とは?初心者向けに徹底解説する基本と使い方ガイド共起語・同意語・対義語も併せて解説!
736viws
xlsmとは?初心者でも分かるExcelのマクロ付きファイルの基本共起語・同意語・対義語も併せて解説!
695viws
ローカルポート・とは?初心者にも分かる基本と使い方ガイド共起語・同意語・対義語も併せて解説!
692viws
sha256とは?初心者が知るべき暗号ハッシュの基礎と使い道共起語・同意語・対義語も併せて解説!
633viws
countifとは?初心者でもすぐ使える基本と応用ガイド共起語・同意語・対義語も併せて解説!
596viws
ワンタイムコード・とは?初心者でも分かる基本と使い方ガイド共起語・同意語・対義語も併せて解説!
588viws
csvダウンロードとは?初心者が今すぐ使える基本ガイド共起語・同意語・対義語も併せて解説!
587viws
googleドキュメントとは?初心者が今日から使いこなす基本ガイド共起語・同意語・対義語も併せて解説!
528viws

新着記事

インターネット・コンピュータの関連記事