TEXTBOOK SECTION / AI LEARNING

完成アーキテクチャ

Square API × Next.js 実践EC開発|自社ECを低コストで作る、決済・在庫・注文管理の設計と実装の「完成コードと設計資料」より、完成アーキテクチャを解説。生成AI、AI活用、DX、業務改善を実践しながら学べるオンライン教材です。

1完成コードと設計資料EC

OVERVIEW

この節で学べること

概要を表示する
項目内容
教材名Square API × Next.js 実践EC開発|自社ECを低コストで作る、決済・在庫・注文管理の設計と実装
完成コードと設計資料
完成アーキテクチャ
カテゴリEC
学習内容生成AI、AI活用、DX、業務改善を実践しながら理解するための教材です。

TABLE OF CONTENTS

目次

CONTENT

ここから

第33章では、Square APIとNext.jsで作ったECの仕組みを、物販だけでなく、チケット販売、相談予約、講座販売、イベント参加費、デジタルコンテンツ販売へ応用する方法を学びました。

この章では、これまで作ってきたECシステム全体を、完成アーキテクチャとして整理します。

アーキテクチャとは、システム全体の設計図のことです。

フロントエンド
API
DB
Square
Webhook
管理画面
メール通知
デプロイ
運用

それぞれの部品がどのようにつながっているかを理解すると、トラブルが起きたときにも原因を探しやすくなります。

攻略本風に言えば、第34章は**「これまで集めた装備を、最終パーティ編成として整理するステージ」**です。


34.1 全体構成図

まず、ECシステム全体の構成を見ます。

この本で作ってきたECは、次のような構成です。

購入者
  ↓
Next.js フロントエンド
  ↓
Next.js API Route / Route Handler
  ↓
DB
  ↓
Square API
  ↓
Square決済画面
  ↓
Webhook
  ↓
注文確定処理
  ↓
メール通知
  ↓
管理画面

もう少し分かりやすく書くと、次のようになります。

[購入者]
   |
   v
[ECサイト]
   |
   v
[API]
   |        \
   v         v
[DB]      [Square]
   ^         |
   |         v
[Webhook受信]
   |
   v
[注文更新・在庫更新・メール送信]
   |
   v
[管理画面]

役割を分けると、次の通りです。

フロントエンド:
購入者が見る画面

API:
購入や注文処理を受け付ける入口

DB:
商品、注文、在庫、顧客情報を保存する場所

Square:
決済を安全に処理する場所

Webhook:
Squareから決済結果を受け取る仕組み

管理画面:
店舗側が注文や商品を管理する画面

メール通知:
購入者と店舗へ状況を知らせる仕組み

この構成で大切なのは、決済完了をフロントエンドだけで判断しないことです。

購入者が完了ページに戻った
  ↓
注文確定

ではなく

SquareからWebhookが届いた
  ↓
注文確定

全体の基本方針は、次の通りです。

画面は分かりやすく
決済はSquareに任せる
注文確定はWebhookで判断する
DBに正しい状態を残す
管理画面で人が確認できる

ECシステムは、見た目だけではありません。

裏側のデータ、決済、通知、運用まで含めて完成です。


34.2 フロントエンド構成

フロントエンドは、購入者が直接見る部分です。

Next.jsでは、商品一覧、商品詳細、カート、注文完了ページなどを作ります。

トップページ
商品一覧ページ
商品詳細ページ
カートページ
注文確認ページ
注文完了ページ
FAQページ
法務ページ

フロントエンドの役割は、購入者を迷わせず、購入まで案内することです。

商品を見つける
  ↓
商品の内容を理解する
  ↓
カートに入れる
  ↓
決済へ進む
  ↓
注文完了を確認する

ページ構成の例です。

app/
  page.tsx
  products/
    page.tsx
    [slug]/
      page.tsx
  cart/
    page.tsx
  checkout/
    page.tsx
  thanks/
    page.tsx
  faq/
    page.tsx
  legal/
    tokushoho/
      page.tsx
    privacy/
      page.tsx

商品ページでは、購入者に必要な情報を表示します。

