VAST4.2でつくる動画広告の世界 その2(VASTタグ)

前回の第1回目で VAST が動作する仕組みを大まかに説明しました。

https://qiita.com/miyay/items/b1ee6e01efc18afd7ff8

今回から VAST4.2 の各要素を見ていきます。

# TL;DR

* ラップ(3pas入稿)するか否かで、`<Wrapper>`か`<InLine>`を使い分ける
    * ラップする場合でも各種計測タグなどは利用できる
* VAST4では `<AdServingId>` という広告リクエストごとに一意のIDが必須になる
* VAST4では `<UniversalAdID>` というシステム間で一意のクリエイティブを示すIDが必須になる

# VAST xmlの構成要素

アウトラインの説明を優先するため、AdPodやメザニンファイル等の指定方法は次回以降、個別に説明します。
また、要素の数が多すぎるので、必須のものをメインにして説明します。

どの要素を使って広告を組み立てるかはPlayerに委ねられるのため、基本的にはID等を除き
```xml
<AdTitle>○○商品の施策 9月</AdTitle>
```
のような内部情報ではなく、
```xml
<AdTitle>商品名</AdTitle>
```
のようなユーザーが見ても違和感ないような情報を使ったほうがいいと思います。

## VASTタグ

```xml
<?xml version="1.0" encoding="UTF-8"?>
<VAST version='4.2' xmlns:xs='<http://www.w3.org/2001/XMLSchema>' xmlns='<http://www.iab.com/VAST>'>
  <Ad id='1'>
    <InLine>
      <!-- InLineタグ -->
    </InLine>
  </Ad>
</VAST>
```

`<VAST>` がrootになり、その配下に `<Ad>` か `<Error>` のどちらかを指定します。

Ad内にはさらに `<Wrapper>` もしくは `<InLine>` を指定することができます。

- `<Error>`
    - noad(返す広告がなし)を表す
- `<Ad>`
    - `<Wrapper>`
        - VASTは自身のVASTから他のVASTを参照することができます(前回参照)。ラップする場合、このタグでVASTのURLを指定する
            - ラップする場合でもImp計測や各種ビーコンの測定はできるため、 `<Impression>` や `<Creatives>` は利用できる
    - `<InLine>`
        - 実際に配信するクリエイティブ情報を載せる
        - `id`: 識別子
        - `sequence`: Ad Pod。重要な機能なのでまた説明します。
        - `adType`: video or audio or hybrid。省略した場合はvideo。

## InLine / Wrapper タグ内

```xml
<InLine>
  <AdSystem version="1.0">AD_SYSTEM</AdSystem>
  <Error><![CDATA[https://example.com/error]]></Error>
  <Impression id="Impression-ID"><![CDATA[https://example.com/track/impression]]></Impression>
  <Pricing model="cpm" currency="USD">
    <![CDATA[ 25.00 ]]>
  </Pricing>
  <AdServingId>AD_SYSTEM-00000000-0000-0000-0000-000000000000</AdServingId>
  <AdTitle>AD_TITLE</AdTitle>
  <Creatives>
    <!-- Creativesタグ -->
  </Creatives>
</InLine>
```

```xml
<Wrapper>
  <AdSystem version="1.0">AD_SYSTEM</AdSystem>
  <Error><![CDATA[http://example.com/error]]></Error>
  <Impression id="Impression-ID"><![CDATA[http://example.com/track/impression]]></Impression>
  <Creatives>
	<!-- Creativesタグ -->
  </Creatives>
  <VASTAdTagURI>
    <![CDATA[http://example.com/vast_inline.xml]]>
  </VASTAdTagURI>
</Wrapper>
```

- `<AdSystem>`
    - 配信システム名
    - 必須
    - InLine or Wrapperで利用化
- `<AdTitle>`
    - 広告タイトル
        - メディアによってはこの名前が表示される場合がある
        - 余白が足りない場合は `<Description>` (オプション)を使う
    - 必須
    - InLineでのみ利用化
- `<AdServingId>`
    - 広告ライフサイクルのID
        - 1つのImpから各種トラッキングやクリック等を、複数システムをまたいで一意に識別できるID
        - `<InLine>`で一意である必要があるため、AdPod等で複数`<InLine>`がある場合は別々のAdServingIdを付与する必要がある
        - GUIDもしくはAdSystem+GUIDなどの、十分にユニーク、もしくはタイムスタンプと組み合わせてユニークな値が推奨
        - `[ADSERVINGID]` マクロで展開可能
    - InLineのみ利用化で必須
- `<Impression>`
    - Impビーコン
        - Imp通知用URIを指定
    - InLine or Wrapperで利用化
- `<Category>`
    - 広告のカテゴリ
        - カテゴリIDまたはラベルを指定
        - `authority`　でカテゴリリストを渡す必要あり
    - パブリッシャーが要求しない限りはオプション
    - InLineでのみ利用化
- `<Pricing>`
    - RTBの価格を指定できるらしい
        - OpenRTB等の一般的なRTBの仕組みでは既に価格設定のプロトコルがあるため、何に使うかはよく分からない
    - オプション
    - InLine or Wrapperで利用化
- `<ViewableImpression>`
    - PlayerがViewableと判断した段階で発火するビーコン
        - `<Viewable>`
            - 視聴可能を満たした場合に発火
        - `<NotViewable>`
            - 視聴可能に満たなかった場合に発火
        - `<ViewUndetermined>`
            - 視聴可能か判断できなかった場合に発火
    - オプション
    - InLine or Wrapperで利用化

## Creativesタグ内

```xml
<Creatives>
  <Creative id="1" sequence="1" adId="1">
	<UniversalAdId idRegistry="example.com">11111111<UniversalAdId>
    <!-- Linearタグ -->
    <!-- Companionタグ -->
  </Creative>
</Creatives>
```

- `<Creatives>`
    - クリエイティブそのものを示す、 `<Creative>` をまとめる要素
    - InLineの場合は1つ必須、Wrapperの場合は 0 or 1
    - `<Creative>`
        - 複数存在できる
        - `id`
            - クリエイティブを提供する **広告システム** を識別するためのID
        - `adId`
            - **クリエイティブ** を識別するための広告システムで一意のID。後述のUniversalAdIdが導入され、システムをまたいだ一意のIDが特定できるようになったので、今後不要かもしれない
        - `sequence`
            - 広告を再生する順番
            - Ad sequenceとCreative sequenceが非常に紛らわしいが、この Creative sequence はPodではなく、単純に1クリエイティブとして複数コンテンツを再生する
        - `<UniversalAdID>`
            - システム間で一意のクリエイティブ識別子
                - 一意のクリエイティブを示す文字列
            - 必須
            - `idRegistry`
                - カタログ化されているサイトのURL
                - idRegistryのサービスドメインとIDでシステム間で一意になる理解
            - e.g.
                - `<UniversalAdId idRegistry="ad-id.org">CNPA0484000H<UniversalAdId>`
                - `<UniversalAdId idRegistry="clearcast.co.uk">AAA/BBBB123/030<UniversalAdId>`


# あとがき

今回はVAST全体の構成と、Creativesタグまでを説明しました。
Creative内には [前々回](https://qiita.com/miyay/items/c8e3a58b4e2c526b4986#%E9%80%A3%E5%8B%95%E5%BA%83%E5%91%8A) 話した Linear、NonLinear(廃止)、Companionと複数のパターンがあるため、次回に分割して説明します。

Supershipではプロダクト開発やサービス開発に関わる人を絶賛募集しております。
[Supership 採用サイト](https://supership.jp/recruit/)