メインコンテンツに移動

ECサイトバックエンド設計:注文・在庫・決済・会員管理まで徹底解説

ECサイトのバックエンド設計は、商品を表示するだけの仕組みではありません。会員登録、ログイン、商品検索、カート、注文、決済、在庫更新、配送管理、返品対応、通知、分析、管理画面、外部サービス連携までを支える、EC運営全体の中核です。ユーザーから見える画面がどれだけ美しくても、裏側の処理が不安定であれば、注文漏れ、二重決済、在庫不整合、配送ミス、個人情報漏洩といった重大な問題につながります。

フロントエンドが「ユーザーに見える購買体験」を作る部分だとすれば、バックエンドは「正しく売る」「安全に処理する」「注文を確実に届ける」ための仕組みです。特にECでは、商品数、在庫数、注文数、ユーザー数、決済方法、配送条件、キャンペーン、セール負荷など、考えるべき要素が非常に多くなります。そのため、単に動く機能を作るだけではなく、将来的に商品数や注文数が増えても壊れにくい設計が重要になります。

ECバックエンドで特に難しいのは、複数の処理が連動する点です。たとえば、ユーザーが注文ボタンを押した瞬間には、カート内容の確認、価格の再計算、在庫の確認、在庫の確保、注文番号の発行、決済処理、注文ステータスの更新、通知送信、管理画面への反映など、多くの処理が関係します。このどこか一つでも設計が弱いと、ユーザー体験だけでなく運営側の業務にも大きな影響が出ます。

この記事では、ECサイトバックエンド設計を、会員管理、商品管理、カート、注文、在庫、決済、配送、API、データベース、セキュリティ、パフォーマンス、運用監視まで体系的に整理します。小規模ECを素早く立ち上げたい場合にも、大規模ECとして長期運用したい場合にも、どのような責務を分け、どこで整合性を守り、どの処理を慎重に設計すべきかを理解することが重要です。

1. ECサイトバックエンド設計とは

ECサイトバックエンド設計とは、ユーザーが商品を探し、カートに入れ、注文し、決済し、商品を受け取るまでの一連の処理をサーバー側で安全に管理する設計です。単なるデータ保存ではなく、注文状態、在庫状態、決済状態、配送状態、会員状態を整合性のある形で扱う必要があります。

ECでは、フロントエンドの画面表示とバックエンドの処理が密接に連携します。商品一覧を表示するだけでも、商品情報、価格、在庫、販売ステータス、カテゴリ、画像、検索条件、キャンペーン価格などが関係します。バックエンド設計が整理されていないと、機能追加のたびに処理が複雑化し、後から修正しにくいECシステムになってしまいます。

1.1 EC運営を支えるサーバー側の仕組み

ECバックエンドは、ユーザーから直接見えにくい部分ですが、EC運営の安定性を決める重要な基盤です。商品情報を保存するだけでなく、在庫数を正しく管理し、注文の状態を追跡し、決済結果を受け取り、配送状況を更新し、管理者が運営できる状態にする必要があります。ユーザーが商品を購入する短い操作の裏側では、多数の処理が連続して動いています。

特に注文処理では、金額、在庫、決済、配送先、注文者情報を正しく結びつけなければなりません。途中でエラーが起きた場合にも、注文だけ作られて決済されていない、決済されたのに注文が存在しない、在庫だけ減って注文が失敗した、といった状態を避ける必要があります。

領域バックエンドの役割重要ポイント
商品商品情報を管理する表示可否・価格・画像を整理する
会員ユーザー情報を管理する認証・住所・購入履歴を扱う
カート購入前の商品を保持する価格・在庫の再確認が必要
注文購入確定情報を管理する注文番号と状態管理が重要
決済支払い処理を連携する二重決済と失敗処理に注意
在庫販売可能数を管理する不整合を防ぐ設計が必要
配送出荷と追跡を管理する通知や配送会社連携が関係する

1.2 フロントエンドとの違い

フロントエンドは、商品一覧、商品詳細、カート画面、注文画面、マイページなど、ユーザーが直接操作する画面を作ります。一方、バックエンドは、その画面から送られてくるリクエストを受け取り、データベースや外部サービスと連携しながら、安全に処理を行います。フロントエンドは見た目と操作性、バックエンドは正確性と整合性を担うと考えると分かりやすいです。

たとえば、フロントエンドでは「カートに入れる」ボタンを表示しますが、バックエンドでは、その商品が販売中か、在庫があるか、ユーザーのカートに追加できるか、価格が現在も有効かを確認します。画面上では単純な操作に見えても、サーバー側では複数の検証が必要です。

項目フロントエンドバックエンド
主な役割画面表示・操作体験データ処理・業務ロジック
対象ユーザーインターフェースサーバー・データベース・外部連携
重要視する点見やすさ・使いやすさ正確性・安全性・整合性
商品一覧画面商品一覧API
注文確認画面注文作成・決済連携
マイページ会員情報・購入履歴管理

1.3 商品・注文・決済を安全に処理する役割

ECバックエンドで最も重要なのは、商品、注文、決済を安全に処理することです。商品価格が間違っている、在庫がない商品を販売してしまう、注文が二重に作成される、決済結果が反映されない、といった問題は、ユーザーにも運営側にも大きな損害を与えます。そのため、バックエンドでは各処理の状態を明確に管理する必要があります。

特に決済処理では、外部の決済代行サービスと連携することが一般的です。決済が成功したか、失敗したか、保留中か、キャンセルされたかを正しく受け取り、注文ステータスと同期させる必要があります。決済結果の通知が遅れたり、重複して届いたりすることもあるため、同じ通知を複数回受けても安全に処理できる設計が重要です。

処理安全に扱うべき理由設計ポイント
商品価格金額ミスが売上に直結する注文確定時に再計算する
在庫売り越しを防ぐ必要がある仮確保と減算を分ける
注文購入履歴の基準になる一意な注文番号を発行する
決済金銭処理に直結する成功・失敗・取消を管理する
配送顧客体験に影響する出荷状態を追跡する
返品売上・在庫へ影響する返金と在庫戻しを設計する

1.4 小規模ECと大規模ECで設計が変わる理由

小規模ECでは、商品数や注文数が少ないため、比較的シンプルな構成でも運用できます。管理者が手動で在庫を調整したり、注文を確認して配送手配したりすることも可能です。しかし、注文数が増え、商品数が増え、キャンペーンや複数倉庫、外部モール連携、定期購入、ポイント制度などが加わると、手動運用では限界が出てきます。

大規模ECでは、在庫更新、決済通知、配送連携、メール通知、分析処理などを非同期処理に分けたり、APIを明確に分離したり、検索基盤やキャッシュを導入したりする必要があります。最初から過剰に複雑にする必要はありませんが、後から拡張しやすいように、会員、商品、カート、注文、在庫、決済の責務を分けておくことが重要です。

2. ECバックエンドの基本機能

ECバックエンドには、会員管理、商品管理、カテゴリ管理、カート管理、注文管理、決済管理、在庫管理、配送管理などの基本機能があります。これらはそれぞれ独立した機能に見えますが、実際には注文処理を中心に密接につながっています。

たとえば、ユーザーが商品を購入する場合、会員情報、配送先住所、商品情報、在庫数、カート内容、注文情報、決済結果、配送ステータスが連動します。基本機能を分けて設計しながらも、注文時には整合性のある一つの流れとして処理する必要があります。

2.1 会員管理

会員管理は、ユーザー登録、ログイン、プロフィール、住所、購入履歴、退会などを管理する機能です。ECでは、会員情報が注文や配送、決済、問い合わせと結びつくため、正確かつ安全に扱う必要があります。特に個人情報を含むため、アクセス制御やデータ保護が重要です。

会員管理では、ユーザー自身が情報を更新できるマイページと、管理者が必要に応じて確認できる管理画面の両方を設計します。ただし、管理者が見られる情報は必要最小限にし、操作ログを残すことで安全性を高めます。

機能内容注意点
会員登録新規ユーザーを作成メール確認を検討する
ログイン認証処理セッション管理が重要
プロフィール氏名や連絡先を管理個人情報保護が必要
住所管理配送先を保存複数住所に対応する
購入履歴過去注文を表示本人のみ閲覧可能にする
退会アカウント停止・削除注文履歴との関係を整理する

2.2 商品管理

商品管理は、商品名、説明、価格、画像、販売ステータス、カテゴリ、バリエーション、在庫連携などを扱う機能です。ECサイトでは商品情報が売上に直結するため、表示内容の正確性と管理しやすさが重要です。商品情報が不正確だと、購入後の問い合わせや返品につながる可能性があります。

商品管理では、公開中、非公開、販売停止、予約販売、在庫切れなどの状態を扱う必要があります。また、価格変更やキャンペーン価格を扱う場合は、いつからどの価格が有効なのかを管理する設計が必要です。

管理項目内容重要ポイント
商品名表示名検索にも影響する
商品説明詳細情報誤解を招かない表現にする
価格通常価格・割引価格注文時に再確認する
画像メイン画像・追加画像配信最適化も必要
ステータス公開・非公開・停止表示制御に使う
バリエーションサイズ・色など在庫と連携する

2.3 カテゴリ管理

カテゴリ管理は、商品を分類し、ユーザーが探しやすい構造を作る機能です。カテゴリが整理されていると、商品一覧、検索、ナビゲーション、SEO、レコメンドにも良い影響があります。逆にカテゴリ設計が曖昧だと、ユーザーが商品を見つけにくくなります。

カテゴリは、階層構造を持つことが多いです。たとえば、「ファッション > メンズ > トップス > Tシャツ」のような構造です。ただし、階層が深すぎると管理が難しくなるため、ユーザーが理解しやすく、管理者も扱いやすい分類にすることが重要です。

項目内容設計ポイント
親カテゴリ大分類ナビゲーションに使う
子カテゴリ中分類・小分類絞り込みに使う
表示順カテゴリの並び管理画面で変更可能にする
公開状態表示・非表示季節カテゴリに使える
SEO情報タイトル・説明一覧ページに影響
商品紐づけ商品との関係複数カテゴリ対応を検討する

2.4 カート管理

カート管理は、ユーザーが購入前に選んだ商品を一時的に保存する機能です。カートには商品ID、数量、バリエーション、価格情報、ユーザーIDまたはゲスト識別情報が関係します。カートは注文前の仮状態であり、注文確定時には必ず価格と在庫を再確認する必要があります。

カートでは、会員カートとゲストカートの扱いも重要です。ログイン前に入れた商品を、ログイン後に会員カートへ統合する処理が必要になる場合があります。また、長期間放置されたカートをどう扱うか、有効期限をどう設定するかも設計します。

項目内容注意点
商品追加カートに商品を入れる販売中か確認する
数量変更数量を増減する上限や在庫を確認する
削除商品を外すUIと同期させる
ゲストカート未ログイン状態識別方法が必要
会員カートログイン後のカート複数端末同期を考える
有効期限カート保持期間放置カート対策に使う

2.5 注文管理

注文管理は、ECバックエンドの中心機能です。注文が作成されると、注文者、配送先、商品明細、金額、決済状態、配送状態、キャンセル状態などを管理する必要があります。注文は売上、在庫、配送、問い合わせ、返品の基準になるため、データの正確性が非常に重要です。

注文管理では、注文作成、注文確定、決済待ち、支払い済み、出荷準備中、出荷済み、キャンセル、返品などのステータスを明確にします。ステータスが曖昧だと、管理者が現在の状況を判断できず、配送ミスや対応漏れにつながります。

項目内容設計ポイント
注文番号注文を一意に識別ユーザー問い合わせに使う
注文者会員情報退会後の扱いも考える
注文明細商品ごとの購入情報注文時点の価格を保存
注文金額合計・送料・割引再計算可能にする
注文状態処理状況明確なステータス設計
キャンセル取消処理決済・在庫と連動

2.6 決済管理