・商品名
・価格
・写真
・説明
・在庫状況
・送料
・配送目安
・購入ボタン
・FAQ

フロントエンドで注意すべきことは、重要な判断をブラウザだけで行わないことです。

ブラウザでやってよい:
画面表示
入力補助
カート表示
購入ボタン表示

ブラウザだけでやってはいけない:
最終金額の確定
在庫確定
注文確定
決済完了判断

金額や在庫は、サーバー側で再計算します。

ブラウザ:
商品IDと数量を送る

サーバー:
DBから価格と在庫を確認
合計金額を計算
Squareへ送る

フロントエンドは、お客様にとっての売り場です。

見やすく、速く、不安なく購入できることを優先します。


34.3 API構成

APIは、フロントエンドとDB、Squareをつなぐ窓口です。

Next.jsでは、Route Handlerを使ってAPIを作れます。

画面
  ↓
API
  ↓
DB / Square / メール

ECで必要なAPIは、主に次の通りです。

・商品取得API
・カート金額計算API
・決済リンク作成API
・Webhook受信API
・注文取得API
・注文更新API
・管理画面用API
・メール送信API

API構成の例です。

app/api/
  products/
    route.ts
  checkout/
    create-payment-link/
      route.ts
  webhooks/
    square/
      route.ts
  admin/
    orders/
      route.ts
    products/
      route.ts
  emails/
    send-order-confirmation/
      route.ts

決済リンク作成APIの役割です。

カート内容を受け取る
  ↓
DBで商品価格を確認
  ↓
在庫を確認
  ↓
注文をpendingで作成
  ↓
Square決済リンクを作成
  ↓
購入者をSquareへ案内

APIでは、入力値を信用しすぎてはいけません。

購入者から送られてきた価格:
信用しない

DBに保存されている価格:
正として使う

悪い例です。

ブラウザから送られた合計金額をそのままSquareへ送る

よい例です。

商品IDと数量だけ受け取る
  ↓
サーバー側で価格を取得
  ↓
合計金額を計算

APIの基本方針は、次の通りです。

入力を検証する
DBを正とする
秘密情報はサーバー側だけで使う
重要処理はログを残す
エラー時に追跡できるようにする

APIは、ECシステムの関所です。

不正な値や危険な処理を、ここで止めます。


34.4 DB構成

DBは、ECシステムの記録係です。

商品、注文、在庫、顧客、配送、クーポンなどを保存します。

商品情報
注文情報
注文明細
在庫
顧客情報
配送情報
クーポン
Webhookログ

基本的なテーブル構成です。

products:
商品マスター

product_variants:
商品バリエーション

orders:
注文

order_items:
注文商品

customers:
顧客

inventory:
在庫

shipments:
配送

coupons:
クーポン

webhook_events:
Webhook処理履歴

注文まわりの関係です。

orders
  ↓
order_items
  ↓
products

イメージです。

orders:
注文番号、購入者、合計金額、ステータス

order_items:
どの商品を何個買ったか

products:
商品名、価格、説明

注文ステータスの例です。

pending:
決済待ち

paid:
決済完了

preparing:
発送準備中

shipped:
発送済み

cancelled:
キャンセル

manual_review:
手動確認

DB設計で大切なのは、状態を追えることです。

いつ注文されたか
いくらだったか
何を買ったか
決済済みか
発送済みか
メールを送ったか

特に、注文にはその時点の価格を保存します。

商品価格は後から変わることがあるからです。

商品マスター:
現在価格

注文明細:
購入時点の価格

たとえば、商品価格が変更されても、過去注文の金額は変えてはいけません。

7月1日購入:
5,400円

7月10日価格変更:
6,000円

過去注文:
5,400円のまま残す

DBは、現在の販売だけでなく、過去の取引を正しく残す場所です。


34.5 Square連携構成

Square連携では、決済処理をSquareに任せます。

自社ECでは、カード番号などの決済情報を直接持ちません。

自社EC:
商品、注文、在庫、画面を管理

Square:
決済を処理

Square連携の基本フローです。

