シングルページアプリケーションの実装

Adobe Experience Platform Web SDK は、単一ページアプリケーション(SPA)などの次世代のクライアントサイドテクノロジーでパーソナライゼーションを実行できる豊富な機能を提供します。

従来の Web サイトでは、複数ページアプリケーションとも呼ばれる「ページからページ」ナビゲーションモデルを使用しました。 これらの web サイトでは、デザインは URL に緊密にリンクされているので、ページ間を移動するにはページ全体を読み込む必要があります。

代わりに、単一ページアプリケーションなどの最新の web アプリケーションは、ブラウザー UI レンダリングの迅速な使用を推進するモデルを採用しています。これは、多くの場合、ページリロードに依存しません。 これらのエクスペリエンスは、スクロール、クリック、カーソル移動など、顧客のインタラクションによってトリガーされます。 最新の web のパラダイムが進化するにつれ、パーソナライゼーションと実験をデプロイするための、ページの読み込みなどの従来の汎用イベントの関連性は機能しなくなりました。

従来のページライフサイクルと比較した SPA のライフサイクルを示す図。

SPA 向け Experience Platform Web SDK のメリット

単一ページアプリケーションで Adobe Experience Platform Web SDK を使用する利点は次のとおりです。

  • ページ読み込み時にすべてのオファーをキャッシュし、複数のサーバー呼び出しを単一のサーバー呼び出しに減らす機能。
  • 従来のサーバーコールで生じるタイムラグのないキャッシュでオファーが即座に表示されるので、サイトでのユーザーエクスペリエンスが向上します。
  • 1 行のコードと 1 回限りのデベロッパー設定を使用すると、マーケターは、SPA の A/B Test (VEC)を介して Experience Targeting and Visual Experience Composer (XT)アクティビティを作成および実行できます。

XDM ビューとシングルページアプリケーション

Adobe Target VEC for SPA では、Views と呼ばれる概念を利用します。これは、SPA エクスペリエンスを構成するビジュアル要素の論理的なグループです。 したがって、単一ページアプリケーションは、ユーザーのインタラクションに基づいて、URL ではなくビューを通じた移行と見なすことができます。 View は通常、サイト全体またはサイト内のグループ化された視覚的要素を表すことができます。

ビューとは何かを詳しく説明するために、次の例では、React で実装された架空のオンライン e コマースサイトを使用して、Views の例を調べています。

ホームページに移動すると、ヒーロー画像がイースターの販売とサイトで利用可能な最新の製品を宣伝します。 この場合、ホーム画面全体に対して View を定義できます。 この View は単に「家」と呼んでもよいでしょう。

ブラウザーウィンドウに表示される単一ページアプリケーションのサンプル画像

ビジネスで販売されている製品に対するお客様の関心が高まるにつれ、お客様は 製品 リンクをクリックすることにします。 ホームサイトと同様に、製品サイト全体を View として定義できます。 この View は、「products-all」という名前を付けることができます。

ブラウザーウィンドウに、すべての製品が表示された単一ページアプリケーションのサンプル画像

View は、サイト全体またはサイト上の視覚要素のグループとして定義できるからです。 製品サイトに表示される 4 つの製品は、グループ化され、View と見なすことができます。 このビューには、「products」という名前を付けることができます。

ブラウザーウィンドウに表示される単一ページアプリケーションのサンプル画像。表示例は製品です。

この場合、顧客が さらに読み込む ボタンをクリックしてサイト上のより多くの製品を参照することにしても、web サイトの URL は変更されません。 ただし、ここで View を作成して、表示される 2 行目の製品のみを表すことができます。 View の名前は「products-page-2」になります。

ブラウザーウィンドウに表示される単一ページアプリケーションのサンプル画像。追加のページに表示されるサンプル製品が含まれます。

お客様は、サイトからいくつかの製品を購入することを決定し、チェックアウト画面に進みます。 チェックアウトサイトでは、顧客は通常の配信または速達を選択するオプションを提供されます。 View は、サイト上の任意の視覚要素のグループにすることができ、配信環境設定用の View を作成して「配信環境設定」と呼ぶこともできます。

ブラウザーウィンドウに表示される単一ページアプリケーションのチェックアウトページのサンプル画像

Views の概念は、このシナリオよりもはるかに拡張できます。 これらのシナリオは、サイトで定義できる Views の例のほんの一部です。

XDM Views の実装