決済管理は、注文に対する支払い状態を管理する機能です。クレジットカード、コンビニ決済、銀行振込、電子決済、後払いなど、決済方法によって処理の流れが異なります。決済が成功したか、失敗したか、保留中か、返金されたかを正しく管理する必要があります。

決済では、外部決済代行サービスと連携することが多くなります。決済結果の通知を受け取り、注文ステータスに反映する仕組みが必要です。通知が重複して届く場合もあるため、同じ決済結果を複数回受けても安全に処理できる設計が重要です。

項目内容注意点
決済方法支払い手段方法ごとに処理が違う
決済状態成功・失敗・保留注文状態と連動する
決済ID外部決済の識別子照合に必要
返金キャンセル時の返金一部返金も考える
Webhook決済結果通知重複通知に対応する
監査決済ログトラブル調査に必要

2.7 在庫管理

在庫管理は、販売可能な商品数を正しく管理する機能です。ECでは、ユーザーが同時に同じ商品を購入する可能性があるため、在庫数の整合性が非常に重要です。在庫がないのに注文できる売り越しや、在庫があるのに売れない状態は避ける必要があります。

在庫管理では、単純な在庫数だけでなく、仮在庫、引当済み在庫、販売可能在庫、返品在庫、複数倉庫在庫などを扱う場合があります。小規模ECではシンプルな在庫数で十分なこともありますが、注文数が増えると在庫確保の設計が重要になります。

項目内容設計ポイント
在庫数現在の保有数正確な更新が必要
販売可能数購入できる数引当分を考慮する
仮在庫注文途中の確保有効期限を設ける
在庫切れ購入不可判定表示制御と連動
返品在庫戻ってきた商品検品後に戻す
倉庫別在庫倉庫ごとの在庫配送計算にも関係

2.8 配送管理

配送管理は、注文された商品をユーザーへ届けるための機能です。配送先住所、配送方法、配送料、出荷ステータス、追跡番号、配送業者連携、配送通知などを扱います。配送は購入後の顧客満足度に大きく影響するため、正確な情報管理が必要です。

配送管理では、注文ステータスと配送ステータスを分けて考えることが重要です。注文は支払い済みでも、配送は未出荷の場合があります。出荷済みでも、配送中、配達完了、持ち戻りなどの状態があります。これらを明確に管理すると、ユーザー問い合わせにも対応しやすくなります。

項目内容注意点
配送先住所情報注文時点の住所を保存
配送方法宅配便・メール便など商品サイズと関係する
配送料送料計算地域や条件で変わる
出荷状態未出荷・出荷済み管理画面で重要
追跡番号配送追跡通知に使う
配送通知メールやアプリ通知タイミングが重要

3. 会員管理設計

会員管理は、ECサイトの利用者情報を安全に扱うための基盤です。ユーザー登録、ログイン認証、パスワード管理、会員情報更新、住所管理、購入履歴管理、退会処理までを整理する必要があります。会員情報は注文や配送と結びつくため、個人情報保護と利便性のバランスが重要です。

会員管理を設計する際は、ユーザー自身が管理できる情報と、システム側が保持する履歴情報を分けて考えます。たとえば、ユーザーは住所や名前を更新できますが、過去注文の配送先情報は注文時点の記録として残す必要があります。このような設計を誤ると、過去注文の履歴が後から変わってしまうなどの問題が起きます。

3.1 ユーザー登録

ユーザー登録では、メールアドレス、パスワード、氏名、電話番号などを受け取り、アカウントを作成します。最初から多くの情報を求めすぎると登録率が下がるため、購入に必要な情報と後から登録できる情報を分ける設計が有効です。メールアドレスの重複チェックや本人確認も重要です。

登録時には、利用規約への同意、メール認証、仮登録状態、本登録状態などを設計する場合があります。特に会員限定価格や購入履歴機能を提供するECでは、正しいメールアドレスを確認しておくことで、注文通知やパスワード再設定の安全性が高まります。

項目内容設計ポイント
メールアドレスログインIDとして使うことが多い重複と形式を確認する
パスワード認証に使うハッシュ化して保存する
氏名配送や請求に使う注文時にも確認する
電話番号配送連絡に使う必須にするか検討する
メール認証本人確認仮登録状態を管理する
利用規約同意法務上重要同意日時を保存する

3.2 ログイン認証

ログイン認証は、ユーザーが本人であることを確認する機能です。メールアドレスとパスワードによるログインが一般的ですが、SNSログインや多要素認証を導入する場合もあります。認証はECサイトの安全性に直結するため、失敗回数制限、セッション管理、ログアウト処理を適切に設計します。

ログイン後は、セッションCookieやトークンを使ってログイン状態を管理します。Cookieを使う場合は、HttpOnly、Secure、SameSiteを設定し、セッション固定攻撃を防ぐためにログイン時にセッションIDを再生成するなどの対策が必要です。

項目内容注意点
メールログインメールとパスワードで認証失敗回数制限を検討
SNSログイン外部IDで認証連携解除も設計する
セッションログイン状態管理Cookie属性を設定する
ログアウトセッション破棄サーバー側でも無効化
多要素認証追加認証管理画面では特に有効
認証ログログイン履歴不正検知に使える

3.3 パスワード管理

パスワードは、平文で保存してはいけません。必ず安全なハッシュ化を行い、必要に応じてソルトやストレッチングを利用します。パスワード再設定では、期限付きの再設定トークンを発行し、メールで送信するのが一般的です。再設定リンクは一度使ったら無効にする必要があります。

また、パスワード変更時には現在のパスワード確認や再認証を求めると安全性が高まります。弱すぎるパスワードを防ぐために、最低文字数やよく使われるパスワードの拒否も検討します。ただし、複雑すぎるルールはユーザー体験を悪化させるため、バランスが重要です。

項目内容設計ポイント
ハッシュ化パスワードを不可逆変換平文保存しない
再設定トークンパスワード再設定に使う期限と一回限りの利用
変更処理パスワードを更新再認証を検討
強度チェック弱いパスワードを防ぐユーザー負担とのバランス
失敗制限総当たり防止ロックや遅延を導入
通知変更通知を送る不正変更の検知に役立つ

3.4 会員情報更新

会員情報更新では、氏名、電話番号、メールアドレス、性別、生年月日、通知設定などを変更できるようにします。個人情報を扱うため、本人確認と入力検証が重要です。特にメールアドレス変更では、新しいメールアドレスへの確認リンクを送るなど、慎重な処理が必要です。

更新された会員情報を過去注文に反映するかどうかも設計上のポイントです。通常、過去注文の注文者情報や配送先情報は、注文時点の記録として保持します。会員情報を変更しても過去注文の記録が変わらないようにすることで、問い合わせや会計処理の整合性を保てます。

項目内容注意点
氏名変更表示名や配送名を更新注文時には再確認
メール変更ログインID変更になる場合新メール確認が必要
電話番号変更配送連絡に使用形式検証を行う
通知設定メール・アプリ通知同意管理が必要
個人情報プロフィール情報アクセス制御が重要
更新履歴変更記録不正変更調査に役立つ

3.5 住所管理

住所管理では、ユーザーが複数の配送先住所を登録できるようにする場合があります。自宅、勤務先、ギフト先など、用途によって配送先が異なるためです。住所には氏名、郵便番号、都道府県、市区町村、番地、建物名、電話番号などが含まれます。

注文時には、会員の住所をコピーして注文配送先として保存するのが一般的です。これにより、注文後に会員住所が変更されても、過去注文の配送先記録は変わりません。配送処理の正確性を保つためにも、住所マスタと注文時住所を分ける設計が重要です。

項目内容設計ポイント
住所登録配送先を保存複数住所対応を検討
住所編集登録住所を更新過去注文には影響させない
既定住所よく使う住所注文時の初期値にする
郵便番号補完住所入力を補助入力負担を減らす
ギフト住所別送先請求先と分ける
注文時住所注文記録として保存後から変わらないようにする

3.6 購入履歴管理

購入履歴管理では、ユーザーが過去の注文を確認できるようにします。注文番号、注文日、商品名、数量、金額、決済状態、配送状態、追跡番号、キャンセル可否などを表示します。購入履歴は、再購入、問い合わせ、返品、領収書発行にも関係します。

購入履歴では、注文当時の商品名や価格を保存しておくことが重要です。商品マスタの情報が後から変更されても、過去注文の内容は変わるべきではありません。注文履歴は、現在の商品情報ではなく、注文時点の記録として扱います。

項目内容注意点
注文番号注文識別子問い合わせに使う
注文日購入日時履歴表示に必要
商品情報購入商品注文時点の名称を保存
金額支払い金額割引や送料も含める
配送状態出荷・配送状況追跡番号と連携
再購入同じ商品を再注文販売中か再確認する

3.7 退会処理

退会処理では、ユーザーがアカウントを削除または無効化できるようにします。ただし、ECでは退会後も注文履歴、配送履歴、決済記録、会計上の記録を保持する必要がある場合があります。そのため、単純にユーザーデータをすべて削除すると、注文管理や問い合わせ対応に問題が出る可能性があります。

退会設計では、ログイン不可にする、個人情報を匿名化する、注文履歴は運営上必要な範囲で保持するなど、要件に合わせて処理を分けます。退会後のメール配信停止や、未処理注文がある場合の扱いも明確にする必要があります。

項目内容設計ポイント
退会申請ユーザーが退会する確認画面を入れる
アカウント無効化ログイン不可にする注文履歴は残す場合がある
個人情報削除不要情報を削除法務要件を確認する
匿名化個人を特定しにくくする分析用データに使える
未処理注文配送前注文の扱い退会前に確認する
メール停止通知を止める配送通知は例外検討

4. 商品管理設計

商品管理設計では、商品情報、画像、価格、バリエーション、カテゴリ、販売ステータス、検索連携を整理します。商品管理はフロント表示だけでなく、在庫、注文、キャンペーン、検索、レコメンド、管理画面にも影響するため、EC全体の基盤になります。

商品データが整理されていないと、検索しにくい、価格変更が反映されない、在庫が分かりにくい、商品ページの情報が不正確になるなどの問題が起きます。商品管理では、表示用情報と業務用情報を分けながら、運営しやすい構造にすることが重要です。

4.1 商品情報管理

商品情報管理では、商品名、説明文、ブランド、型番、仕様、素材、サイズ、重量、注意事項などを管理します。ユーザーに見せる説明だけでなく、管理者が商品を識別するための内部コードも必要です。商品情報は検索やフィルタリングにも使われるため、項目設計が重要です。

商品説明は、ユーザーの購入判断に直結します。曖昧な説明や不足した情報は、問い合わせや返品につながります。バックエンドでは、商品情報を構造化し、フロントエンドが必要な情報を適切に表示できるようにします。

項目内容用途
商品ID内部識別子データ連携
商品名表示名商品ページ・検索
商品説明詳細情報購入判断
ブランドメーカーやブランドフィルター
型番製品番号問い合わせ対応
仕様サイズ・素材など比較表示
注意事項利用上の注意トラブル防止

4.2 商品画像管理

商品画像は、ECの購入率に大きく影響します。商品一覧用のサムネイル、商品詳細用の高解像度画像、バリエーション別画像、拡大画像、動画、3D画像などを扱う場合があります。バックエンドでは、画像ファイルの保存場所、URL、表示順、代替テキスト、公開状態を管理します。

画像は容量が大きくなりやすいため、配信最適化も重要です。CDN、画像リサイズ、WebPなどの形式変換、遅延読み込みを組み合わせることで、表示速度を改善できます。商品画像管理は、単なるアップロード機能ではなく、ECパフォーマンスにも関係します。

項目内容設計ポイント
メイン画像商品代表画像一覧表示に使う
追加画像詳細画像商品理解を深める
バリエーション画像色やサイズ別画像選択状態と連動
画像順序表示順管理画面で変更可能にする
代替テキスト画像説明アクセシビリティに有効
CDN配信高速配信表示速度改善

4.3 価格管理

価格管理では、通常価格、セール価格、会員価格、キャンペーン価格、税込・税抜、送料条件などを扱います。価格は注文金額に直結するため、表示価格と注文確定価格の整合性が非常に重要です。商品ページに表示されていた価格と、注文時の価格が違う場合はユーザーに明確に伝える必要があります。