購入者が購入ボタンを押す
  ↓
自社APIで注文をpending作成
  ↓
Square決済リンクを作成
  ↓
購入者がSquare画面で決済
  ↓
Squareが決済処理
  ↓
Webhookで結果通知
  ↓
自社DBの注文をpaidへ更新

保存しておくべきSquare関連情報です。

・Square Payment ID
・Square Order ID
・Square Checkout URL
・Square Customer ID
・Square Subscription ID
・Square Webhook Event ID

自社DBの注文テーブルに、Square側のIDを保存しておくと追跡しやすくなります。

orders:
  id
  order_number
  status
  total_amount
  square_payment_id
  square_order_id
  created_at

Square連携で重要なのは、環境を混ぜないことです。

Sandbox:
テスト環境

Production:
本番環境

本番ではProduction Access Token、本番Location ID、本番Webhook URLを使います。

SQUARE_ENVIRONMENT=production
SQUARE_ACCESS_TOKEN=本番用
SQUARE_LOCATION_ID=本番用

Square連携の基本方針です。

カード情報は持たない
決済処理はSquareに任せる
注文情報は自社DBに残す
決済結果はWebhookで確定する
Square側IDを保存して追跡できるようにする

Squareは決済の専門担当です。

自社ECは、商品、注文、顧客体験、運用を担当します。


34.6 Webhook構成

Webhookは、Squareから自社ECへイベントを知らせる仕組みです。

決済完了、支払い更新、注文更新などが発生したときに、Squareが指定URLへ通知します。

Squareで決済完了
  ↓
Webhook通知
  ↓
自社APIが受信
  ↓
注文ステータス更新

Webhook構成です。

Square
  ↓
/api/webhooks/square
  ↓
署名検証
  ↓
イベント種別確認
  ↓
重複チェック
  ↓
注文更新
  ↓
在庫更新
  ↓
メール送信

Webhook受信APIの基本フローです。

1. リクエストを受け取る
2. 署名を検証する
3. event_idを確認する
4. 処理済みイベントならスキップ
5. イベント種別を確認する
6. 注文を取得する
7. 注文ステータスを更新する
8. 在庫を減らす
9. メールを送る
10. webhook_eventsに記録する

Webhookでは、同じイベントが複数回来る可能性を考えます。

そのため、event_idを保存します。

webhook_events:
  event_id
  event_type
  processed_at
  status

すでに処理済みのevent_idなら、二重処理しません。

同じWebhookが再送される
  ↓
event_idを確認
  ↓
処理済みならスキップ

Webhookで絶対に避けたいのは、二重処理です。

1回の決済
  ↓
在庫を2回減らす
  ↓
メールを2回送る

そのため、Webhook処理は冪等にします。

冪等とは、同じ処理を何度実行しても、結果が変わらないようにする考え方です。

1回実行しても
2回実行しても
注文はpaidのまま
在庫は1回分だけ減る

Webhookは、ECの裏側の心臓です。

購入完了ページよりも、Webhookを信頼して注文確定します。


34.7 管理画面構成

管理画面は、店舗スタッフがECを運用するための画面です。

購入者向けの画面とは別に、注文、商品、在庫、配送、顧客対応を管理します。

購入者向け:
商品を見る、購入する

管理者向け:
注文を見る、発送する、商品を更新する

管理画面に必要な機能です。

・ログイン
・注文一覧
・注文詳細
・ステータス変更
・商品管理
・在庫管理
・配送管理
・顧客メモ
・CSV出力
・Webhookログ確認

管理画面の構成例です。

admin/
  login/
  orders/
  orders/[id]/
  products/
  inventory/
  shipments/
  customers/
  coupons/
  settings/

注文一覧では、対応すべき注文を見つけやすくします。

・未対応
・決済済み
・発送準備中
・発送済み
・キャンセル
・手動確認

注文詳細で表示する情報です。

・注文番号
・注文日時
・購入者情報
・商品明細
・合計金額
・決済ステータス
・配送先
・配送ステータス
・管理メモ
・メール送信履歴

