# Django 5.2.8 ドキュメント

# ASGI とともにデプロイするには

WSGI だけでなく、Django は非同期ウェブサーバやアプリケーションのための新しい Python 標準である ASGI でのデプロイもサポートしています。

Django の `startproject` 管理用コマンドは、デフォルトの ASGI 設定をセットアップします。必要に応じて、あなたのプロジェクトと ASGI 準拠の Web サーバに合わせて微調整することができます。

Django には以下の ASGI サーバのために、手引きとなるドキュメントが用意されています。

- Django を Daphne とともに使う
- Django を Hypercorn とともに使う
- Django を Uvicorn とともに使う

## `application` オブジェクト

WSGI と同様に、ASGI は `application` という呼び出し可能オブジェクトを提供しており、アプリケーション サーバはこれを使用してあなたのコードと通信します。これは一般的に、サーバにアクセスできる Python モジュールの中で `application` という名前のオブジェクトとして提供されています。

`startproject` コマンドは、この `application` 呼び出し可能オブジェクトを含む `<project_name>/asgi.py` ファイルを生成します。

開発サーバー (`runserver`) では使用されませんが、開発環境と本番環境のどちらでも、任意の ASGI サーバーからも使用できます。

ASGI サーバーは通常、呼び出し可能オブジェクト application へのパスを文字列として取ります。たとえば、ほとんどの Django プロジェクトでは、`myproject.asgi:application` のような文字列になります。

警告

Django のデフォルトの ASGI ハンドラは全てのコードを同期スレッドで実行します が、独自の非同期ハンドラを実行する場合は、非同期安全性を意識する必要があります。

非同期コードの中で、ブロッキングな同期関数やライブラリを呼び出さないでください。Django は、非同期安全でない Django の部分でこのようなことができないようにしていますが、サードパーティのアプリや Python ライブラリではそうとは限りません。

## Settings モジュールを設定する

ASGI サーバがアプリケーションをロードするとき、Django は settings モジュールをインポートする必要があります――アプリケーション全体がここで定義されます。

Django は適切な Settings モジュールを見つけるために、 `DJANGO_SETTINGS_MODULE` 環境変数を使用します。これは設定モジュールへのドット区切りのパスを含んでいなければなりません。開発時と実運用時で別々の値を使用することも可能です。どのように設定を組織するか次第です。

この変数が指定されていない場合、デフォルトの `asgi.py` は `mysite.settings` を設定します。 `mysite` はプロジェクトの名前です。

## ASGI ミドルウェアの適用

ASGI ミドルウェアを適用したり、他の ASGI アプリケーションに Django を組み込むには、 Django の `application` オブジェクトを `asgi.py` ファイルでラップします。例:

    from some_asgi_library import AmazingMiddleware

    application = AmazingMiddleware(application)