GASでYahoo広告を集計してきた筆者がClaude+MCPに乗り換えた理由と手順

GASでYahoo広告のデータを自動取得してスプレッドシートに蓄積する仕組みは、一度作ってしまえば手が離れる便利な仕組みだと思っていました。筆者もそのひとりで、Yahoo広告のAPIからデータを引いてシートに書き込むスクリプトを4年ほど使ってきました。

乗り換えを考えたのは、特定の機能に不満が出たわけではありません。むしろ「集計は完璧に動いている。でも、分析は全部手作業のまま」という状況が続いていることに気づいたことがきっかけでした。

本記事では、GASスプレッドシート集計の良さを認めたうえで、その限界に当たったときにClaude+MCP構成に切り替えた経緯と、実際の移行手順の概要をまとめます。セットアップの詳細な手順やプロンプト集は別記事(【実機レポ】ClaudeでYahoo広告を自然言語取得!MCPサーバー「Harubase」セットアップとプロンプト集)に譲り、本記事は「なぜ乗り換えたのか、何が変わったのか」に集中します。

この記事の結論: GASは「定型データを定期的に蓄積する」用途では今でも優れた選択肢です。ただし「なぜCPAが上がったのか」「どのキャンペーンに予算を積むべきか」という分析の問いには答えられません。その部分をClaudeに任せる構成(MCP経由でYahoo広告APIに直接接続)に切り替えたことで、集計スクリプトのメンテナンスが不要になり、分析にかける時間が増えました。


GASで広告データを自動集計する仕組みとその限界

GASで何ができるか

Google Apps Script(GAS)は、Googleアカウントさえあれば無料で使える自動化スクリプト環境です。Yahoo広告APIやMeta Marketing APIのエンドポイントに対してHTTPリクエストを投げ、レスポンスを整形してスプレッドシートのセルに書き込む、という一連の処理をJavaScriptで書けます。

筆者が最初に作ったのは、Yahoo広告のキャンペーンごとの費用・クリック・CVを毎朝8時に自動取得してシートの末尾に追記するスクリプトでした。コーディングの手間は最初の1〜2時間で、あとはGASの時間ベーストリガーに任せればよいです。このシンプルさが最大の魅力でした。

GASでのYahoo広告データ取得の詳細な手順については、GASでYahoo広告データをスプレッドシートに自動取得する方法(v19対応)を参照してください。

日次トリガーとコピペで始められる手軽さ

GASが広告運用者に広まった理由は、敷居の低さだと思います。

  • 無料で使える(Googleアカウントのみ)
  • ブラウザ上で完結する(ローカル環境の構築不要)
  • トリガー設定が3クリックで終わる
  • 書いたスクリプトをそのままスプレッドシートに紐づけられる

同僚に「GASで広告データを自動取得してるんだけど、コピペで始められるよ」と言えば、翌日には動かしている人が出てくる程度のハードルの低さがあります。この点は今でも価値があると思います。


GASスプレッドシート集計でぶつかった壁

実行時間の6分制限

GASには1回の実行につき6分という上限があります。Yahoo広告1媒体だけなら問題ないことが多いですが、Meta・Yahoo・TikTokと対応媒体が増え、アカウント数も増えてくると、6分を超えてスクリプトが途中で強制終了する事態が起きはじめました。

実行時間を削る工夫についてはGASスクリプトの実行時間を短縮するgetValues/setValuesの使い方でも書きましたが、根本的には「1回の実行でAPI呼び出しを何回も行う設計」自体に限界があります。

OAuthトークン更新のメンテコスト、特にYahoo広告

Yahoo広告APIのOAuth認証は、特にメンテナンスコストが高いです。アクセストークンの有効期限が短く、リフレッシュトークンを使った更新処理をスクリプト内に組み込む必要があります。最初に動かしたときは問題なくても、トークンが失効したタイミングでサイレントに失敗し、翌朝シートが空のままになっていることに気づく、という経験を何度かしました。

以下は筆者が実際に使っていたGASスクリプトのイメージ(ダミー値)です。

// ダミー値。実際の認証情報は使用しないこと
const YAHOO_CLIENT_ID = "YOUR_CLIENT_ID";
const YAHOO_CLIENT_SECRET = "YOUR_CLIENT_SECRET";
const YAHOO_REFRESH_TOKEN = "YOUR_REFRESH_TOKEN";

function refreshAccessToken() {
  const url = "https://biz-oauth.yahoo.co.jp/oauth/v1/token";
  const payload = {
    grant_type: "refresh_token",
    client_id: YAHOO_CLIENT_ID,
    client_secret: YAHOO_CLIENT_SECRET,
    refresh_token: YAHOO_REFRESH_TOKEN,
  };
  const options = {
    method: "post",
    payload: payload,
  };
  const response = UrlFetchApp.fetch(url, options);
  const json = JSON.parse(response.getContentText());
  // 取得したアクセストークンをスクリプトプロパティに保存
  PropertiesService.getScriptProperties().setProperty(
    "YAHOO_ACCESS_TOKEN",
    json.access_token
  );
}