管理画面で大切なのは、誤操作を防ぐことです。

危険な操作:
キャンセル
返金
在庫変更
発送済み変更

対策:
確認ダイアログ
操作履歴
権限管理

たとえば、発送済みに変更するときは確認を入れます。

この注文を発送済みに変更します。
追跡番号は入力済みですか?

[キャンセル]
[発送済みにする]

管理画面は、ただの裏側ではありません。

店舗の司令室です。

今、何を発送するか
どの注文が止まっているか
どの商品が足りないか
どの問い合わせに対応するか

これが分かる画面を作ります。


34.8 メール通知構成

メール通知は、購入者と店舗の両方に必要です。

購入者には安心を届けます。

店舗には作業指示を届けます。

購入者向け:
注文完了メール
発送完了メール
キャンセルメール

店舗向け:
新規注文通知
決済失敗通知
手動確認通知

メール通知の基本フローです。

注文がpaidになる
  ↓
購入者へ注文完了メール
  ↓
店舗へ新規注文通知

発送完了時の流れです。

管理画面で発送済みにする
  ↓
追跡番号を保存
  ↓
購入者へ発送完了メール

メールの種類です。

・注文完了メール
・発送完了メール
・キャンセル完了メール
・決済失敗メール
・管理者通知メール
・問い合わせ返信メール
・定期購入通知メール

メール送信履歴もDBに残すと安心です。

email_logs:
  id
  order_id
  to
  template
  status
  sent_at
  error_message

メール送信で重要なのは、メール失敗と注文失敗を分けることです。

注文は成功
  ↓
メール送信に失敗

この場合:
注文はpaidのまま
メールだけ再送対象

悪い設計です。

メール送信に失敗
  ↓
注文も失敗扱いにする

よい設計です。

注文確定
  ↓
メール送信
  ↓
失敗したらemail_logsに記録
  ↓
管理者が再送

メール通知は、購入者の不安を減らすための重要な接点です。

注文できたか
いつ届くか
問い合わせ先はどこか

これが分かるメールにします。


34.9 デプロイ構成

デプロイとは、作ったECサイトを本番環境に公開することです。

この本では、Next.jsをVercelへデプロイする構成を想定します。

ローカル開発
  ↓
GitHub
  ↓
Vercel
  ↓
本番公開

デプロイ構成です。

開発者
  ↓ git push
GitHub
  ↓ 自動連携
Vercel
  ↓
Production環境
  ↓
独自ドメイン

環境は、開発用と本番用を分けます。

Development:
ローカル開発

Preview:
確認用

Production:
本番公開

環境ごとに設定する値も分けます。

ローカル:
Sandbox Square
開発DB
テストメール

本番:
Production Square
本番DB
本番メール

本番環境変数の例です。

NEXT_PUBLIC_APP_URL=
DATABASE_URL=
SQUARE_ENVIRONMENT=
SQUARE_ACCESS_TOKEN=
SQUARE_LOCATION_ID=
SQUARE_WEBHOOK_SIGNATURE_KEY=
RESEND_API_KEY=
ADMIN_NOTIFICATION_EMAIL=

デプロイ前チェックです。

・ビルドが成功する
・TypeScriptエラーがない
・環境変数が設定されている
・本番DBにつながる
・Square Production設定になっている
・Webhook URLが本番URLになっている
・独自ドメインが有効
・HTTPSで開ける

デプロイ後にも確認します。

・トップページが表示される
・商品ページが表示される
・カートに入れられる
・決済リンクが作成される
・Webhookが届く
・注文がpaidになる
・メールが届く
・管理画面で確認できる

デプロイは、公開ボタンを押すだけではありません。

公開
  +
決済確認
  +
Webhook確認
  +
メール確認
  +
管理画面確認

ここまで確認して、本番運用に入ります。


34.10 運用フロー

最後に、完成したECの運用フローを整理します。

ECは作って終わりではありません。

毎日の運用が必要です。

注文確認
在庫確認
発送準備
問い合わせ対応
売上確認
商品更新
キャンペーン管理

通常注文の運用フローです。

