ブルーユニコーン
MLBドジャースの試合データ・打席ログ・AI解説を提供するファンサイト。リアルタイムデータで試合結果を追う。
何を作ったか
広告運用の現場では「この広告に使った画像・動画を見せてほしい」という確認が何度も発生します。ところが管理表に並んでいるのは広告名と数値だけで、実物のクリエイティブは広告マネージャの奥にあり、毎回手作業で探して落とす必要がありました。このツールは、Meta広告APIから画像・動画のクリエイティブを一括で取得し、広告アカウント別・広告別のフォルダに整理してGoogleドライブへ格納、さらに広告管理スプレッドシートの該当行へ保管先リンクを書き戻します。管理表の行から実物へ1クリックで辿れる状態を、毎回の手作業なしで維持するのが目的です。ココナラ経由で受注し、Windows環境で動く納品ツールとして手順書一式とあわせて納品しました。
起動してから完了するまでに何が起きるか
起動前チェック
認証・保存先フォルダ・シートの列構成をまとめて確認し、設定ミスなら数秒で中断
広告の一覧を取得
広告アカウントごとに、広告・広告セット・キャンペーン名を紐づけて取得
クリエイティブを解決
単体画像・カルーセル・動的クリエイティブをたどり、画像と動画の実体URLを特定
命名して重複を回避
アセット固有のID・ハッシュから名前を決定。Drive上に同名があれば取得をスキップ
Driveへ格納
アカウント別・広告別のフォルダを自動作成して保存。取得不可の動画は代替資料を生成
シートへ書き戻し
広告名で行を突き合わせ、指定の列にだけ保管先リンクを記入(他の列には触れない)
レポート出力
処理結果・突き合わせできなかった行・失敗したアセットを一覧で出力
実行後にどう整理されるか(ダミーデータ)
Google ドライブの格納構成
📁 広告クリエイティブ/
📁 アカウントA/
📁 20260701_夏キャンペーン_A/
🖼 img_a1b2c3d4.jpg
🖼 img_e5f6g7h8.jpg
🎬 1234567890__メイン動画.mp4
📁 20260701_夏キャンペーン_B/
🖼 img_i9j0k1l2.jpg
📄 動画の参照先まとめ.gdoc
📁 アカウントB/
📁 20260715_リタゲ_01/
🖼 img_m3n4o5p6.jpgスプレッドシートへの反映
| 広告名 | 消化金額 | CPA | クリエイティブ |
|---|---|---|---|
| 20260701_夏キャンペーン_A | ¥120,000 | ¥3,200 | 🔗 Driveで開く |
| 20260701_夏キャンペーン_B | ¥86,000 | ¥2,900 | 🔗 Driveで開く |
| 20260715_リタゲ_01 | ¥54,000 | ¥4,100 | 🔗 Driveで開く |
※ 図はすべてダミーデータです。ツールが書き込むのは右端の1列のみで、既存の列・数式には一切触れません。
なぜ作ったか・誰向けか
何を作ったか
Meta広告のクリエイティブを一括取得し、Drive整理とスプレッドシート反映まで行う運用ツール
誰向けか
複数の広告アカウント・複数の管理シートを回している広告運用チーム
種別
受注制作 / 納品済み
どのくらいの時間がかかったか
合計: 約4日(初回納品〜機能追加まで)
要件のすり合わせ・API検証
約1日
本体実装
約1日
実機テスト・レビュー修正
約1日
手順書作成・納品パッケージ化
約1日
どんなツールを使ったか
どんな順序で作ったか
最初の相談は「広告素材を一元管理したい」という広い要望でした。ヒアリングを重ねて、実際に時間を食っているのは『管理表の行から実物のクリエイティブに辿り着けないこと』だと切り分け、そこだけを解く構成に絞り込みました。範囲外にしたもの(成果数値の集計、他サービスに散っている資料の統合)も、その場で合意して書面に残しています。
実装前に、クライアント本人名義のアプリ+読み取り専用の権限で必要なデータに届くかを実APIで確認しました。ここで通ることを確かめておくと、審査申請が不要になり着手が数週間早まります。逆にここを飛ばすと、作り終えてから「権限が下りない」で全部止まります。
広告一覧から、単体画像・カルーセル・動的クリエイティブそれぞれの構造をたどってアセットを解決します。動画はアカウントの動画ライブラリ経由でまとめて引く必要があり(個別に問い合わせると権限エラーになる)、ここは実際に叩いて分かった仕様に合わせています。
再実行しても二重取得しないよう、Drive上の同名ファイルの有無で「取得済み」を判定しています。つまりファイル名の決め方がそのまま欠落の有無に直結するため、名前の決定ロジックだけを独立したモジュールに切り出し、アセット固有のID・ハッシュを必ず名前に含める方式に統一しました。
実行はバッチファイルのダブルクリック、エラーは日本語の指示文に変換。重い処理に入る前に認証・保存先・シート構造をまとめて確認し、設定ミスがあれば最初の数秒で止めます。手順書は初回セットアップ・Google認証・トークン更新・受け入れチェックなど7本に分けてPDFで納品しました。
初回納品後、管理シートが1枚ではなく案件ごとに複数枚あることが判明。取得とDrive格納は1回のまま、リンクの書き込みだけをシートの枚数分繰り返す形に拡張しました。対象シートの指定はクライアント自身が設定ファイルを編集する運用にし、シートが増減するたびにこちらへ依頼が発生しない形にしています。
問題と解決策
課題
ファイル名を「取得できた順の連番」で付けていたため、広告の構成が変わると新しい素材が『取得済み』と誤判定され、静かに欠落する経路があった
解決策
名前を「アセット自身の情報(画像のハッシュ・動画のID)だけで決まる」方式に変更。同じ題名の動画に差し替えられても別ファイルとして扱われます。名前をその時の集合に依存させないことが冪等性の条件だと分かり、この原則を設計メモに明文化して以降の変更で崩さないようにしました。
課題
アクセストークンをURLのクエリに載せていたため、通信エラー時のログにトークンが平文で残っていた。しかもそのログは「詰まったら送ってください」と案内しているファイルだった
解決策
トークンをAuthorizationヘッダー送信に変更し、加えてログ出力の直前でマスクする二重の防御にしました。別モデルによるクロスレビューで見つかった問題で、以降は出荷前のクロスレビューを工程に組み込んでいます。
課題
APIの仕様上、どうしても本体を取得できない動画が全体の約半分あった。しかも先に「動画も全部ドライブに入ります」と伝えてしまっていた
解決策
取得できない条件を切り分けて、権限を足しても解決しないことを実測で確定させたうえで、正直に訂正しました。そのうえで代替として高解像度サムネイルと、動画ごとの直接リンクを並べた案内ドキュメントを自動生成する形に変更。できないことを早く言い切って代替案を出すほうが、曖昧なまま引っ張るより結果的に信用されると実感しました。
課題
Windowsのパス長上限を超え、名前の長い広告のファイルだけが毎回失敗していた。再実行しても同じ場所で落ちるため、利用者から見ると原因不明のまま永久に取得できない
解決策
一時作業フォルダの階層を浅くして回避しました。開発環境(Linux)では絶対に踏まない不具合で、納品先の環境で実際に動かして初めて出る種類の問題です。以降、納品前の実機確認は工程から外さないことにしています。
次に活かせること
同じような制作を、AIで短納期・低コストで承ります
ここで紹介した制作物は、実際に発注できる仕事の一例です。業種や目的をヒアリングしたうえで、あなたのビジネスに合わせて一から作ります。まずは概算だけでも、気軽にどうぞ。
価格の目安
2万〜15万円
納期の目安
1〜2週間