d-Party のバックエンド部分を担当するフォルダ
開発・エージェント向けの詳細は
AGENTS.mdを参照。 (Python 3.13 · Django 6.0 · 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 は撤去済み。解析は Prometheus/Grafana を利用)。
DEBUG や MY_DOMAIN などの環境固有値は、monorepo ルートの env ファイルから
Compose 経由で注入されます(backend 単体ではなく、ルートで docker compose を実行する)。
- dev(ルート
.env.dev、DEBUG=1)…entrypoint.shがrunserverを起動し、localhost:8000で Django を直叩きできる。 - 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 は不要です。
CI の pytest ジョブは uv run pytest --cov --cov-report=xml を実行し、
py-cov-action/python-coverage-comment-action
で PR にカバレッジのサマリコメント を投稿します。外部 SaaS(Codecov 等)は使わず、
GITHUB_TOKEN だけで動きます。バッジとカバレッジ履歴は専用ブランチ
python-coverage-comment-action-data に保存され、README 冒頭のバッジがそこを参照します。
action は coverage.xml ではなく .coverage(binary) を読むため、
pyproject.toml の [tool.coverage.run] で relative_files = true を有効にしています
(CI とローカルで絶対パスが異なると差分が正しく解決できないため)。
一度だけ必要な設定(リポジトリ管理者)
- この PR を main へマージする。
- main への最初の CI 実行で、action が
python-coverage-comment-action-dataブランチを 自動生成する(手動で作る必要はない)。 - そのブランチが ブランチ保護の対象になっていない ことを確認する (ワイルドカードの保護ルールがある場合のみ要注意)。
- Settings → Actions → General → Workflow permissions が
Read and write permissions になっていることを確認する
(ジョブ側でも
contents: write/pull-requests: writeを宣言済み)。 - 以上で README 冒頭のカバレッジバッジが表示される。表示されない場合は、生成された
python-coverage-comment-action-dataブランチの README に出力される最新の バッジ URL を確認して差し替える。
旧 Codecov 連携(
CODECOV_TOKENシークレットと codecov バッジ)は廃止しました。 シークレットは不要になったので削除して構いません。 なおGIST_TOKEN/ gist ID は 不要 です。この action は v3 以降、バッジの保存先を Gist から上記のデータブランチへ移行しており、gist 関連の入力は存在しません。
フォーマッタ・Lint・import 順序(旧 black + isort + flake8 系)はすべて ruff に統一
されています。設定は pyproject.toml の [tool.ruff] にあり、select に I(isort)を
含むため ruff check が import 順序も検査します。
uv sync
uv run ruff format . # 整形
uv run ruff check . --fix # Lint + import 整列(自動修正)CI(.github/workflows/ci.yml の ruff ジョブ)は 検証のみ を行い、違反があれば
失敗します(旧 autoblack.yml のようにブランチへ自動コミット / force-push はしません)。
手元で以下が通ることを確認してから push してください。
uv run ruff format --check .
uv run ruff check .pre-commit install しておけば、コミット時に同じ ruff フックが走ります
(.pre-commit-config.yaml)。
ライセンスチェックを実行したい場合、全てのコンテナを立ち上げてから、以下のコマンドを実行してください。
docker compose exec django pip-licenses依存関係の可視化を実行したい場合、全てのコンテナを立ち上げてから、以下のコマンドを実行してください。
docker compose exec django pipdeptree --graph-output dot > dependencies.dotdアニメストア (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に集約しています。 適宜ご参照ください。
また、質問事項などがありましたら、ディスカッションからご連絡ください。