Abbeal

Architecture

MACHアーキテクチャ:CIO向けインテグレーションガイド

Microservices、API-first、Cloud-native、Headless。MACHが本当に変えるもの、モノリスからの移行タイミング、統合の落とし穴、そしてラグジュアリーリテールでの18ヶ月ROI達成事例。

11 min

あなたのeコマースモノリスは5年間問題なく稼働しているが、新しい市場投入には6ヶ月かかり、40人の開発チームが互いに干渉し合い、ビジネス部門は四半期リリースを待たずに新しいレコメンデーションエンジンをテストしたがっている。commercetoolsやContentful経由でMACHという言葉を聞いたことがあり、これがマーケティングの誇大広告なのか、それとも真のアーキテクチャソリューションなのか疑問に思っている。

ネタバレ:MACHは万能薬ではないが、モノリスの限界を超え、組織が分散システムの複雑さを管理できる場合には堅実なアプローチだ。あるラグジュアリーリテールブランドのこの移行を支援した結果:ROIは36ヶ月ではなく18ヶ月で達成し、新市場のtime-to-marketは3分の1に短縮された。一方で、統合を誰も管理せず、80のmicroservicesに過度に分割したために失敗したプロジェクトも見てきた。

このガイドでは、MACHが実際に何を変えるのか、いつ移行すべきか、落とし穴を回避する方法、そして現場で学んだことを具体的に説明する。

MACH:マーケティング抜きの4つの柱

MACHとは、Microservices、API-first、Cloud-native、Headless。製品でもフレームワークでもなく、各コンポーネントが独立し、APIで相互接続されたモジュラープラットフォームを構築するためのアーキテクチャ原則の集合だ。

Microservices

各ビジネス機能(商品カタログ、価格設定、カート、在庫)は独自のデータベースを持つ自律的なサービス。各サービスは他に影響を与えずにデプロイ、スケール、置換できる。実際には、検索チームがチェックアウトチームのリファクタリング完了を待たずに新しいAlgoliaエンジンをリリースできることを意味する。

落とし穴:「1ユースケース1microservice」モードで始めて、10人の開発者に対して80のサービスになってしまうこと。あるeコマーススタートアップでは、カート管理に12のmicroservicesがあった。結果:プロモーション計算のデバッグに6ヶ月。ロジックが分散していたため。安定したビジネスドメインで分割し、機能単位では分割しない。

API-first

サービス間のすべてのやり取りは、文書化されバージョン管理されたAPIを通じて行われる。実装のにAPIを設計し、後ではない。これにより安定した契約、後方互換性を考えることが強制され、フロント/モバイル/パートナーチームが並行して作業できる。

具体的には:OpenAPI 3.xで文書化、consumer-driven contractsでテスト、API gateway(Kong、Apigee、AWS API Gateway)で認証、rate-limiting、バージョニングを管理。ラグジュアリープロジェクトでは、OpenAPI specが更新されていないバックエンドPRはマージしないルールを課した。最初は遅くなるが、後で数週間のデバッグを節約できる。

Cloud-native

クラウド向けに設計:コンテナ(Docker/Kubernetes)、オートスケーリング、設計による回復力(retry、circuit breaker)、ネイティブなオブザーバビリティ(構造化ログ、メトリクス、分散トレース)。単に「AWSでホスト」ではなく、クラウドの弾力性と冗長性を活用するよう設計されている。

注意:cloud-nativeはベンダーロックインがないという意味ではない。Lambda、DynamoDB、EventBridgeを使用することは非常にcloud-nativeであり、かつ非常にAWS専用だ。マネージドサービス(RDS、S3、SQS)では多少のロックインを受け入れる—インフラ時間を節約できる。ビジネスロジックでは避ける。

Headless

