ランチタイムやディナータイムの注文ピーク時に、大手フードデリバリープラットフォームへ支払う高額な手数料(30〜35%)を回避するため、WordPress単体でマルチ店舗対応のオンライン注文システムを構築しようとすると、wp_posts テーブルへのDB書き込み集中やWebSocket非対応による注文通知遅延が発生し、厨房のオペレーションが崩壊します。

👉 Resource Address: Mozzu – AI Based Online Food Ordering System & Multi-Restaurant with SaaS


1. アーキテクチャ境界の厳格な定義:WordPress集客・加盟店開拓フロントエンドとMozzu AIフードデリバリーコア

自社専用のAIフードデリバリーSaaSプラットフォームを成功させるには、フランチャイズ加盟店開拓・一般ユーザー集客用のウェブ層と、リアルタイム注文処理・AIレコメンド・厨房印刷(KDS)を担うコアエンジンを明確に切り離す必要があります。

WordPressは「集客・ブランドプレゼンテーション・加盟店獲得層」を担当します。 高速なページ表示によるSEOインデックス、地域別フードエリアのプロモーション、加盟希望店舗向けのオンライン問合せフォーム、ブログコンテンツを配信します。WordPressは、厨房サーマルプリンターのリアルタイム制御、配達員のGPS位置トラッキング、ミリ秒単位の注文待ち行列処理を実行する場所ではありません。

Mozzu(PHP Scripts SaaS)は「基幹フードデリバリー&AI注文処理エンジン」として機能します。 独立したPHP/MySQLアーキテクチャ上で動作し、マルチテナント店舗管理、LLM(大規模言語モデル)を活用したパーソナライズメニュー推薦、WebSocketによるリアルタイム注文ステータス更新、そして配達員・店舗・エンドユーザー間のトリプルエンドアプリ連携を処理します。

codeCode

+---------------------------------------------------------------------------------------+
|                       マーケティング・加盟店開拓レイヤー(WordPress)                  |
|                                                                                       |
|  [ 一般ユーザー / 加加盟希望店舗 ] ----(HTTPS / CDN)----> [ Cloudflare WAF / CDN ]    |
|                                                                    |                  |
|                                                                    v                  |
|  +---------------------------------------------------------------------------------+  |
|  | WordPress Head(SEO・ブランドプレゼンテーション・加盟店リード獲得)             |  |
|  |  - フードデリバリーサービス案内・出店メリット・シミュレーター                    |  |
|  |  - 加盟申請フォーム(Cloudflare Turnstileスパム保護)                            |  |
|  |  - 安全なAPI連携ブリッジ(HMAC-SHA256署名付きペイロード送信)                    |  |
|  +---------------------------------------------------------------------------------+  |
+--------------------------------------------+------------------------------------------+
                                             |
                         (暗号化REST API / Webhookディスパッチ)
                                             |
                                             v
+---------------------------------------------------------------------------------------+
|                    注文処理・AIパーソナライズコアレイヤー(Mozzu SaaS)                |
|                                                                                       |
|  +---------------------------------------------------------------------------------+  |
|  | Mozzu SaaS コアエンジン(独立vHost / 非同期注文キュー構造)                       |  |
|  |  - マルチテナント店舗管理(手数料設定・売上自動分配)                           |  |
|  |  - モディファイア(トッピング・サイズ選択)付きメニュー制御システム             |  |
|  |  - AIクロスセル・アップセル推薦エンジン(時間帯・注文履歴解析)                  |  |
|  +---------------------------------------------------------------------------------+  |
|                 |                                                    |                |
|       (リアルタイムPush通知)                                (HTTP / REST API)        |
|                 v                                                    v                |
|  +------------------------------+                    +-----------------------------+  |
|  | Redis / Node WebSocketサーバー|                    | 外部AIプロバイダ (OpenAI API)|  |
|  | - 厨房KDS端末への即時音通知  |                    | - 自然言語メニュー解析      |  |
|  | - 配達員GPS位置リアルタイム描画|                    | - 動的セット提案プロンプト  |  |
|  +------------------------------+                    +-----------------------------+  |
|                 |                                                                     |
|          (永続データ書き込み)                                                         |
|                 v                                                                     |
|  +------------------------------+                                                     |
|  | MySQL 8.0 プライマリDB       |                                                     |
|  | - 店舗マスター・注文履歴     |                                                     |
|  | - 決済ログ・売上レポート     |                                                     |
|  +------------------------------+                                                     |
+---------------------------------------------------------------------------------------+