実務では、価格変更の履歴や適用期間も重要になります。セール期間中だけ価格を変える、会員ランクによって価格を変える、クーポンを適用するなど、複数の価格ルールが重なることがあります。バックエンドでは、注文確定時に価格を再計算し、注文時点の価格を注文明細に保存します。

項目内容注意点
通常価格基本価格商品マスタに保持
セール価格割引価格適用期間が必要
会員価格会員向け価格権限やランクと連動
税設定税込・税抜表示と計算を統一
クーポン割引処理重複適用に注意
注文時価格購入時点の価格履歴として保存

4.4 商品バリエーション管理

商品バリエーションは、サイズ、色、容量、素材など、同じ商品に複数の選択肢がある場合に必要です。たとえば、Tシャツならサイズと色、コスメなら色番、家電なら容量や型番がバリエーションになります。バリエーションごとに価格や在庫、画像が異なる場合もあります。

バリエーション管理では、親商品と子SKUを分ける設計がよく使われます。親商品は商品ページの基本情報を持ち、子SKUは実際に購入される単位として在庫や価格を持ちます。この分離により、商品表示と在庫管理を整理しやすくなります。

項目内容設計ポイント
親商品商品ページ単位共通説明を持つ
SKU販売単位在庫・価格を持つ
サイズS/M/Lなど在庫と連動
カラー選択画像と連動
型番バリエーション識別問い合わせに使う
販売可否SKU単位で管理一部在庫切れに対応

4.5 カテゴリ分類

カテゴリ分類は、商品を探しやすくするための重要な設計です。ユーザーが商品を見つけやすくなるだけでなく、商品一覧、検索フィルター、ナビゲーション、SEO、キャンペーンページにも影響します。商品を一つのカテゴリだけに入れるのか、複数カテゴリに所属させるのかも設計ポイントです。

カテゴリが増えすぎると管理が難しくなり、少なすぎるとユーザーが絞り込みにくくなります。商品数や業界特性に合わせて、適切な階層と分類ルールを作ることが大切です。

項目内容注意点
大カテゴリ商品の大分類ナビゲーションの基準
中カテゴリ詳細分類絞り込みに使う
小カテゴリ具体的分類深すぎに注意
複数所属商品を複数カテゴリへ重複表示の扱い
表示順カテゴリの並び管理画面で調整
SEO項目タイトル・説明一覧ページに反映

4.6 販売ステータス管理

販売ステータス管理では、商品が公開中、非公開、販売停止、在庫切れ、予約販売、販売終了など、どの状態にあるかを管理します。商品ページに表示するか、カートに入れられるか、検索結果に出すかは、販売ステータスによって変わります。

販売ステータスを単純な公開・非公開だけで管理すると、予約販売や販売終了、在庫切れ時の表示などに対応しにくくなります。ユーザーに見せる状態と、購入可能かどうかを分けて設計すると柔軟になります。

ステータス内容表示・購入の扱い
公開中通常販売表示・購入可能
非公開管理中表示しない
販売停止一時停止表示するが購入不可も可能
在庫切れ在庫なし表示し購入不可
予約販売予約受付出荷予定日を表示
販売終了終了商品履歴用に残す場合あり

4.7 商品検索との関係

商品管理は、商品検索と強く関係します。商品名、説明、カテゴリ、ブランド、価格、タグ、属性、在庫状態などが検索対象になります。商品データが構造化されていないと、検索精度が下がり、ユーザーが商品を見つけにくくなります。

検索機能を強化する場合、データベース検索だけでなく、検索エンジンを使う場合もあります。大規模ECでは、全文検索、絞り込み、並び替え、関連語対応、検索ログ分析が重要になります。バックエンドでは、商品データを検索基盤へ同期する設計も必要です。

項目検索での役割設計ポイント
商品名主要検索対象表記ゆれに注意
説明文詳細検索長文検索に使う
カテゴリ絞り込み階層を整理
ブランドフィルター正規化が必要
価格範囲検索税込表示と整合
タグ関連検索乱立に注意
在庫状態表示制御売り切れ表示を決める

5. カート設計

カート設計は、ユーザーが購入前に商品を一時的に保持するための設計です。カートは注文ではなく、購入前の仮状態です。そのため、カートに入れた時点では在庫や価格が確定しているとは限りません。注文確定時に、最新の価格、販売状態、在庫を再確認する必要があります。

カートはUXにも大きく影響します。商品追加、数量変更、削除、ログイン後のカート統合、放置カート復元などが使いやすいと、購入率向上につながります。一方で、カート内の商品が古い価格のまま残ったり、在庫切れ商品を購入できたりすると、トラブルになります。

5.1 ゲストカート

ゲストカートは、ログインしていないユーザーのカートです。初回訪問ユーザーでも商品をカートに入れられるため、購入導線を短くできます。ゲストカートでは、ブラウザCookieや一時識別子を使ってカート内容を保持することが一般的です。

ただし、ゲストカートは端末やブラウザに依存しやすく、ユーザーが別端末でアクセスすると引き継げない場合があります。ログイン時にゲストカートを会員カートへ統合する処理も必要です。

項目内容注意点
識別方法Cookieや一時ID有効期限が必要
保存場所DBまたはブラウザセキュリティに注意
ログイン連携会員カートへ統合重複商品を処理
有効期限一定期間で削除放置データを整理
端末依存同じ端末で利用別端末では引き継ぎにくい
UX効果登録前に購入準備可能購入率改善に有効

5.2 会員カート

会員カートは、ログイン済みユーザーに紐づくカートです。複数端末で同じカートを共有しやすく、後から購入を再開しやすい点がメリットです。会員カートは、ユーザーIDに紐づけてデータベースに保存するのが一般的です。

会員カートでは、ゲストカートとの統合が重要です。ログイン前に入れた商品と、ログイン後に保存されていた商品が重なる場合、数量を合算するのか、最新の操作を優先するのかを決める必要があります。統合ルールが曖昧だと、ユーザーにとって分かりにくい体験になります。

項目内容設計ポイント
ユーザー紐づけ会員IDで管理複数端末対応
永続化DBに保存ログアウト後も保持可能
ゲスト統合ログイン時に統合重複商品の扱いを決める
数量管理商品ごとの数量上限と在庫を確認
表示同期複数端末で反映更新競合に注意
放置カート後日再開可能通知施策に使える

5.3 カート有効期限

カート有効期限は、カート内の商品をどれくらい保持するかを決める設計です。長く保持するとユーザーは後から購入しやすくなりますが、古い価格や販売終了商品が残る可能性があります。短すぎると、ユーザーが比較検討している間にカートが消えてしまい、UXが悪化します。

有効期限を設ける場合は、カート内の商品が期限切れになったときの表示も重要です。「この商品は販売終了しました」「価格が変更されました」「在庫切れです」のように、理由を明確に伝えるとユーザーの混乱を減らせます。

項目内容設計ポイント
有効期間カート保持日数商品カテゴリに応じて調整
期限切れ処理自動削除・無効化ユーザーに理由を表示
価格変更古い価格との差分注文時に再確認
在庫切れ購入不可にする代替商品提案も有効
放置通知リマインド過剰通知に注意
データ削除古いカート整理DB負荷を減らす

5.4 数量変更

カート内の数量変更では、ユーザーが商品数を増減できるようにします。ただし、数量変更時には販売中かどうか、購入上限を超えていないか、在庫が足りるかを確認する必要があります。フロントエンド上で数量を変えられても、サーバー側で検証しなければ安全ではありません。

数量変更は、価格計算にも影響します。数量によって割引が適用される場合や、送料が変わる場合もあります。カート内の合計金額は、数量変更のたびに最新条件で再計算する必要があります。

項目内容注意点
数量増加購入数を増やす在庫と上限を確認
数量減少購入数を減らす0の場合は削除扱いも検討
購入上限最大購入数転売対策にも使える
在庫確認販売可能数を確認注文時にも再確認
金額再計算小計・合計を更新割引や送料も反映
エラー表示変更不可の理由分かりやすく伝える

5.5 価格変更時の扱い

カートに入れた後に商品価格が変更されることがあります。セール開始、セール終了、価格改定、クーポン適用条件の変更などが原因です。カートに入れた時点の価格を保持するのか、注文時の最新価格を適用するのかを明確にする必要があります。

一般的には、注文確定時に最新価格を再計算し、価格が変わった場合はユーザーに通知します。ユーザーに気づかれないまま金額が変わると不信感につながるため、確認画面で差分を明示することが重要です。

状況処理ユーザー表示
価格上昇最新価格へ更新価格変更を通知
価格低下最新価格へ更新値下げを表示
セール終了通常価格へ戻すセール終了を表示
クーポン変更再計算適用不可理由を表示
税率変更税計算更新合計金額を再表示
注文確定前最終確認ユーザーに承認させる

5.6 在庫確認との関係

カートに商品が入っていても、在庫が確保されているとは限りません。多くのECでは、カート投入時点では在庫を減らさず、注文確定時に在庫を確保または減算します。そのため、カートに入れた商品が注文時に在庫切れになる可能性があります。

在庫確認は、カート表示時、数量変更時、注文確認時、注文確定時に行うのが安全です。特に注文確定時には、トランザクションやロックを使って在庫不整合を防ぐ必要があります。

タイミング確認内容目的
カート追加時販売中・在庫あり初期追加を制御
カート表示時現在の販売状態古いカートを検出
数量変更時数量上限・在庫過剰数量を防ぐ
注文確認時価格・在庫最終確認
注文確定時在庫確保売り越し防止
決済失敗時在庫解放仮確保を戻す

5.7 カート復元設計

カート復元は、ユーザーが一度離脱しても、後からカート内容を再表示できるようにする設計です。会員カートではDBに保存し、ゲストカートではCookieや一時IDを使って復元します。放置カート施策や再訪時の購入促進にも関係します。

ただし、復元時には商品状態を再確認する必要があります。販売終了、在庫切れ、価格変更、バリエーション削除が起きている場合があります。復元できることは便利ですが、古い情報のまま注文できないようにすることが重要です。

項目内容注意点
会員復元ログイン後に復元複数端末対応
ゲスト復元Cookieで復元期限を設ける
商品状態確認販売中か確認販売終了を表示
価格再計算最新価格を反映差分を通知
在庫確認購入可能か確認在庫切れを表示
リマインド放置カート通知配信頻度に注意

6. 注文処理設計

注文処理は、ECバックエンドで最も重要な処理の一つです。カート内の商品を注文として確定し、注文番号を発行し、金額を確定し、在庫や決済と連携します。注文処理は途中で失敗する可能性があるため、どの段階で注文を作成し、どの段階で在庫を確保し、どの段階で決済を行うかを明確にする必要があります。

注文処理では、整合性と再実行安全性が重要です。ユーザーが注文ボタンを連打した場合、通信がタイムアウトした場合、決済通知が遅れた場合でも、注文が重複したり、在庫だけ減ったりしないように設計します。

6.1 注文作成

注文作成では、カート内容、会員情報、配送先、支払い方法、送料、割引、合計金額をもとに注文データを作成します。注文作成時には、商品が販売中か、価格が最新か、在庫があるかを再確認します。カート内の情報をそのまま信じるのではなく、サーバー側で確定情報を作ります。

注文データには、注文者情報や配送先情報を注文時点のスナップショットとして保存します。会員情報が後から変更されても、注文時の記録が変わらないようにするためです。これは、問い合わせ対応や配送処理、会計処理に重要です。

項目内容設計ポイント
カート内容確認商品と数量を確認販売状態を再確認
金額計算商品小計・送料・割引サーバー側で計算
注文者情報氏名・連絡先注文時点で保存
配送先住所情報会員住所とは別保存
注文明細商品ごとの情報注文時価格を保存
注文作成注文レコードを作成トランザクションを検討

6.2 注文番号発行