バックエンドはAPIを公開し、フロントエンドは切り離されている。同じバックエンドAPIを消費する5つのフロント(webデスクトップ、モバイルweb、iOS、Android、店舗端末)を持つことができる。バックエンドに触れることなくフロントフレームワークを変更できる(React → Next.js → 次に来るもの)。

eコマースでは、Magento/Salesforce Commerce CloudをバックエンドのcommercetoolsまたはShopify Plusに置き換え、Next.jsまたはNuxtでフロントを構築することを意味する。headless CMS(Contentful、Strapi)がコンテンツを管理し、commerce engineがトランザクションを管理し、フロントがすべてを集約する。

MACHからcomposable commerceへ:ビジネスの約束

MACHは技術原則を説明する。composable commerceはビジネス成果:各ニーズに最適なコンポーネントを組み立て(best-of-breed)、それぞれを独立して置き換える能力だ。

ラグジュアリークライアントの具体例:彼らはSalesforce Commerce Cloud(オールインワン)を使用していた。限界:商品検索が平凡、パーソナライゼーションが硬直的、Salesforce Professional Servicesを経由せずにAPAC市場を開始することが不可能。composable MACHでは、以下を使用:

  • commercetools:commerce engine(API-first、マルチテナント、マルチリージョン)
  • Algolia:検索とファセット
  • Segment:顧客データ(CDP)
  • Contentful:編集コンテンツとランディングページ
  • Next.js:webフロント(SSR、i18n)
  • Braze:CRMアクティベーション(email/pushキャンペーン)

結果:新市場が6ヶ月ではなく6週間、レコメンデーションエンジンが2スプリントで交換可能、バックエンドリリースなしでチェックアウトファネルのA/Bテスト。代償:モノリスプラットフォーム1つではなく6つの統合を維持し、オーケストレーションを管理するための4人のプラットフォームチーム(SRE + データアーキテクト)。

モノリスからいつ移行すべきか?

MACHは常に正解ではない。年間GMV 500万ユーロ、5人の開発者、順調に動作しているSymfonyモノリスなら、そのまま使い続けるべきだ。MACHは運用の複雑さをもたらす:分散監視、APIバージョン管理、複数デプロイ、分散型オーナーシップ。以下の場合に正当化される:

  • 速度がブロック:各リリースに3ヶ月かかり、チームが互いに干渉し、並行デリバリーが不可能。
  • time-to-marketがクリティカル:18ヶ月で10市場を開始、または同時に5つの顧客ジャーニーをテストする必要がある。
  • 技術的スケーラビリティ:モノリスが水平スケールせず、または一部(検索、チェックアウト)のスケーリングニーズが大きく異なる。
  • マルチチーム組織:30人以上の開発者がおり、ドメイン(製品、顧客、注文)ごとに明確なオーナーシップで分割したい。
  • ビジネス差別化:すべてを作り直すことなく、コンポーネント(価格設定、レコメンデーション、CMS)をより良いツールに置き換えたい。

統合の落とし穴(と回避方法)

各コンポーネントの技術はリスクではない。commercetools、Algolia、Contentfulは成熟した製品だ。リスクはコンポーネント間の統合データガバナンスだ。

1. 統合数の爆発的増加

6つのコンポーネントで、潜在的に15のポイントツーポイント統合がある(n×(n-1)/2)。実際には、すべてがすべてと通信するわけではないので少ないが、それでも維持すべき統合は8-10ある。各統合には独自のデータモデル、フォーマット(REST、GraphQL、webhook)、認証システム、SLAがある。

対処方法:非同期統合用の中央イベントバス(我々の場合はAWS EventBridge)、フロント用の同期API集約BFF(Backend-for-Frontend)。コンポーネントは同期的に直接通信せず、BFFがオーケストレーションする場合を除く。

ts
// Next.js BFF:サーバーサイド集約 export async function getServerSideProps(context) { const [product, inventory, content] = await Promise.all([ commercetools.getProduct(context.params.sku), inventoryService.getStock(context.params.sku), contentful.getProductContent(context.params.sku) ]); return { props: { product, inventory, content } }; }