XDM Views を Target で活用すると、マーケターが Visual Experience Composer を介して SPA で A/B テストと XT テストを実行できるようになります。 これを行うには、1 回限りの開発者セットアップを完了するために、次の手順を実行する必要があります。

  1. Adobe Experience Platform Web SDK をインストールします。

  2. パーソナライズする単一ページアプリケーション内のすべての XDM Views を決定します。

  3. XDM Views を定義した後、A/B または XT VEC アクティビティを配信するには、sendEvent() に設定した renderDecisions 関数と、シングルページアプリケーションで対応す trueXDM View を実装します。 XDM View は xdm.web.webPageDetails.viewName で渡す必要があります。 この手順を使用すると、マーケターは Visual Experience Composer を活用して、これらの XDM に対して A/B テストと XT テストを開始できます。

    code language-javascript
    alloy("sendEvent", {
      "renderDecisions": true,
      "xdm": {
        "web": {
          "webPageDetails": {
          "viewName":"home"
          }
        }
      }
    });
    
NOTE
最初の sendEvent() 呼び出しで、エンドユーザーにレンダリングする必要があるすべての XDM Views ータが取得され、キャッシュされます。 sendEvent() が渡された後続の XDM Views 呼び出しは、キャッシュから読み取られ、サーバーコールなしでレンダリングされます。

sendEvent() 関数の例

この節では、模擬 e コマース SPA 用に React で sendEvent() 関数を呼び出す方法を示す 3 つの例について説明します。

例 1:A/B テストのホームページ

マーケティングチームは、ホームページ全体で A/B テストを実行したいと考えています。

ブラウザーウィンドウに表示される単一ページアプリケーションのサンプル画像

ホームサイト全体で A/B テストを実行するには、XDM sendEvent()viewName に設定して home を呼び出す必要があります。

function onViewChange() {

  var viewName = window.location.hash; // or use window.location.pathName if router works on path and not hash

  viewName = viewName || 'home'; // view name cannot be empty

  // Sanitize viewName to get rid of any trailing symbols derived from URL

  if (viewName.startsWith('#') || viewName.startsWith('/')) {
    viewName = viewName.substr(1);
  }

  alloy("sendEvent", {
    "renderDecisions": true,
    "xdm": {
      "web": {
        "webPageDetails": {
          "viewName":"home"
        }
      }
    }
  });
}

// react router v4

const history = syncHistoryWithStore(createBrowserHistory(), store);

history.listen(onViewChange);

// react router v3

<Router history={hashHistory} onUpdate={onViewChange} >

例 2:パーソナライズされた製品

マーケティングチームは、ユーザーが さらに読み込む をクリックした後で価格ラベルのカラーを赤に変更して、2 行目にある製品をパーソナライズしたいと考えています。

パーソナライズされたオファーを表示する、ブラウザーウィンドウ内の単一ページアプリケーションのサンプル画像

function onViewChange(viewName) {

  alloy("sendEvent", {
    "renderDecisions": true,
    "xdm": {
      "web": {
        "webPageDetails": {
          "viewName": viewName
        }
      }
    }
  });
}

class Products extends Component {

  render() {
    return (
      <button type="button" onClick={this.handleLoadMoreClicked}>Load more</button>
    );
  }

  handleLoadMoreClicked() {
    var page = this.state.page + 1; // assuming page number is derived from component's state
    this.setState({page: page});
    onViewChange('PRODUCTS-PAGE-' + page);
  }

}

例 3:A/B テスト配信の環境設定

マーケティングチームは、「高速配信」が選択されている場合に、ボタンの色を青から赤に変更するかどうかを確認するために、A/B テストを実行します。 チームは、(両方の配信オプションでボタンの色を青に保つのではなく)この変更によってコンバージョンが向上すると考えています。

A/B テストを使用したブラウザーウィンドウ内の単一ページアプリケーションのサンプル画像

選択した配信環境設定に応じてサイトのコンテンツをパーソナライズするために、配信環境設定ごとに View を作成できます。 通常配信 が選択されている場合、View ージに「checkout-normal」という名前を付けることができます。 高速配信 が選択されている場合、View ージに「checkout-express」という名前を付けることができます。

function onViewChange(viewName) {
  alloy("sendEvent", {
    "renderDecisions": true,
    "xdm": {
      "web": {
        "webPageDetails": {
          "viewName": viewName
        }
      }
    }
  });
}

class Checkout extends Component {

  render() {
    return (
      <div onChange={this.onDeliveryPreferenceChanged}>
        <label>
          <input type="radio" id="normal" name="deliveryPreference" value={"Normal Delivery"} defaultChecked={true}/>
          <span> Normal Delivery (7-10 business days)</span>
        </label>
        <label>
          <input type="radio" id="express" name="deliveryPreference" value={"Express Delivery"}/>
          <span> Express Delivery* (2-3 business days)</span>
        </label>
      </div>
    );
  }

  onDeliveryPreferenceChanged(evt) {
    var selectedPreferenceValue = evt.target.value;
    onViewChange(selectedPreferenceValue);
  }

}