システム境界とデータ連携ルール

  • 注文データの隔離: 注文の発生、トッピング選択、配達先住所、決済情報はすべてMozzuのデータベース構造で処理され、WordPress側の wp_posts や wp_postmeta には一切保存されません。

  • リアルタイム通信の担保: 厨房のレシートプリンタや店舗端末への新着注文通知は、HTTPポーリングではなく、WebSocketまたはSSE(Server-Sent Events)経由で即座にPush通知されます。

  • AI推薦の非同期処理: ユーザーの過去の注文動向や天候・時間帯に基づくAIメニューレコメンドは、レスポンス遅延を防ぐためバックグラウンドキューで処理されます。


2. 方式選定機能マトリクス:汎用WordPressプラグイン継ぎはぎ構成 vs 専用AIフードデリバリーSaaS基盤

オンライン注文システムを構築する際、WooCommerceなどの汎用プラグインを組み合わせる手法と、専用のフードデリバリーSaaS基盤を導入する手法では、耐負荷性と運用コストに決定的な差が生じます。

評価軸 WooCommerce + フード注文系プラグイン 大手デリバリープラットフォーム(UberEats等) Mozzu AI SaaS基盤 Mozzu – AI Based Online Food Ordering System & Multi-Restaurant with SaaS
プラットフォーム手数料 プラグイン保守費用のみ(低額)。 超高額(30〜35%): 売上が増えるほど利益率が著しく圧迫される。 手数料ゼロ(固定自社運用): 自社インフラのため、売上に応じた外部手数料が発生しない。
ピーク時アクセス耐性 極めて脆弱: ランチピーク時の同時注文時にDB行ロックが発生しやすい。 非常に高い: クラウド巨大インフラにより圧倒的な負荷を吸収。 高耐性(最適化可能): Redisキープラス注文キューの非同期処理により高速レスポンスを維持。
厨房オペレーション(KDS) 不十分: ブラウザの自動更新に依存し、注文の聞き逃しや印字遅延が発生。 専用端末依存: プラットフォーム専用タブレットの管理が必要。 高度な統合機能: 厨房ディスプレイ(KDS)、自動音通知、ESC/POSサーマルプリンタ直結対応。
AI提案・アップセル 機能なし/単純関連商品: 時間帯や組み合わせを考慮した高度な提案は不可能。 プラットフォーム側のAIアルゴリズムにより自店舗以外の競合店も提案される。 自社専属AIレコメンド: 注文コンテキスト(例: サイドメニュー追加提案)をAIが自動計算。
顧客データ・顧客囲い込み 自社保持: 保持できるが、高度なCRM分析やプッシュ通知連携に難あり。 データ非開示: 顧客の連絡先や詳細データはプラットフォーム側が独占。 100%自社資産: 顧客の注文履歴、嗜好データ、連絡先を自社マーケティングにフル活用可能。
加盟店(店舗)管理 構築困難: マルチテナントごとの売上分配や個別メニュー管理に多数の追加開発が必要。 標準対応しているが、加盟店ごとの独自ブランディングや独自クーポンの自由度は低い。 標準搭載: 店舗管理者用ダッシュボード、手数料自動計算、店舗別営業時間設定が完備。

3. ステージング検証環境の構築と本番環境5ステップデプロイ手順

本番運用へ移行する前に、ステージング環境を立ち上げてリアルタイム通知やAIレコメンドのレスポンス速度を検証します。検証作業用の安全なパッケージを入手する際は、Mozzu – AI Based Online Food Ordering System & Multi-Restaurant with SaaS から検証用ディストリビューションを取得してセットアップを進めます。

推奨サーバー構成スペック

  • 仮想コンピュート: 4 vCPU / 8 GB RAM 以上(加盟店数・注文規模に応じて拡張)

  • オペレーティングシステム: Ubuntu 22.04 LTS または Ubuntu 24.04 LTS

  • Webサーバー: Nginx 1.24+(WebSocketリバースプロキシ設定必須)

  • バックエンドランタイム: PHP 8.2 FPM

    • 必須拡張機能: bcmath, curl, fileinfo, gd, intl, mbstring, mysqli, pdo_mysql, redis, xml, zip

  • データベース: MySQL 8.0+(InnoDBストレージエンジン、innodb_buffer_pool_sizeの最適化)

  • キャッシュ / リアルタイム通信: Redis 7.0+

  • プロセス監視: Supervisor

