d-Party のバックエンド部分を担当するフォルダ
開発・エージェント向けの詳細は
AGENTS.mdを参照。 (Python 3.13 · Django 5.2 · PostgreSQL · uv · ruff へモダナイズ済み)
初回は Django の migrate と collectstatic が必要になります。
従って初回起動時は以下のコマンドで実行する必要があります。
docker compose build --no-cache
docker compose up -d
docker compose exec django python manage.py makemigrations streamer
docker compose exec django python manage.py migrate
docker compose exec django python manage.py collectstatic --noinputまた 2 回目以降の起動であれば、docker compose up -dのみで起動することができます。
django コンテナは postgres の healthcheck 完了を待ってから起動します。
settings.py でdebug = Trueにおいてコンテナを起動させた場合に 8000 ポートにデプロイされている Django コンテナに直接アクセスすることで、django-debug-toolbar が有効に働きます。
DEBUG や MY_DOMAIN などの環境固有値は、monorepo ルートの env ファイルから
Compose 経由で注入されます(backend 単体ではなく、ルートで docker compose を実行する)。
- dev(ルート
.env.dev、DEBUG=1)…entrypoint.shがrunserverを起動し、localhost:8000で django-debug-toolbar が有効。 - prod(ルート
.env.prod、DEBUG=0)…gunicorn(uvicorn worker)で ASGI 配信。
manage.pyは/env_files/.env.globalをoverride=Trueで読み込みます。そのため 共有値のみ.env.globalに置き、環境固有値(DEBUG/MY_DOMAIN等)は ルートの.env.dev/.env.prodに分離しています(.env.globalに残すと prod 値が dev 値で上書きされるため)。詳細はルートの README の「環境設定」を参照。
開発環境を初期化したい場合以下の手順をたどってください
- コンテナの停止(
docker compose down) Postgresディレクトリにある data ディレクトリを中身ごと削除する- Django/streamer ディレクトリにある migrations ディレクトリを中身事削除する
テストを実行したい場合、全てのコンテナを立ち上げてから、以下のコマンドを実行してください。
docker compose exec django pytest --covローカル(コンテナ無し)でも
cd Django && uv run pytestで実行できます。 テストはconftest.pyで InMemoryChannelLayer を使うため Redis は不要です。
cd Django
uvx ruff format .
uvx ruff check . --fixライセンスチェックを実行したい場合、全てのコンテナを立ち上げてから、以下のコマンドを実行してください。
docker compose exec django pip-licenses依存関係の可視化を実行したい場合、全てのコンテナを立ち上げてから、以下のコマンドを実行してください。
docker compose exec django pipdeptree --graph-output dot > dependencies.dot保持期間クリーンアップ(manage.py cleanup)はコンテナ内 system cron が実行します。
docker compose exec django cat /var/log/cron.logdアニメストア (https://anime.dmkt-sp.jp) のページに注入された Chrome 拡張機能の
content script からローカルの localhost バックエンドへ繋ぐと、Chrome の
Private Network Access (PNA) によって接続が コンソールにエラーを出さずサイレントに
遮断 されます(WebSocket は code=1006 wasClean=false で即時 close、fetch は
Failed to fetch)。「公開ネットワーク → プライベートネットワーク」への接続が
Chrome 130+ で塞がれているためです。
開発時のみ、Chrome のフラグを無効化して回避します。
-
Chrome のアドレスバーに以下を 1 つずつ開く:
chrome://flags/#private-network-access-send-preflightschrome://flags/#private-network-access-respect-preflight-resultschrome://flags/#local-network-access-check-websockets(Chrome の新しい版で PNA から改称・WebSocket 専用の判定を行うフラグ)
-
各フラグのドロップダウンを Disabled に変更
-
右下に表示される 「Relaunch」 ボタンで Chrome を再起動
本番サイト (
https://d-party.net) は public origin 同士なので PNA の影響を受けません。 上記フラグはローカル開発でのみ無効化してください。
恒久対応(拡張機能側)は WebSocket の生成を service worker (background) に移し、
chrome-extension:// origin から接続する構成への変更です。
開発に必要な情報は出来る限り、wikiに集約しています。 適宜ご参照ください。
また、質問事項などがありましたら、ディスカッションからご連絡ください。