---
title: "ASGI とともにデプロイするには"
version: 5.0
locale: ja
source: https://docs.djangoproject.com/ja/5.0/howto/deployment/asgi/
canonical: https://djangodocs.dev/ja/5.0/howto/deployment/asgi/
---
# ASGI とともにデプロイするには

WSGI だけでなく、Django は非同期ウェブサーバやアプリケーションのための新しい Python 標準である [ASGI](https://asgi.readthedocs.io/en/latest/) でのデプロイもサポートしています。

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

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

- [Django を Daphne とともに使う](/ja/5.0/howto/deployment/asgi/daphne/)
- [Django を Hypercorn とともに使う](/ja/5.0/howto/deployment/asgi/hypercorn/)
- [Django を Uvicorn とともに使う](/ja/5.0/howto/deployment/asgi/uvicorn/)

## `application` オブジェクト

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

[`startproject`](/ja/5.0/ref/django-admin/#django-admin-startproject) コマンドは、この `application` 呼び出し可能オブジェクトを含む `<project_name>/asgi.py` ファイルを生成します。

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

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

> **Warning**
>
> Django のデフォルトの ASGI ハンドラは全てのコードを同期スレッドで実行します が、独自の非同期ハンドラを実行する場合は、非同期安全性を意識する必要があります。
>
> 非同期コードの中で、ブロッキングな同期関数やライブラリを呼び出さないでください。Django は、非同期安全でない Django の部分でこのようなことができないようにしていますが、サードパーティのアプリや Python ライブラリではそうとは限りません。

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

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

Django は適切な Settings モジュールを見つけるために、 [`DJANGO_SETTINGS_MODULE`](/ja/5.0/topics/settings/#envvar-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)
```