2. マスターデータのガバナンス

顧客データのオーナーは誰か?在庫は?価格は?顧客データがcommercetools、Segment、Brazeの間で重複している場合、どれが信頼できる情報源か?各参照エンティティに対してdata ownerを最初から定義する必要がある。

ラグジュアリークライアントでは、これをADR(Architecture Decision Record)で定義した:

  • 顧客:Segmentが信頼できる情報源(CDP)、commercetoolsとBrazeが消費。
  • 製品:commercetoolsがマスター、AlgoliaとContentfulがwebhook経由で複製。
  • 在庫:外部ERP、15分ごとにcommercetoolsに複製、commercetools API経由で公開。
  • 注文:commercetoolsがマスター、EventBridge経由でERPとdata warehouseにイベント送信。

ガバナンスがなければ、6ヶ月でデータドリフトが発生し、システム間の不整合のデバッグに時間を費やすことになる。

3. microservicesの過度な分割

典型的な落とし穴:細かく分割しすぎること。VAT計算用のmicroservice、プロモーション用、カート用、配送料用。結果:ネットワークレイテンシが10倍、デバッグ不可能(「プロモーションが適用されない」→6つのサービスを調査)、調整されたデプロイが終わらない。

実用的ルールbounded context(DDD)で分割する。1コンテキスト = 一貫したデータモデルを持つビジネスドメイン、1チームが管理。ミッドマーケットeコマースでは、50ではなく5-10のサービスにすべきだ。コンテキストの例:Catalog、Cart & Checkout、Order Management、Customer、Inventory。

4. 監視と分散オブザーバビリティ

モノリスでの「チェックアウトが遅い」:New Relicを開き、遅いSQLクエリを見つける。MACHでの「チェックアウトが遅い」:BFFか?commercetools APIか?在庫計算か?Algoliaのrate-limitingか?初日からdistributed tracing(OpenTelemetry、Datadog APM、AWS X-Ray)が必要だ。

すべてのHTTPヘッダーでtrace IDを伝播するOpenTelemetryを導入した。各ユーザーリクエストはBFF → commercetools → inventory → Algoliaを横断するトレースを生成する。レイテンシの場合、どのサービスが原因かすぐにわかる。コスト:開発者あたり約2日の初期設定、節約:月に数十時間のデバッグ。

移行戦略:ビッグバンはやらない

モノリスからMACHへのビッグバン移行は絶対にしない。一度に1つの機能をAPIの背後に抽出し、リバースプロキシ経由でルーティングし、古いコードを段階的に停止する。典型的なパターン:Strangler Fig

  1. 最も分離されていて最も問題のある機能を特定。クライアントの場合:商品検索(遅い、ファセットなし、A/Bテスト不可)。
  2. モノリスの前にリバースプロキシを配置(Nginx、Cloudflare Workers、AWS ALB)。/searchを新しいAlgoliaサービスに、残りを古いものにルーティング。
  3. モノリスから新しいコンポーネントにデータを同期(初期バッチ + CDCまたはイベント経由の増分同期)。
  4. トラフィックの10%を新サービスに切り替え、監視、調整。次に50%、そして100%。
  5. 新サービスが2-3週間安定してから古いコードを削除
  6. 次の機能で繰り返す:顧客データ、カート、チェックアウトなど。

ラグジュアリープロジェクトでは、トランザクションから分離されていた検索 + 顧客CDP(Algolia + Segment)を並行して開始した。迅速なROI:結果のパーソナライゼーション、セグメント化されたCRMキャンペーン。3ヶ月かかった。次にチェックアウト(commercetools)、その後コンテンツ管理(Contentful)。3市場で完全なMACHになるまで合計18ヶ月。

具体的事例:ラグジュアリーリテール、18ヶ月でROI達成

