Django

Django 5.0で実務レベルのECサイトを数時間で構築する手順

ⓘ本ページはプロモーションが含まれています

Contents

スポンサードリンク

1. 要件定義と開発ゴール設定

EC サイトは 機能要件非機能要件 を明確に分けて管理することで、MVP のスコープがブレにくくなります。このセクションでは、2025 年 12 月の記事「ECサイトに必要な機能と KPI」をベースに、実際の開発プロジェクトで使える要件整理シートを作成します。

1‑1. MVP と拡張要件の分離

まずは 最小限のリリース(MVP) を決め、その後に追加したい機能を「インターフェイスだけ」実装しておくと、将来的な拡張が容易です。

カテゴリ MVP で必須の機能 後期に追加予定
商品管理 商品登録・カテゴリ分け・在庫管理 バリエーション(サイズ/色)
ユーザー メール認証、Google / Apple ソーシャルログイン プロファイル編集、ポイント制度
カート・注文 カート保存、注文確定、メール通知 複数配送先、予約販売
決済 Stripe と Pay.jp のカード決済 Apple Pay、後払いサービス

1‑2. KPI の設定例

  • 月間売上:目標 ¥5,000,000(初期は 10 万円単位で測定)
  • コンバージョン率:商品詳細 → カート → 購入の完了率を 2 % 以上にする
  • 平均注文額 (AOV):¥3,500 を目標に、クロスセル/アップセル施策で向上

KPI が数値化されていると、開発途中でも「成功指標」に対して進捗を可視化しやすくなります。


2. 開発環境構築とプロジェクトセットアップ

ローカルと本番の差異をできるだけ小さく保つために、Python 仮想環境 + Docker Compose の組み合わせが最適です。以下では具体的なコマンド例と設定ファイルを示します。

2‑1. Python 環境(pyenv + venv)

ポイント
- pyenv はシステム全体に影響しないので、チームメンバー全員で同一バージョンを共有できます。
- poetry lock による deterministic な依存関係は CI でも再現性が高くなります。

2‑2. Docker Compose 設定

Docker Compose の利点

  1. データベース・キャッシュがコンテナ化され、ローカルでも本番に近いネットワーク構成が再現できる。
  2. docker compose up -d全スタックが一括起動 するため、環境セットアップの工数が大幅削減。

2‑3. Django 5.0 のインストールと ASGI 設定

ecsite/asgi.py はそのままで OK。settings.py に以下を追記して ASGI を有効化します。

注意:Django 5.0 の async ORM は未実装ですが、ビュー層で async def を書くことで外部 API 呼び出しの待ち時間を削減できます。

2‑4. アプリ分割と URL 設計

機能ごとに product, cart, order, payment の 4 つのアプリへ分離すると、責務が明確になりテストや再利用が楽になります。

ecsite/urls.py は次のようにシンプルにまとめます。


3. データモデル設計と管理画面カスタマイズ

データベースの構造は 検索性能拡張性 を両立させることが重要です。ここでは主要エンティティ(Product, Category, CartItem, Order, PaymentLog)を例に、インデックスやユニーク制約の付け方を解説します。

3‑1. ER 図に基づくモデル定義

  • JPY の価格は小数点以下が不要 なので decimal_places=0 にしておくと、金額計算時に余計な丸め処理を回避できます。

マイグレーション
python manage.py makemigrations && python manage.py migrate で自動生成。インデックスは Meta.indexes に列挙するだけで、DB 側の最適化が即座に反映されます。

3‑2. 管理画面の拡張(Import‑Export)

大量商品や受注情報を CSV で一括操作したいケースは多いため、django-import-exportModelAdmin の組み合わせが便利です。

注文管理画面に CSV エクスポート アクションを追加すれば、レポート作成がボタン一つで完了します。


4. 認証・商品表示・カートフロー実装

4‑1. django-allauth とソーシャルログイン設定

allauth を導入すると、メール認証だけでなく Google / Apple の OAuth が 数分 で利用可能になります。

テンプレート例(templates/account/login.html):

4‑2. HTMX による部分更新

HTMX は AJAX の記述量を激減 させ、サーバー側テンプレートだけでリッチな UI が実装できます。

ビューは async にでき、データ取得は sync_to_async でラップします。

4‑3. カートと注文フロー(DB 永続化モデル)

設計方針
- 未ログインでもカートを保持Cart に UUID のセッションキーを付与。
- トランザクションで在庫減算transaction.atomic() で競合を防止。

カート追加ビュー(async):


5. 決済統合とテスト戦略

5‑1. Stripe / Pay.jp の最新 API と Webhook 設定(2026 年版)