購入者が注文
  ↓
Squareで決済
  ↓
Webhookでpaidへ更新
  ↓
注文完了メール送信
  ↓
管理者通知
  ↓
店舗が注文確認
  ↓
発送準備
  ↓
発送済みに変更
  ↓
発送完了メール送信

管理者の毎日の確認項目です。

・新規注文はあるか
・manual_reviewはあるか
・決済失敗はあるか
・未発送注文はあるか
・在庫切れ商品はあるか
・問い合わせはあるか

週次で見る項目です。

・売上
・注文数
・人気商品
・在庫不足商品
・カート離脱
・問い合わせ傾向
・キャンペーン効果

月次で見る項目です。

・月間売上
・利益
・リピート率
・平均注文単価
・SEO流入
・商品別売上
・改善施策の結果

トラブル時の運用も決めておきます。

決済済みだが注文がpaidにならない
  ↓
Square Dashboardを確認
  ↓
Webhookログを確認
  ↓
注文をmanual_reviewへ
  ↓
管理者が手動対応

在庫不足時の流れです。

注文発生
  ↓
在庫不足が判明
  ↓
発送可否を確認
  ↓
購入者へ連絡
  ↓
代替・遅延・キャンセルを案内

運用で大切なのは、例外を見つけられることです。

通常注文:
自動で進む

例外注文:
管理者が見つけて対応する

完成アーキテクチャの目的は、自動化だけではありません。

人が安全に運用できる状態を作ることです。

自動化できるところは自動化する
人が確認すべきところは見える化する
例外はmanual_reviewに集める

これが、実務で使えるECシステムの運用フローです。


第34章のまとめ

この章では、Square APIとNext.jsで作るECシステムの完成アーキテクチャを整理しました。

フロントエンド、API、DB、Square、Webhook、管理画面、メール通知、デプロイ、運用がつながって、1つのECシステムになります。

この章で覚えておきたいポイントは、次の通りです。

1. ECシステムは、画面だけでなくAPI、DB、決済、管理画面、運用まで含めて完成である
2. フロントエンドは購入者が迷わず購入できる売り場である
3. APIは、フロントエンド、DB、Squareをつなぐ関所である
4. DBは、商品、注文、在庫、顧客、履歴を記録する場所である
5. Squareには決済処理を任せ、自社ECは注文と運用を管理する
6. Webhookで決済結果を受け取り、注文ステータスを確定する
7. 管理画面は、店舗スタッフが注文、商品、在庫、配送を管理する司令室である
8. メール通知は、購入者の安心と店舗作業を支える
9. デプロイでは、開発環境と本番環境を分ける
10. 運用では、自動処理と手動確認の役割を分ける

完成アーキテクチャの基本は、次の一言にまとめられます。

ECは、売る画面ではなく、注文から運用までをつなぐ仕組みである。

商品が見られる。

購入できる。

決済できる。

注文が記録される。

メールが届く。

店舗が発送できる。

トラブル時に確認できる。

ここまでつながって、実務で使えるECシステムになります。

第35章では、この完成したECシステムを、制作案件としてどう提案し、どのように収益化していくかを整理していきます。

FAQ

よくある質問

完成アーキテクチャは医療関係者向けだけの内容ですか。
医療分野の例が含まれる場合もありますが、医療関係者だけに限定した内容ではありません。生成AI、AI活用、DX、業務改善、プロトタイプ開発など、一般的なAI学習の事例として読める内容です。
AI初心者でも読めますか。
はい。AIをこれから学ぶ方、数学が苦手な方、仕事でAIを使いたい方にも読み進めやすいように、教材の章と節の流れに沿って整理しています。
サムネイル画像は必ず表示されますか。
はい。教材にcoverUrlが設定されている場合はその画像を表示し、未設定の場合は代替サムネイル画像を表示します。
Square API × Next.js 実践EC開発|自社ECを低コストで作る、決済・在庫・注文管理の設計と実装のほかの章も読めますか。
はい。教材トップから章立てを確認でき、前後の節へもページ下部のナビゲーションから移動できます。