背景:ラグジュアリーリテールブランド、オンラインGMV 1億2,000万ユーロ、8市場(EU + APAC)、40人の開発者。Salesforce Commerce Cloud(SFCC)モノリス:四半期ごとのデプロイ、6ヶ月未満での市場投入不可能、商品検索が壊滅的(ファセット検索なし、MLなし)。

ビジネス目標:12ヶ月でAPAC 4市場を開始、コンバージョン率を1.8%から2.5%に向上、機能のtime-to-marketを12週間から3週間に短縮。

ターゲットアーキテクチャ:commercetools(commerce engine)、Algolia(検索 + レコメンデーション)、Segment(CDP)、Contentful(CMS)、Next.js(webフロント)、Braze(CRM)。AWS EventBridgeイベントバス、集約用Next.js BFF、EKS上のKubernetesインフラ。

段階

  1. M0-M3:検索(Algolia)+ CDP(Segment)移行、SFCCから同期。リバースプロキシで/searchをAlgoliaにルーティング。結果:検索クリック率+15%。
  2. M3-M9:パイロット2市場(FR + UK)でチェックアウト(commercetools)移行。Next.jsフロントでSSR。3ヶ月間SFCC ↔ commercetoolsの双方向同期(共存)。
  3. M9-M12:CMS(Contentful)移行、FR/UKでSFCCを段階的に停止。2市場が100% MACH。
  4. M12-M18:他の6市場にロールアウト(四半期ごとに2市場)。基盤を再利用、i18n設定のみ変更。

M18での結果

  • Time-to-market:新市場が6ヶ月ではなく6週間(÷10)。
  • コンバージョン率:1.8%から2.4%(+33%)、Algolia検索とSegmentパーソナライゼーションによる。
  • 速度:四半期に1回ではなく週15リリース。サービスごとのデカップルされたデプロイ。
  • ROI:当初目標36ヶ月、18ヶ月で達成。利益 = 増分収益(APAC 4市場)+ コンバージョン改善 - 移行コスト。

隠れたコスト:統合、監視、データガバナンスを管理する4人のプラットフォームチーム(SRE 2人、データアーキテクト1人、バックエンドリード1人)。彼らがいなければ、プロジェクトは失敗していた。

開始前のチェックリスト

MACH移行を開始する前に、これらの点を検証する:

  • 経営スポンサーがいる。12-18ヶ月かかり、ROIは即時ではないことを理解している。
  • SRE/プラットフォームチームがあるか、立ち上げる予算がある。統合のオーナーシップなしにMACHは不可能。
  • チームがAPI-firstを実行できる:OpenAPI、バージョニング、契約。できない場合は、事前にトレーニングする。
  • 各参照エンティティ(顧客、製品、在庫、注文)のdata ownerを定義している
  • 段階的移行戦略がある(Strangler Fig)、ビッグバン計画ではない。
  • 分散監視がある(トレース、集中ログ、メトリクス)、最初のサービスから準備完了。
  • クラウドとSaaSのコストを予算化している:commercetools + Algolia + Segment + Contentful、トラフィックに応じて年間5-15万ユーロにすぐなる。

次のステップ

MACHはバズワードではない:モノリスの限界を超え、複雑さを管理できる組織がある場合の堅実なアーキテクチャ回答だ。利益は実在する—time-to-marketが3分の1、速度が10倍、迅速なテスト能力—だが、統合とガバナンスのコストはプロジェクトの90%で過小評価されている。

移行を検討している場合は、小さく始める:分離された機能を1つ抽出(検索、CDP、CMS)、本番環境で統合と監視ができることを検証してから、工業化する。最初からプラットフォームチームの必要性を過小評価しない。そして具体的なケースについて質問がある場合—スタック選択、移行戦略、データガバナンス—この種のプロジェクトを何度も提供してきたので、地雷がどこにあるか知っている。

似たような案件がありますか?

アーキテクトと話す