課題: フォーマット爆発
テンプレートフォーマットがないと、各ディメンションバリアントに個別のフォーマット定義と format_id が必要です:解決策: パラメータ付きテンプレートフォーマット
単一のテンプレートフォーマット定義(display_static)が format_id オブジェクトでディメンションフィールドを受け入れ、クリエイティブが正確なディメンションを指定できるようにします。
フォーマットタイプと format_id
2 種類のフォーマット定義があり、3 種類の format_id を生成します:フォーマット定義
-
具体フォーマット - フォーマット定義に固定のディメンション
- 明示的なディメンションを持つ
renders配列を持つ - 例:
display_300x250は常に 300×250px を意味する - パラメータを受け入れられない
- 明示的なディメンションを持つ
-
テンプレートフォーマット - format_id でパラメータを受け入れる
- 受け入れるパラメータを列挙する
accepts_parameters配列を持つ - 例:
display_staticは任意のディメンションになれる - パラメータありでもなしでも使える
- 受け入れるパラメータを列挙する
format_id の種類
-
具体 format_id - 具体フォーマットを参照
- 例:
{id: "display_300x250"} - パラメータなし(受け入れない)
- 例:
-
テンプレート format_id - パラメータなしでテンプレートフォーマットを参照
- 例:
{id: "display_static"} - 任意のディメンションを受け入れるためにプレースメントで使う
- 例:
-
パラメータ付き format_id - パラメータ付きのテンプレートフォーマット
- 例:
{id: "display_static", width: 300, height: 250} - 正確なディメンション(ピクセル)を指定するためにクリエイティブで使う
- 例:
テンプレートフォーマット定義
パラメータを受け入れるフォーマット定義:accepts_parameters: ["dimensions"]- フォーマットが format_id でディメンション(ピクセルの width/height)を受け入れるrenders[].parameters_from_format_id: true- レンダーパラメータが format_id に由来するrequirements.parameters_from_format_id: true- アセットパラメータが format_id と一致しなければならない
パラメータ付き format_id(クリエイティブマニフェスト)
クリエイティブは、テンプレートフォーマットを使うために format_id で正確なディメンションを指定します:プレースメントの制約
重要: セールスエージェントは、プレースメントで常にパラメータ付きの format_id(特定のディメンション/デュレーション付き)を返さなければなりません(MUST)。パラメータなしのテンプレート format_id は、list_creative_formats() のフォーマット定義でのみ使われます。
パブリッシャーは、サポートするすべてのバリアントを列挙して、サポートするディメンションを指定します:
- バイヤーはどのディメンションが正確にサポートされるかを知る必要がある
- 何が受け入れられるかについて曖昧さがない
- クリエイティブ提出時に明確な検証を可能にする
- パラメータなしのテンプレート format_id は
list_creative_formats()を介したフォーマット発見のためだけのもの
メリット
✅ スケーラビリティ - 1 つのテンプレートフォーマットが無制限のディメンションバリアントをサポート ✅ 予測可能 - 同じディメンション = 同じ format_id(キャッシュ/重複排除を可能にする) ✅ 自己完結 - クリエイティブが format_id を介してフォーマットを完全に指定する ✅ ポータブル - 300×250 のクリエイティブは 300×250 を受け入れる任意のプレースメントで機能する ✅ パブリッシャーの制御 - プレースメントが正確なディメンション制約を指定する ✅ 型安全 - width/height はエンコードされた文字列ではなく数値 ✅ 後方互換 - 具体(非テンプレート)フォーマットは変更なしで機能するformat_id のフィールド
ビジュアルフォーマット(ディスプレイ、DOOH、ネイティブ)
フィールド:width(integer、最小: 1) - ピクセル単位の幅height(integer、最小: 1) - ピクセル単位の高さ
時間ベースフォーマット(動画、音声)
フィールド:duration_ms(number、最小: 1) - ミリ秒単位のデュレーション
組み合わせ(ディメンション付き動画)
フィールド:width、height(integer) - ピクセル単位の動画フレームディメンションduration_ms(number) - ミリ秒単位の動画の長さ
フォーマット定義のパターン
ディスプレイフォーマット(柔軟なディメンション)
動画フォーマット(柔軟なデュレーション)
DOOH フォーマット(ピクセルディメンション)
出力フォーマットを持つ生成系フォーマット
生成系フォーマットは、生成できる出力フォーマットを指定します: オプション 1: 特定のディメンションを生成発見パターン
フォーマット定義: list_creative_formats()
クリエイティブエージェントとセールスエージェントの両方が、list_creative_formats() を介してテンプレートフォーマット定義を返せます:
プレースメントの制約: get_products()
要件: セールスエージェントは、プレースメントでパラメータ付きの format_id(特定のディメンション/デュレーション付き)を返さなければなりません(MUST)。パラメータなしのテンプレート format_id は、プレースメント仕様では許可されません。
- 受け入れられるディメンションバリアントの明示的なリストを提供する
- 何が受け入れられるかについての曖昧さを排除する
- クリエイティブ提出時に明確な検証を可能にする
- バイヤーが自分のクリエイティブのディメンションを特定のプレースメント要件に照合できる
- バイヤーがクリエイティブまたはセールスエージェントで
list_creative_formats()を呼ぶ →display_staticがディメンションを受け入れるテンプレートフォーマットだと知る - バイヤーがセールスエージェントで
get_products()を呼ぶ → どの特定のディメンションがサポートされるか(300×250、728×90)を知る - バイヤーが、プレースメントのサポートするディメンションの一つに一致するパラメータ付き format_id でクリエイティブを作成する
実装ガイドライン
クリエイティブエージェント向け
フォーマット定義:- 柔軟なディメンションを持つフォーマットには
accepts_parameters: ["dimensions"]を設定 - 柔軟なデュレーションを持つフォーマットには
accepts_parameters: ["duration"]を設定 - 両方を持つフォーマット(例: ディメンション付き動画)には
accepts_parameters: ["dimensions", "duration"]を設定 - フォーマットがディメンションを受け入れる場合は
renders配列を省略(ディメンションは format_id に由来) - 固定ディメンションの具体フォーマットには
renders配列を含める
- format_id のディメンションをアセットのディメンションに対して検証
- width/height/unit がそろって存在すること(部分的でない)を保証
- format_id がアセットに一致しない場合は明確なエラーを返す
list_creative_formats()はテンプレートフォーマット(ディメンションパラメータなし)を返す- ID によるフォーマット検索は、ディメンションパラメータを無視してベースフォーマット(agent_url + id)で一致する
- 例:
{id: "display_static", width: 300, height: 250}のリクエストはテンプレートフォーマット{id: "display_static"}に一致する - ディメンションパラメータはフォーマット発見ではなくクリエイティブ検証に使われる
セールスエージェント向け
プロダクトレスポンス - 重要な要件:- プレースメントで常に特定のディメンション/デュレーション付きのパラメータ付き format_id を返す必要があります(MUST)
- プレースメントの
format_ids配列でパラメータなしのテンプレート format_id を返してはなりません(NEVER) - サポートするすべてのディメンション/デュレーションのバリアントを明示的に列挙する:
- バイヤーはサポートするディメンションの明示的なリストを必要とする
- 何が受け入れられるかについての曖昧さがない
- クリエイティブ提出時の検証を可能にする
- パラメータなしのテンプレート format_id は
list_creative_formats()のレスポンス専用
- クリエイティブの format_id が少なくとも 1 つのプレースメント format_id に正確に一致することを保証
- 一致には、すべてのフィールド(agent_url、id、width、height、duration_ms)の正確な等価が必要
- 部分一致や「十分近い」ディメンションはなし
バイヤー向け
クリエイティブマニフェストの構築:accepts_parameters配列を確認するためにフォーマット定義を取得- テンプレートフォーマットを使うときは format_id にディメンション/デュレーションフィールドを含める
- アセットのディメンションが format_id のディメンションに一致することを保証
- 同期前にプレースメント format_id に対して検証
format_id の等価性ルール
2 つの format_id は、次の場合に限り同一です:agent_urlが正確に一致idが正確に一致widthが正確に一致(存在する場合)heightが正確に一致(存在する場合)duration_msが正確に一致(存在する場合)
正規化
等価性またはキャッシュのために format_id を比較するとき: 必須フィールド:widthとheightはそろって存在しなければならない(一方だけは指定できない)- すべてのディメンションはピクセル単位(整数)
- width と height は整数(300 であって 300.5 ではない)
- デュレーションは小数になれる(端数秒には 30000.5ms)
- 等価性に JSON のフィールド順は関係しない
{"width": 300, "height": 250}は{"height": 250, "width": 300}と等しい
マッチングロジック
プレースメント検証
重要: プレースメントは、常に明示的なディメンション/デュレーション付きのパラメータ付き format_id を指定しなければなりません(MUST)。パラメータなしのテンプレート format_id はプレースメントでは許可されません。 プレースメント内のパラメータ付きフォーマット(必須のパターン):具体フォーマットからの移行
移行前(フォーマット爆発):よくあるパターン
IAB 標準ディスプレイサイズ
IAB サイズに 15 の個別フォーマットを定義する代わりに、1 つのテンプレートを使います:- 300×250:
{id: "display_static", width: 300, height: 250} - 728×90:
{id: "display_static", width: 728, height: 90} - 160×600:
{id: "display_static", width: 160, height: 600} - など
動画の尺バリエーション
個別の 15 秒、30 秒、60 秒のフォーマット定義の代わりに:{id: "video_hosted", duration_ms: 30000}
DOOH のスクリーンサイズ
すべてのビルボードサイズにフォーマットを定義する代わりに:{id: "dooh_static", width: 1920, height: 560}
注: すべてのディメンションはピクセル単位です。物理的なスクリーンサイズ(例: 48 フィート × 14 フィート)はプレースメントメタデータです。
参考
- クリエイティブマニフェスト - 完全なマニフェストの構造
- フォーマット発見 - バイヤーがフォーマットを発見する方法
- プレースメントターゲティング - クリエイティブをプレースメントに割り当てる