注文番号は、ユーザー問い合わせ、管理画面、配送連携、決済照合に使われる重要な識別子です。内部IDとは別に、ユーザーに見せる注文番号を発行することが一般的です。注文番号は一意であり、推測されにくい形式が望ましいです。

注文番号は、日付や連番を含める場合もありますが、単純な連番だけだと注文数が推測されやすくなることがあります。運営上の扱いやすさとセキュリティのバランスを考え、適切な形式を決めます。

項目内容注意点
内部IDDB上の識別子外部に出さない場合もある
注文番号ユーザー表示用一意性が必要
形式日付+ランダムなど推測しにくくする
決済連携ID決済との照合外部IDと紐づけ
問い合わせユーザー確認用分かりやすい形式
再発行原則避ける注文履歴と整合させる

6.3 注文ステータス管理

注文ステータス管理では、注文が現在どの状態にあるかを管理します。注文受付、決済待ち、支払い済み、出荷準備中、出荷済み、キャンセル、返品などの状態を明確に定義します。ステータスが曖昧だと、管理者が処理すべき注文を判断できず、配送漏れや対応漏れにつながります。

注文ステータスは、決済ステータスや配送ステータスと分けて管理することもあります。たとえば、注文は受付済みでも決済は未完了、決済は完了しているが配送は未出荷、という状態があり得ます。状態を分けることで、処理の流れを正確に表現できます。

ステータス内容次の処理
注文受付注文データ作成済み決済確認
決済待ち支払い未完了入金確認
支払い済み決済成功出荷準備
出荷準備中梱包・手配中出荷処理
出荷済み配送開始追跡通知
キャンセル注文取消在庫戻し・返金
返品返品処理中返金・在庫処理

6.4 注文確定タイミング

注文確定タイミングは、注文データをいつ正式な注文として扱うかを決める重要な設計です。注文ボタン押下時に確定するのか、決済成功時に確定するのか、入金確認時に確定するのかは、決済方法によって異なります。クレジットカード決済と銀行振込では、確定の考え方が変わります。

設計上は、注文作成、在庫確保、決済成功、出荷可能状態を分けて考えると安全です。注文作成直後は仮状態にし、決済成功後に正式注文へ進めるなど、処理段階を明確にします。

タイミング内容向いているケース
注文ボタン時注文をすぐ作成銀行振込・コンビニ決済
決済成功時支払い成功で確定クレジットカード
入金確認時入金後に確定銀行振込
在庫確保時在庫を先に押さえる限定商品
出荷準備時出荷可能で確定受注生産
管理者承認時手動確認後高額商品・法人取引

6.5 注文重複防止

注文重複は、ユーザーが注文ボタンを連打した場合、通信エラーで再送した場合、決済通知が複数回届いた場合などに発生する可能性があります。注文が重複すると、二重決済や二重配送につながるため、必ず防止する必要があります。

重複防止には、冪等性キー、注文処理中フラグ、決済IDの一意制約、ボタンの二重送信防止などを組み合わせます。フロントエンドでボタンを無効化するだけでは不十分であり、バックエンド側で同じ処理が複数回実行されても一度だけ反映される設計が重要です。

対策内容注意点
冪等性キー同じ処理を一度だけ実行API設計で有効
一意制約決済IDや注文キーを一意にするDB側でも守る
処理中フラグ注文処理中を管理タイムアウト時に注意
ボタン無効化フロントで連打防止サーバー対策も必要
決済通知重複対応同じ通知を再処理しないWebhookで重要
ログ記録重複検知調査に使う

6.6 キャンセル処理

キャンセル処理では、注文を取り消し、必要に応じて在庫を戻し、決済を取り消しまたは返金します。キャンセル可能かどうかは、注文状態、決済状態、出荷状態によって変わります。出荷前ならキャンセル可能でも、出荷後は返品扱いになる場合があります。

キャンセル処理は、注文、在庫、決済、配送が連動するため慎重に設計します。途中で処理が失敗した場合、注文はキャンセル済みなのに返金されていない、在庫が戻っていない、といった状態を避ける必要があります。

条件処理注意点
決済前キャンセル注文取消在庫仮確保を戻す
決済後キャンセル返金処理決済サービス連携
出荷前キャンセル出荷停止倉庫連携が必要
出荷後キャンセル返品扱い配送状態を確認
一部キャンセル一部商品だけ取消金額再計算が必要
管理者キャンセル管理画面から実行操作ログを残す

6.7 注文履歴表示

注文履歴表示では、ユーザーが自分の注文状況を確認できるようにします。注文番号、注文日、商品名、数量、金額、支払い状態、配送状態、追跡番号、キャンセル可否などを表示します。ユーザーが状況を自分で確認できれば、問い合わせ削減にもつながります。

注文履歴では、注文時点の情報を表示することが重要です。商品名や価格が後から変更されても、過去注文には購入時の内容を表示します。また、本人以外が他人の注文を見られないように、認可チェックを必ず行います。

表示項目内容注意点
注文番号問い合わせ用一意な番号
注文日購入日時タイムゾーンに注意
商品情報購入商品注文時点の情報
金額合計・送料・割引注文時点で固定
決済状態支払い状況注文状態と分ける
配送状態出荷・配送状況追跡番号と連携
キャンセル可否操作可能性状態に応じて制御

7. 在庫管理設計

在庫管理は、ECバックエンドで最も不整合が起きやすい領域の一つです。複数ユーザーが同時に同じ商品を購入する場合、在庫数を正しく制御できないと、在庫がないのに注文を受けてしまう売り越しが発生します。逆に、在庫があるのに販売できない状態になると機会損失になります。

在庫管理では、在庫数、仮在庫、注文確定時の減算、キャンセル時の戻し、在庫切れ判定、複数倉庫対応、不整合監視を設計します。小規模ECでは単純な在庫数管理でも運用できますが、注文数が増えるとトランザクションやロック、在庫引当の考え方が重要になります。

7.1 在庫数管理

在庫数管理では、商品またはSKUごとに現在の在庫数を保持します。バリエーションがある商品では、親商品ではなくSKU単位で在庫を持つことが一般的です。たとえば、同じTシャツでも、黒のMサイズと白のLサイズでは在庫が異なります。

在庫数は注文、キャンセル、返品、入荷、棚卸しによって変動します。すべての変動を履歴として残しておくと、在庫不整合が起きたときに原因を追跡しやすくなります。

項目内容設計ポイント
SKU在庫販売単位の在庫サイズ・色ごとに管理
入荷在庫を増やす入荷履歴を残す
出荷在庫を減らす注文と連動
調整手動補正理由を記録する
棚卸し実在庫確認差分を記録
在庫履歴増減ログ調査に必要

7.2 仮在庫確保

仮在庫確保は、注文途中の商品を一時的に押さえる処理です。決済前に在庫を完全に減らすと、決済失敗時に戻す必要があります。一方、決済成功まで在庫を押さえないと、決済後に在庫がない状態になる可能性があります。そのため、注文フローに応じて仮確保を設計します。

仮在庫には有効期限が必要です。ユーザーが決済途中で離脱した場合、在庫をいつまでも押さえ続けると販売機会を失います。一定時間が経過したら仮在庫を解放する処理を用意します。

項目内容注意点
仮確保注文途中で在庫を押さえる決済前に有効
有効期限一定時間で解放放置対策
決済成功確定在庫減算へ進む注文確定と連動
決済失敗仮確保を戻す自動解放が必要
セール時同時購入が多いロック設計が重要
管理画面仮在庫を確認トラブル調査に役立つ

7.3 注文確定時の在庫減算

注文確定時の在庫減算では、購入された数量を在庫から減らします。この処理は、注文作成や決済成功と密接に関係します。どのタイミングで在庫を減らすかは、決済方法や業務フローによって変わります。クレジットカードなら決済成功時、銀行振込なら入金確認時などが考えられます。

在庫減算では、同時注文への対応が重要です。複数ユーザーが同時に最後の1点を購入しようとした場合、一方だけを成功させる必要があります。データベーストランザクションや行ロック、条件付き更新などを使って不整合を防ぎます。

タイミング内容向いているケース
注文作成時すぐ在庫を減らす在庫確保を優先
決済成功時支払い後に減算クレジットカード
入金確認時入金後に減算銀行振込
出荷時出荷時に減算受注生産や倉庫連携
仮確保後仮在庫から確定へセール商品
条件付き更新在庫が足りる場合だけ減算売り越し防止

7.4 キャンセル時の在庫戻し

キャンセル時には、注文で確保または減算された在庫を戻す必要があります。ただし、すべてのキャンセルで即座に販売可能在庫へ戻せるとは限りません。出荷前キャンセルであれば戻せる場合が多いですが、出荷後の返品では検品後に戻す必要があります。

在庫戻しは、決済返金や注文ステータス変更と連動します。途中で失敗すると在庫不整合が起きるため、処理ログを残し、必要に応じて再実行できる設計にします。

状況在庫処理注意点
決済前キャンセル仮在庫を解放自動処理可能
決済後キャンセル在庫を戻す返金と連動
出荷前キャンセル出荷停止後に戻す倉庫連携が必要
出荷後返品検品後に戻す商品状態を確認
一部キャンセル一部数量だけ戻す明細単位で処理
失敗時再処理ログが必要

7.5 在庫切れ判定

在庫切れ判定では、商品を購入可能にするかどうかを決めます。在庫数が0の場合は購入ボタンを無効化する、商品ページで在庫切れ表示にする、再入荷通知を受け付けるなどの処理が必要です。販売可能数が少ない場合は、残りわずか表示を出すこともあります。

ただし、在庫切れ判定はフロントエンド表示だけで行ってはいけません。ユーザーが古い画面を開いている場合や、APIを直接呼び出す場合があるため、注文確定時には必ずサーバー側で在庫を確認します。

状態表示サーバー処理
在庫あり購入可能注文時に再確認
残りわずか注意表示数量上限を制御
在庫切れ購入不可カート追加を拒否
再入荷予定通知受付入荷時に案内
販売終了購入不可商品履歴として残す
予約販売予約可能出荷予定日を管理

7.6 複数倉庫対応

複数倉庫対応では、商品在庫を倉庫ごとに管理します。地域別倉庫、店舗在庫、外部倉庫、委託倉庫などがある場合、どの倉庫から出荷するかを決める必要があります。配送先地域、在庫数、送料、配送日数を考慮して倉庫を選択します。

複数倉庫では、在庫数の合計だけでなく、倉庫別の在庫が重要になります。合計在庫があっても、特定地域へ配送できる倉庫に在庫がない場合があります。倉庫連携や在庫同期の設計が必要です。

項目内容設計ポイント
倉庫ID倉庫の識別在庫と紐づける
倉庫別在庫倉庫ごとの数量合計在庫と分ける
配送地域倉庫が対応する地域送料計算に影響
出荷優先度どの倉庫から出すか近い倉庫を優先
倉庫連携外部倉庫との同期遅延に注意
分割配送複数倉庫から出荷UXと送料に影響

7.7 在庫不整合防止

在庫不整合は、注文処理、キャンセル、返品、手動調整、外部倉庫連携などが原因で発生します。ECでは、在庫数が正確でないと、売り越しや販売機会損失につながります。そのため、在庫更新は履歴を残し、監視できるようにする必要があります。

在庫不整合を防ぐには、トランザクション、排他制御、在庫履歴、定期棚卸し、異常検知を組み合わせます。特にセール時や同時購入が多い商品では、在庫更新の競合が起きやすいため、慎重な設計が必要です。

対策内容効果
トランザクション注文と在庫更新を一体化中途半端な更新を防ぐ
行ロック同時更新を制御売り越し防止
在庫履歴増減理由を記録原因調査
定期棚卸し実在庫と照合差分発見
異常検知マイナス在庫を検出早期対応
再同期外部倉庫と同期連携ズレを修正

8. 決済連携設計

決済連携設計は、ECバックエンドで最も慎重に扱うべき領域の一つです。決済は金銭処理に直結するため、成功、失敗、保留、キャンセル、返金、期限切れなどの状態を正確に管理する必要があります。外部の決済代行サービスを使う場合でも、EC側で注文状態と決済状態を正しく同期させなければなりません。

