---
title: "意思決定モデル作成のベストプラクティス"
slug: "best-practices-for-creating-decision-models"
abstract: "Sitecore Personalizeにおける意思決定モデルのベストプラクティスには、トップアラインディングレイアウト、命名規則の使用、プログラム可能およびループの最適化が含まれます。"
---
# 意思決定モデル作成のベストプラクティス

意思決定モデルで最適な結果を得るために、以下のベストプラクティスを推奨します。これらのガイドラインは、意思決定モデルの作成や様々なコンポーネントをバリアントに統合する際に重要です。

## レイアウトの作成

意思決定モデルのバリアントの構造を意思決定キャンバス上で作成する際は、キャンバスの下部から上部まで意思決定[モデルの構成要素](https://doc.sitecore.com/personalize/ja/users/sitecore-personalize/introduction-to-decisioning-in-sitecore-personalize/managing-decision-models-in-sitecore-personalize/using-decision-model-components-in-sitecore-personalize.html "Using decision model components in Sitecore Personalize") を構築することが重要です。意思決定モデルのバリアントが下す最終的な決定は、最上位に置かれます。最適なパフォーマンスを確保するために、最終的な決定は一つだけあるべきです。意思決定モデルのバリアントのレイアウトに一貫性を持つことも重要で、これによりユーザーは意思決定キャンバスの上部を見るだけで全体の決定を即座に特定できます。

以下の画像は、全体の意思決定が*Determine discount*であるサンプル意思決定モデルの変種を示しており、これは意思決定キャンバスの上部に配置されています。

![Determine discount decision model variant.](https://doc.sitecore.com/api/markdown-image/personalize/ja/users/sitecore-personalize/images/determinediscount_sc.png)

## コメントの追加

保存するたびに意思決定モデルのバリアントにコメントを追加するのがベストプラクティスです。これを行うには、右上隅の **「保存** 」横の矢印をクリックし、「 **コメント付きで保存**」を選択します。チームメンバーと協力する際には、コメントが各修正についてより明確な文脈や明確さを提供します。

意思決定モデルのバリアントに関するリビジョンおよび関連するコメントのリストを見るには、「 **Revisions**」をクリックしてください。これにより、特にリビジョンのリストが長くなるにつれて、変更の追跡とレビューに役立ちます。

## 命名規則の利用

意思決定モデルのバリアントに対して一貫性があり容易に識別できる名前を確保するために、以下の命名規則を推奨します。

-   **バージョン番号付け** - 標準的なバージョン番号を使って、プレライブ、ライブ、テスト版を区別しましょう。開発中またはプレライブ段階のバージョンには*0.X*バージョン番号を使用します。例えば、*0.1*、*0.2*、*0.3*などを使いましょう。ライブ版やテスト版には*1.0*、*1.1*、*1.2*などの*1.X*バージョン番号を使用します。
-   **名前にスペースを使** わない - 自動生成参照の問題を避けるために、意思決定モデルのノード名はスペースなしで作成することを確認してください。読みやすさを保つためにアンダースコアやハイフンを使いましょう。例えば、 *意思決定ノード名* の代わりに *decisionNodeName* や *decision\_node\_name*を使うこと。

## JavaScriptの早期復帰

プログラマブルなどの意思決定モデルコンポーネントでJavaScriptを使用する場合、関数から早期に戻るとは、望ましい結果が得られた時点で関数の実行を停止することを意味します。これにより不要な計算が防げ、時間とリソースを節約できます。

例えば、ゲストのセッションで最近のセッションにある可能性のあるデータ(例えば最新のページビューなど)を検索する際、ページが見つかるとすぐに機能を終了するのがベストプラクティスです。

function getLastViewedPage() {
 for (var i = 0; i < guest.sessions.length; i++) {
 var currentSession = guest.sessionsi;
 for (var j = 0; j < currentSession.events.length; j++) {
 var currentEvent = currentSession.eventsj;
 if (currentEvent.type === "VIEW"
 && currentEvent.arbitraryData
 && currentEvent.arbitraryData.page )
 {
 return currentEvent.arbitraryData.page;
 }
 }
 }
}

ページを早めに戻すことで、残りのイベントやセッションを無駄に反復する手間を避けられます。これにより、特に大規模な配列を扱う際には時間を節約できます。

## 同じデータによるループの最小化

JavaScriptで意思決定モデル内の同じデータセットから複数のデータポイントを取得する必要がある場合は、複数回の反復によるパフォーマンス低下を避けるために、一度に行うことをお勧めします。

以下の関数は、セッションを1回の反復で取得するさまざまなカスタム値の方法を示しており、データへのアクセス回数を減らすことで効率を高めます。

function getLastViewedPage() {
 var customValues = {};
 for (var i = 0; i < guest.sessions.length; i++) {
 var currentSession = guest.sessionsi;
 for (var j = 0; j < currentSession.events.length; j++) {
 var currentEvent = currentSession.eventsj;
 if (currentEvent.type === "CUSTOM\_EVENT\_1")
 {
 customValues.firstValue = currentEvent.customValue;
 }
 else if (currentEvent.type === "CUSTOM\_EVENT\_2")
 {
 customValues.secondValue = currentEvent.customValue;
 }
 else if (currentEvent.type === "CUSTOM\_EVENT\_3")
 {
 customValues.thirdValue = currentEvent.customValue;
 }
 }
 }
 return customValues;
}

## エンティティオブジェクトの使用

トリガーされた体験の意思決定モデルを作成する際には、その体験をトリガーしたオブジェクトを特定し、操作する必要があることが多いです。これはゲスト、イベント、セッション、またはオーダーのいずれかです。このオブジェクトはゲストコンテキストの最上位にあるentityオブジェクトに保存されます。

entityオブジェクトは最上位属性のみを含み、セッションイベントなどのネストされた値はすべて含まれていません。元のオブジェクトを完全に取得し、意思決定モデルで使用するには、オブジェクト参照を使ってゲストコンテキストを検索しる必要があります。

こちらは、entityオブジェクトに保存されている参照を使って、体験をトリガーしたセッションオブジェクトを取得する方法を示す関数です:

function getTriggerSession(){
 var sessionRef;
 if (entity && entity.ref !== 'undefined') {
 sessionRef = entity.ref;
 }
 var triggerSession;
 for (var i = 0; i < guest.sessions.length; i++) {
 var session = guest.sessionsi;
 if (session.ref === sessionRef) {
 triggerSession = session;
 break;
 }
 }
 return triggerSession;
}

## インタラクティブな体験リクエストでカスタム値を取得する

インタラクティブな体験はしばしば動的な意思決定を必要とし、リクエストとともにカスタム値を渡すことを伴います。これらの値はユーザー入力に基づいてインタラクションをパーソナライズする上で重要です。これらの数値にアクセスするには、request変数を使用できます。慣例として、カスタム値はrequest.paramsに格納されます。

こちらはrequest.paramsからcustomValueを取得する関数です:

function getRequestCustomValue(){
 if (request && request.params && request.params.customValue) {
 return request.params.customValue;
 }
}