created: 2026/01/04,
modified: 2026/01/04
DjangoとReact連携、本番環境へ配信
Viteのデフォルトの出力先は`dist`ディレクトリです。つまり、`frontend/dist`が標準の出力先になります。
設定方法
`vite.config.js`または`vite.config.ts`で出力先を変更できます:
export default {
build: {
outDir: 'build' // distからbuildに変更
}
}
従来のCreate React Appとの違い
Djangoとの連携における推奨
Djangoと連携する場合、どちらの出力先でも問題ありませんが、以下の点を考慮してください:
Vite 版(出力先 `dist`)で、`npm run build` → Django 経由で配信するところまで
Vite 側でビルドする
cd /var/www/django-5/frontend
npm run build
Vite のデフォルトだと、こういう構成で `dist` ができます:
frontend/
├── dist/
│ ├── index.html
│ └── assets/
│ ├── *.js
│ └── *.css
└── ...
Vite 用に パスを `frontend/dist` に読み替える 形になります。
# /var/www/django-5/myproject/[settings.py](http://settings.py)
#
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'frontend/dist/assets'),
]
#
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
# ここで index.html をテンプレートとして扱う
'DIRS': [os.path.join(BASE_DIR, 'frontend/dist')],
'APP_DIRS': True,
...
]
ポイント:
SPA のエントリーポイントとして React を返すビューを 1 つ作ります。
例:`myapp/views.py`
from django.views.generic import TemplateView
class ReactAppView(TemplateView):
template_name = 'index.html'
SPA っぽく「どのURLでもReactに渡す」パターンなら `re_path` を使います。
`myproject/urls.py` か、フロント用の urls に追加:
from django.contrib import admin
from django.urls import path, re_path, include
from myapp.views import ReactAppView
urlpatterns = [
path('admin/', [admin.site](http://admin.site).urls),
# API は /api/xxx/ で運用
path('api/', include('myapp.urls')),
# それ以外のパスは全部 React に渡す
re_path(r'^.*$', [ReactAppView.as](http://ReactAppView.as)_view(), name='react-app'),
]
これで:
のどこにアクセスしても、Django が `dist/index.html` を返し、
中で React Router 等がルーティングする、という形になります。
もし Django の `STATIC_ROOT` + `collectstatic` 運用をしていて、
Nginx から一括で静的ファイルを配信する構成にしたい場合:
cd /var/www/django-5
python [manage.py](http://manage.py) collectstatic
(「Django 経由だけで配信する」運用なら `collectstatic` は必須ではないですが、本番構成では Nginx に任せることが多いので、やっておく想定が多いです。)
ビルド
cd /var/www/django-5/frontend
npm run build
Django 再起動(gunicorn 経由なら)
sudo systemctl restart gunicorn-django5
ブラウザでアクセス
ビルド先
静的ファイルディレクトリ
テンプレートディレクトリ
ビュー
URL ルーティング