決済方法によって処理フローは大きく異なります。クレジットカードは即時決済が多く、コンビニ決済や銀行振込は支払い完了まで時間差があります。電子決済は外部アプリや外部画面への遷移が関係する場合があります。バックエンドでは、決済方法ごとの違いを吸収し、注文管理側では統一的に扱える設計が重要です。

8.1 クレジットカード決済

クレジットカード決済は、ECでよく使われる決済方法です。即時に与信や決済結果を取得できることが多く、購入完了までの導線が短い点がメリットです。一方で、カード情報の扱いには高いセキュリティが求められるため、基本的には決済代行サービスを利用し、EC側でカード番号を直接保持しない設計にします。

クレジットカード決済では、決済成功時に注文を確定し、決済失敗時には注文を未確定または失敗扱いにします。ユーザーが再試行できる導線も必要です。また、決済結果の通知が外部サービスから届く場合は、Webhookを安全に検証する必要があります。

項目内容注意点
与信支払い可能か確認決済代行と連携
決済成功支払い完了注文確定へ進む
決済失敗支払い不可再試行導線を用意
カード情報機密情報EC側で保持しない
返金キャンセル時処理一部返金も検討
Webhook結果通知署名検証が必要

8.2 コンビニ決済

コンビニ決済は、注文後にユーザーがコンビニで支払う方式です。支払い完了まで時間差があるため、注文ステータスと決済ステータスを分けて管理する必要があります。注文受付後は「決済待ち」とし、入金通知を受け取った後に「支払い済み」へ変更します。

コンビニ決済では、支払い期限の管理が重要です。期限内に支払いがなければ注文を自動キャンセルし、仮確保していた在庫を解放する必要があります。期限切れ処理を忘れると、在庫が無駄に押さえられたり、未払い注文が残り続けたりします。

項目内容設計ポイント
支払い番号コンビニ支払い用番号ユーザーへ通知
決済待ち入金前状態在庫確保方針を決める
支払い期限入金期限期限切れ処理が必要
入金通知支払い完了通知Webhookで受信
期限切れ未払い終了注文取消・在庫解放
ユーザー案内支払い方法説明分かりやすさが重要

8.3 銀行振込

銀行振込は、ユーザーが指定口座に入金する決済方法です。入金確認に時間がかかるため、注文作成から支払い完了までの間に保留状態が必要です。入金確認を手動で行う場合もあれば、銀行APIや決済サービスと連携して自動化する場合もあります。

銀行振込では、入金名義、金額、注文番号の照合が重要です。ユーザーが注文番号を入力し忘れたり、金額を間違えたりする場合があります。照合作業を考慮した管理画面とログ設計が必要です。

項目内容注意点
振込先銀行口座情報注文ごとに案内
入金待ち支払い前状態期限管理が必要
入金確認手動または自動確認照合ミスに注意
名義照合振込名義確認注文者と違う場合がある
金額照合入金額確認過不足に対応
期限切れ未入金キャンセル在庫解放が必要

8.4 電子決済

電子決済には、QRコード決済、ウォレット決済、キャリア決済、外部アプリ決済などがあります。ユーザーは外部アプリや外部画面で支払いを行い、ECサイトへ戻ってくる場合があります。外部遷移が発生するため、戻りURL、決済結果通知、セッション保持が重要になります。

電子決済では、ユーザーが途中で戻らない場合や、画面上は戻っていないが決済は完了している場合があります。そのため、フロントエンドの戻り結果だけで注文を確定せず、決済代行サービスからの正式な通知や照会結果をもとに状態を更新します。

項目内容設計ポイント
外部遷移決済画面へ移動戻りURLを設定
決済結果成功・失敗サーバー側で確認
アプリ決済外部アプリで支払いユーザー離脱に注意
状態照会決済結果を確認戻り失敗に対応
通知受信Webhook署名検証が必要
再試行失敗時の導線注文重複に注意

8.5 決済ステータス管理

決済ステータス管理では、注文に対する支払い状態を明確にします。未決済、決済待ち、決済成功、決済失敗、返金済み、一部返金、取消などを定義し、注文ステータスと連動させます。決済ステータスが曖昧だと、出荷してよい注文か判断できません。

決済ステータスは、決済方法ごとに異なる状態を、EC内部で扱いやすい共通状態へ変換する設計が有効です。外部決済サービスごとの細かいステータスをそのまま注文管理に持ち込むと、管理が複雑になります。

ステータス内容注文への影響
未決済支払い前出荷不可
決済待ち入金・承認待ち保留
決済成功支払い完了出荷可能
決済失敗支払い失敗再試行または取消
取消決済取消注文取消と連動
返金済み返金完了キャンセル後処理
一部返金一部のみ返金明細単位で管理

8.6 決済失敗時の処理

決済失敗時には、ユーザーに分かりやすく再試行方法を案内する必要があります。クレジットカードの利用不可、通信エラー、外部決済のキャンセル、支払い期限切れなど、失敗理由によって対応が異なります。失敗時に注文をどう扱うかも重要です。

決済失敗後に在庫を確保し続けると販売機会を失います。一方で、すぐに注文を削除するとユーザーが再試行しにくくなります。一定時間は再試行可能にし、期限が過ぎたら注文取消と在庫解放を行う設計がよく使われます。

失敗理由処理注意点
カード拒否再入力を案内詳細理由は出しすぎない
通信エラー状態照会二重決済を防ぐ
ユーザー中断再試行可能にする在庫期限を設定
期限切れ注文取消在庫解放
決済通知遅延保留状態にする後続通知に対応
重複通知一度だけ処理冪等性が必要

8.7 決済代行サービス連携

決済代行サービス連携では、ECサイト側が直接カード情報を扱わず、外部サービスを通じて決済を行います。これにより、セキュリティリスクや運用負担を軽減できます。ただし、外部サービスとの連携には、API、Webhook、署名検証、決済ID管理、障害時対応が必要です。

決済代行サービスからの通知は、必ず正当性を検証します。署名検証やシークレットキーを使い、不正な通知を受け付けないようにします。また、通知が複数回届いても同じ処理を重複実行しない冪等性が必要です。

項目内容設計ポイント
API連携決済作成・照会エラー処理が重要
Webhook決済結果通知署名検証を行う
決済ID外部決済識別子注文と紐づける
状態照会結果を再確認通知漏れに対応
障害対応外部サービス障害保留状態を用意
冪等性重複処理防止通知再送に対応

決済方法ごとの特徴は、次のように整理できます。方法によって注文確定タイミング、在庫確保、ユーザー案内が変わります。

決済方法特徴注文設計の注意点
クレジットカード即時決済しやすい成功後に注文確定
コンビニ決済支払いまで時間差がある支払い期限が必要
銀行振込入金照合が必要手動確認に注意
電子決済外部アプリと連携戻り処理と通知を分ける
後払い商品到着後に支払い与信審査が必要
ポイント決済サービス内残高を使う残高整合性が重要

9. 配送管理設計

配送管理設計では、配送先住所、配送料、配送方法、追跡番号、出荷ステータス、配送業者連携、配送通知を扱います。配送は注文後のユーザー体験に大きく影響します。購入まではスムーズでも、配送状況が分からない、追跡番号が届かない、住所が間違っていると、顧客満足度は下がります。

配送管理は、注文管理や在庫管理と連動します。注文が支払い済みになったら出荷準備へ進み、倉庫で出荷されると追跡番号が登録され、ユーザーへ通知されます。配送ステータスを明確に管理することで、問い合わせ対応や管理業務が効率化されます。

9.1 配送先住所管理

配送先住所管理では、注文時にユーザーが指定した住所を保存します。会員住所とは別に、注文時点の配送先を注文データとして保持することが重要です。これにより、ユーザーが後から会員住所を変更しても、過去注文の配送先は変わりません。

住所には入力ミスが起きやすいため、郵便番号補完、都道府県選択、番地確認、電話番号形式チェックなどを導入すると配送ミスを減らせます。高額商品では、住所確認をより慎重に行うこともあります。

項目内容設計ポイント
氏名受取人名注文時点で保存
郵便番号住所検索に使用入力補完に使う
都道府県地域判定送料計算に関係
市区町村住所情報入力ミスに注意
番地・建物名詳細住所配送ミス防止
電話番号配送連絡形式検証が必要

9.2 配送料計算

配送料計算では、配送先地域、商品サイズ、重量、購入金額、配送方法、キャンペーン条件をもとに送料を計算します。全国一律送料、地域別送料、送料無料条件、クール便料金、大型商品送料など、ECの種類によって設計は変わります。

送料は購入判断に大きく影響します。商品価格が安くても送料が高いと離脱につながる場合があります。そのため、カート画面や注文確認画面で送料を早めに表示できる設計が重要です。

条件内容計算への影響
配送地域都道府県や離島地域別送料
商品サイズ大型・小型大型送料
商品重量重さ重量別送料
購入金額一定額以上送料無料条件
配送方法通常便・クール便送料差分
キャンペーン送料無料施策条件判定が必要

9.3 配送方法選択

配送方法選択では、ユーザーが通常配送、日時指定、メール便、クール便、店舗受取などを選べるようにします。商品によって利用できる配送方法が異なる場合もあります。冷蔵商品はクール便、大型家具は大型配送など、商品属性と配送方法を連携する必要があります。

配送方法は、送料や配送日数にも影響します。注文時には、選択可能な配送方法だけを表示し、選択後に送料や到着予定日を再計算します。配送方法の制約をサーバー側でも検証することが重要です。

配送方法内容注意点
通常配送標準的な配送多くの商品で利用
メール便小型商品の配送追跡や補償に注意
クール便冷蔵・冷凍配送対応商品を限定
大型配送家具・家電送料と日程が重要
日時指定配達日時を指定地域制限がある場合
店舗受取店舗で受取店舗在庫と連携

9.4 追跡番号管理

追跡番号管理では、配送業者から発行された追跡番号を注文に紐づけます。ユーザーは追跡番号を使って配送状況を確認できます。追跡番号はメール通知、マイページ、管理画面に表示されることが一般的です。

追跡番号は、出荷処理が完了したタイミングで登録されます。配送業者連携がある場合は自動で登録され、手動運用の場合は管理者が入力します。誤った追跡番号を登録すると問い合わせにつながるため、入力検証や確認画面が有効です。

項目内容設計ポイント
追跡番号配送追跡用番号注文に紐づける
配送業者どの業者か追跡URL生成に必要
登録タイミング出荷時通知と連動
追跡URL配送状況ページユーザーに表示
手動入力管理者が登録入力ミスに注意
自動連携業者APIで取得連携エラー対応

9.5 出荷ステータス管理

出荷ステータス管理では、注文が出荷前なのか、出荷準備中なのか、出荷済みなのかを管理します。注文ステータスと配送ステータスを分けることで、支払いは完了しているが出荷はまだ、出荷済みだが配達完了ではない、といった状態を表現できます。

出荷ステータスは、倉庫業務やユーザー通知に関係します。管理画面では、出荷待ち注文を一覧表示し、出荷済みに更新できるようにします。ステータス変更時には操作ログを残すと、トラブル調査に役立ちます。

ステータス内容次の処理
未出荷まだ出荷していない出荷準備
出荷準備中梱包・倉庫作業中追跡番号登録
出荷済み配送開始ユーザー通知
配送中業者が配送中追跡表示
配達完了商品到着完了処理
持ち戻り配達できなかった再配達案内
返品中返品配送中検品処理

9.6 配送業者連携

配送業者連携では、送り状発行、追跡番号取得、配送ステータス取得などを外部システムと連携します。手動で配送情報を入力するよりも効率的で、出荷件数が多いECでは重要になります。倉庫管理システムや配送管理サービスと連携する場合もあります。

連携では、APIエラーや通信失敗に備える必要があります。送り状発行に失敗した場合、管理者が再実行できるようにする、追跡番号取得が遅れた場合に保留状態にするなど、運用上の例外処理が重要です。

