> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kameleoon.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Command Queue

> Kameleoon Command Queue を使用して、エンジンのロード前後にタイミングの競合なく Activation API コマンドを安全に実行する方法。

Kameleoon プラットフォームは、データの取得（訪問者の位置情報など）やエンジン動作の変更（手動でのバリエーション割り当てなど）のための JavaScript ベースの [Activation API](./api-reference) を提供しています。

ただし、開発者は Activation API にアクセスする前に Kameleoon Engine がロードされていることを確認する必要があります。この要件により、JavaScript コードを直接 HTML ファイルに埋め込むことが複雑になります。

Kameleoon Command Queue は、Google Analytics と同様に、遅延コマンド実行を提供します。`Kameleoon.API` オブジェクト経由で Activation API を呼び出す代わりに、コマンドや関数を `kameleoonQueue` オブジェクトに渡します。エンジンはロードされていればこれらのコマンドを即座に実行し、そうでない場合は準備ができたときに実行するためにキューに入れます。

## Command Queue オブジェクトの使用方法と説明

`kameleoonQueue` オブジェクトを使用するには、まず以下の初期化コードを実行します。[Kameleoon インストールタグ](../../../web-experimentation/implementation-and-deployment/standard-implementation) には通常、HTML ファイルの先頭、開始 `<head>` タグの後にこのコードが含まれています。この場合、追加の操作は必要ありません。ただし、カスタムセットアップ（たとえば Tag Manager 経由で Kameleoon をロードする場合）を使用している場合は、カスタムコードを追加する前にキューを初期化してください。

```js theme={null}
window.kameleoonQueue = window.kameleoonQueue || [];
```

Kameleoon アプリケーションファイルのロード中、`kameleoonQueue` は `push()` メソッドを介してコマンドを受け付ける標準的な JavaScript 配列として機能します。ロード後、エンジンは配列を処理し、コマンドを順番に実行します。その後、エンジンは `push()` メソッドが即座にコマンドを実行するカスタムオブジェクトで配列を置き換えます。

### 構文

`push()` メソッドに配列または無名関数のいずれかを渡します。

```js theme={null}
kameleoonQueue.push(['Kameleoon.API.Events.trigger', 'myCustomEvent']);
kameleoonQueue.push(['Events.trigger', 'anotherEvent']);
```

配列を渡す場合、最初のオブジェクトは Kameleoon API メソッド名（文字列として）を表し、後続のオブジェクトはメソッドの引数を表します。

<Note>
  完全なメソッド名（例: `Kameleoon.API.Core.enableLegalConsent`）または短縮名（例: `Core.enableLegalConsent`）のいずれかを使用します。追加の引数はオプションです。
</Note>

無名関数を引数として直接渡します。Kameleoon は処理の準備ができたときに、その関数をコールバックとして使用します。

```js theme={null}
kameleoonQueue.push(function() {
  const experimentID = 1;
  const variationID = 3;
  Kameleoon.API.Experiments.assignVariation(experimentID, variationID);
});
```

コマンドキューは、以下の例のように HTML コード内でも動作します。エンジンがロードされていない場合でもクリックトラッキングを保証するため、ブラウザがターゲットの HTML 要素に遭遇する前に `kameleoonQueue` を初期化します。

```html theme={null}
<button onclick="kameleoonQueue.push(['Goals.processConversion', 42]);">
  Action Button with Kameleoon goalID = 42
</button>
```

<Note>
  デフォルトでは、Kameleoon は設定（キャンペーン、ゴール、セグメントなど）の準備ができ、[グローバルカスタムスクリプト](/user-manual/project-management/manage-your-projects#Configuration) が実行された後にキューに入れられたコマンドを実行します。

  設定処理を待たずに即座にコマンドを実行するには、コマンドをプッシュする際に `level: "IMMEDIATE"` 引数を使用します。これは、Kameleoon が関数をインスタンス化する前に必要となるコードに役立ちます。

  `level: "IMMEDIATE"` 引数の使用例は次のとおりです:

  ```js theme={null}
  function callback = () => {
   {... Kameleoon がキャンペーンコードをトリガーする前に実行するコード}   
  };
  window.kameleoonQueue.push({
  	level: "IMMEDIATE",
  	command: callback
  });
  ```

  この例では、`callback` 関数は設定処理に関係なく即座に実行されます。

  `level: "IMMEDIATE"` 引数を使用して、内部の Kameleoon 関数をオーバーライドします。エンジンが先にロードされ、元のバージョンを実行した場合、標準の関数再定義は失敗します。`IMMEDIATE` レベルは、エンジンが独自のバージョンをロードする前にカスタム関数が確実に実行されるようにします。
</Note>
