# JavaScript SDKでのAnonymous Visitor ID

Visitor IDは、ウェブサイトへのvisitor用の永続的なcookieに関連付けることができます。誰かがサイトを訪問すると、HTTPレスポンスにcookieを含めることで、webサーバーによって永続的なcookieが設定されます。cookieがrequestに含まれていない場合、サーバーは一意のvisitor IDを生成し、HTTPレスポンスヘッダーでcookieとして設定し、requestと一緒に送り返します。

## 前提条件

* JavaScript/HTMLの基礎知識
* Treasure Dataの基礎知識
* Treasure Data JavaScript SDKの基礎知識


Treasure AIは、本番環境で使用を開始する前に、サイトでTreasure Data JavaScript SDK version 3を使用した新機能や機能の実装を検証することをお勧めします。cookieの管理方法が異なります。これらの記事のほとんどを参照する際は、提案されたeventコレクターとTreasure Data JavaScript SDK version 3の呼び出しをソリューション内で定義する必要があることに注意してください。たとえば、//cdn.treasuredata.com/sdk/2.5/td.min.jsを//cdn.treasuredata.com/sdk/3.0.0/td.min.jsに変更します。

## Cookieの基本

Cookieは、訪問したウェブサイトのサーバーによってコンピューターのハードドライブに配置される小さなテキストです。cookieは、特定のbrowserを認識する目的、またはbrowserに固有の情報を記憶する目的で、同じサイトに戻る場合に配置されます。

## First-Party CookieとThird-Party Cookieの違い

すべてのcookieには、cookieが誰に属するかを示す所有者がいます。所有者は、cookieで指定されたdomainです。

"third-party cookie"では、"party"という単語はcookieで指定されたdomain、つまりcookieを配置しているウェブサイトを指します。したがって、たとえば、widgets.comにアクセスし、コンピューターに配置されたcookieのdomainがwidgets.comの場合、これはfirst-party cookieです。

ただし、widgets.comにアクセスして、コンピューターに配置されたcookieがstats-for-free.comと表示される場合、これはthird-party cookieです。

## Anonymous IDのリスト

Treasure DataのJavaScript SDKは、すべての新しいvisitor用に2種類のanonymous Cookie IDを生成します。

* First-Party Cookie ID: *td_client_id*
* Third-Party Cookie ID: *td_global_id*


## First-Party Cookie ID: td_client_id

_td_client_id_は、First-Party Cookieとして生成されるIDです。このIDの特性は次のとおりです:

* IDは同じトップレベルdomainにわたって永続化されます(たとえば、a.example.comとb.example.comで同じID)
* IDは異なるdomainにわたって永続化されません(たとえば、test.comとexample.comで異なるID)
* IDはbrowserに応じてcookieに永続化されます:


| ブラウザ  | `td_client_id`がどのくらい保持されるか  |
|  --- | --- |
| **Chrome / Edge** | 制限なし — cookieに設定された`Expires`/`Max-Age`の値に従って、visitorがcookieをクリアするまで保持されます |
| **Firefox** | `td_client_id`のような正規のfirst-party cookieには制限がありません |
| **Safari** | SDKが`document.cookie`で`td_client_id`を設定するため、再訪問がない場合は7日間に制限されます。これを延長するには[server-side cookie](/ja/products/customer-data-platform/integration-hub/streaming/td-javascript-sdk/tracking-server-side-first-party-cookies-on-your-website)を使用してください。 |


ブラウザのcookieおよびストレージ制限の全体比較と、なぜSafariにこの制限があるのかについては、[Treasure AIとCookie Trackingについて](/ja/products/customer-data-platform/integration-hub/streaming/td-javascript-sdk/about-treasure-data-and-cookie-tracking)を参照してください。

### td_client_idの取得

browserのJavaScriptコンソールから以下の関数を呼び出すことで、自分の_td_client_id_を受け取ることができます。

```javascript
> td.getCookie('_td');
"9eeeed71-8eb8-40f3-9a41-bd8b1f096474"
```

## Third-Party Cookie ID td_global_id

_td_global_id_は、3rd Party Cookieとして生成されるIDです。このIDの特性は次のとおりです:

* IDは同じトップレベルdomainにわたって永続化されます(たとえば、a.example.comとb.example.comで同じID)
* IDは異なるdomainにわたって永続化されます(たとえば、test.comとexample.comで同じID) — ただし、third-party cookieを許可しているbrowserに限られます
* Safariは既定でthird-party cookieを例外なくすべてブロックするため、`td_global_id`はPC・Mobileを問わずどのSafari browserでも永続化されません
* Firefoxではcookie自体は設定されますが、Total Cookie Protectionによってトップレベルサイトごとに二重キー化されるため、実際にはドメイン間で値が共有されません
* ChromeとEdgeは2026年時点でも既定でthird-party cookieを許可しているため、visitorが明示的にcookieをクリアしない限り、IDは永続化され、ドメイン間で共有されます


詳細については、[Cross Domain Tracking](/ja/products/customer-data-platform/integration-hub/streaming/td-javascript-sdk/enabling-cross-domain-tracking-with-javascript-sdk)および[Treasure AIとCookie Trackingについて](/ja/products/customer-data-platform/integration-hub/streaming/td-javascript-sdk/about-treasure-data-and-cookie-tracking)を確認してください。

### td_global_idの取得

コンテンツパーソナライゼーションなどを行うために、JavaScriptから_td_global_id_変数を受け取りたい場合があります。以下のコード例は、JavaScript endpointをタップして_td_global_id_を受け取ります。

```javascript
// Configure an instance for your database
var td = new Treasure({
  host: 'in.treasuredata.com',
  writeKey: 'YOUR_WRITE_ONLY_APIKEY_IS_HERE',
  database: 'DATABASE_NAME'
});
// Enable cross-domain tracking
td.set('$global', 'td_global_id', 'td_global_id');

// Receive td_global_id
var successCallback = function(td_global_id) {
  console.log({
  'td_global_id': td_global_id
  });
};
var errorCallback = function(err) {
  console.log(err);
};

// Track pageview information to 'TABLE_NAME' table
var afterPageviewCallback = function() {
  td.fetchGlobalID(successCallback, errorCallback);
};
td.trackPageview('TABLE_NAME', afterPageviewCallback);
```

この関数は、browserが[Do Not Track機能](https://www.eff.org/issues/do-not-track)に設定されている場合は機能しません。_fetchGlobalID_関数に関する詳細な技術情報は、[`fetchGlobalID`のリファレンス](https://github.com/treasure-data/td-js-sdk#treasurefetchglobalidsuccess-failure-forcefetch)で入手できます。