連携内容内容注意点
送り状発行配送ラベル作成住所情報の正確性
追跡番号取得番号を自動取得取得失敗に対応
配送状況取得ステータス更新遅延や差分に注意
倉庫連携出荷指示在庫と連動
再実行失敗時の再処理重複出荷に注意
ログ保存連携履歴トラブル調査

9.7 配送通知

配送通知は、注文受付、出荷完了、配送中、配達完了などのタイミングでユーザーへ送る通知です。メール、アプリ通知、SMS、LINE連携などを使う場合があります。配送通知が適切に届くと、ユーザーは安心して商品到着を待てます。

通知では、必要な情報を簡潔に伝えることが重要です。注文番号、配送業者、追跡番号、追跡URL、到着予定日を含めると便利です。ただし、通知の送りすぎはストレスになるため、重要なタイミングに絞ります。

通知タイミング内容ユーザー効果
注文受付注文完了を知らせる安心感
入金確認支払い完了を知らせる状態確認
出荷完了発送済みを知らせる到着待ちが分かる
追跡番号通知追跡情報を送る自分で確認できる
配達完了到着を知らせる受取確認
配送遅延遅延を知らせる問い合わせ削減

10. API設計

ECバックエンドでは、フロントエンド、管理画面、外部サービス、スマートフォンアプリなどがバックエンドAPIを通じてデータを取得・更新します。API設計が整理されていると、フロントエンド開発がしやすくなり、外部連携や機能追加にも対応しやすくなります。

API設計では、商品一覧、商品詳細、カート、注文、決済、会員、管理画面、外部連携を分けて設計します。ユーザー向けAPIと管理者向けAPIでは権限や返す情報が異なるため、同じデータを扱う場合でもエンドポイントや認可設計を分ける必要があります。

10.1 商品一覧API

商品一覧APIは、商品リストを取得するためのAPIです。カテゴリ、検索キーワード、価格帯、ブランド、在庫有無、並び替え、ページングなどに対応します。商品数が多いECでは、一覧APIの速度がユーザー体験に直結します。

一覧APIでは、必要な情報だけを返すことが重要です。商品詳細に必要な長い説明文や大量の画像を一覧で返すと、レスポンスが重くなります。一覧では、商品名、価格、サムネイル、販売状態などに絞り、詳細は商品詳細APIで取得します。

項目内容設計ポイント
検索条件キーワードやカテゴリ複数条件に対応
ページング件数制御大量取得を防ぐ
並び替え価格順・新着順インデックス設計
フィルターブランド・価格など商品属性と連携
表示項目一覧用情報詳細情報は返しすぎない
キャッシュ人気一覧を高速化在庫表示に注意

10.2 商品詳細API

商品詳細APIは、特定商品の詳細情報を取得するAPIです。商品名、説明、画像、価格、バリエーション、在庫状態、レビュー、関連商品などを返します。商品詳細は購入判断に直結するため、正確な情報を返す必要があります。

商品詳細APIでは、販売ステータスや在庫状態を適切に反映します。非公開商品や販売終了商品を一般ユーザーが取得できないようにし、管理者向けには別APIで詳細を取得できるようにするなど、権限に応じた設計が必要です。

項目内容注意点
商品基本情報名称・説明表示用情報
画像詳細画像表示順を管理
価格現在価格キャンペーン反映
バリエーションSKU一覧在庫と連動
在庫状態購入可否注文時にも再確認
関連商品おすすめ過剰取得に注意
権限制御非公開商品制御管理者APIと分ける

10.3 カートAPI

カートAPIは、商品追加、数量変更、削除、カート取得、カート統合などを扱います。カートはユーザー操作が多く、レスポンス速度も重要です。カートAPIでは、商品が販売中か、数量が妥当か、在庫があるかをサーバー側で検証します。

カートAPIは、ゲストユーザーと会員ユーザーの両方に対応する場合があります。ゲストカート識別子やセッション情報、ログイン時の統合処理を設計する必要があります。

操作内容サーバー側確認
カート取得現在の内容を返す商品状態を確認
商品追加商品を追加販売中・在庫確認
数量変更数量を更新上限・在庫確認
商品削除商品を外す対象確認
カート統合ゲストから会員へ重複処理
金額計算合計を返す最新価格で計算

10.4 注文API

注文APIは、注文作成、注文確認、注文履歴、キャンセルなどを扱います。注文APIは金額や在庫、決済と関係するため、特に慎重な設計が必要です。フロントエンドから送られた金額をそのまま信用せず、サーバー側で再計算します。

注文作成APIでは、冪等性キーを使うことで二重注文を防げます。通信エラーやボタン連打によって同じ注文作成が複数回実行されても、同じ処理は一度だけ反映されるようにします。

操作内容注意点
注文確認注文前の内容確認金額を再計算
注文作成注文データ作成冪等性が重要
注文履歴過去注文取得本人確認が必要
注文詳細注文単位で取得認可チェック
キャンセル注文取消状態に応じて制御
再注文過去商品をカートへ販売中か再確認

10.5 決済API

決済APIは、決済開始、決済結果取得、決済失敗時の再試行、返金、決済代行サービス連携などを扱います。決済APIでは、ユーザー入力だけでなく、外部決済サービスからのWebhookも受け取ります。Webhookは署名検証を行い、不正な通知を拒否します。

決済APIでは、注文状態と決済状態を正しく同期する必要があります。決済成功通知が届いたら注文を支払い済みにし、決済失敗なら再試行またはキャンセルへ進めます。重複通知や遅延通知に対応する設計が重要です。

操作内容設計ポイント
決済開始決済処理を作成注文と紐づける
決済成功支払い完了注文状態を更新
決済失敗支払い失敗再試行導線
Webhook受信外部通知署名検証
返金キャンセル時返金一部返金対応
状態照会決済結果確認通知漏れ対策

10.6 会員API

会員APIは、会員情報取得、更新、住所管理、購入履歴、パスワード変更などを扱います。個人情報を含むため、認証と認可が非常に重要です。本人以外が会員情報を取得・更新できないようにします。

会員APIでは、更新できる項目を制限します。たとえば、ユーザー自身が会員ランクや管理者権限を変更できてはいけません。入力値の検証だけでなく、更新可能フィールドの制御も必要です。

操作内容注意点
会員情報取得自分の情報を取得本人確認
会員情報更新氏名や電話番号変更更新可能項目を制限
メール変更ログインID変更確認メールが必要
住所管理配送先の追加・編集複数住所対応
パスワード変更認証情報更新再認証を検討
購入履歴過去注文取得他人の注文を見せない

10.7 管理画面API

管理画面APIは、商品登録、注文管理、在庫調整、配送処理、会員確認、売上分析などを扱います。管理画面APIは強い権限を持つため、一般ユーザー向けAPIよりも厳格な認証・認可が必要です。管理者、スタッフ、倉庫担当、CS担当など、権限を分ける設計が重要です。

管理画面APIでは、操作ログを残すことも重要です。誰がいつ商品価格を変更したか、誰が注文をキャンセルしたか、誰が在庫を調整したかを追跡できるようにします。トラブル調査や内部統制に役立ちます。

機能内容注意点
商品管理登録・編集・削除権限を制御
注文管理ステータス更新操作ログを残す
在庫調整在庫数変更理由を記録
会員管理ユーザー確認個人情報保護
配送処理出荷・追跡番号登録誤配送に注意
売上分析集計表示権限に応じて表示

10.8 外部連携API

外部連携APIは、決済代行、配送業者、倉庫管理、会計システム、CRM、メール配信、マーケティングツール、モール連携などと接続するためのAPIです。ECは外部サービスと連携することが多いため、連携エラーや遅延への対応が重要です。

外部連携では、同期処理と非同期処理を分けて考えます。注文確定時にすべての外部連携を同期的に実行すると、ユーザー待ち時間が長くなり、外部障害の影響を受けやすくなります。通知や分析連携は非同期処理にするなど、役割を分けると安定します。

連携先内容設計ポイント
決済代行支払い処理Webhook検証
配送業者送り状・追跡連携失敗に対応
倉庫管理出荷指示在庫同期
会計売上データ連携金額整合性
メール配信通知送信非同期化が有効
CRM顧客情報連携個人情報保護
モール外部販売連携在庫同期に注意

11. データベース設計

ECバックエンドのデータベース設計では、ユーザー、商品、カート、注文、注文明細、在庫、決済、配送などを適切に分けて管理します。特に注文関連データは、後から商品情報や会員情報が変わっても注文時点の内容を保持できるようにする必要があります。

データベース設計が曖昧だと、注文履歴が壊れる、在庫数が合わない、決済状態を追跡できない、配送状況が分からないといった問題が発生します。ECでは、現在のマスタ情報と、注文時点の履歴情報を分けることが重要です。

11.1 ユーザーテーブル

ユーザーテーブルは、会員情報を管理するテーブルです。メールアドレス、パスワードハッシュ、氏名、電話番号、会員状態、作成日時、更新日時などを持ちます。認証情報とプロフィール情報を同じテーブルに持つ場合もありますが、規模が大きくなると分割することもあります。

個人情報を含むため、アクセス制御や暗号化、ログ管理が重要です。パスワードは平文で保存せず、必ずハッシュ化します。また、退会済みユーザーの扱いも設計しておく必要があります。

カラム例内容注意点
idユーザーID主キー
emailメールアドレス一意制約
password_hashパスワードハッシュ平文保存しない
name氏名個人情報
phone電話番号任意項目にする場合もある
status有効・停止・退会ログイン制御
created_at作成日時監査用
updated_at更新日時変更管理

11.2 商品テーブル

商品テーブルは、商品情報を管理します。商品名、説明、価格、ブランド、カテゴリ、販売ステータスなどを持ちます。ただし、バリエーションがある商品では、商品テーブルとSKUテーブルを分ける方が管理しやすくなります。商品テーブルは商品ページ単位、SKUは実際の販売単位として設計します。

商品テーブルは検索や一覧表示に頻繁に使われるため、インデックス設計が重要です。公開状態やカテゴリ、価格、作成日時などで絞り込むことが多い場合は、検索条件に合わせた設計が必要です。

カラム例内容設計ポイント
id商品ID主キー
name商品名検索対象
description商品説明詳細表示
base_price基本価格SKU別価格がある場合も
status公開・非公開表示制御
brand_idブランドフィルター
category_idカテゴリ一覧表示
created_at登録日時新着順に使う

11.3 カートテーブル

カートテーブルは、ユーザーまたはゲストのカート情報を管理します。カート本体とカート明細を分ける設計が一般的です。カート本体にはユーザーIDやゲスト識別子、有効期限を持ち、カート明細には商品ID、SKU ID、数量を持ちます。

カートは注文前の仮情報であるため、価格を完全に確定情報として扱わない方が安全です。表示用にカート投入時価格を持つ場合でも、注文確定時には商品マスタや価格ルールをもとに再計算します。

テーブル主な内容注意点
cartsカート本体ユーザーまたはゲストに紐づけ
cart_itemsカート明細SKUと数量を保持
user_id会員カートNULLならゲストもあり
guest_tokenゲスト識別子有効期限が必要
sku_id販売単位在庫と連動
quantity数量上限チェック
expires_at有効期限放置カート整理

11.4 注文テーブル

注文テーブルは、注文全体の情報を管理します。注文番号、ユーザーID、注文者情報、配送先情報、合計金額、注文ステータス、決済ステータス、作成日時などを保持します。注文は履歴情報であるため、注文時点の情報を保存します。

会員情報や住所が後から変更されても、注文テーブルの情報は変わらないようにします。注文テーブルは売上集計や問い合わせ対応にも使われるため、正確性と履歴性が重要です。

カラム例内容設計ポイント
id注文ID主キー
order_number注文番号ユーザー表示用
user_id注文者ゲスト注文ならNULLもあり
customer_name注文者名注文時点で保存
total_amount合計金額注文時点で固定
order_status注文状態業務フローに使う
payment_status決済状態出荷判断に関係
created_at注文日時売上集計に使う