5‑1‑a. 金額計算の注意点(JPY は 円単位

Stripe の amount パラメータは 最小通貨単位 で指定します。JPY の場合は 1 円 = 1 が最小単位なので、100 倍にしないことが重要です。

5‑1‑b. Webhook ハンドラ(非同期対応)

5‑1‑c. Pay.jp の実装例

5‑2. pytest‑django と factory_boy によるテスト自動化

5‑2‑a. テストデータファクトリ

5‑2‑b. 非同期ビューのテスト例

5‑3. CI(GitHub Actions)で自動テスト実行


6. CI/CD パイプライン・本番デプロイ、セキュリティ&パフォーマンス最適化

6‑1. Docker デプロイの全体像(Heroku / Render / Vercel)

プラットフォーム デプロイ手順概要 注意点
Heroku heroku stack:set container → GitHub Actions の heroku container:push web でデプロイ 環境変数は Dashboard > Settings > Config Vars に設定
Render サービス作成時に「Docker」タイプを選択し、リポジトリとブランチを指定 自動ビルドが走るので Dockerfile が最新であることを確認
Vercel Docker 対応は ベータ版 です。vercel --prod でデプロイ可能だが、本番利用前に必ずテスト環境で検証することを推奨 Vercel の公式ドキュメントに「Docker はベータ対応」と明記されているため、リスクを理解した上で使用

重要:Vercel の Docker デプロイはまだベータ段階です。機能制限や不具合が起きた際のロールバック手順を事前に用意しておくと安心です。

6‑1‑a. 共通 .env.example

6‑2. セキュリティベストプラクティス(OWASP Top 10 対応)

項目 推奨設定例
CSRF Django のデフォルト CSRF トークンは必ず有効にし、{% csrf_token %} を全フォームで使用
CSP (Content Security Policy) django-csp パッケージを導入し、外部スクリプトは Stripe のみ許可
HTTPS 強制 SECURE_SSL_REDIRECT = TrueSESSION_COOKIE_SECURE = TrueCSRF_COOKIE_SECURE = True
データ暗号化 カード情報は決済プロバイダに委託し、ローカル DB にはトークンハッシュだけ保存
脆弱性スキャン pip-audit と GitHub Dependabot を有効化し、PR 時に自動で警告を出す

6‑3. パフォーマンス最適化(キャッシュ・非同期ビュー・インデックス)

  1. Redis キャッシュ
  2. django-redis を利用してページキャッシュとセッションストアを統一。

  1. 商品一覧のキャッシュ(5 分間)

  1. DB インデックスはモデル Meta.indexes に列挙済みです。検索系クエリの実行計画を EXPLAIN ANALYZE で定期的に確認し、必要なら複合インデックスを追加してください。

6‑4. モニタリング・ロギング(付録)

ツール 用途
Prometheus + Grafana コンテナ CPU/メモリ・DB クエリ遅延の可視化
Sentry Django の例外をリアルタイムで捕捉し、スタックトレースを共有
Datadog (Optional) 1 つのダッシュボードでインフラとアプリケーション両方を監視

設定例(sentry_sdk.init):


7. まとめと次のステップ

  • 要件定義で MVP と拡張計画を分離し、KPI を数値化したことで開発指標が明確に。
  • Docker + pyenv によるローカル環境は、本番と同一構成を保証し CI でも再利用可能。
  • モデル設計では JPY の整数扱い、インデックス付与、ハッシュ化したトランザクション ID でセキュリティと検索性能を両立。
  • 認証・UIは allauth と HTMX により実装コストを削減しつつ、UX を向上させた。
  • 決済統合では Stripe の amount 計算ミス(100 倍)を排除し、Webhook で非同期結果を安全にハンドリング。
  • テスト・CI/CDは pytest‑django と GitHub Actions で自動化し、Docker デプロイは Heroku/Render の本番対応と Vercel ベータ版の注意点を明示。
  • セキュリティ・パフォーマンスは CSP、HTTPS、Redis キャッシュ、async ビューで現代的な Web アプリ要件を満たす。

次にやるべきこと
1. 本稿の手順通りにローカル環境と GitHub リポジトリを作成し、CI が緑になるまで走らせる。
2. ステージング環境(Render の無料枠や Heroku の Review Apps)で Stripe テストキー を使い決済フローを検証する。
3. KPI ダッシュボード(Grafana + Prometheus)を構築し、リリース後の指標をリアルタイムでモニタリング。

以上が 2026 年版 Django EC サイト開発フルスタックガイドです。ぜひ本稿をプロジェクトのロードマップに組み込み、実際のサービス構築へと踏み出してください!

スポンサードリンク

-Django