function fetchYahooCampaignStats() {
  // トークンが切れていれば更新
  refreshAccessToken();
  const accessToken =
    PropertiesService.getScriptProperties().getProperty("YAHOO_ACCESS_TOKEN");
  // ... 以下、APIリクエストとシート書き込み処理
}

このトークン管理の仕組みを維持するのは、コードを書いた本人以外には把握しにくいです。チームで引き継ぐ際の認知コストも高かったです。

スプレッドシートのセル上限とシート管理の煩雑化

Googleスプレッドシートは1シートあたり約500万セルが上限です。日次データを1年以上蓄積し、媒体・キャンペーン・広告グループと粒度を上げると、意外と早くこの壁に近づきます。シートを分けるか、定期的に古いデータを削除・アーカイブするかの管理が必要になります。

媒体が3つになってからは、「Yahoo_2024」「Meta_2024」「Yahoo_2025」のようにシートが増殖し、どのシートのどの列に何があるかを把握するために別途ドキュメントを書かなければならなくなっていました。

集計はできるが「分析」は別途手作業

これが一番の問題でした。

GASが完璧に動いていても、「なぜ先週CPAが上昇したのか」「どのキャンペーンを予算増やすべきか」という問いへの答えは、シートを見ながら自分で考えるしかありませんでした。集計の自動化は達成できましたが、分析の自動化は何も解決されていませんでした。

GASがまだ向いているケース

GASを完全に捨てる必要はありません。以下のようなケースではGASが最適解だと今でも思います。

  • 毎日同じ形式でシートに蓄積し続けたい(長期トレンドの保持)
  • Googleフォームや他のGoogleサービスとの連携が必要
  • チームで同じスプレッドシートを参照・編集する運用が定着している
  • スクリプトの保守を自分で完全に掌握している

「GASで問題を感じていない」なら、乗り換えを急ぐ必要はありません。


MCP+Claudeへの乗り換えで何が変わったか

アーキテクチャの根本的な違い

GASの構成は「スクリプトがAPIを叩く → データをスプレッドシートに書き込む → 人間がシートを見て分析する」という3段階です。

MCP+Claudeの構成は、この3段階が「ClaudeがMCP経由でAPIを叩く → Claudeが直接分析して回答する」という1段階に変わります。データをシートに落とす工程が消えます。

【GAS構成】
GASスクリプト → Yahoo広告API → スプレッドシート → (人間が分析)

【MCP+Claude構成】
Claude → Harubase MCP → Yahoo広告API → Claudeが分析・回答

「集計を書く」から「Claudeに聞く」への転換

GASで新しい集計が必要になるたびに、スクリプトを書き直すか、シートに新しい数式を追加する作業が発生していました。「広告グループ別のCPAを先月と今月で比較したい」という要求が出るたびに、スクリプトの改修か手作業かの二択でした。

MCP接続後は、その問いをそのままClaudeに入力するだけです。クエリを書く必要も、シートのレイアウトを考える必要もありません。

対応媒体と読み取り専用設計

現時点でHarubaseが対応している媒体は Meta / Yahoo! / TikTok の3媒体です。Googleは対応予定(審査中)であり、現時点では提供されていません。

読み取り専用の設計は筆者にとって重要な点でした。広告アカウントへの書き込み(キャンペーンの停止・予算変更等)はいっさい行いません。GETリクエストのみで、トークン情報もレスポンスから除去されます。「誤操作で広告が止まる」というリスクがない設計になっています。


乗り換え手順の概要(Harubase MCP × Yahoo広告を例に)

登録と接続設定、所要5〜10分

Harubaseへの登録と接続設定の詳細は別記事(セットアップ+プロンプト集)に委ねますが、概要は以下のとおりです。

  1. haru-base.com でアカウント登録
  2. Yahoo広告アカウントのOAuth認証(管理画面上から)
  3. Claude Desktopの設定ファイルに接続設定を追記

Claude Desktopへの接続設定(claude_desktop_config.json)はこのような形になります。

{
  "mcpServers": {
    "harubase": {
      "type": "http",
      "url": "https://connect.haru-base.com/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_PAT_HERE"
      }
    }
  }
}

YOUR_PAT_HERE の部分はHarubaseの管理画面で発行したPersonal Access Tokenに置き換えます。

接続確認の最初のプロンプト

設定後、Claude Desktopを再起動してまず投げる一文はこれです。

harubase で接続できている媒体とアカウントを教えて

Claudeが「Yahoo広告アカウント: ○○(ダミー)に接続されています」のような応答を返せば、接続は成功しています。

GASでやっていた集計をClaudeで再現する例

