競合がYouTubeに公開している動画広告を要約し、訴求・構成・尺・出演者の使い方を比較表にまとめて、広告主への月次の報告に使う
競合がYouTubeのチャンネルに公開した動画広告を毎月拾い、訴求・構成・尺・出演者の使い方を時刻付きで要約します。 広告主の動画と並べた比較表と、月次の報告の下書きにします。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Google Apps Script/Python
- 対象業界
- EC/不動産/小売/広告
- 対象部門
- マーケティング
- 対象業務
- 比較検討/要約
- 主な課題
- データ分析に時間がかかる/人手が足りない/属人化している
- AIで行う処理
- 要約
- 主な効果
- 判断支援/品質標準化/工数削減
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 必須
01導入前 / 導入後の業務フロー
- 担当者が競合のチャンネルを開き、前回の報告の後に公開された動画を探す
- 動画を2〜3回見て、台詞、テロップ、場面の切り替わりをメモする
- 訴求の要点、構成、尺、出演者をまとめて、報告用の表に書く
- 広告主の動画と並べ、違いを数行にまとめる
- 上長が報告のひな形に貼り、広告主に説明する
- 自動毎週月曜に、広告主ごとの競合のチャンネルから新しく公開された動画を拾う
- 自動動画の題名・公開日・尺・公開の状態を取り、比べる対象の候補の一覧に足す
- 人担当者が一覧を見て、広告の動画に「要約する」を付ける(社長の挨拶や採用の動画などは外す)
- 自動AIが動画を見て、訴求・構成・出演者の使い方を、決めた選択肢と根拠の時刻で返す
- 自動返ってきた値を比較表に書き、広告主の動画と並べる
- 人担当者が根拠の時刻の場面を見て値を確かめ、直す
- 自動確かめた値から、月次の報告の下書き(今月の傾向と、広告主の動画との違い)をAIが書く
- 人担当者と上長が下書きを直し、報告のひな形に貼る
各工程の詳しい説明を読む
- 担当者が競合のチャンネルを開き、前回の報告の後に公開された動画を探す
- 動画を2〜3回見て、台詞、テロップ、場面の切り替わりをメモする
- 訴求の要点、構成、尺、出演者をまとめて、報告用の表に書く
- 広告主の動画と並べ、違いを数行にまとめる
- 上長が報告のひな形に貼り、広告主に説明する
(a)見る時間がかかる。 30秒の広告でも、台詞とテロップを書き起こすには何度も止めて見ます。数分の商品紹介になると、1本で30分を超えます。
(b)観点がそろわない。 「訴求」を、ある担当は「価格」と書き、ある担当は「初回限定の値引き」と書きます。同じ動画を見ても、表の値が担当者で変わります。 月をまたいで傾向を見ることができません。
広告主の動画も、報告のたびに見直している。 比べる相手の広告主の動画も、担当者が毎回見直して要約しています。同じ動画を、月が変わるたびに別の言葉で要約していることもあり、(b)のばらつきを大きくしています。
(c)新しい動画の見落とし。 チャンネルを開いて目で探すので、ショート動画の欄に上がった広告を見落とします。 気づいたのが翌月で、報告が1か月遅れることがあります。
- 【自動】 毎週月曜に、広告主ごとの競合のチャンネルから新しく公開された動画を拾う
- 【自動】 動画の題名・公開日・尺・公開の状態を取り、比べる対象の候補の一覧に足す
- 【人】 担当者が一覧を見て、広告の動画に「要約する」を付ける(社長の挨拶や採用の動画などは外す)
- 【自動】 AIが動画を見て、訴求・構成・出演者の使い方を、決めた選択肢と根拠の時刻で返す
- 【自動】 返ってきた値を比較表に書き、広告主の動画と並べる
- 【人】 担当者が根拠の時刻の場面を見て値を確かめ、直す
- 【自動】 確かめた値から、月次の報告の下書き(今月の傾向と、広告主の動画との違い)をAIが書く
- 【人】 担当者と上長が下書きを直し、報告のひな形に貼る
3番で人が選ぶのは、公式チャンネルには広告でない動画も多いからです。 新商品の発表会、採用の動画、社長の挨拶まで要約すると、比較表が広告でないもので埋まります。題名と尺の一覧を見て選ぶのは、1社あたり1分もかかりません。
6番が、この構成の確認の中心です。 担当者は動画を頭から見直さず、AIが根拠にした時刻の場面だけを開いて、値が合っているかを確かめます。
02今回想定するシステム構成
広告主ごとの競合のチャンネルの一覧(スプレッドシート) ▼【トリガー】毎週月曜の定時の実行 Python ├──▶ YouTube Data API ── channels.list → アップロードの再生リスト │ playlistItems.list → 新しい動画 │ videos.list → 題名・公開日・尺・公開の状態 ▼ 比べる対象の候補の一覧 ▼ 【担当者が広告の動画に「要約する」を付ける】 ▼ Python ──▶ Gemini API ── 動画の URL を渡し、訴求・構成・出演者を時刻付きで返す ▼ 比較表(広告主の動画と並べる) ▼ 【担当者が時刻の場面を見て確かめる】 ▼ Gemini API ── 月次の報告の下書き(傾向と違い) ▼ 【担当者と上長が直す → 広告主へ報告】
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 処理 | Gemini API(YouTubeの動画の要約と、比較表からの報告の下書き) | Claude API、OpenAI API(YouTube の URL を渡す形は使わず、担当者のメモと題名・概要を要約する形になる) |
| 連携 | Python(定時の実行、YouTube Data API の呼び出し、比較表への書き込み) | Google Apps Script |
| 連携 | YouTube Data API(channels.list、playlistItems.list、videos.list) | - |
| 保管 | Google スプレッドシート(競合の一覧、候補の一覧、比較表) | 社内のデータベース |
動画を見る土台は、Gemini API がYouTubeの URL を直接受け取れることです。 入力に {"type": "video", "uri": "https://www.youtube.com/watch?v=..."} の形で URL を入れます。公式の説明では、この機能はプレビューで、扱えるのは公開の動画だけとされ、非公開や限定公開の動画は使えません。無料の枠では1日に8時間分までで、有料の枠では動画の長さによる上限はないとされています。Gemini 2.5 以降のモデルでは、1回のリクエストに10本まで入れられます。
動画は、既定では1秒に1コマの割合で見られます。 公式の説明では、速い動きや場面の切り替わりの多い動画では細部を見落とすことがあるとされています。音声も一緒に処理され、場面は MM:SS の形の時刻で指し示せます。
新しい動画の拾い上げは、YouTube Data API で行います。 channels.list でチャンネルのアップロード動画の再生リストを取り、playlistItems.list でその再生リストの動画を取ります。どちらも1回の呼び出しの割り当ては1ユニットで、playlistItems.list は1回に最大50件を返します。尺は videos.list の contentDetails.duration から取ります。 ISO 8601 の形(例:PT15M33S)です。
03どうやって実装するのか
処理の起点を決める
毎週月曜の朝に、Python のプログラムを定時で動かします。 月次の報告の前にまとめて拾うと、(c)の見落としが月末に一度に見つかり、要約と確認が報告の週に詰まります。週ごとに拾えば、担当者の確認も週に数本ずつで済みます。
AIの要約は、担当者が「要約する」を付けた時点で動かします。 候補の一覧の列に印が付いたものを、プログラムが30分ごとに拾います。拾い上げと要約を分けるのは、広告でない動画にAIの費用と担当者の確認の時間を使わないためです。
月次の報告の下書きは、担当者が比較表の確認を終えて「報告の下書き」を押したときに作ります。 確かめる前の値で下書きを作ると、誤った値が報告の文章に入ります。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 競合の一覧 | 広告主ごとの競合の社名、チャンネルのハンドルまたはID | 競合の一覧のシート |
| 動画の情報 | 動画のID、題名、公開日時、尺、公開の状態 | YouTube Data API |
| 動画そのもの | 公開の動画の URL | Gemini API に URL で渡す |
| 比べる軸 | 訴求の選択肢、構成の型、CTAの選択肢、出演者の立場の選択肢 | 軸のシート |
| 広告主の動画の値 | 広告主の動画を同じ軸で要約した値 | 比較表 |
質を決めるのは、比べる軸の選択肢です。 訴求なら「価格・値引き」「品質・成分」「実績・受賞」「利用者の声」「限定・期間」「手軽さ」のように、広告主の業種ごとに6〜8個を決めます。 選択肢が多すぎると、AIの選び方がばらつき、少なすぎると「その他」ばかりになります。
広告主の動画も、同じ軸で要約しておきます。 比較表の左端に広告主の動画を置くと、「競合は今月3社とも利用者の声で始まり、自社だけが価格で始まっている」のような違いが一目で分かります。
データの取得方法を決める
| 取るもの | どこから | 何に使うか |
|---|---|---|
| アップロードの再生リスト | channels.list(part=contentDetails、forHandle または id) | 新しい動画の取得元 |
| 新しい動画のID | playlistItems.list(playlistId、maxResults=50) | 前回より後の動画を拾う |
| 題名・公開日時・尺・公開の状態 | videos.list(part=snippet,contentDetails,status) | 候補の一覧と、尺の値 |
前回の実行より後に公開された動画だけを、候補に足します。 snippet.publishedAt は公開された日時で、後から公開に切り替えた動画では、アップロードの日時と違うとされています。前回の実行の日時と比べ、それより後のものを拾います。
status.privacyStatus が public の動画だけを要約の対象にします。 Gemini API に渡せるのは公開の動画だけなので、unlisted(限定公開)の動画は、候補の一覧に「対象外」として残すだけにします。
尺の ISO 8601 の値は、Python で秒に直します。 PT30S なら30秒、PT1M15S なら75秒です。比較表では秒で並べ、15秒以下・30秒前後・60秒以上のように区切って傾向を見ます。
AIへ渡す前に整形する
- 新しい動画の絞り込み … 前回の実行より後に公開され、公開の状態が
publicのものだけを候補にします - 重複の除外 … 同じ動画が別の再生リストから拾われても、動画のIDで1つにします
- 担当者の選別 … 候補の一覧で「要約する」が付いたものだけを次に進めます
- 長い動画の扱い … 尺が10分を超える動画は、要約の前に担当者に確かめます。広告ではないことが多いためです
- 軸の準備 … その広告主の業種の軸の選択肢を、軸のシートから取り出しておきます
- 広告主の動画の要約 … 広告主の新しい動画も、同じ流れと同じ軸で要約し、比較表の左端に置きます。一度確かめた値は、翌月以降は取り直さず使い回します
動画のファイルは、こちらで保存しません。 YouTube のデベロッパーポリシーは、事前の書面の承認なしに、YouTube の映像・音声のコンテンツをダウンロードしたり、コピーを保存したりしないことを求めています。この構成では URL を Gemini API に渡すだけにし、動画を手元に落として静止画や音声に分ける処理は作りません。
4番の10分の区切りは、費用と確認の時間のためでもあります。 公式の説明では、既定の解像度で動画1秒あたりおよそ100トークンかかるとされています。長い商品紹介を誤って要約に回すと、1本で短い広告の何十本分の費用になります。
AIに処理させる
動画1本ごとに、次の項目を返させます。
| 項目 | 答え方 | 判断できないときの扱い |
|---|---|---|
| 訴求(主・副) | 軸の選択肢から主を1つ、副を2つまで。根拠の時刻 | 当てはまらなければ other と短い説明 |
| 冒頭 | 最初の5秒に何が映り、何が言われるか。商品が初めて映る時刻 | 商品が映らなければ not_shown |
| 展開 | 問題提起・実演・比較・利用者の声などの型の並び。各場面の開始時刻 | 型に当てはまらない場面は other |
| 締め | CTAの選択肢(購入・資料請求・来店・検索・アプリ)。表示の時刻 | 呼びかけが無ければ none |
| 出演者の使い方 | 立場(著名人と思われる人物・一般の利用者役・社員・専門家役・アニメ・出演なし)と、話し方(語りかけ・会話・ナレーションのみ) | 判断できなければ uncertain |
| 画面の文字 | 価格・期間・注釈など、画面に出た主な文字と時刻 | 読めなければ書かない |
出演者は「立場」で答えさせ、誰かを当てさせません。 顔から人物の名前を推測させると、誤った名前が比較表と報告に残ります。 名前を書くのは、画面のテロップや題名・概要に名前が出ているときだけにし、その場合も根拠の時刻を付けさせます。
| させないこと | 理由 |
|---|---|
| 尺の答え | YouTube Data API の値を使う |
| 顔からの人物の特定 | 誤りが残り、人についての推測になる |
| 広告の効果の評価(「よくできている」など) | 公開の情報からは成果が分からない |
| 競合の表現が法令に触れるかの判断 | 広告主と専門家が判断する |
| 広告主への提案 | 提案は担当者が比較表を見て考える |
3行目がいちばん起きやすい失敗です。 AIは要約の最後に「訴求が明確で効果的な広告です」と書きがちで、それが報告に入ると、根拠の無い評価を広告主に伝えることになります。
指示内容を固定する
あなたは広告代理店のプランニングチームで、競合の動画広告の中身を記録する立場です。
渡した動画を見て聞いて、決めた項目を答えてください。
【この広告主の業種】{industry}
【訴求の選択肢】{appeal_options}
【展開の型の選択肢】{structure_options}
【CTAの選択肢】{cta_options}
【出演者の立場の選択肢】{cast_options}
【答えること】
- 訴求:主を1つ、副を2つまで。それぞれ根拠の場面の時刻(MM:SS)
- 冒頭:最初の5秒に映るものと言われること。商品が初めて映る時刻
- 展開:場面ごとの型と開始の時刻
- 締め:CTAの種類と表示の時刻
- 出演者:立場と話し方
- 画面の文字:価格・期間・注釈など主なものと時刻
【厳守事項】
- 選択肢に当てはまらないときは other を選び、短く説明してください。無理に近いものを選ばないでください。
- すべての答えに、根拠の場面の時刻を付けてください。時刻を付けられない答えは書かないでください。
- 動画の長さ(秒数)を書かないでください。
- 出演者の名前を顔から推測しないでください。画面の文字に名前が出たときだけ、その時刻とあわせて書いてください。
- 広告の出来や効果を評価しないでください。
- 表現が法令に触れるかどうかを書かないでください。
「時刻を付けられない答えは書かない」が、この構成の確認を軽くします。 時刻が付いていれば、担当者はその場面だけを見て確かめられます。時刻の無い答えは、確かめるのに動画を頭から見ることになり、AIを使った意味が薄れます。
「無理に近いものを選ばない」は、軸を育てるための行です。 other の説明が毎月同じ内容で出てくるなら、それは選択肢に足すべき訴求です。other が多い軸は、軸のシートを見直す合図になります。
出力形式を固定する
構造化出力で、動画1本ごとに次の形のJSONを受け取ります。
{
"video_id": "",
"appeal": { "main": "price | quality | track_record | testimonial | limited | ease | other",
"main_time": "00:03", "sub": [ { "value": "", "time": "" } ],
"other_note": "" },
"opening": { "first_5s": "", "product_first_seen": "00:02 | not_shown" },
"structure": [ { "type": "problem | demo | comparison | testimonial | offer | other",
"start": "00:00" } ],
"cta": { "type": "purchase | inquiry | visit | search | app | none", "time": "" },
"cast": { "role": "celebrity_like | user_role | employee | expert_role | animation | none | uncertain",
"speech": "address | dialogue | narration_only", "name_from_caption": "", "time": "" },
"on_screen_text": [ { "text": "", "time": "" } ]
}
選択肢を enum にして、軸の値をそろえます。 Gemini API の構造化出力は、/v1beta/interactions の response_format に mime_type: "application/json" とスキーマを入れて指定します。公式のページは、スキーマに合ったJSONでも値が正しいとは限らないので、アプリケーションの側で確かめるよう案内しています。Python では、時刻が MM:SS の形で、動画の尺(videos.list の値)を超えていないかを確かめます。尺を超える時刻があれば、その答えは「時刻が合わない」として担当者に回します。
比較表には、1本を1行にして次のように並べます。
| 社 | 動画(公開日) | 尺 | 訴求(主) | 商品が映る | 展開 | CTA | 出演者 |
|---|---|---|---|---|---|---|---|
| 広告主 | 春の新商品(4/2) | 30秒 | 価格・値引き(00:03) | 00:01 | 実演→値引き | 検索 | ナレーションのみ |
| 競合A | 初回限定(4/10) | 15秒 | 利用者の声(00:00) | 00:08 | 利用者の声→値引き | 購入 | 一般の利用者役・語りかけ |
尺の列だけは YouTube Data API の値です。 それ以外の列にはAIの値と根拠の時刻が入り、担当者が確かめた列には印が付きます。
月次の報告の下書きは、確かめ終えた比較表だけを Gemini API に渡し、「今月の競合の傾向」「広告主の動画との違い」を、比較表の値だけを根拠に3〜5点で書かせます。 比較表に無いことを書かない、評価や提案を書かない、と指示します。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 競合の一覧・候補の一覧・比較表 | Python からスプレッドシートへの読み書き | 競合の読み取り、候補の追加、値の書き込み |
| YouTube Data API | Python からの呼び出し(APIキー) | 新しい動画と、題名・公開日時・尺・公開の状態 |
| Gemini API | Python からの HTTP 呼び出し(動画は URL で渡す) | 動画の要約と、報告の下書き |
| 報告のひな形 | 担当者が下書きを貼る | 広告主への報告 |
広告主へは、この構成から何も送りません。 報告の下書きは比較表の隣のシートに書き、担当者と上長が直してから、ひな形に貼ります。
APIキーは、プログラムの外の設定に置き、コードに書きません。 YouTube Data API のキーと Gemini API のキーは、別のものにしておきます。
人が確認する
すべての動画の値を、担当者が確かめてから比較表を確定させます。 見る順番を決めておきます。
- 「時刻が合わない」と
otherを先に見る … 時刻の場面を開き、値を直すか、otherの説明を確かめます - 訴求(主)と商品が映る時刻を見る … 報告でいちばん使う値なので、全件の時刻の場面を確かめます
- 出演者の欄を見る … 名前が入っているものは、画面の文字の時刻を開いて、本当に名前が出ているかを確かめます
- 報告の下書きを比較表と照らす … 比較表に無いことが書かれていないかを見ます
3番を省かないでください。 人物の名前の誤りは、広告主への報告を通じて社外に出ます。 名前の根拠が画面の文字に無いときは、名前を消して立場だけにします。
目標は、80本をならして1本9分です。 15秒の広告なら、時刻の場面を数か所見るだけで数分です。確かめる場面が多い長めの動画で時間を使います。
担当者が値を直したら、直した軸と直す前の値を記録します。 同じ軸で直しが続くなら、選択肢の言葉があいまいか、選択肢どうしが重なっています。例えば「限定・期間」と「価格・値引き」が同じ動画で取り違えられるなら、どちらを優先するかの決まりを軸のシートに書き、指示にも足します。 直しの記録は、担当者ごとの観点の違いをそろえる材料にもなります。
例外に対処する
| 起きること | 対応 |
|---|---|
| 動画が限定公開・非公開 | 要約の対象にしない。候補の一覧に「対象外」と残す |
| 拾った後に動画が非公開・削除になった | 要約の前なら失敗するので「取得不可」と書く。要約の後なら、自社が書いた値は比較表に残し「現在非公開」と印を付ける |
| チャンネルのハンドルが変わった | channels.list で見つからなければ、競合の一覧に「要確認」を付ける |
| 時刻が尺を超える答え | 「時刻が合わない」として担当者に回す |
| 選択肢にない値が返る | スキーマで弾かれる。再試行を1回、再び外れれば担当者に回す |
| 無料の枠の1日の上限に当たる | 翌日に回す。業務で使うときは有料の枠を前提にする |
| 外国語の広告 | 画面の文字と台詞を日本語で要約させ、原文の文字は on_screen_text に原文のまま残す |
1行目と2行目は、YouTube の側の事情で毎月起きます。 広告は配信の期間が終わると非公開にされることがあり、要約した後に見られなくなった動画の値は、比較表に残すかどうかを決めておきます。 この構成では、要約の値(自社が書いた記録)は残し、動画の情報(題名・再生回数など)は次の項のとおり扱います。
記録を残す
- 候補の一覧(動画のID、拾った日、担当者の選別)
- AIに渡した指示と、返ってきたJSON
- 担当者が直した値と、直す前の値
- 確定した比較表と、報告の下書き・確定版
otherの説明の一覧(軸の見直しの材料)
YouTube Data API から取った値の保存には、決まりがあります。 デベロッパーポリシーでは、API から取ったデータの多くについて、保存は30日を超えないこととされ、30日を過ぎたら削除するか取り直すことが求められています。題名や公開日時など、API から取った値は月ごとに取り直し、取り直せないものは消します。 比較表には、動画のIDと、自社が書いた要約の値を残します。
再生回数は、比較表に入れません。 再生回数は広告の配信の量で大きく変わり、中身の比較とは別の話だからです。
04実装レベルの3段階
最小構成では、①の見る時間が大きく減ります。 ただし、新しい動画を探すことと表への転記は手作業のままです。 半自動化で、1本30分が15分程度になります。 比較表には値が並びますが、動画を探す作業と尺の確認、報告の文章は手作業で残ります。本格構成で9分になり、この段階が本記事の想定です。 差が大きいのは、(c)の見落としが無くなり、報告の下書きが比較表から作られるからです。 段階を飛ばさないでください。 半自動化の1か月で other が多い軸と、時刻のずれやすい動画の種類が分かります。軸を直してから拾い上げを自動にするほうが、比較表の手直しが減ります。
05工数削減シミュレーション
導入後 80件 × 9分 ÷ 60 = 12 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 動画広告を扱う広告代理店・制作会社で、広告主ごとに競合の動画広告を毎月見て、訴求や構成の傾向を報告書にまとめている場合。通販・小売・不動産など、競合が自社のYouTubeチャンネルに広告の動画を公開している業種の広告主を多く担当している場合。見る人によって要約の観点がばらつき、報告の質が担当者で変わっている場合。
- 競合の動画広告がチャンネルに公開されず、配信面でしか見られない場合(限定公開や非公開の動画は扱えません)。見る競合の動画が月に数本で、担当者が見て足りる場合。広告の効果(再生回数あたりの成果など)の比較が目的の場合(公開の情報からは分かりません)。なお、どの訴求を自社の広告に採り入れるかの判断と、競合の表現が法令に触れるかの判断は、この構成では代替できません。
07最小構成で試す方法
- 先月の報告で扱った競合の動画から10本を選ぶ(15秒の短い広告と、数分の商品紹介を両方入れる)
- 手元の Gemini アプリに動画の URL を貼る
- 「この動画広告の訴求を次の選択肢から主1つ・副2つまで選び、根拠の場面の時刻を付けてください。冒頭の5秒、展開、締めの呼びかけ、出演者の立場も時刻付きで答えてください。出演者の名前は推測しないでください」と指示する
- 当時の担当者の要約と比べ、時刻の場面を開いて確かめる
時刻の場面を必ず開いてください。 確かめたいのは、AIの値が合っているかと、時刻が場面を正しく指しているかです。同じ10本を、別の担当者にも同じ軸で要約してもらうと、AIと人、人と人のずれが並べて見えます。 人どうしのずれが大きい軸は、AIより先に軸の言葉を直す必要があります。
| 出てきた内容 | 判断 |
|---|---|
| 当時の要約と同じ訴求が出て、時刻も場面と合う | YouTube Data API とのつなぎに進む |
| 選択肢に無理に当てはめる | other を許す指示で直る。構成は有効 |
| 短い広告で場面の切り替わりを落とす | コマの割合の問題。 短い広告の扱いを先に考える |
3行目は、既定で1秒に1コマという見方から来ます。 YouTube の URL で processing の設定(コマの割合など)が使えるかは公式の例に無いため、まず試し、足りなければ短い広告は担当者が見る運用に残します。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 要約が自由文で比べられない | 軸を選択肢にし、enum で受ける |
| 選択肢に無理に当てはめる | other と説明を許し、other の多い軸を見直す |
| 尺をAIが答える | 尺は contentDetails.duration から取り、指示でも禁じる |
| 時刻が場面と合わない | 尺を超える時刻を検査し、場面を開いて確かめる |
| 出演者の名前を顔から推測する | 立場で答えさせ、名前は画面の文字に出たときだけ |
| 限定公開の動画を渡そうとする | privacyStatus が public のものだけを対象にする |
| 広告でない動画まで要約する | 担当者が候補の一覧で選ぶ |
| 短い広告の場面の切り替わりを落とす | 既定は1秒に1コマ。足りなければ短い広告は人が見る |
| APIの値を長く保存する | 30日を超えない。月ごとに取り直すか消す |
| 動画をダウンロードして処理したくなる | デベロッパーポリシーが求める承認なしには行わない。URLで渡す |
上の2行が、この構成の価値を決めます。 比較表が比べられる形になるかどうかは、AIの賢さではなく軸の作り方で決まります。
下の2行は、YouTube の決まりに関わります。 便利だからと動画を落として処理する形に変えないでください。動画を落とせば他社の生成AIでも同じことができそうに見えますが、それはこの構成の前提を外れます。 代替候補の生成AIを使うときも、扱えるのは決まりの範囲で手に入る文字の情報(題名・概要など)までだと考えてください。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 競合が公開している動画の URL と、YouTube Data API から取った動画の情報、自社が書いた要約の値と報告です。個人の情報は、動画に映る出演者を除いて扱いません。
- 出演者を特定しない … 顔から人物の名前を推測させません。名前は画面の文字に出たときだけ、時刻とあわせて記録します
- 公開の動画だけを扱う … Gemini API に渡せるのは公開の動画だけです。限定公開の URL を何らかの経路で入手しても、使いません
- 動画を保存しない … YouTube のデベロッパーポリシーは、事前の書面の承認なしに映像・音声のコンテンツをダウンロード・保存しないことを求めています
- API の値の保存期間を守る … API から取ったデータの多くは、保存が30日を超えないこととされています。比較表に残すのは、自社が書いた要約の値と動画のIDにします
- 有料の利用枠で使う … Gemini API の規約では、無料の枠(Unpaid Services)に送った内容は製品の改善に使われることがあるとされています。広告主の名前や企画に触れる報告の下書きを作るので、有料の枠(Paid Services)を前提にします
- 競合の表現を流用しない … 比較表は傾向を見るためのものです。競合の台詞やコピーを、そのまま自社の企画に使わないでください
- 報告に評価と法令の判断を入れない … 競合の広告の出来や、表現が法令に触れるかは、この構成が出すものではありません
誤りが起きた場合のリスクは、誤った値や人物の名前が、広告主への報告を通じて社外に出ることです。時刻の根拠、担当者の確認、名前を推測させない指示の3つで、そこを守ります。
10まず何から始めるか
1週目:軸の選択肢を決める
担当の広告主の業種ごとに、訴求、展開の型、CTA、出演者の立場の選択肢を6〜8個ずつ決めます。過去の報告で使ってきた言葉を持ち寄って、同じ意味のものをまとめます。
2週目:10本で試す
先月の動画から10本を選び、手元の生成AIに URL を貼って、決めた軸で要約させます。時刻の場面を開いて、値と時刻が合っているかを最優先で見ます。
3週目:競合の一覧を作る
広告主ごとの競合のチャンネルのハンドルを、シートにまとめます。広告主の動画も同じ軸で要約し、比較表の左端に置きます。
4週目:Python で拾い上げと要約をつなぐ
YouTube Data API で新しい動画を拾い、候補の一覧に足し、「要約する」が付いたものを Gemini API に渡して比較表に書くところまで作ります。この時点では報告の下書きを作らず、比較表の値を確かめます。
2か月目: 報告の下書きを足し、other の説明を毎週見て軸を直します。3か月目以降: 1本30分が何分になったかを実測します。3か月分の比較表から、競合ごとの訴求の傾向を広告主に説明できるようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
YouTube の URL を {"type": "video", "uri": ...} で渡せること。プレビューで、公開の動画だけを扱えること。無料の枠は1日8時間分まで、有料の枠は長さの上限がないこと。Gemini 2.5 以降は1回に10本まで。既定で1秒に1コマで、速い動きを見落とすことがあること。MM:SS で時刻を指せること。既定の解像度で1秒あたりおよそ100トークン(高い解像度でおよそ300)であること。料金と上限が変わりうること | Google AI for Developers: Video understanding | 2026-10-14 |
構造化出力を /v1beta/interactions の response_format で指定し、enum が使えること。値はアプリケーションで確かめるよう案内されていること | Google AI for Developers: Structured outputs | 2026-10-14 |
| 無料の枠に送った内容が製品の改善に使われうること。有料の枠ではプロンプトと回答を製品の改善に使わないこと | Gemini API Additional Terms of Service | 2026-10-14 |
channels.list が id または forHandle で引け、割り当てが1ユニットであること。contentDetails にアップロード動画の情報があること | YouTube Data API: Channels: list | 2026-10-14 |
playlistItems.list の割り当てが1ユニットで、maxResults が0〜50であること | YouTube Data API: PlaylistItems: list | 2026-10-14 |
contentDetails.duration が ISO 8601 の形であること。snippet.publishedAt が公開の日時で、アップロードの日時と違うことがあること。status.privacyStatus が private・public・unlisted であること | YouTube Data API: Videos | 2026-10-14 |
| 事前の書面の承認なしに YouTube の映像・音声のコンテンツをダウンロード・保存しないこと。API から取ったデータの多くは保存が30日を超えず、過ぎたら削除するか取り直すこと | YouTube API Services: Developer Policies | 2026-10-14 |
競合の表現が法令に触れるかは、広告主と専門家が判断してください。 本記事は各製品の公式ページで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1493)についてのご相談はこちらから。