5ステップ・デプロイメントパイプライン

codeCode

+-----------------------------------------------------------------------------------+
|                        5段階の本番環境デプロイメントフロー                         |
+-----------------------------------------------------------------------------------+
  ステップ1: Nginx仮想ホストの設定(WebSocketリバースプロキシとSSL終端)
    │
  ステップ2: UTF8mb4に対応したMySQL 8.0データベースの作成と権限適用
    │
  ステップ3: Mozzu SaaSコアの配置と `.env` (DB, OpenAI API, Redis)の構成
    │
  ステップ4: SupervisorによるバックグラウンドワーカーとWebSocketサーバの起動
    │
  ステップ5: サーマルプリンタ(ESC/POS)および通知音テストの完了確認

ステップ1: Nginx仮想ホストとWebSocketプロキシの設定

注文処理エンジン専用のサブドメイン(例: orders.yourdomain.com)用にNginxを設定し、リアルタイム通信用のプロキシパスを確保します:

codeNginx

server {
    listen 80;
    server_name orders.yourdomain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name orders.yourdomain.com;
    root /var/www/mozzu/public;
    index index.php index.html;

    ssl_certificate /etc/letsencrypt/live/orders.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/orders.yourdomain.com/privkey.pem;

    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-XSS-Protection "1; mode=block" always;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    # WebSocketリアルタイム注文通知用プロキシ
    location /ws/ {
        proxy_pass http://127.0.0.1:6001;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_read_timeout 180;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

ステップ2: データベースのセットアップ

絵文字や特殊なメニュー表記に対応するため、utf8mb4_unicode_ci でデータベースを作成します:

codeSQL

CREATE DATABASE mozzu_saas_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'mozzu_usr'@'127.0.0.1' IDENTIFIED BY 'K8#vN3$zL9!xP5rT';
GRANT ALL PRIVILEGES ON mozzu_saas_db.* TO 'mozzu_usr'@'127.0.0.1';
FLUSH PRIVILEGES;

ステップ3: 環境変数(.env)の設定

ソースコードを /var/www/mozzu に展開し、所有権を変更した上で .env ファイルを編集します:

codeBash

cd /var/www/mozzu
sudo chown -R www-data:www-data .
sudo find . -type d -exec chmod 755 {} \;
sudo find . -type f -exec chmod 644 {} \;
sudo chmod -R 775 storage bootstrap/cache

.env 内にデータベース接続、OpenAI APIキー、Redisの情報を指定します:

codeDotenv

APP_NAME="Mozzu Food Ordering Engine"
APP_ENV=production
APP_DEBUG=false
APP_URL=https://orders.yourdomain.com

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=mozzu_saas_db
DB_USERNAME=mozzu_usr
DB_PASSWORD=K8#vN3$zL9!xP5rT

CACHE_DRIVER=redis
SESSION_DRIVER=redis
QUEUE_CONNECTION=redis

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

# AI機能用キー設定
OPENAI_API_KEY=sk-proj-YourProductionKeyForMenuUpselling
AI_RECOMMENDATION_MODEL=gpt-4o-mini

ステップ4: Supervisorによるワーカーの常駐化

バックグラウンドでの注文処理やAI推薦生成を自動実行するため、Supervisorを設定します:

codeIni

# /etc/supervisor/conf.d/mozzu-worker.conf
[program:mozzu-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/mozzu/artisan queue:work redis --sleep=2 --tries=3 --max-time=3600
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=www-data
numprocs=4
redirect_stderr=true
stdout_logfile=/var/www/mozzu/storage/logs/worker.log

設定を反映してサービスを起動します:

codeBash

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start mozzu-worker:*

4. マルチテナント加盟店・メニュー階層設計とAIおすすめロジックのデータモデリング

多店舗展開のデリバリープラットフォームでは、店舗ごとのメニュー構造やモディファイア(トッピング・サイズ選択)、そしてAIによる注文単価アップ(クロスセル)のロジックが緻密に設計されている必要があります。

codeCode

プラットフォーム運営(Super Admin)
 │
 ├── 店舗テナントA: ピザ&パスタ専門店
 │    ├── 営業時間・配達可能エリア(Polygon GeoJSON指定)
 │    ├── プラットフォーム手数料: 12%
 │    └── メニューカテゴリ: 薪窯ピザ
 │         └── 商品: マルゲリータ
 │              ├── モディファイア群1 (必須・単一選択): 生地サイズ [M: +0円, L: +500円]
 │              └── モディファイア群2 (任意・複数選択): トッピング [チーズW: +200円, サラミ: +150円]
 │
 ├── 店舗テナントB: 高級和牛バーガーショップ
 │    ├── 営業時間・配達可能エリア
 │    └── メニューカテゴリ: クラフトバーガー
 │
 └── AIパーソナライズ推薦エンジン
      ├── ルール1: 「バーガー」カート投入時に「ドリンク・ポテトセット」をAIが提示
      ├── ルール2: 深夜時間帯(21:00以降)の注文時に「サイドディッシュ・スイーツ」を推薦
      └── プロンプトテンプレート: 注文履歴と時間帯に基づく関連商品の動的スコアリング

AIアップセル提案ロジックの構築ルール

  1. カート投入時のコンテキスト抽出: ユーザーがメイン商品をカートに追加した瞬間、その商品のカテゴリ・時間帯・現在の合計金額をAIプロンプトに投入します。

  2. 高速レスポンス(低レイテンシ)の担保: レコメンド生成に数秒かかると注文離脱に繋がるため、事前にAIが解析した「商品間の共起確率マトリクス」をRedisにキャッシュし、ミリ秒単位で補サイドメニューを提示します。

  3. トッピング(モディファイア)の構造化: 必須選択(サイズや辛さ)と任意選択(追加トッピング)を明確に分離し、フロントエンドでの選択モダールUIを最適化します。


5. 加盟店リード獲得とトランザクションメール配送パイプライン(FluentSMTP連携)

フードデリバリーサービスにおいて、加盟申請完了メール、注文確定通知、配達完了通知の遅延や不達は、店舗運用やユーザー体験に壊滅的な影響を与えます。

確実なメール配信を実現するインフラ設計

標準のPHP mail() 関数はDKIM/SPF署名が不完全になりやすく、Gmail等の主要キャリアメールでスパム判定される原因となります。WordPress(加盟店獲得側)とMozzuコア(注文通知側)の両方で、専用の外部トランザクションメールプロバイダ(Amazon SES、Postmark等)を経由させます。

codeCode

+---------------------------------------------------------------------------------------+
|                    フードデリバリーメール配信パイプライン                              |
+---------------------------------------------------------------------------------------+
 [ 加盟申請 / 注文確定トリガー ]
               │
               v
 [ 暗号化TLS接続(ポート587 / 465) ]
               │
               v
 [ 外部プロバイダ (Amazon SES / Postmark) ]
               │
               ├──────> DKIM暗号署名(2048-bit 鍵検証)
               ├──────> SPFレコード適合 (`v=spf1 include:amazonses.com ~all`)
               └──────> DMARCポリシー適用 (`p=quarantine; adkim=s`)
               │
               v
 [ 店舗オーナー / 注文ユーザーの受信トレイ ] ====> 確実に到達

運用上の設定チェックリスト

  • WordPress側の送信最適化: 加盟店募集LPを運用するWordPressには FluentSMTP を導入し、Amazon SESなどのAPIキー経由で接続します。フォーム送信時のサーバータイムアウトを回避します。

  • ボット対策の徹底: 新規加盟申請フォームやユーザー登録画面には Cloudflare Turnstile を配置し、悪質なボットによる大量架空申請を遮断します。

  • 注文メールの非同期化: Mozzuエンジン側からの注文確認メール送信処理は、必ずRedisのバックグラウンドキューへ投入し、ユーザーの注文完了画面の表示を遅延させないように設計します。


6. モバイルビューポート最適化とワンタップ注文・リアルタイムトラッキングUX

注文の8割以上はスマートフォンから行われます。小さな画面でもストレスなくメニューを選び、モディファイアを指定し、配達状況をリアルタイムで確認できるモバイルUI設計が不可欠です。

モバイルUI/UXの設計原則

  1. ボトムシート型トッピング選択UI: 商品タップ時に表示されるトッピング選択画面は、画面下部からスライドインするボトムシート形式を採用し、親指一本で選択完了できるようにします。

  2. リアルタイム進行状況バー: 注文後、「店舗受付済み」「調理中」「配達員ピックアップ」「配達中」のステータス変化をWebSocket経由でリアルタイム更新します。

  3. 高コントラストな厨房(KDS)表示: 厨房用タブレットの画面は、油蒸気や離れた場所からの視認性を考慮し、ダークモード+高コントラストな文字サイズで自動描画します。

codeCSS

/* モバイル表示時のメニュー選択&トッピングボトムシート最適化 */
@media (max-width: 768px) {
  .modifier-modal-drawer {
    position: fixed;
    bottom: 0;
    left: 0;
    width: 100%;
    max-height: 85vh;
    background: #ffffff;
    border-radius: 20px 20px 0 0;
    box-shadow: 0 -10px 25px rgba(0, 0, 0, 0.15);
    z-index: 1050;
    overflow-y: auto;
  }

  .btn-add-to-cart {
    min-height: 50px;
    font-size: 1.1rem;
    font-weight: 700;
    width: 100%;
    touch-action: manipulation;
  }

  /* 厨房KDS画面用高コントラスト表示 */
  .kds-order-card.status-new {
    border-left: 8px solid #ef4444;
    background-color: #1e293b;
    color: #ffffff;
    font-size: 1.2rem;
  }
}

7. 飲食・フードデリバリー業界特化型テクニカルSEOとSchema.org構造化データ実装

地域のユーザーが「近くのデリバリー」「〇〇(料理名) 宅配」で検索した際、自社の加盟店舗やメニューが検索結果の上位およびリッチリザルトに表示されるよう、構造化データを正しく実装します。

飲食店・デリバリーSEOのSchemaマッピング

ページ種別 適用するSchema.orgタイプ 必須・重要プロパティ
加盟店舗詳細ページ Restaurant / FoodEstablishment name, image, servesCuisine, priceRange, address, hasMenu
メニュー商品ページ MenuItem / Offer name, description, offers.price, offers.priceCurrency, suitableForDiet
デリバリーSaaSトップ SoftwareApplication name, applicationCategory, operatingSystem, offers

実装用JSON-LD構造化データコードブロック

加盟店舗のページまたはメニュー詳細テンプレートの <head> 内に以下のJSON-LDを出力します:

codeHtml

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Restaurant",
  "name": "本格窯焼きピザ イル・ソーレ 新宿店",
  "image": "https://orders.yourdomain.com/uploads/restaurants/pizza-ilsole.jpg",
  "servesCuisine": ["Pizza", "Italian"],
  "priceRange": "¥1,500 - ¥3,000",
  "telephone": "+81-3-1234-5678",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "新宿1-2-3",
    "addressLocality": "新宿区",
    "addressRegion": "東京都",
    "postalCode": "160-0022",
    "addressCountry": "JP"
  },
  "hasMenu": {
    "@type": "Menu",
    "name": "デリバリーメニュー",
    "hasMenuItem": [
      {
        "@type": "MenuItem",
        "name": "特製マルゲリータ Lサイズ",
        "description": "イタリア産水牛モッツァレラとフレッシュバジルを使用した王道ピザ",
        "offers": {
          "@type": "Offer",
          "price": "2200",
          "priceCurrency": "JPY",
          "availability": "https://schema.org/InStock"
        }
      }
    ]
  }
}
</script>

8. 本番運用を支える補助ツール・インフラストラクチャ選定

フードデリバリープラットフォームの安定運用を支えるため、信頼性の高い補助ツール群でシステムを補強します:

ツール / インフラ 役割・分類 選定理由とアーキテクチャ上の価値
Redis 7.0 インメモリデータストア リアルタイム注文状態、カートセッション、AIレコメンドキャッシュを超高速処理。
Supervisor プロセス監視 バックグラウンドキューやWebSocketサーバーの常駐監視と自動再起動を実施。
FluentSMTP メール配送 WordPressからの出店問合せ・資料請求メールを外部クラウドAPIへ安全に引き渡し。
Cloudflare Turnstile 非侵入型スパム保護 注文や加盟申請フォームでのbot攻撃を、ユーザー体験を損なわずに防止。
ESC/POS Web Driver プリンタ通信 厨房のサーマルプリンターへネットワーク経由で注文票を自動印字。

9. 開発者向け実装コード:WordPress加盟店申請フォームからMozzuコアへのセキュアなリード連携ブリッジ

以下のPHPスニペットは、WordPressサイト上の出店申請フォームから送られたデータを、Mozzu SaaSエンジンへ安全に転送するためのWordPressプラグイン用コードです。HMAC-SHA256署名により通信の安全性を確保します:

codePHP

<?php
declare(strict_types=1);

/**
 * Plugin Name: Mozzu Restaurant Onboarding Bridge
 * Description: WordPressの加盟申請データをMozzuデリバリーコアへセキュアに転送するゲートウェイ。
 * Version: 1.0.0
 * Author: Senior Systems Architect
 */

if (!defined('ABSPATH')) {
    exit; // 直接アクセス防止
}

final class Mozzu_Onboarding_Gateway {

    private const MOZZU_API_ENDPOINT = 'https://orders.yourdomain.com/api/v1/internal/restaurant-onboard';
    private const PRE_SHARED_SECRET   = 'YOUR_HIGH_ENTROPY_HMAC_SECRET_KEY_CHANGE_IN_PRODUCTION';

    public static function init(): void {
        add_action('rest_api_init', [__CLASS__, 'register_webhook_routes']);
    }

    public static function register_webhook_routes(): void {
        register_rest_route('mozzu-bridge/v1', '/submit-restaurant', [
            'methods'             => WP_REST_Server::CREATABLE,
            'callback'            => [__CLASS__, 'handle_restaurant_submission'],
            'permission_callback' => [__CLASS__, 'verify_permission'],
        ]);
    }

    public static function verify_permission(WP_REST_Request $request): bool {
        // CSRFトークンや適切な権限検証
        return true;
    }

    public static function handle_restaurant_submission(WP_REST_Request $request): WP_REST_Response {
        $params = $request->get_json_params();

        // 必須入力項目のバリデーション
        if (empty($params['restaurant_name']) || empty($params['owner_email']) || !is_email($params['owner_email'])) {
            return new WP_REST_Response([
                'success' => false,
                'message' => '店舗名および有効なメールアドレスは必須です。',
            ], 400);
        }

        // 入力データのサニタイズ
        $clean_payload = [
            'uuid'            => wp_generate_uuid4(),
            'restaurant_name' => sanitize_text_field($params['restaurant_name']),
            'owner_name'      => sanitize_text_field($params['owner_name'] ?? ''),
            'owner_email'     => sanitize_email($params['owner_email']),
            'phone'           => sanitize_text_field($params['phone'] ?? ''),
            'cuisine_type'    => sanitize_text_field($params['cuisine_type'] ?? 'General'),
            'submitted_at'    => time(),
        ];

        $json_payload = (string) wp_json_encode($clean_payload);
        $signature    = hash_hmac('sha256', $json_payload, self::PRE_SHARED_SECRET);

        // MozzuコアへAPI送信
        $response = wp_remote_post(self::MOZZU_API_ENDPOINT, [
            'timeout'     => 10,
            'redirection' => 2,
            'blocking'    => true,
            'headers'     => [
                'Content-Type'         => 'application/json',
                'X-Signature-Auth'     => $signature,
                'User-Agent'           => 'WP-Mozzu-Bridge/1.0',
            ],
            'body'        => $json_payload,
        ]);

        if (is_wp_error($response)) {
            error_log('[Mozzu Bridge Error] ' . $response->get_error_message());
            return new WP_REST_Response([
                'success' => false,
                'message' => '注文エンジンとの通信に失敗しました。',
            ], 500);
        }

        $response_code = wp_remote_retrieve_response_code($response);
        if ($response_code >= 200 && $response_code < 300) {
            return new WP_REST_Response([
                'success' => true,
                'message' => '加盟申請が完了しました。審査担当者よりご連絡いたします。',
            ], 200);
        }

        return new WP_REST_Response([
            'success' => false,
            'message' => '登録処理中にエラーが発生しました。コード: ' . $response_code,
        ], 502);
    }
}

add_action('plugins_loaded', ['Mozzu_Onboarding_Gateway', 'init']);

10. 5フェーズ本番リリース・検証ワークフロー(Delivery Workflow)

トラブルの許されない注文プラットフォームのローンチに向け、以下のフェーズに従って段階的に検証を実施します:

codeCode

[ フェーズ1: ステージング環境構築と基礎モジュール検証 ]
  │  - PHP 8.2 FPM, Redis 7.0, MySQL 8.0 の動作確認
  │  - SSL証明書発行とWebSocketプロキシ(/ws/)の疎通テスト
  │  - storage/ および cache/ ディレクトリ権限設定(775)
  │
  v
[ フェーズ2: 注文処理負荷テストとWebSocket音通知検証 ]
  │  - 擬似的な同時注文(k6等による100 req/sec)によるDB行ロックテスト
  │  - 店舗端末・厨房画面でのWebSocket即時音通知および描画の遅延測定
  │  - サーマルプリンター(ESC/POS)へのテスト印字確認
  │
  v
[ フェーズ3: AIレコメンド・アップセル精度テスト ]
  │  - カート投入時の関連商品提示プロンプトの応答速度計測(目標<800ms)
  │  - トッピング・モディファイア組み合わせ時の価格正確性バリデーション
  │  - OpenAI APIエラー時のフォールバック処理確認
  │
  v
[ フェーズ4: トランザクションメールと決済疎通テスト ]
  │  - オンライン決済(Stripe等)のテストモードによる注文・返金疎通確認
  │  - FluentSMTP経由での注文確定メールの受信トレイ(Inbox)到達確認
  │  - Cloudflare Turnstileによるボット遮断テスト
  │
  v
[ フェーズ5: 本番切り替えとリアルタイム監視設定 ]
     - Aレコード切り替えと本番用OpenAI / 決済APIキーへの変更
     - Supervisorプロセスの常駐監視とログローテーション設定
     - ランチ・ディナーピーク時のシステムリソース(CPU/RAM/DB Connections)監視開始

11. 現場のシステムアーキテクトによる技術FAQ

ピーク時の同時注文ラッシュでデータベースがデッドロックを起こすのを防ぐには?

注文生成処理を直接 orders テーブルへの同期書き込みだけに依存させず、Redisを一次バッファとして利用します。ユーザーが注文ボタンを押した際、リクエストをまずRedis上のFIFO(First-In, First-Out)キューへ高速投入します。Supervisorで常駐させたバックグラウンドワーカーがこれを順番に非同期処理してMySQLへ永続化することで、DBへの瞬間的な書き込み集中を平滑化し、デッドロックを完全に回避します。

AIレコメンドの呼び出し遅延が原因で、ユーザーがカート決済画面で待たされるのを防ぐには?

リアルタイムに毎回OpenAI APIへ問い合わせを行うのではなく、「商品A+商品B」の組み合わせに対するAI推奨結果を一定期間Redisにキャッシュする構造にします。また、API呼び出しにタイムアウト値(例: 800ms)を設定し、応答が遅れた場合はAI推薦枠を自動的に「人気メニューTOP3」などの静的キャッシュ表示へフォールバックさせ、決済フロー自体を絶対に停止させない設計にします。

厨房のレシートプリンターへ確実に注文票を自動印刷させるための構成は?

ブラウザからの標準印刷ダイアログ(Ctrl+P)に頼るのではなく、ネットワーク対応のサーマルプリンター(Epson ESC/POS対応等)とMozzuのバックエンドをソケット通信で直結させるか、店舗側タブレットで動作するローカル印刷ブリッジアプリ(Android/iOS用Print Service)を経由させます。これにより、ダイアログ確認なしで新着注文が入った瞬間に自動で厨房へレシートが印字されます。


12. 総括と実装リソース案内

サードパーティのデリバリープラットフォームへの依存から脱却し、自社専用のデリバリー・テイクアウト事業を成功させる鍵は、明確なアーキテクチャ分離にあります。

WordPressを「集客・SEO・加盟店開拓のフロントエンド」として活用し、基幹となる「注文処理・厨房制御・AIレコメンド」を専用のMozzu SaaSエンジンへ集約・分離させることで、注文ピーク時にも停止しない強固なインフラが実現します。高額なプラットフォーム手数料を削減し、自社の貴重な顧客データを100%資産化することが可能になります。

開発・検証環境の立ち上げや、コード構造およびWebSocket連携の事前確認を行いたいエンジニアの方は、Mozzu – AI Based Online Food Ordering System & Multi-Restaurant with SaaS から検証用パッケージを取得し、ローカルまたはステージングサーバー上で実際の挙動評価に着手してください。