以下は、GASで日常的にやっていた集計をそのままClaudeに問い合わせる形にしたプロンプト例です。コピペして使えます。

週次の媒体別サマリー(GASで最もよく作っていた集計):

先週のYahoo広告のキャンペーン別の費用・クリック・CVを表にして。
前週比も出してほしい。

CPAが変動しているキャンペーンの特定:

直近7日間のYahoo広告で、CPAが14日前より20%以上悪化しているキャンペーンを挙げて。
原因として考えられることも合わせて教えて。

月末の媒体横断まとめ(GASでは媒体ごとに別シートで集計していたもの):

今月のMeta広告とYahoo広告の費用・CV・CPAを媒体別に比較した表を作って。
どちらの媒体がより効率よく獲得できているか教えて。

GASとMCP+Claudeの比較:残すべきケース・移行が合うケース

比較項目 GAS集計 MCP+Claude
初期実装コスト 低い(数時間〜) 低い(登録・設定で5〜10分)
メンテコスト 中〜高(トークン更新・スクリプト改修) 低い(スクリプト管理不要)
分析の深さ 集計のみ(分析は手作業) 自然言語で問いかけ → 分析まで完結
対応媒体 自分でAPI実装した媒体 Meta / Yahoo / TikTok(Google対応予定)
データの蓄積 長期蓄積に向く(シートに残る) その都度APIから取得(履歴はClaudeの会話)
チーム共有 スプレッドシートで全員が見やすい Claudeを使う人が個別に問い合わせる形
向いている用途 定型フォーマットの長期蓄積・共有シート 分析と示唆の取り出し・複数媒体の横断把握

筆者が実感したのは、この2つは「どちらが優れているか」という比較ではなく、「何を主目的にするか」での使い分けだということです。

毎朝同じフォーマットでシートにデータを蓄積し、チームで参照し続けることが目的であれば、GASのほうが合っています。「今週どのキャンペーンが効いていたか」「来月の予算配分をどうするか」という問いに素早く答えを出すことが目的であれば、MCP+Claudeのほうが合っています。


まとめ

GASによる広告集計を否定したいわけではありません。4年使ってきた実感として、GASは「定型データを定期的に蓄積する」という用途では依然として優れています。

筆者がMCPに乗り換えた理由は、目的が「集計の保持」から「分析の効率化」に移ったからです。スプレッドシートにデータが溜まっていても、そこから示唆を引き出す作業は手動のままでした。その部分をClaudeに任せられるようになったことで、「データを見る時間」より「データから考える時間」に使える割合が増えました。

この記事の要点:

  • GASの実行時間6分制限・OAuthメンテコスト・スプレッドシートのセル上限は、媒体数・アカウント数が増えると無視できない壁になります
  • GASとMCP+Claudeは「どちらが優れているか」ではなく、「定型蓄積か分析示唆か」で使い分けます
  • Harubase MCP は Yahoo広告・Meta広告・TikTok広告に対応し、読み取り専用設計(書き込みなし)でClaudeから直接問い合わせできます
  • Google広告は対応予定(審査中)です
  • 接続設定はClaude Desktopの設定ファイルに数行追記するだけで完了します

乗り換えの手順やプロンプト集の詳細は別記事(セットアップ+プロンプト集)にまとめています。Harubaseの接続設定からYahoo広告の具体的なプロンプト例まで網羅しているので、実際に試す際はそちらを参考にしてください。

MCP接続後の活用として、月次レポートを型化する方法についてはClaudeでMeta/Yahoo広告の月次レポートをスキル化する方法も合わせて読むと参考になります。


よくある質問(FAQ)

Q. GASとMCP+Claudeは併用できますか?

できます。「毎日シートにデータを蓄積する」部分はGASに任せたまま、「分析や示唆を引き出す」部分だけClaudeに問い合わせる形で共存させることも実用的な選択です。どちらか一方に絞る必要はありません。

Q. Yahoo広告以外の媒体にも対応していますか?

現時点でHarubaseが対応している媒体はMeta広告・Yahoo広告・TikTok広告の3媒体です。Google広告は対応予定(審査中)で、現時点では提供されていません。複数媒体を同時に問い合わせることも可能です。

Q. 無料で試せますか?

無料枠での接続確認まで試せます。詳細はharu-base.comの登録ページを確認してください。

Q. 読み取り専用とのことですが、広告が勝手に止まることはありませんか?

ありません。Harubase MCPはGETリクエストのみで動作し、広告アカウントへの書き込み(キャンペーンの停止・予算変更・入札変更等)は一切行いません。接続しても広告配信への影響はない設計になっています。


GASからMCPへの乗り換えを試したい場合の選択肢として、Harubase(haru-base.com)があります。Yahoo広告・Meta広告・TikTok広告の読み取りに対応したMCPサーバーで、無料枠で接続確認まで試せます。スクリプトのメンテナンスに疲れてきたタイミングで、比較検討の候補に入れてみてください。