created: 2026/01/01,
modified: 2026/01/04
React の基礎、Django 連携
JavaScriptはウェブの基本言語で、ブラウザー上で標準で直接動くプログラミング言語はJavaScriptだけです。
TypeScriptはJavaScriptを拡張した言語で、コードを書く時点で型をチェックが必要で、コンパイル(トランスパイル)を行ってJavaScriptに変換します。TypeScriptは型定義により大規模開発でのエラー防止やコード品質向上、可読性向上が実現されています。
ReactはFacebookが開発したJavaScriptライブラリで、ユーザーインターフェース(UI)を構築するために使われます。特に、動的で複雑なWebアプリケーションを効率的に作成できるのが特徴です。
開発環境での役割:
**重要なポイント:** Node.jsは**開発時のみ**必要で、サーバー側で動作するわけではありません。
最終的には純粋なJavaScript、HTML、CSSになります。
ビルドプロセス:
結果: 本番環境ではNode.jsは不要。生成された静的ファイルをブラウザが読み込むだけで動作します。
コンポーネントベース:
仮想DOM(Virtual DOM):
JSX:
# 1. プロジェクト作成(開発開始)
npx create-react-app my-app
cd my-app
# 2. 開発サーバー起動(開発中)
npm start
# → Node.jsがローカルサーバーを起動
# → http://localhost:3000 でアプリが動く
# 3. ビルド(本番用ファイル生成)
npm run build
# → buildフォルダに静的ファイルが生成される
# 4. デプロイ(本番公開)
# buildフォルダの内容をWebサーバーにアップロード
# → もうNode.jsは不要!純粋なHTML/CSS/JSとして動作
React と Django 連携
# Reactのビルド
cd /var/www/django-5/frontend
npm run build
# Django側でReactビルドファイルを配信する設定
# settings.pyに追加
vi /var/www/django-5/myproject/settings.py
# settings.pyに追加する内容:
# 既存のSTATIC設定の下に追加
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'frontend/build/static'),
]
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'frontend/build')],
# ... 以下省略
},
]
ReactとDjangoを連携させる方法は、DjangoをバックエンドAPI、Reactをフロントエンドとして使う構成が一般的です。以下、詳しく解説します。
2つの主な連携方法:
cd /var/www/django-5/frontend
npm run build
STATICFILES_DIRSの設定:
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'frontend/build/static'),
]
TEMPLATESの設定:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'frontend/build')],
# ...
},
]
Reactアプリを表示するためのビューを追加:
# views.py
from django.views.generic import TemplateView
class ReactAppView(TemplateView):
template_name = 'index.html'
# urls.py
from django.urls import path, re_path
from .views import ReactAppView
urlpatterns = [
# APIエンドポイント
path('api/', include('api.urls')),
# Reactアプリ(すべてのルートをReactに渡す)
re_path(r'^.*$', ReactAppView.as_view(), name='react'),
]
ユーザーがブラウザでアクセス
↓
Djangoが index.html を返す(Reactのエントリーポイント)
↓
ブラウザが index.html を読み込む
↓
HTML内の <script> タグでReactのJSファイルを読み込む
↓
Reactアプリがブラウザで動作開始
↓
必要に応じてDjangoのAPIエンドポイント(/api/...)にリクエスト
↓
DjangoがJSON形式でデータを返す
↓
Reactがデータを受け取って画面を更新
Django側(APIエンドポイント):
# Django REST frameworkを使用
# api/views.py
from rest_framework.decorators import api_view
from rest_framework.response import Response
@api_view(['GET'])
def get_data(api_view):
data = {'message': 'Hello from Django!'}
return Response(data)
# api/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('data/', views.get_data, name='get_data'),
]
React側(APIリクエスト):
// React component
import React, { useEffect, useState } from 'react';
function App() {
const [data, setData] = useState(null);
useEffect(() => {
// DjangoのAPIエンドポイントにリクエスト
fetch('/api/data/')
.then(response => response.json())
.then(data => setData(data));
}, []);
return (
<div>
<h1>{data ? data.message : 'Loading...'}</h1>
</div>
);
}
export default App;
開発中はReactの開発サーバーを使用:
# React開発サーバー(ポート3000)
cd frontend
npm start
# Django開発サーバー(ポート8000)
python manage.py runserver
CORS設定が必要:
# settings.py
INSTALLED_APPS = [
# ...
'corsheaders',
]
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
# ...
]
# 開発時のみ
CORS_ALLOWED_ORIGINS = [
"http://localhost:3000",
]
本番環境では:
/var/www/django-5/
├── myproject/ # Djangoプロジェクト
│ ├── settings.py
│ ├── urls.py
│ └── ...
├── api/ # Django REST API
│ ├── views.py
│ ├── urls.py
│ └── ...
├── frontend/ # Reactアプリ
│ ├── public/
│ ├── src/
│ ├── build/ # ビルド後の静的ファイル
│ │ ├── index.html
│ │ └── static/
│ │ ├── css/
│ │ └── js/
│ ├── package.json
│ └── ...
└── manage.py
# 1. Reactをビルド
cd /var/www/django-5/frontend
npm run build
# 2. Djangoの静的ファイルを収集
cd /var/www/django-5
python manage.py collectstatic
# 3. Djangoを再起動(例:Gunicorn)
sudo systemctl restart gunicorn
# 4. Webサーバー(Nginx)の設定確認
# staticファイルはNginxから直接配信することも可能
この構成により、モダンなSPA(Single Page Application)とサーバーサイドの機能を組み合わせた、パワフルなWebアプリケーションが構築できます!