11.5 注文明細テーブル

注文明細テーブルは、注文に含まれる商品ごとの情報を管理します。商品ID、SKU ID、商品名、単価、数量、小計、税額、割引額などを保存します。ここでは、商品マスタへの参照だけでなく、注文時点の商品名や価格を保存することが重要です。

商品名や価格が後から変わっても、過去注文の明細は変更されるべきではありません。注文明細は、領収書、返品、一部キャンセル、売上分析にも使われます。

カラム例内容注意点
id明細ID主キー
order_id注文ID注文と紐づけ
product_id商品ID参照用
sku_idSKU ID在庫単位
product_name注文時商品名履歴として保存
unit_price注文時単価後から変えない
quantity数量返品や一部キャンセルに使う
subtotal小計集計に使う

11.6 在庫テーブル

在庫テーブルは、SKUごとの在庫数を管理します。単一倉庫ならSKU IDと数量だけでも管理できますが、複数倉庫の場合は倉庫IDも必要になります。在庫数だけでなく、引当済み数、販売可能数を分けて管理する場合もあります。

在庫更新は注文処理と強く関係するため、履歴テーブルを用意することが望ましいです。在庫がいつ、なぜ、どれだけ増減したかを記録しておくと、不整合の調査がしやすくなります。

カラム例内容設計ポイント
sku_idSKU識別子販売単位
warehouse_id倉庫ID複数倉庫対応
stock_quantity在庫数実在庫
reserved_quantity引当数仮確保
available_quantity販売可能数計算値でもよい
updated_at更新日時同期確認
version更新制御競合防止に使える

11.7 決済テーブル

決済テーブルは、注文に対する決済情報を管理します。決済方法、決済ステータス、外部決済ID、金額、決済日時、返金状態などを保存します。決済は外部サービスと連携することが多いため、外部IDや通知履歴を保持することが重要です。

決済テーブルには、カード番号などの機密情報を保存しない設計が基本です。決済代行サービスが発行するトークンや決済IDを使って照合します。返金や取消を扱う場合は、決済履歴を別テーブルに分けることもあります。

カラム例内容注意点
id決済ID主キー
order_id注文ID注文と紐づけ
payment_method決済方法カード・振込など
payment_status決済状態成功・失敗・返金
amount決済金額注文金額と照合
external_payment_id外部決済ID決済代行と照合
paid_at支払い日時入金確認
refunded_at返金日時返金管理

11.8 配送テーブル

配送テーブルは、注文の配送情報を管理します。配送先住所、配送方法、配送業者、追跡番号、出荷ステータス、出荷日時、配達完了日時などを保存します。注文と配送を分けることで、分割配送や複数配送先にも対応しやすくなります。

配送情報は、注文時点の住所を保存することが重要です。会員住所が後から変更されても、出荷済み注文の配送先は変わらないようにします。配送テーブルは、ユーザー通知や配送業者連携にも使われます。

カラム例内容設計ポイント
id配送ID主キー
order_id注文ID注文と紐づけ
recipient_name受取人名注文時点で保存
address配送先住所変更されない履歴
shipping_method配送方法送料計算と関係
carrier配送業者追跡URLに使う
tracking_number追跡番号ユーザー通知
shipped_at出荷日時ステータス管理

12. セキュリティ設計

ECサイトは、個人情報、決済情報、注文履歴、住所情報などを扱うため、セキュリティ設計が非常に重要です。認証と認可、個人情報保護、決済情報の扱い、CSRF対策、XSS対策、SQLインジェクション対策、管理画面セキュリティを体系的に設計する必要があります。

セキュリティは後から追加するものではなく、最初の設計段階から組み込むべきです。特にECでは、ユーザー向け画面だけでなく、管理画面や外部連携APIも攻撃対象になります。フロントエンド、バックエンド、インフラ、運用を含めた多層防御が必要です。

12.1 認証と認可

認証はユーザーが誰であるかを確認する処理で、認可はそのユーザーがその操作を実行してよいかを確認する処理です。ECでは、一般ユーザー、管理者、倉庫担当、カスタマーサポート担当など、複数の権限が存在する場合があります。ログインしているだけで全操作を許可してはいけません。

たとえば、ユーザーは自分の注文履歴だけを見られるべきで、他人の注文を見られてはいけません。管理者でも、商品編集はできるが返金処理はできない、といった権限分離が必要な場合があります。認可は必ずサーバー側で行います。

項目内容設計ポイント
認証本人確認セッション管理が重要
認可操作権限確認サーバー側で必ず検証
ロール権限グループ管理者・スタッフなど
リソース制御自分のデータだけ許可注文履歴で重要
多要素認証追加認証管理画面に有効
監査ログ操作記録不正操作調査

12.2 個人情報保護

ECでは、氏名、住所、電話番号、メールアドレス、購入履歴などの個人情報を扱います。これらの情報は必要な範囲だけ保存し、アクセスできる人を制限する必要があります。管理画面でも、すべてのスタッフが全個人情報を見られる設計は避けるべきです。

個人情報保護では、通信の暗号化、データベースアクセス制御、ログへの出力制限、バックアップ管理も重要です。特に、ログに住所やトークン、決済関連情報を出してしまうと、ログ漏洩時の被害が大きくなります。

項目内容注意点
氏名注文・配送に使用必要範囲で表示
住所配送に使用アクセス制限
電話番号配送連絡マスキング検討
メール通知・ログイン重複管理
購入履歴顧客対応に使用本人と権限者のみ
ログ操作記録個人情報を出しすぎない

12.3 決済情報を直接保持しない設計

ECサイトでは、カード番号などの機密性の高い決済情報を直接保持しない設計が基本です。決済代行サービスを利用し、EC側では決済IDやトークン、決済ステータスだけを保持します。これにより、情報漏洩時のリスクを下げられます。

決済情報を直接扱わない場合でも、決済結果や返金履歴は正確に管理する必要があります。外部サービスに依存するため、Webhook検証、状態照会、決済IDの保存、エラー時のリカバリーを設計します。

項目内容設計ポイント
カード番号原則保持しない決済代行を利用
決済トークン外部サービスが発行有効期限に注意
決済ID決済照合用注文と紐づけ
Webhook結果通知署名検証
返金履歴返金処理記録金額整合性
権限制御決済操作制限管理者でも限定する

12.4 CSRF対策

CSRF対策は、ログイン中のユーザーに意図しない操作を実行させないために必要です。ECでは、会員情報変更、注文確定、退会、住所変更、管理画面操作などで特に重要です。Cookie認証を使う場合は、CSRFトークンやSameSite Cookieを組み合わせます。

重要操作では、CSRFトークンだけでなく、再認証や確認画面を入れることも有効です。注文確定や退会処理など、影響が大きい操作では、ユーザーが意図した操作であることを明確に確認します。

対策内容ECでの対象
CSRFトークン正規フォームからの送信確認注文・会員更新
SameSite CookieCookie送信制御ログイン状態保護
Origin検証リクエスト元確認APIや管理画面
GETで状態変更しない状態変更をPOST等へ削除・更新処理
確認画面操作内容確認退会・注文確定
再認証重要操作前の確認パスワード変更

12.5 XSS対策

XSS対策では、ユーザー入力や外部データを画面に表示する際に、適切な出力エスケープを行います。ECでは、レビュー、問い合わせ内容、商品説明、管理メモ、検索キーワードなど、入力値が画面に表示される場面が多いため注意が必要です。

管理画面もXSS対策の対象です。ユーザーから送られた問い合わせ内容を管理者が見る画面でエスケープが不足していると、管理者権限で被害が広がる可能性があります。一般画面と管理画面の両方で安全な表示を徹底します。

対策内容対象
出力エスケープHTMLとして実行させないレビュー・検索結果
入力検証形式や長さを確認フォーム全般
HTML挿入制限危険なHTMLを避ける商品説明・CMS
サニタイズ許可タグだけ残すリッチテキスト
CSPスクリプト実行を制限全ページ
HttpOnly CookieCookie読み取り制限認証Cookie

12.6 SQLインジェクション対策

SQLインジェクションは、入力値を不適切にSQLへ組み込むことで発生する脆弱性です。ECでは、商品検索、ログイン、注文検索、管理画面の絞り込みなど、多くの場所でデータベース検索が行われるため、対策が必要です。基本は、プレースホルダーやORMの安全な機能を使い、文字列連結でSQLを作らないことです。

検索条件や並び替え条件を動的に組み立てる場合も注意が必要です。値だけでなく、カラム名やソート方向をユーザー入力から直接使うと危険です。許可リスト方式で受け付ける項目を限定します。

対策内容注意点
プレースホルダー値を安全にバインド文字列連結を避ける
ORM利用安全なクエリ生成生SQL使用時は注意
入力検証型や範囲を確認数値IDも検証
許可リストカラムやソートを限定動的SQLで重要
権限制限DBユーザー権限を限定被害範囲を減らす
ログ監視異常クエリ検知攻撃兆候を把握

12.7 管理画面セキュリティ

管理画面は、商品価格、在庫、注文、会員情報、決済、配送などを操作できるため、最も厳重に守るべき領域です。一般ユーザー向け画面とは別の認証強度、権限管理、IP制限、多要素認証、操作ログが必要になる場合があります。

管理画面では、スタッフごとに権限を分けます。商品編集はできるが返金はできない、在庫調整はできるが会員情報は見られない、といった分離が重要です。すべての管理者に全権限を与えると、内部ミスや不正時の被害が大きくなります。

対策内容設計ポイント
管理者認証管理画面ログイン多要素認証を検討
権限分離ロール別権限最小権限にする
IP制限接続元制限運用要件と調整
操作ログ管理操作を記録誰が何をしたか残す
個人情報制限表示範囲を制御CS担当のみ表示など
セッション管理管理者セッションタイムアウト短めに設定

13. パフォーマンス設計

ECサイトでは、商品一覧、検索、カート、注文、決済など、ユーザーが購入するまでに複数の処理が発生します。ページ表示やAPIレスポンスが遅いと、離脱率が上がり、売上に影響します。特に商品一覧や検索はアクセス数が多く、パフォーマンス設計が重要です。

パフォーマンス設計では、商品一覧の高速化、検索最適化、キャッシュ、画像配信、データベースインデックス、非同期処理、セール時の高負荷対策を組み合わせます。ただし、キャッシュを使う場合は、価格や在庫の正確性とのバランスに注意する必要があります。

13.1 商品一覧の高速化

商品一覧は、ECサイトで最もアクセスされやすいページの一つです。カテゴリページ、検索結果、ランキング、新着一覧などで頻繁に利用されます。一覧表示が遅いと、ユーザーが商品を探す前に離脱してしまう可能性があります。

高速化のためには、ページング、必要項目だけの取得、適切なインデックス、キャッシュ、検索基盤の導入を検討します。一覧では詳細情報を返しすぎず、商品名、価格、サムネイル、販売状態などに絞ることが重要です。

対策内容効果
ページング一度に取得する件数を制限DB負荷を減らす
項目削減一覧に必要な項目だけ返すレスポンス軽量化
インデックス検索条件に合わせる取得高速化
キャッシュ人気一覧を保存高速表示
CDN静的画像を配信表示速度改善
非同期読み込み一部情報を後から取得初期表示改善

13.2 検索処理最適化

商品検索は、キーワード、カテゴリ、価格、ブランド、在庫、タグなど複数条件が絡むため、負荷が高くなりやすい処理です。商品数が少ないうちはデータベース検索でも十分ですが、大規模になると全文検索エンジンの導入を検討します。

検索処理では、ユーザーが求める商品を速く返すだけでなく、検索結果の質も重要です。表記ゆれ、同義語、カテゴリ補正、並び替え、在庫表示などを考慮します。検索ログを分析すると、ユーザーが何を探しているかも分かります。

