# JavaScript SDK Build Scriptの使用

build script(`bin/build.sh`)を使用して、以下を含むSDKのいくつかの側面を設定できます:

* [GLOBAL](#global)
* [FILENAME](#filename)
* [URL](#url)
* [開始](#getting-started)
* [write-only API keyの取得](#get-your-write-only-api-key)
* [初期化](#initializing)
* [最初のeventの送信](#sending-your-first-event)
* [tracking](#tracking)
* [Client IDとStorage](#client-id-and-storage)
* [ページインプレッション](#page-impressions)
* [eventのtracking](#event-tracking)
* [追跡される情報](#tracked-information)
* [デフォルト値](#default-values)
* [データプライバシー](#data-privacy)
* [例](#examples)


### GLOBAL

SDKがエクスポートされるglobal export。これは、完全なsourceとloaderのstubの間で一貫性が保たれます。


```bash
    > bin/build.sh --GLOBAL=AlternateSDK
    var sdk = new AlternateSDK()
```

### FILENAME

完全なコードとminifyされたコードの出力ファイル名。これは便利で、デフォルトは`td.`です。


```bash
    > bin/build.sh --FILENAME=foo
    ...
    > ls dist/
    foo.js      foo.min.js      loader.min.js
```

### URL

ホストされているファイルのURL。これは、Treasure Data CDNでホストされているファイルのURLにデフォルト設定されています。


```bash
    > bin/build.sh --URL=//cdn.yourdomain.com/sdk/foo.min.js
```

## 開始

### write-only API keyの取得

[Treasure Data](https://console.treasuredata.com/)にログインして、[profile](https://console.treasuredata.com/users/current)に移動します。API keyはfull-access keyのすぐ横に表示されます。

### 初期化

ライブラリは、database毎にインスタンスを作成し、データをtableに送信することで機能します。

まず、上記の方法のいずれかを使用してライブラリをインストールします。

インストール後、初期化は次のように簡単です:


```javascript
      var foo = new Treasure({
        database: 'foo',
        writeKey: 'your_write_only_key'
      });
```

管理者の場合、databaseは自動的に作成されます。それ以外の場合は、管理者にdatabaseを作成してもらい、`import only`または`full access`を付与してもらう必要があります。そうしないと、eventを送信できません。

### 最初のeventの送信


```javascript
    // Configure an instance for your database
    var company = new Treasure({...});

    // Create a data object with the properties you want to send
    var sale = {
      itemId: 101,
      saleId: 10,
      userId: 1
    };

    // Send it to the 'sales' table
    company.addRecord('sales', sale);
```

好きなだけeventを送信します。各eventは非同期で実行されます。

## tracking

td-js-sdkは、ページインプレッションとevent、およびクライアント情報を追跡する方法を提供します。

### Client IDとStorage

各クライアントにはUUIDが必要です。設定オブジェクトで`clientId`を設定することで明示的に設定できます。それ以外の場合は、cookieで以前に設定されたuuidを検索します。見つからない場合は、UUIDが生成されます。

session間でクライアントを追跡するためにcookieが設定されます。

### ページインプレッション

ページインプレッションの追跡は次のように簡単です:


```javascript
    /* insert javascript snippet */
    var td = new Treasure({...});
    td.trackPageview('pageviews');
```

これにより、すべての追跡情報がpageviews tableに送信されます。

### eventのtracking

ページビューの追跡に加えて、eventを追跡できます。構文は`addRecord`に似ていますが、`trackEvent`はすべての追跡情報を含む点が異なります。


```javascript
    var td = new Treasure({});

    var buttonEvent1 = function () {
      td.trackEvent('button', {
        number: 1
      });

      // doButtonEvent(1);
    };

    var buttonEvent2 = function () {
      td.trackEvent('button', {
        number: 2
      });

      // doButtonEvent(2);
    };
```

### 追跡される情報

track関数が呼び出されるたびに、以下の情報が送信されます:

* [Treasure Data JavaScript SDK Version 3.0のデフォルトログパラメータ](/ja/products/customer-data-platform/integration-hub/streaming/td-javascript-sdk/treasure-data-javascript-sdk-version-3-0-default-log-parameters)


特定の値はbrowserから取得できません。これらの値については、一致するkeyと値を送信し、サーバーが受信時に値を置き換えます。例: `{"td_ip": "td_ip"}`がbrowserによって送信され、サーバーはそれを`{"td_ip": "1.2.3.4"}`のようなものに更新します。td_ip値は[X-Forwarded-For](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-For) headerから取得されます。

`td_ip`を除くすべてのサーバー値は、user-agent文字列を解析することで見つかります。これはserver-sideで行われ、最新の状態に保つことができます。

* これは個人を特定できるcolumnであり、ユーザーがSignedモードまたはAnonymousモードにいるかどうかによって影響を受けます。


## デフォルト値

`Treasure#set`を使用してtableにデフォルト値を設定します。`$global` table名をbypassして、_すべての_tableにデフォルト値を設定します。

`Treasure#get`を使用すると、table名`$global`を渡すことですべてのglobalプロパティを表示できます。

レコードが送信されると、空のレコードオブジェクトが作成され、以下の順序でプロパティが適用されます:

1. `$global`プロパティが`record`オブジェクトに適用されます
2. Tableプロパティが`record`オブジェクトに適用され、`$global`プロパティを上書きします
3. Recordプロパティは`addRecord`関数に渡され、`record`オブジェクトに適用され、tableプロパティを上書きします


## データプライバシー

Treasure DataのSDKは、EUのGDPR法の多くの一般的な要件への準拠を可能にします。より新しく厳格なデータプライバシーポリシーに準拠するのに役立ついくつかのメソッドが有効になっています:

* `blockEvents` / `unblockEvents` - Treasure Dataへのすべてのeventの送信をシャットダウンまたは再有効化する引数なしのメソッド。メッセージは送信されず、呼び出しはキャッシュされません。デフォルトではeventはブロック解除されています。これらのメソッドに関するドキュメントを参照してください: `blockEvents`、`unblockEvents`、`areEventsBlocked`
* `setSignedMode` - SDKによって一部のPIIが自動的に収集される可能性がある"Signedモード"に入る引数なしのメソッド。Treasure Dataに送信されるデータには、指定されている場合、`td_ip`、`td_client_id`、`td_global_id`が含まれます。このメソッドに関するドキュメントを参照してください: `setSignedMode`
* `setAnonymousMode` - SDKによってPIIが自動的に収集されない"Anonymousモード"に入る引数なしのメソッド。これらのデータは、指定されている場合、`td_ip`、`td_client_id`、`td_global_id`を特に省略します。これはデフォルトの動作です。このメソッドに関するドキュメントを参照してください: `setAnonymousMode`
* `resetUUID` - `td_client_id`値をリセットするメソッド。これにより、ユーザーのcookieに保存されている元の値が上書きされ、データに新しいユーザーとして表示される可能性があります。リセット中にclient IDを指定したり、不適切な値をbypassしてカスタム有効期限を指定したりできます。このメソッドに関するドキュメントを参照してください: `resetUUID`


新しい設定プロパティも追加されました: `config.startInSignedMode`。この設定オプションは、ユーザーがSignedモードまたはAnonymousモードにしたいかどうかについて明示的な決定が行われていない場合、デフォルトでSignedモードにする必要があることをSDKに伝えます。デフォルトの動作は、ユーザーをデフォルトでAnonymousモードにすることです。

### 例

ユーザーが最初にサイトにアクセスし、マーケティング目的で追跡することに同意しているかどうかを知る必要があるとします。Consent Management Vendorと契約してこの情報を維持し、consent情報を知った後に適切な値を設定したいと考えています。


```javascript
    var foo = new Treasure({
      database: 'foo',
      writeKey: 'your_write_only_key'
    });
    td.trackClicks()

    var successConsentCallback = function (consented) {
      if (consented) {
        td.setSignedMode()
      } else {
        td.setAnonymousMode()
      }
    }

    var failureConsentCallback = function () {
      // error occurred, consent unknown
      td.setAnonymousMode()
    }

    ConsentManagementVendor.getConsent(userId, successConsentCallback, failureConsentCallback)
```

このシナリオでは、Consent Management Vendorは、`userId`に関連付けられたユーザーがマーケティング目的でPIIを使用することに同意しているかどうかに基づいて、callbackでtrueまたはfalse値を返します。非PII dataは引き続き収集される可能性があります。

たとえば、Consent Management Vendorがconsent levelに基づいて文字列を提供します: `MARKETING`、`NON-MARKETING`、`REFUSED`("マーケティング目的でPIIが使用されることに同意"、"非マーケティング目的でデータが収集されることに同意"、"すべてのデータ収集を拒否")。`successConsentCallback`でわずかな変更を加えるだけです:


```javascript
    var successConsentCallback = function (consented) {
      if (consented === 'MARKETING') {
        td.unblockEvents()
        td.setSignedMode()
      } else if (consented === 'NON-MARKETING') {
        td.unblockEvents()
        td.setAnonymousMode()
      } else if (consented === 'REFUSED') {
        td.blockEvents()
      }
    }
```

このように、SignedモードまたはAnonymousモードから抜け出すときに、Treasure Dataで実際にデータを収集していることを確認できます。顧客がすべてのtrackingを拒否した場合、eventがブロックされ、このステータスはページ更新間で永続化されます。