YouTube の A/B テスト設定、API ないけど Playwright Skills で自動化した

2026/05/05 03:22 公開

2026/05/05 04:04 更新

YouTube の A/B テスト設定、API ないけど Playwright Skills で自動化した

YouTube Data APIは動画のアップロード・予約投稿・タイトル/サムネ更新まで一通りできます。ただしタイトル/サムネのA/Bテスト設定だけはWeb UI必須。スキーマにエンドポイントが存在しません。

YouTubeは最近サムネに加えてタイトルもA/B比較できるようになりました。最大3案、勝った方を自動採用までやってくれる、地味に強い機能です。 ただAPIがないせいで、毎回Studioを手で開いて画像をドラッグして…という手作業に逆戻りしていました。

そこでClaude Code Skills + Playwright CLIで自動化しました

一発で動く

code
~/.claude/skills/youtube-abtest/run.sh /tmp/input.json

入力JSONの例:

json
[
  {
    "videoId": "txXWWjOIHf4",
    "titleB": "B案として登録したいタイトル",
    "thumbBPath": "/abs/path/to/thumbnail-b.png"
  }
]

これだけでStudioの編集ページに飛んで、A/Bダイアログを開き、タイトルとサムネをB案として登録、保存まで完走します。複数動画を配列で渡せばまとめて処理できます。

試した結果

自社で運営しているYouTubeチャンネルの最新動画で実演しました。

  • A案:もともと付けていたタイトルとサムネをそのまま使用
  • B案:別案のタイトルと、gpt-imageで生成した新しいサムネ

タイトルのA/Bテストが2案分セットされた状態(保存後)

タイトルのA/Bテストが2案分セットされた状態(保存後)

サムネイルもA案・B案を上下に並べて登録できる

サムネイルもA案・B案を上下に並べて登録できる

設定後はこんな感じ

緑チェックで「タイトルとサムネイルのテストの準備ができました」が出れば成功です。

やってる中身

中で動いているのは、Playwright CLI経由でこんなフローを回しているだけです:

  1. 動画の編集ページを新タブで開く
  2. snapshotを撮ってタイトル欄下の「A/Bテスト」ボタンを探す
  3. クリック → ダイアログ表示 → 「タイトルとサムネイル」タブに切り替え
  4. タイトルBをfill
  5. サムネBのアップロードボタンをclick → upload
  6. 「テストを設定」ボタン(disabledが外れる)をclick
  7. 編集画面に戻って右上「保存」ボタンをclick

UIに出ている要素を都度snapshotから探してクリックしているだけです。複雑な状態管理はしていません。

前提:Chromeをattachする

このフロー、ログイン済みのChromeにPlaywrightをCDPでattachする仕組みが必要です。 そこは別のSkillsで用意してあるので、前回の記事に詳細を書いています:

Claude Codeでブラウザ操作するならPlaywright CLI + Skills一択だった

要は/chrome Skillsを起動しておけば、普段使いのChromeのCookieを継承した別プロファイルChromeが立ち上がってattach済みになります。あとはplaywright-cliから自由に操作できます。

つまづきポイント

実装中に気づいた、地味だけど大事な3点です。

1. アップロードファイルはDownloads配下のみ受付

playwright-cliはセキュリティ上、対象ファイルが許可ディレクトリ(~/Downloads/.playwright-cli/)の中にないと弾きます。Skills内では一旦そこにコピーしてからuploadしています。

2. refをハードコードしない

snapshotで取れる[ref=eXXX]は毎回採番が変わります。テキストマッチ(button "A/B テスト"の行をgrep)で動的に取ります。

3. 動画がscheduledだと「対象外」表示になる(が設定自体は通る)

A/Bテスト機能はチャンネル要件 + 公開済み動画が前提です。新規チャンネルやscheduled動画では、設定保存はできるけど「対象外」と表示され、要件達成・公開時刻到来後に自動的に走り始めます。Skills側ではこれをエラー扱いせずset_ineligibleステータスでログに残しています。

ステータス値(ログJSON)

status意味
set正常登録 + 要件も達成
set_ineligible登録完了だが「対象外」(公開後に自動開始)
already_setすでに設定済み、skip
error_no_ab_buttonABボタンが見つからず
error_validation入力検証失敗
error_save保存ボタンが押せず

まとめ

  • YouTube Data APIでは設定できないA/Bテストも、Playwright CLI + Skillsで攻略できた
  • 入力JSONを渡すだけで複数動画を一括処理。手作業ゼロ
  • ファクトリパターンの動画運用で「いちいちWeb UIを開く」はもう許せない、というところまで来た

APIでできない領域こそSkillsの出番です。ブラウザ自動化を一度Skillsに閉じ込めておくと、その上に積層的にサイト固有Skills(YouTube Studio / note / Vibely / Slackなど)を作れます。

PR

Lステップ × AI を同時に使いたい方へ

LINE公式のWebhook、1つしか設定できなくて困っていませんか?

LINE公式アカウントでは、Webhookの送信先URLを1つしか設定できません。そのため、Lステップを導入している企業が「DifyでAIチャットボットも動かしたい」「自社システムにもイベントを飛ばしたい」と思っても、Webhookの奪い合いになってしまいます。

結果として、片方を諦めるか、中継サーバーを自前で構築するか——どちらにしても時間とコストがかかる選択を迫られます。

L-Proxyなら、1つのWebhookを複数サービスに同時転送

LINE公式アカウントとサービスの間にL-Proxyを挟むだけで、Webhookを好きな数だけ分岐できます。

  • Lステップはそのまま、AIチャットボットを追加導入
  • 自社の顧客管理システムにもリアルタイムでイベント連携
  • 設定はURL貼り替えだけ。コード不要、最短5分で導入

今なら2週間の無料トライアル実施中。クレジットカード不要で、すべての機能をお試しいただけます。

L-Proxy について詳しく見る
記事一覧に戻る