広告主向けの月次レポートを媒体の管理画面の数値と照らして校正し、転記の誤り・合計と率の計算違い・前月比の向きの取り違えを送付前に拾う
広告主に送る前の月次レポートを、媒体の管理画面から書き出した数値と照らし、転記の誤り、合計と率の計算違い、コメントの前月比の向きの取り違えを拾って、直す箇所の一覧にします。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Google Apps Script/Python
- 対象業界
- EC/IT・SaaS/小売/広告
- 対象部門
- マーケティング/営業
- 対象業務
- 内容確認・チェック/比較検討
- 主な課題
- 人手が足りない/属人化している/確認ミスが多い
- AIで行う処理
- 校正
- 主な効果
- 入力漏れ削減/品質標準化/工数削減
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 運用担当が各媒体の管理画面から前月の数値を書き出し、広告主のフォルダに置く
- ひな形をコピーし、媒体別の表に数値を貼り付ける
- サマリーの表の合計と率(CTR、CPC、CVR、CPA など)が計算式で出ることを確かめる
- 前月のレポートから前月の値を写し、前月比を出す
- 振り返りと来月の方針のコメントを書く
- 別の運用担当がダブルチェックする。管理画面の数値と見比べ、合計と率を電卓で検算し、コメントを読む
- 指摘を直し、営業が広告主に送る
- 人運用担当が媒体の数値を書き出してフォルダに置き、レポートを作る(これまでと同じ)
- 人チェック用のスプレッドシートを開き、レポートのURLを貼って、メニューの「チェックを実行」を押す
- 自動スクリプトがレポートと、フォルダの媒体のファイルを読む
- 自動媒体別の表の数値を、書き出したファイルの合計と照らす
- 自動サマリーの表の合計と率を、決まった式で計算し直して照らす
- 自動前月のレポートの値から前月比を計算し直す
- 自動コメントの文をAIに渡し、指標・向き・数値の主張を抜き出させる
- 自動抜き出した主張を、計算した前月比と指標の向きの規則で照らす
- 自動直す箇所の一覧を、チェック用のシートに書き出す
- 人運用担当が一覧を見てレポートを直し、もう一度チェックを実行する
- 人一覧が空になったら、別の担当がコメントの中身だけを読み、営業が送る
各工程の詳しい説明を読む
- 運用担当が各媒体の管理画面から前月の数値を書き出し、広告主のフォルダに置く
- ひな形をコピーし、媒体別の表に数値を貼り付ける
- サマリーの表の合計と率(CTR、CPC、CVR、CPA など)が計算式で出ることを確かめる
- 前月のレポートから前月の値を写し、前月比を出す
- 振り返りと来月の方針のコメントを書く
- 別の運用担当がダブルチェックする。管理画面の数値と見比べ、合計と率を電卓で検算し、コメントを読む
- 指摘を直し、営業が広告主に送る
(a)貼り付けの範囲がずれる。 管理画面の書き出しの列の並びは、媒体ごと、ときには同じ媒体でも設定によって違います。1列ずれて貼ると、クリック数の列に表示回数が入り、サマリーの表のCTRが不自然な値になります。不自然な値なら気づけますが、ありうる値になったときは見落とされます。
(b)計算式が壊れている。 ひな形のセルに数値を直接打ち込んで計算式を上書きしたり、行を足したときに合計の範囲が広がっていなかったりします。表の見た目は正しいので、検算しないと分かりません。
(c)コメントの向きを取り違える。 CPAやCPCのように下がると良い指標と、コンバージョン数のように上がると良い指標が混ざります。「CPAは前月比18%上昇と改善」のような文が、ダブルチェックをすり抜けて送られます。 数値の確認に時間を取られ、文の確認が後回しになるためです。
(d)ダブルチェックが人によって違う。 経験のある担当は合計と率をすべて検算し、急ぎの月は目で見て終わる担当もいます。送付の後に広告主から「数字が合わない」と言われる案件は、たいていダブルチェックを急いだ月のものです。
- 【人】 運用担当が媒体の数値を書き出してフォルダに置き、レポートを作る(これまでと同じ)
- 【人】 チェック用のスプレッドシートを開き、レポートのURLを貼って、メニューの「チェックを実行」を押す
- 【自動】 スクリプトがレポートと、フォルダの媒体のファイルを読む
- 【自動】 媒体別の表の数値を、書き出したファイルの合計と照らす
- 【自動】 サマリーの表の合計と率を、決まった式で計算し直して照らす
- 【自動】 前月のレポートの値から前月比を計算し直す
- 【自動】 コメントの文をAIに渡し、指標・向き・数値の主張を抜き出させる
- 【自動】 抜き出した主張を、計算した前月比と指標の向きの規則で照らす
- 【自動】 直す箇所の一覧を、チェック用のシートに書き出す
- 【人】 運用担当が一覧を見てレポートを直し、もう一度チェックを実行する
- 【人】 一覧が空になったら、別の担当がコメントの中身だけを読み、営業が送る
8番目が、この設計の分かれ目です。 AIは「CPAは前月比18%上昇と改善」という文から、指標=CPA、向き=上昇、数値=18%、評価=改善を抜き出すだけです。CPAの上昇が改善かどうかは、スクリプトの指標の向きの表が決めます。
11番目で人のダブルチェックを残しているのは、文の中身のためです。 数値と向きの確認はスクリプトに任せ、人は「この説明で広告主に伝わるか」だけを読みます。 ダブルチェックの時間は短くなりますが、無くしはしません。
02今回想定するシステム構成
チェック用のスプレッドシート(メニュー「チェックを実行」) │ ▼【トリガー】運用担当がメニューから実行 Google Apps Script(チェック用のシートに紐づくスクリプト) ├──▶ SpreadsheetApp.openByUrl でレポートを開く(読むだけ) ├──▶ ドライブの広告主のフォルダから媒体のファイルを読む │ CSV は Utilities.parseCsv で2次元の配列に ├──▶ 転記の照合、合計と率の検算、前月比の計算(決まった式) ├──▶ UrlFetchApp で Claude API を呼ぶ │ コメントの文 → 指標・向き・数値・評価の主張(JSON) ├──▶ 主張を、計算した前月比と指標の向きの表で照らす └──▶ チェック用のシートに直す箇所の一覧を書き出す ▼【人】一覧を見てレポートを直し、もう一度実行
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Google Apps Script | Python |
| 生成AI | Claude API(構造化出力でコメントの主張を抜き出す) | Gemini API、OpenAI API |
| 保管 | Google ドライブ(媒体のファイル、レポート) | - |
新しく足すのは、チェック用のスプレッドシートとそのスクリプトだけです。 レポートのひな形と、媒体のファイルを置くフォルダはいまのものを使います。レポートには書き込みません。
スクリプトは、チェック用のスプレッドシートに紐づけて作ります。 メニューを足せるのは、ファイルに紐づいたスクリプトだけとされています。onOpen の中で SpreadsheetApp.getUi() からメニューを作り、addItem() で「チェックを実行」を関数に結び付けます。ボタン1つで動く形にしておくと、運用担当が実行を忘れません。
AIの呼び出しは UrlFetchApp で行います。 method に post、headers にAPIキー、payload に本文を入れて送ります。muteHttpExceptions を true にすると、失敗の応答でも例外を投げずに応答が返るので、失敗をチェック結果に書き出せます。
Claude API には、構造化出力でJSONの形を指定します。 output_config.format に type: "json_schema" とスキーマを渡すと、スキーマに合ったJSONを返すとされています。以前の output_format は非推奨になっています。
03どうやって実装するのか
処理の起点を決める
運用担当がチェック用のスプレッドシートのメニューから実行します。 レポートのURLを決まったセルに貼り、「チェックを実行」を押します。時間で動く定時の実行にはしません。 レポートは作っている途中の状態があり、完成した時点を知っているのは運用担当だけだからです。
直した後に、何度でも実行し直せる形にします。 1回目の一覧を見て直し、2回目で一覧が空になることを確かめてから、ダブルチェックに回します。ダブルチェックの担当は、一覧が空になっているかを最初に見ます。
1回の実行は6分までです。 Apps Script の実行時間の上限が1回6分とされているので、1回に1つのレポートだけを見ます。 120件をまとめて流す作りにはしません。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 今月のレポート | サマリーの表、媒体別の表、キャンペーン別の表、コメント | 運用担当が貼ったURL |
| 前月のレポート | 前月の同じ表の値 | 広告主のフォルダの前月のファイル |
| 媒体の書き出し | 媒体ごとの前月の表示回数、クリック数、費用、コンバージョン数 | 広告主のフォルダ(CSV または Google スプレッドシート) |
| 列の対応表 | 媒体ごとに、書き出しのどの列がどの指標か | チェック用のスプレッドシートの別のシート |
| 指標の向きの表 | 指標ごとに、上がると改善か下がると改善か | チェック用のスプレッドシートの別のシート |
| 率の計算式 | CTR、CPC、CVR、CPA などの式と、端数の扱い | 同上 |
質を決めるのは、列の対応表と指標の向きの表です。 列の対応表が無いと、媒体の書き出しの「Clicks」「クリック」「クリック数」を同じ指標として扱えません。指標の向きの表が無いと、コメントの「改善」が正しいかを決める根拠がありません。
指標の向きの表は、広告主ごとに上書きできるようにします。 たとえば表示回数は、認知を目的にする広告主では増えれば改善ですが、獲得を目的にする広告主では向きを持たない指標として扱うこともあります。
データの取得方法を決める
| 取るもの | どこから | 方法 |
|---|---|---|
| レポートの表の値 | 貼られたURL | SpreadsheetApp.openByUrl で開き、決まった範囲の値を読む |
| 媒体の CSV | 広告主のフォルダ | ファイルの中身を文字列で読み、Utilities.parseCsv で2次元の配列にする |
| 媒体のスプレッドシート | 広告主のフォルダ | SpreadsheetApp.openById で開いて読む |
| 前月のレポート | 広告主のフォルダ | ファイル名の規則(広告主名+年月)で探して開く |
Utilities.parseCsv は、CSV の文字列を表の形の2次元の配列にして返します。 区切りの文字を指定する形もあるので、TSV で書き出す媒体にも同じ関数で対応できます。
レポートの表の位置は、ひな形の名前付き範囲で決めておきます。 セルの番地で読むと、運用担当が行を足しただけで読む場所がずれます。ひな形に「媒体別_表」「サマリー_表」「コメント」のような名前を付けた範囲を作り、スクリプトはその名前で読みます。
前月のレポートが見つからないときは、前月比の検算を飛ばして、その旨を一覧に書きます。 新しい広告主の初月はこれに当たります。
AIへ渡す前に整形する
- 媒体の書き出しの見出しをそろえる … 列の対応表で、媒体ごとの列名を共通の指標名に置き換えます
- 合計の行を外す … 書き出しの最後にある合計の行を、明細として二重に足さないようにします
- 数値の形をそろえる … 3桁区切りのカンマ、通貨の記号、「%」を外して数値にします
- 期間を確かめる … 書き出しの期間が前月の1日から末日になっているかを、ファイルの中の期間の記載で確かめます
- コメントを文に分ける … コメントの欄を文ごとに分け、文に番号を振ってAIに渡します
- 計算式が入っているかを確かめる … サマリーの表の合計と率のセルに、値ではなく計算式が入っているかを見ます
4番目を省くと、照合がすべて正しく「合っていない」になります。 書き出しの期間を当月の途中までにしていた、前々月を選んでいた、という誤りは月に数件起きます。期間が違うときは、照合をせずに「期間の誤り」とだけ書きます。 数十行の不一致を並べるより、原因を1行で示すほうが早く直ります。
6番目は、第3章の(b)を拾うためです。 計算式が値で上書きされていても、その月の値が正しければ照合では見つかりません。計算式が消えていること自体を一覧に出します。
AIに処理させる
させるのは、コメントの文から、数値や増減についての主張を抜き出すことだけです。 照合はスクリプトが行います。
| 抜き出すもの | 例 | 抜き出せないとき |
|---|---|---|
| 指標 | CPA、クリック数、コンバージョン数、費用 | 指標が書かれていなければ metric を空 |
| 比べる期間 | 前月比、前年同月比 | 書かれていなければ unspecified |
| 向き | 上昇・増加/低下・減少/横ばい | 向きの語が無ければ none |
| 数値 | 18%、1,200件 | 書かれていなければ空 |
| 評価の語 | 改善/悪化/好調/課題 | 評価の語が無ければ none |
| 媒体・キャンペーン | 「Google 広告の検索キャンペーン」 | 書かれていなければ all |
指標の名前は、決めた一覧の中から選ばせます。 「獲得単価」「CPA」「コンバージョン単価」は同じ指標です。一覧の名前に寄せさせ、一覧に無い指標は other にします。
照合は、スクリプトの側で3つ行います。
| 照合 | 規則 | 結果 |
|---|---|---|
| 向き | 主張の向きと、計算した前月比の符号が合うか | 合わなければ ng_direction |
| 数値 | 主張の数値と、計算した前月比の差が許容の幅を超えるか | 超えれば ng_value |
| 評価 | 主張の向きと評価の語の組み合わせが、指標の向きの表と合うか | 合わなければ ng_evaluation |
3つ目が、第3章の(c)を拾う照合です。 「CPA・上昇・改善」は、CPAが下がると改善という表に照らして ng_evaluation になります。AIは向きの表を知らなくても、抜き出しさえ正しければ照合は決まります。
| させないこと | 理由 |
|---|---|
| 主張が正しいかの判定 | スクリプトが計算した値と規則で決める |
| 数値の計算 | 前月比も率も、決まった式でスクリプトが出す |
| 文の書き直し | 説明の内容は運用担当が決める |
| 数値の動きの理由の評価 | 分析の中身は人が読む |
指示内容を固定する
あなたは広告運用のレポートの校正担当です。
コメントの文から、数値や増減についての主張を抜き出してください。
主張が正しいかどうかは判断しないでください。抜き出すだけです。
【指標の一覧】この中の名前で書く。無ければ other
impressions(表示回数), clicks(クリック数), ctr(クリック率),
cost(費用), cpc(クリック単価), conversions(コンバージョン数),
cvr(コンバージョン率), cpa(獲得単価・コンバージョン単価), roas
【抜き出し方】
- 1つの文に複数の主張があれば、主張ごとに1件にする
- direction は up / down / flat / none のどれか
「上昇」「増加」「伸びた」は up、「低下」「減少」「抑えた」は down
- evaluation は positive / negative / none のどれか
「改善」「好調」「効率化」は positive、「悪化」「課題」「伸び悩み」は negative
- 数値は書かれているとおりに value に写し、単位を unit に書く
- 比べる期間は mom(前月比)/ yoy(前年同月比)/ unspecified
- 媒体やキャンペーンの名前が書かれていれば scope に写す
【厳守事項】
- 書かれていない数値を補わないでください。
- 向きの語が無い文から向きを推測しないでください。direction は none です。
- 「改善」と書かれていても、指標が上がったか下がったかは、
文に書かれている向きの語だけで決めてください。
- 主張が正しいか、表現が適切かの意見を書かないでください。
- 数値や増減の主張の無い文は出力に含めないでください。
【コメント】
{sentences}
(各行は「文番号|文」です)
「評価の語から向きを推測しない」が、この指示の要です。 書かなければ、「CPAが改善」という向きの語の無い文に、AIが気を利かせて down を入れます。 正しい推測でも、それでは「向きの語が書かれていない」という事実が消え、照合の意味がなくなります。
「正しいかを判断しない」を2か所に書くのは、AIが校正の担当として自分で直そうとするためです。 誤りに気づくと、抜き出しの段で数値を正しい値に直して返すことがあります。直された値では、誤りが一覧に出ません。
出力形式を固定する
Claude API の構造化出力で、次の形のJSONを受け取ります。
{
"claims": [
{
"sentence_no": 3,
"metric": "cpa",
"period": "mom",
"direction": "up",
"value": "18",
"unit": "%",
"evaluation": "positive",
"scope": "all",
"quote": "CPAは前月比18%上昇と改善しました"
}
]
}
スキーマでは metric・direction・evaluation・period を enum で値の候補に絞り、オブジェクトに additionalProperties: false を付けます。構造化出力では enum と additionalProperties: false が使え、数値の範囲や文字列の長さの制約は使えないとされているので、value は文字列で受け取り、数値への変換はスクリプトで行います。
1つ目の理由は、照合をスクリプトの比較だけで書けることです。 metric と direction が決まった語で返るので、計算した前月比の符号との比較は1行の条件で済みます。 自由文で返されると、照合の前に文を読み解く段が要ります。
2つ目は、quote で直す場所がすぐ分かることです。 一覧に原文が出るので、運用担当はコメントのどの文を直せばよいかを探さずに済みます。
チェック用のシートに書き出す一覧は、次の列にします。
| 列 | 中身 |
|---|---|
| 種類 | 転記/合計/率/計算式/前月比/コメント |
| 場所 | 表の名前と行・列、またはコメントの文番号 |
| レポートの値 | レポートに書かれている値、またはコメントの原文 |
| 照らした値 | 媒体の書き出しの値、計算し直した値 |
| 判定 | ng_value/ng_direction/ng_evaluation/missing_formula/warn |
| メモ | 「期間の誤り」「前月のレポートが無い」など |
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| チェック用のスプレッドシート | 紐づいたスクリプトのメニュー | 実行と、一覧の書き出し |
| 今月・前月のレポート | SpreadsheetApp.openByUrl / openById | 表とコメントを読む(書き込まない) |
| 広告主のフォルダ | ドライブのファイルの読み取り | 媒体の書き出しを読む |
| Claude API | UrlFetchApp.fetch(post) | コメントの主張の抜き出し |
呼び出しの部分は、次のような形になります。 モデル名とスキーマは、利用する時点の公式ページに合わせてください。
function extractClaims(sentences, schema) {
const key = PropertiesService.getScriptProperties().getProperty('CLAUDE_API_KEY');
const body = {
model: MODEL_NAME, // 利用するモデル名(設定のシートから読む)
max_tokens: 2000,
messages: [{ role: 'user', content: PROMPT + sentences }],
output_config: { format: { type: 'json_schema', schema: schema } }
};
const res = UrlFetchApp.fetch('https://api.anthropic.com/v1/messages', {
method: 'post',
contentType: 'application/json',
headers: { 'x-api-key': key, 'anthropic-version': '2023-06-01' },
payload: JSON.stringify(body),
muteHttpExceptions: true
});
if (res.getResponseCode() !== 200) return null; // 一覧に「未実施」と書く
const msg = JSON.parse(res.getContentText());
const block = msg.content.find(b => b.type === 'text'); // テキストのブロックを探す
return block ? JSON.parse(block.text) : null;
}
JSONは応答のテキストのブロックに入るとされています。先頭のブロックと決め打ちせず、種類がテキストのブロックを探して読みます。
応答の stop_reason が途中で切れたことを示すときは、スキーマに合わないことがあるとされているので、null と同じ扱いにして「未実施」と書きます。
APIキーはスクリプトのプロパティに置きます。 Properties サービスのスクリプトのプロパティは、スクリプトの利用者全員で共有される設定の置き場とされています。コードの中に直接書かないでください。 チェック用のスプレッドシートをコピーしたときにキーが一緒に広がります。
Apps Script の外部への呼び出しには、1日の回数の上限があります。 URL Fetch の呼び出しは、一般のアカウントで1日20,000回、Workspace のアカウントで1日100,000回とされています。1つのレポートで呼ぶのは1回なので、月120件では上限に届きません。
人が確認する
この構成の出力は、直す箇所の一覧です。 直すのも、直さないと決めるのも運用担当です。
missing_formulaと「期間の誤り」を先に直す … これが残っていると、他の照合の結果が信用できませんng_valueを直す … 転記と計算の誤り。レポートの値を直しますng_directionとng_evaluationを読む … コメントの文を直します。数値の側が正しいかも、もう一度見ますwarnを確かめる … 端数の扱いで許容の幅に近いもの、AIが指標をotherにしたもの- もう一度実行し、一覧が空になったことを確かめる
- 別の担当がコメントの中身を読む … 数値と向きは見ずに、説明が伝わるかだけを読みます
3番目で数値の側も見るのは、コメントが正しく数値が誤っていることもあるからです。 「CPAは低下」と書いたのに ng_direction が出たとき、転記の誤りで前月比の符号が逆になっていることがあります。
目標は、120件をならして1件12分です。 一覧が数件で済むレポートは5分程度、媒体の書き出しを取り直すレポートは20分を超えます。
例外に対処する
| 起きること | 対応 |
|---|---|
| 媒体のファイルがフォルダに無い | その媒体の照合を飛ばし、一覧に「書き出しが無い」と書く |
| 書き出しの列が対応表に無い | 一覧に列名を出し、対応表に足すまでその媒体は照合しない |
| 書き出しの期間が前月と違う | 照合をせず「期間の誤り」と1行だけ書く |
| 前月のレポートが無い(初月など) | 前月比とコメントの照合を飛ばし、その旨を書く |
| 名前付き範囲が見つからない | ひな形が古い。ひな形の版を一覧に書き、作り直しを勧める |
| Claude API が失敗の応答を返す | muteHttpExceptions で応答を受け、コメントの照合だけ「未実施」と書く |
| 1回の実行が6分を超えそう | 媒体が多い広告主は、媒体ごとに分けて実行する |
| コメントに数値の主張が無い | 一覧には何も出ない。主張が無いこと自体は誤りではない |
上から3行は、書き出しの手順の問題です。 手順書を直すほうが、照合の精度を上げるより効きます。
記録を残す
- 実行の日時、実行した運用担当、レポートのURL
- 照合に使った媒体のファイルの名前と更新日時
- 一覧の全件(初回と、直した後の各回)
- AIが返した
claimsの全件 - 送付した時点の一覧が空だったか
最後の項目は、送付の後に「数字が合わない」と言われたときに使います。 一覧が空のまま送ったのなら照合の漏れ、一覧が残ったまま送ったのなら手順の漏れで、直す場所が違います。
04実装レベルの3段階
半自動化だけでも、1件40分が20分程度になります。 ①と②の25分の大半が計算に置き換わります。この段階ではAIを使いません。 数値の照合は、AIが無くても決まった式で完結するからです。 本格構成で12分になり、この段階が本記事の想定です。 コメントの向きの確認が加わり、ダブルチェックの担当は文の中身だけを読めばよくなります。 半自動化から始めてください。 列の対応表と名前付き範囲が整うまでの1か月は、数値の照合だけで一覧が十分に出ます。整ってからAIを足すほうが、一覧に出たものがAIの誤りか書き出しの誤りかを分けやすくなります。
05工数削減シミュレーション
導入後 120件 × 12分 ÷ 60 = 24 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 運用型広告の代理店やインハウスの運用チームで、広告主ごとの月次レポートを Google スプレッドシートのひな形で作り、月に百件前後を送っている場合。媒体の管理画面から書き出した数値をレポートに転記し、合計・率・前月比の検算と、コメントの文の確認を運用担当どうしのダブルチェックで行っている場合。Google Workspace を使っていて、生成AIのAPIを契約できる場合。
- レポートをBIツールで媒体のデータから直接作っており、転記の工程が無い場合。広告主が数社で、運用担当が見直せば足りる場合。レポートの形が広告主ごとにまったく違い、ひな形が無い場合。なお、数値の動きの理由の分析と、広告主への説明の内容は、この構成では代替できません。
07最小構成で試す方法
- 先月送ったレポートから10件を選ぶ(送付後に誤りが見つかったものを2〜3件入れる)
- 各レポートのコメントの欄を、手元のAIサービスの画面に貼る
- 第7章の指示で、主張を抜き出させる
- 抜き出した主張の向きと評価を、指標の向きの表に照らして手で確かめる
- 送付後に見つかった誤りが拾えたかを見る
10件は必ずやってください。 スクリプトを書く前に、「コメントの主張がAIで正しく抜き出せるか」を確かめます。転記と検算はスクリプトの計算で、ここは試さなくても答えが決まります。
| 出てきた内容 | 判断 |
|---|---|
| 向きと評価が文のとおりに抜き出せた | スクリプトの作成に進む |
| 向きの語の無い文に向きを入れた | 指示の書き方で直る。構成は有効 |
| 数値を正しい値に直して返した | 「判断しない」を強める。構成は有効 |
| コメントの書き方がばらばらで抜き出しが揺れる | コメントの書き方の決まりが先 |
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 行を足すと読む場所がずれる | セルの番地ではなく、名前付き範囲で読む |
| 書き出しの合計の行を二重に足す | 前処理で合計の行を外す |
| 期間違いで全件が不一致になる | 期間を先に確かめ、違えば「期間の誤り」とだけ書く |
| 計算式の上書きを見逃す | 値ではなく計算式が入っているかを確かめる |
| 端数の扱いで不一致が出る | 率ごとに端数の扱いと許容の幅を決めておく |
| AIが向きを推測する | 向きの語の無い文は none と明記する |
| AIが誤りを直して返す | 「判断しない」を指示の2か所に書く |
| 指標の向きを固定にしてしまう | 広告主ごとに上書きできる表にする |
| APIキーがコードに書かれる | スクリプトのプロパティに置く |
| スクリプトがレポートを直す | 書き込まない。 一覧を出すだけにする |
上の4行は、AIとは関係の無いところです。 この構成の誤りの多くは、読む場所と読む期間がずれるところから起きます。AIの抜き出しを疑う前に、この4つを確かめてください。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 広告主ごとの広告の費用、成果の数値、運用担当が書いたコメントです。広告主にとっては、競合に知られたくない営業上の情報です。
- 外部のAIに渡すのはコメントの文だけにする … 表の数値、費用、広告主の名前は渡しません。照合はスクリプトの中で行い、AIには数値の表を見せない設計にしています
- コメントの中の広告主名に注意する … コメントに広告主の名前や商品名が書かれていることがあります。渡す前に、広告主名を置き換える処理を足すこともできます
- APIの利用条件を確かめる … 渡した文がどう扱われるかは、契約しているAPIの条件で決まります。広告主との契約で、外部のサービスで処理してよい範囲も確かめてください
- APIキーの置き場所を決める … スクリプトのプロパティに置き、チェック用のスプレッドシートの編集者を運用部の中に限ります
- レポートを書き換えない … 直すのは人です。誰が何を直したかが、スプレッドシートの変更履歴に残ります
誤りが起きた場合のリスクは、誤りを見逃して送ることと、正しいものを誤りとして直してしまうことの2つです。 前者は照合の漏れで、保存した一覧で原因を追えます。後者は ng_direction を見て数値の側を確かめずに文を直すと起きるので、人間の確認の3番目で防ぎます。
10まず何から始めるか
1週目:ひな形と対応表を整える
ひな形に「サマリー_表」「媒体別_表」「コメント」の名前付き範囲を作ります。媒体ごとに、書き出しの列名と共通の指標名の対応表を作ります。指標の向きの表もここで作り、広告主ごとの上書きの列を用意します。
2週目:10件でコメントを試す
先月のレポートから10件を選び、手元のAIサービスで主張を抜き出させます。向きの語の無い文に向きを入れていないかを最優先で見ます。
3週目:数値の照合だけのスクリプトを動かす
チェック用のスプレッドシートに、転記の照合、合計と率の検算、前月比の計算、計算式の確認を作ります。AIはまだ使いません。 来月のレポートの作成期間に、全件でこのチェックを実行してもらいます。
4週目:一覧を振り返る
出た一覧を種類ごとに数え、期間の誤りや列の対応の不足が多ければ、書き出しの手順書を先に直します。
2か月目: コメントの照合を足し、本格構成で動かします。3か月目以降: 1件40分が何分になったかを実測し、送付後の「数字が合わない」の件数を数えます。ダブルチェックの担当が数値を見ずに、コメントの中身だけを読むようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
SpreadsheetApp.getUi() と createMenu()・addItem()・addToUi() でメニューを作り、onOpen に置くこと。メニューを作れるのはファイルに紐づいたスクリプトだけであること | Google Apps Script: Custom Menus | 2026-10-08 |
Utilities.parseCsv(csv) が CSV の文字列を2次元の配列で返すこと。区切りの文字を指定する形があること | Google Apps Script: Class Utilities | 2026-10-08 |
UrlFetchApp.fetch の詳細の指定に method・headers・payload・contentType・muteHttpExceptions(true なら失敗の応答でも例外を投げない)があること | Google Apps Script: Class UrlFetchApp | 2026-10-08 |
| スクリプトの実行時間が1回6分までであること。URL Fetch の呼び出しが一般のアカウントで1日20,000回、Workspace のアカウントで1日100,000回であること | Google Apps Script: Quotas for Google Services | 2026-10-08 |
| スクリプトのプロパティがスクリプトの利用者全員で共有される設定の置き場であること。値が文字列で保存されること | Google Apps Script: Properties Service | 2026-10-08 |
構造化出力で output_config.format に type: "json_schema" とスキーマを渡すこと。output_format が非推奨になったこと。enum と additionalProperties: false が使え、数値の範囲や文字列の長さの制約が使えないこと | Claude Platform Docs: Structured outputs | 2026-10-08 |
| Google 広告の統計情報の表のレポートを、Excel 用の CSV・TSV・PDF・XLSX・XML・Google スプレッドシートの形式でダウンロードでき、日次・週次などの定期配信を設定できること | Google 広告 ヘルプ: Create, save, and schedule reports from your statistics tables | 2026-10-08 |
指標の定義と端数の扱いは、広告主との取り決めに合わせてください。 本記事は上記の公式ページで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0933)についてのご相談はこちらから。
