複数の判断に影響し、外部データに依存し、または実行後に説明可能でなければならない場合、商業ルールはもはやストア設定ではありません。たとえば、ERPの条件に基づく価格計算、複数倉庫にまたがる在庫引当、運用リスクによる購入のブロック、あるいは固有の例外を伴う物流システムへの注文送信などです。
このような場合、複数のプラグイン、連鎖した設定、コードスニペットで解決する方法は当初機能するかもしれませんが、暗黙的な挙動への依存を増やします。問題はプラグインが悪い選択肢であることではなく、明確な所有権、テスト、可観測性、障害復旧を必要とするビジネスロジックを支えるために使うことです。保守可能なWooCommerce統合は、あらゆる要件を独立アプリケーションにすることなく、商業運用をWebチャネルの詳細から分離します。
転換点:ストア設定からドメインルールへ

設定は通常、ローカルかつ宣言的で、検証が容易です。たとえば、税の適用、支払い方法の有効化、ゾーン別配送方法の表示などです。ドメインルールはビジネスポリシーを表し、WooCommerceのインターフェースが変わらなくても変更されることがあります。
この区別が重要なのは、ポリシーには単一の信頼できる情報源、責任者、境界ケースに対する定義済みの挙動が必要だからです。プロモーションが最新の利益率、顧客ごとの契約、外部システムで確保済みの可用性に依存する場合、それは単なるカタログ割引ではありません。WooCommerceが要求し、適用し、記録すべき商業上の判断です。
技術を選ぶ前に、プラグインに言及せずルールを記述してください。受け取るデータ、生成する結果、許容する例外、変更できる人、不足情報がある場合に起こるべきことを明確にします。これらの質問に答えられないなら、先に自動化することは多くの場合、曖昧さを増幅させます。
プラグインやスニペットでは足りなくなった兆候
- 同じルールが複数の場所に実装されている。プラグイン、テーマコード、自動化、社内システムです。
- 結果が、遅延やエラーの可能性があるAPI、ERP、WMS、CRM、配送業者、決済サービスに依存している。
- 変更にはテストなしでコードを編集する必要がある、または組み合わせた効果を誰も予測できない設定に触れる必要がある。
- 注文がシステム間で宙に浮く可能性がある。ストアでは決済済みだが物流では作成されていない、または再試行後に二重送信されるなどです。
- 運用部門が、価格が適用された理由、注文が保留された理由、返品が拒否された理由を知る必要がある。
- 在庫、ステータス、インポート、顧客データを修正する定常的な手作業がある。
- 画面経由の同期、十分に制御されていないcron、またはページ読み込みごとのリモート照会が、処理量によりパフォーマンスリスクになる。
プラグイン自体は製品として適切でも、必要な拡張ポイント、記録、バージョン管理、データモデルを提供していないことも重要な兆候です。より多くの選択肢を持つ別のプラグインに置き換えても、問題が常に解消されるわけではありません。より不透明な層へ移すだけになることがあります。
判断マップ:テーマ、自作プラグイン、統合、分離アプリケーション
テーマ内の表示ルール
テーマは、メッセージ、商品テンプレート、フィールド配置、純粋に視覚的な要素など、表示を変更するためのものです。確定価格、在庫、認可、重要な注文遷移を決定してはなりません。テンプレートは情報を表示し、ドメインモデルがどの情報が有効かを決定します。
標準プラグインまたは自作プラグイン
標準プラグインは、プロセスがその設定と一致し、その保守が運用リスクに見合う場合に適しています。自作のWordPressプラグインは、追加フィールド、ローカル検証、単純なチェックアウトルール、特定アダプターなど、WooCommerceの限定的な拡張に適しています。コードはバージョン管理し、リスクに見合うテストを備え、WooCommerceのhooks層とビジネスロジックを明確に分離する必要があります。
注文や価格を変更するスニペットでテーマを肥大化させないでください。テーマはインターフェース上の理由で更新され、そのライフサイクルが運用プロセスを支配すべきではありません。
外部統合
外部統合は、ルールが主として別のシステムに属する場合、またはイベントを非同期に処理する必要がある場合に適しています。注文をERP形式へ変換するサービス、可用性を照会するサービス、一元化された商業ポリシーを適用するサービスなどです。WooCommerceは販売チャネルであり続け、統合が交換、再試行、トレーサビリティを制御します。
これは必ずしもマイクロサービスを作成することを意味しません。小さく明確に限定されたコンポーネントでもかまいません。判断はアーキテクチャ上の好みではなく、責任の境界に基づきます。
分離アプリケーション
分離アプリケーションは、ドメインがすでにWooCommerceチャネルを超えている場合に意味を持ちます。複雑な在庫管理、オムニチャネルのオーケストレーション、複数チャネルで共有される価格ルール、独自のユーザーと権限を持つ社内プロセスなどです。追加コストには、運用、セキュリティ、デプロイ、監視、サポートが含まれます。複雑さから逃れるためだけに選んではなりません。安定し明示された責任を担う必要があります。
選択を変える技術的基準
第一の基準はデータの所有権です。関連する各データについて、どのシステムが変更でき、どのシステムが正規版を公開するかを定義してください。物理在庫はWMSに属し得ます。カートと購入体験はWooCommerce、請求はERPに属し得ます。権限を定義せずにすべてのフィールドを双方向にコピーすると、一貫して解決不可能な競合が生じます。
第二はルールの複雑さです。ローカルな条件は、優先順位、有効期間、契約、セグメンテーション、例外を持つポリシーとは異なります。判断を説明する重要性が高いほど、明確なインターフェースの背後にカプセル化し、ルールのバージョンまたはその根拠となったデータを保存することが適切です。
第三は障害時の挙動です。チェックアウト中の外部呼び出しはタイムアウトする可能性があります。購入をブロックするのか、推定値で続行するのか、レビュー待ちにするのか、許容可能な最大経過時間を持つキャッシュ済みデータを使うのかを決めてください。応答は操作に依存すべきです。推定日を表示することと在庫引当を確定することのリスクは同じではありません。
非同期交換には、安定した識別子、冪等な操作、キューまたは同等の再試行メカニズムを使用してください。注文が再送されても、受信側は同一イベントであることを認識し、配送を重複させてはなりません。さらに、要求した遷移、受信した応答、エラー理由を記録してください。ただし不要な個人データは公開しないでください。
真実を重複させない注文、在庫、価格、返品
注文には商業上のスナップショット、すなわち購入した明細、金額、税、割引、住所、選択した方法を保存する必要があります。後からERPで価格が変わっても、確定済み注文の金額を無条件に書き換えるべきではありません。一方、運用ステータスは、WooCommerceのステータスと責任を持つシステムのイベントとの明示的なマップにより同期できます。
在庫については、公開済み可用性、一時的な引当、物理在庫を区別してください。複数チャネルがある場合、競合ルールなしに双方向調整を許可するよりも、在庫システムから数値を公開するほうが通常は安全です。キャンセル、決済失敗、期限切れ引当で何が起きるかも定義してください。
返品には特別な注意が必要です。顧客の申請、物理的な受領、承認判断、返金は別々のイベントです。一般的なステータス変更は、運用上の証拠や返品ポリシーの代わりにはなりません。
最小限の運用:テスト、記録、インシデントコンソール
重要なフローを自動化する前に、有効なデータ、不完全なデータ、重複、順序外のステータス変更、外部サービスの停止、再試行に対するテストケースを準備してください。PHPでは、WooCommerceアダプターおよびHTTP呼び出しから分離して判断ロジックをテストします。統合テストは、モック応答だけでなく、実際の契約または制御された環境を検証する必要があります。
最小限の運用コンソールは複雑である必要はありません。注文またはイベントを特定し、同期状態を把握し、安全な形で最新エラーを確認し、認可のもとで再試行し、解決済みの例外としてマークできる必要があります。記録は注文、操作、試行を関連付けなければなりません。ログには認証情報、カード情報、完全な住所、その他の機密データを含めないでください。
販売を止めずにルールを抽出する段階的計画

- 現在のルールを棚卸しする。プラグイン、hooks、スケジュールタスク、読み取るデータ、加える変更や生成する出力を特定します。
- 契約を定める。入力、出力、各データの所有者、想定されるエラー、成功基準を定義します。
- 判断を抽出する。ロジックをテーマから独立したコンポーネントへ移し、WooCommerceをチャネルアダプターに限定します。
- 有効化せずに比較する。新しいロジックを観測モードで実行し、制御されたケースで既存メカニズムと結果を比較します。
- 段階的に有効化する。明確なロールバックを備え、新しいフローを限定された操作群に適用します。段階的な有効化は情報開示ではありません。変更の実際の範囲を制御することです。
- 測定して廃止する。エラー、時間、差異、運用負荷を確認します。復旧が機能する証拠がある場合にのみ、以前の挙動を廃止してください。
目標はプラグインをなくすことではなく、各層に維持可能な種類の責任を割り当てることです。商業ルールに境界、データ所有者、トレーサビリティ、定義済みの障害経路があれば、WooCommerceはビジネスロジックのすべてが隠される場所になることなく、俊敏なチャネルであり続けられます。