SPA での Visual Experience Composer の使用

XDM Views の定義が完了し、渡された sendEvent() を使用して XDM Views を実装したら、VEC は、これらの Views を検出し、ユーザーが A/B または XT アクティビティのアクションと変更を作成できるようにします。

NOTE
SPA で VEC を使用するには、{Firefox​ または ​2}Chrome VEC Helper Extension​ をインストールして有効化する必要があります。

Modifications パネル

Modifications パネルには、特定の View ーザーに対して作成されたアクションが取り込まれます。 View ージのすべてのアクションは、その View ージの下にグループ化されます。

アクション

アクションをクリックすると、このアクションが適用されるサイト上の要素がハイライト表示されます。 View で作成された各 VEC アクションには、情報編集クローン移動削除 のアイコンがあります。 これらのアイコンについて詳しくは、次の表を参照してください。

アイコン
説明
情報
アクションの詳細を表示します。
編集
アクションのプロパティを直接編集できます。
複製
Views パネルに存在する 1 つ以上の Modifications、または VEC で参照および移動した 1 つ以上の Views にアクションのクローンを作成します。 アクションは、必ずしも Modifications パネルに存在する必要はありません。

注意: 複製操作を行ったら、View を使用して VEC の Browse に移動し、複製されたアクションが有効な操作かどうかを確認します。 アクションを View に適用できない場合は、エラーが表示されます。
移動
アクションを、Page Load Event パネルに既に存在する View ージまたはその他の Modifications ージに移動します。

ページの読み込みイベント: ページの読み込みイベントに対応するアクションが web アプリケーションの最初のページ読み込みに適用されます。

注意: 移動操作を行ったら、View を使用して VEC の Browse に移動し、移動が有効な操作かどうかを確認します。 アクションを View に適用できない場合は、エラーが表示されます。
削除
アクションを削除します。

SPA への VEC の使用の例

この節では、Visual Experience Composer を使用して A/B または XT アクティビティのアクションと変更を作成する 3 つの例について説明します。

例 1:「home」ビューを更新する

この記事の前半では、「home」という View がホームサイト全体に対して定義されました。 マーケティングチームは、次のように「ホーム」ビューを更新します。

  • 買い物かごに追加 ボタンと いいね ボタンを、より明るい青色に変更します。 この変更は、ヘッダーのコンポーネントを変更する必要があるので、ページの読み込み中に発生する必要があります。
  • 2026 年の最新製品 ラベルを 2026 年の最もホットな製品 に変更し、テキストの色を紫色に変更します。

VEC でこれらの更新を行うには、「作成 を選択し、その変更を「ホーム ビューに適用します。

Visual Experience Composer のサンプルページ

例 2:製品ラベルを変更する

「products-page-2」の View については、マーケティングチームは Price ラベルを Sale Price に変更し、ラベルの色を赤に変更します。

VEC でこれらの更新を行うには、次の手順が必要です。

  1. VEC で 参照 を選択します。
  2. サイトの上部ナビゲーションで「製品」を選択します。
  3. さらに読み込み を 1 回選択して、製品の 2 行目を表示します。
  4. VEC で「作成」を選択します。
  5. アクションを適用して、テキストラベルを 販売価格 に、カラーを赤に変更します。

製品ラベルを使用した Visual Experience Composer サンプルページ

例 3:配信環境設定のスタイル設定をパーソナライズ

状態 Views ラジオボタンからのオプションなど、詳細なレベルで定義することができます。 この記事の前半では、配信の環境設定、「checkout-normal」および「checkout-express」について Views が定義されていました。 マーケティングチームは、「checkout-express」表示のボタンの色を赤に変更したいと考えています。

VEC でこれらの更新を行うには、次の手順が必要です。

  1. VEC で 参照 を選択します。
  2. サイト上の買い物かごに商品を追加します。
  3. サイトの右上隅にある「買い物かご」アイコンを選択します。
  4. 注文をチェックアウト を選択します。
  5. 配信環境設定 の下の 高速配信 ラジオボタンを選択します。
  6. VEC で「作成」を選択します。
  7. Pay ボタンのカラーを赤に変更します。
NOTE
「チェックアウトエクスプレス」 View は、「速達 Modifications ラジオボタンが選択されるまで、ールパネルに表示され せん。 これは、sendEvent() 関数が、「高速配信 ​ラジオボタンが選択されたときに実行されるため、VEC は、ラジオボタンが選択されるまで「checkout-express」 View を認識しません。

配信環境設定セレクターを表示する Visual Experience Composer。

recommendation-more-help
6906415f-169c-422b-89d3-7118e147c4e3