対策内容設計ポイント
全文検索商品名や説明を検索大規模ECで有効
フィルター条件絞り込み属性設計が重要
ソート価格順・人気順インデックスに注意
表記ゆれ対応同義語やかな違い検索精度向上
検索ログ検索語を記録商品改善に使える
在庫反映販売可能商品を優先キャッシュとの整合性

13.3 キャッシュ設計

キャッシュは、同じデータを何度も計算・取得しないための仕組みです。商品一覧、カテゴリ、商品詳細、ランキング、設定情報などはキャッシュしやすい領域です。キャッシュを使うことで、データベース負荷を減らし、レスポンス速度を改善できます。

ただし、ECでは価格や在庫の正確性が重要です。古いキャッシュによって、在庫切れ商品が購入可能に見えたり、価格が古いまま表示されたりすると問題になります。キャッシュする情報と、リアルタイムに確認する情報を分ける設計が必要です。

対象キャッシュ適性注意点
カテゴリ高い更新頻度が低い
商品詳細価格・在庫に注意
商品一覧条件が多い
ランキング高い定期更新でよい
在庫低〜中注文時は必ず再確認
価格セール時に注意

13.4 画像配信最適化

ECでは商品画像が多く、画像配信が遅いとページ表示が重くなります。商品一覧では大量のサムネイルが表示されるため、画像サイズ、形式、CDN配信、遅延読み込みが重要です。画像最適化は、フロントエンドだけでなくバックエンドや配信基盤とも関係します。

バックエンドでは、アップロードされた画像を複数サイズに変換し、一覧用、詳細用、拡大用に分ける設計が有効です。CDNを使うことで、ユーザーに近い場所から画像を配信し、表示速度を改善できます。

対策内容効果
画像リサイズ用途別サイズ生成転送量削減
WebP対応軽量形式表示速度改善
CDN配信近いサーバーから配信高速化
遅延読み込み必要時に読み込む初期表示改善
サムネイル生成一覧用画像一覧表示高速化
画像圧縮容量削減モバイルで有効

13.5 データベースインデックス

データベースインデックスは、検索や絞り込みを高速化するために重要です。商品一覧ではカテゴリ、価格、公開状態、作成日時、ブランドなどで検索することが多く、注文一覧では注文日、注文ステータス、ユーザーIDなどで絞り込みます。よく使う条件に合わせてインデックスを設計します。

ただし、インデックスを増やしすぎると、更新処理が遅くなる場合があります。商品登録や在庫更新、注文作成の頻度も考慮し、必要なインデックスを選びます。パフォーマンス改善では、実際のクエリを分析することが重要です。

対象インデックス候補用途
商品category_idカテゴリ一覧
商品status公開商品絞り込み
商品price価格フィルター
商品created_at新着順
注文user_id購入履歴
注文order_status管理画面絞り込み
在庫sku_id在庫確認

13.6 非同期処理

非同期処理は、ユーザーを待たせる必要がない処理をバックグラウンドで実行する設計です。注文完了メール、在庫同期、配送連携、分析ログ送信、レコメンド更新などは非同期化しやすい処理です。これにより、注文完了画面の表示を速くできます。

ただし、決済や在庫確保など、注文成立に必要な処理は安易に非同期化してはいけません。同期的に完了すべき処理と、後から実行してよい処理を分けることが重要です。非同期処理では、失敗時の再試行やログ管理も必要です。

処理非同期適性注意点
注文メール送信高い送信失敗時の再試行
分析ログ送信高い多少遅れてもよい
配送連携出荷業務に影響
在庫同期整合性に注意
決済処理低〜中状態管理が重要
レコメンド更新高い定期処理でよい

13.7 セール時の高負荷対策

セール時には、通常よりも多くのユーザーが同時にアクセスし、商品一覧、商品詳細、カート、注文、決済に負荷が集中します。特に限定商品や在庫数が少ない商品では、同時購入による在庫競合が発生しやすくなります。

高負荷対策では、キャッシュ、CDN、キュー、レート制限、在庫ロック、待機室、読み取り専用ページの最適化などを検討します。セール前に負荷試験を行い、どの処理がボトルネックになるかを確認しておくことが重要です。

対策内容効果
CDN静的配信を高速化フロント負荷軽減
キャッシュ商品一覧を高速化DB負荷軽減
キュー注文処理を制御急激な負荷を吸収
レート制限過剰アクセス制御障害防止
在庫ロック同時購入制御売り越し防止
負荷試験事前検証ボトルネック発見

14. 運用・監視設計

ECバックエンドは、リリース後の運用と監視が非常に重要です。注文失敗、決済エラー、在庫不整合、配送連携エラー、メール送信失敗などは、すぐに検知して対応する必要があります。システムが動いているだけでは不十分で、正しく注文が処理されているかを継続的に監視します。

運用・監視設計では、エラーログ、注文失敗監視、決済エラー監視、在庫不整合監視、売上ダッシュボード、管理者通知、バックアップを整備します。問題が発生したときに原因を追跡し、復旧できる状態を作ることが重要です。

14.1 エラーログ管理

エラーログ管理では、APIエラー、決済連携エラー、配送連携エラー、データベースエラー、認証エラーなどを記録します。ログがないと、障害発生時に何が起きたのか分からず、対応が遅れます。ECでは、注文や決済に関わるエラーを特に重視します。

ただし、ログに個人情報や決済情報をそのまま出力しないように注意します。ログは調査に必要な情報を残しつつ、機密情報を含めない設計にします。エラーIDや注文番号を使って追跡できるようにすると便利です。

ログ対象内容注意点
APIエラーリクエスト失敗原因調査に使う
注文エラー注文作成失敗重要度が高い
決済エラー支払い失敗決済IDを記録
配送エラー連携失敗再処理に使う
認証エラーログイン失敗不正検知
個人情報ログ出力制限マスキングが必要

14.2 注文失敗監視

注文失敗監視では、注文作成に失敗したケースや、注文が途中状態で止まっているケースを検知します。たとえば、注文は作成されたが決済に進んでいない、決済は成功したが注文が更新されていない、在庫確保後に処理が止まった、といった状態です。

注文失敗は売上損失やユーザー不満に直結するため、早期検知が重要です。一定時間以上同じ状態に留まっている注文を監視し、管理者へ通知する仕組みを作ります。

監視対象内容対応
注文作成失敗注文が作れないエラー通知
決済待ち長期化支払い未完了リマインド・取消
決済成功未反映支払い済みなのに未更新状態照会
在庫確保停止仮在庫のまま自動解放
注文重複同一注文の重複調査・取消
ステータス停滞処理が止まる管理者通知

14.3 決済エラー監視

決済エラー監視では、決済失敗率、Webhook受信失敗、返金失敗、決済代行サービス障害などを監視します。決済に問題があると購入完了できず、売上に直結します。ユーザー側では「購入できない」という体験になるため、迅速な対応が必要です。

決済エラーは、外部サービス側の障害、通信エラー、設定ミス、認証情報の期限切れなどが原因になることがあります。異常が発生した場合、管理者へ通知し、必要に応じて決済方法を一時停止する設計も検討します。

監視対象内容対応
決済失敗率失敗が増えていないか原因調査
Webhook失敗通知受信失敗再送・照会
返金失敗返金処理エラー手動対応
外部障害決済代行障害告知・一時停止
署名検証失敗不正通知の可能性セキュリティ確認
決済遅延結果反映遅れ保留状態管理

14.4 在庫不整合監視

在庫不整合監視では、在庫数がマイナスになっていないか、仮在庫が長時間残っていないか、注文数と在庫減算が一致しているかを確認します。在庫不整合は、売り越しや販売停止につながるため、定期的に検知する必要があります。

在庫不整合が起きた場合、在庫履歴をもとに原因を調査します。注文、キャンセル、返品、手動調整、外部倉庫連携のどこで差分が出たかを追えるようにしておくことが重要です。

監視対象内容対応
マイナス在庫在庫が0未満緊急確認
長期仮在庫仮確保が残る自動解放
注文差分注文数と在庫減算の不一致履歴調査
倉庫差分外部倉庫との差再同期
手動調整管理者変更理由確認
棚卸し差分実在庫との差調整処理

14.5 売上ダッシュボード

売上ダッシュボードでは、売上、注文数、平均注文単価、決済方法別売上、カテゴリ別売上、商品別売上、キャンセル率、返品率などを可視化します。運営者はダッシュボードを見て、ECの状況を把握し、施策を判断します。

売上ダッシュボードでは、リアルタイム性と正確性のバランスが重要です。速報値としてすぐ表示するデータと、会計用に確定したデータは分けて扱う場合があります。キャンセルや返金が発生すると売上が変わるため、集計ルールを明確にします。

指標内容活用
売上合計売上経営判断
注文数注文件数需要把握
平均注文単価1注文あたり金額施策評価
決済方法別支払い手段別決済改善
商品別売上商品ごとの売上在庫・販促
キャンセル率取消割合UX改善
返品率返品割合商品改善

14.6 管理者通知

管理者通知は、重要なエラーや業務イベントを運営者へ知らせる仕組みです。注文失敗、決済エラー、在庫切れ、配送連携失敗、不正ログイン疑い、高負荷状態などは、早めに通知する必要があります。通知がなければ、問題に気づくのが遅れます。

ただし、通知が多すぎると重要な通知が埋もれてしまいます。通知レベルを分け、緊急度の高いものだけ即時通知し、軽微なものは日次レポートにまとめるなどの設計が有効です。

通知対象内容通知方法
注文失敗注文処理エラー即時通知
決済エラー決済連携失敗即時通知
在庫切れ人気商品の在庫切れ管理者通知
配送失敗出荷連携エラー担当者通知
不正ログイン異常ログインセキュリティ通知
高負荷サーバー負荷上昇運用通知
日次集計売上・注文レポート定期通知

14.7 バックアップ設計

バックアップ設計は、障害や誤操作、データ破損に備えるために必要です。ECでは、注文、会員、商品、在庫、決済、配送データが重要です。バックアップがなければ、障害時に復旧できず、注文処理や顧客対応に大きな影響が出ます。

バックアップでは、取得頻度、保存期間、保存場所、暗号化、復旧手順を決めます。バックアップを取っているだけでは不十分で、実際に復元できるか定期的に確認することが重要です。

項目内容設計ポイント
DBバックアップデータベース保存定期取得
ファイルバックアップ商品画像などオブジェクトストレージ
保存期間何日残すか法務・運用要件
暗号化バックアップ保護漏洩対策
復旧手順リストア方法手順書化
復旧テスト実際に戻せるか確認定期実施

おわりに

ECサイトバックエンド設計は、商品を登録して注文を受けるだけの単純な仕組みではありません。会員、商品、カート、注文、在庫、決済、配送、API、データベース、セキュリティ、パフォーマンス、運用監視が連動して初めて、安全で安定したECシステムになります。特に注文処理では、価格、在庫、決済、配送先が同時に関係するため、どのタイミングで何を確定するかを明確にすることが重要です。

小規模ECでは、最初から過度に複雑なシステムを作る必要はありません。しかし、会員管理、商品管理、注文管理、在庫管理、決済管理の責務を最初から分けておくと、後から拡張しやすくなります。商品数や注文数が増えたとき、キャンペーン、複数倉庫、外部配送連携、ポイント制度、定期購入などを追加しやすい構造になります。

ECバックエンドで特に重要なのは、整合性と安全性です。在庫がない商品を売らない、決済が失敗した注文を出荷しない、注文が重複しない、ユーザーが他人の注文を見られない、個人情報や決済情報を安全に扱う、といった基本を確実に守る必要があります。見た目のUXだけでなく、裏側の処理が正確であることが、ECの信頼性を支えます。

長期運用を考えるなら、運用・監視設計も欠かせません。注文失敗、決済エラー、在庫不整合、配送連携失敗を早期に検知し、復旧できる状態を作る必要があります。バックアップ、監査ログ、管理者通知、売上ダッシュボードを整備することで、問題が起きたときにも対応しやすくなります。ECサイトのバックエンド設計は、ユーザーに商品を届けるための業務基盤であり、安定した売上と信頼を支える重要な土台です。

LINE Chat