地域の情報誌に載せる店舗の原稿を、Apps Script から生成AIに渡して表記のゆれと営業時間・電話の食い違いを校正する
地域の情報誌に載せる店舗の紹介の原稿を Apps Script が生成AIに渡し、表記のゆれと誤字の指摘を受け取ります。あわせて本文の営業時間・定休日・電話番号を抜き出させ、店舗の台帳と食い違っていないかをコードで照らします。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Google Apps Script/Make/Power Automate
- 対象業界
- その他/小売/広告/飲食
- 対象部門
- マーケティング
- 対象業務
- 内容確認・チェック/比較検討
- 主な課題
- 人手が足りない/属人化している/確認ミスが多い
- AIで行う処理
- 校正
- 主な効果
- 入力漏れ削減/品質標準化/工数削減
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- ライターと営業が、原稿を Google ドキュメントで書き、原稿の管理シートの状態を「校正依頼」にする
- 編集者が原稿を開き、表記の決まりを見ながら1本ずつ読んで、ゆれと誤字に提案のモードで直しを入れる
- 店舗の台帳を開き、原稿の営業時間・定休日・電話番号・住所を1つずつ照らす
- 価格の表記が税込になっているか、価格の書き方がそろっているかを見る
- 食い違いがあれば、営業に店舗への確認を頼むメモを書く
- 直しを入れた原稿を書き手に戻し、状態を「校正済み」にする
- 人書き手が原稿を Google ドキュメントで書き、原稿の管理シートの状態を「校正依頼」にする
- 自動Apps Script が15分ごとに管理シートを見て、「校正依頼」の原稿の本文を取り出す
- 自動表記の決まりのうち、置き換えの表で表せるもの(「お問合せ」→「お問い合わせ」など)をコードで探す
- 自動Gemini API に本文と表記の決まりを渡し、残りの表記のゆれ・誤字の指摘と、店舗の情報の抜き出しを受け取る
- 自動指摘ごとの「直す前の文字列」が本文に本当にあるかを確かめ、無いものを外す
- 自動抜き出した電話番号・営業時間・定休日・住所を、数字と表記をそろえてから店舗の台帳と比べる
- 自動校正の一覧を管理シートの別のタブに書き、担当の編集者に知らせる
- 人編集者が一覧を見て、採るものを原稿に提案のモードで入れ、文の流れを読む
- 人台帳と食い違った項目は、営業が店舗に確かめる
- 人編集者が状態を「校正済み」にする
各工程の詳しい説明を読む
- ライターと営業が、原稿を Google ドキュメントで書き、原稿の管理シートの状態を「校正依頼」にする
- 編集者が原稿を開き、表記の決まりを見ながら1本ずつ読んで、ゆれと誤字に提案のモードで直しを入れる
- 店舗の台帳を開き、原稿の営業時間・定休日・電話番号・住所を1つずつ照らす
- 価格の表記が税込になっているか、価格の書き方がそろっているかを見る
- 食い違いがあれば、営業に店舗への確認を頼むメモを書く
- 直しを入れた原稿を書き手に戻し、状態を「校正済み」にする
(a)直し方が編集者ごとに違う。 「お問合せ」を直す人と見逃す人、「〜」と「~」を区別する人としない人がいます。同じ号の中で、ページによって表記がそろっていません。 読者からは、雑誌全体の丁寧さとして見られます。
(b)電話番号の1桁違いを見落とす。 3番目の照らし合わせは、数字を目で追う作業です。市外局番から10桁を見比べるうち、1桁の違いが目を素通りします。 刷ってから店舗に電話が通じないと分かり、お詫びと訂正を出したことがあります。
(c)本文の中の情報が照らされない。 営業時間の欄は照らしても、本文に「火曜日はお休み」「夜は22時まで」と書かれた部分は、欄の外なので見落とされます。欄と本文で定休日が違う原稿が、そのまま載ることがあります。
(d)入稿の前に集中する。 原稿は締め切りの前の数日に集まり、240本の大半を数日で校正します。丁寧に読むほど、終わらない原稿が残ります。
- 【人】 書き手が原稿を Google ドキュメントで書き、原稿の管理シートの状態を「校正依頼」にする
- 【自動】 Apps Script が15分ごとに管理シートを見て、「校正依頼」の原稿の本文を取り出す
- 【自動】 表記の決まりのうち、置き換えの表で表せるもの(「お問合せ」→「お問い合わせ」など)をコードで探す
- 【自動】 Gemini API に本文と表記の決まりを渡し、残りの表記のゆれ・誤字の指摘と、店舗の情報の抜き出しを受け取る
- 【自動】 指摘ごとの「直す前の文字列」が本文に本当にあるかを確かめ、無いものを外す
- 【自動】 抜き出した電話番号・営業時間・定休日・住所を、数字と表記をそろえてから店舗の台帳と比べる
- 【自動】 校正の一覧を管理シートの別のタブに書き、担当の編集者に知らせる
- 【人】 編集者が一覧を見て、採るものを原稿に提案のモードで入れ、文の流れを読む
- 【人】 台帳と食い違った項目は、営業が店舗に確かめる
- 【人】 編集者が状態を「校正済み」にする
8番目で、原稿を直すのは人です。 AI の指摘は一覧に出るだけで、原稿には書き込みません。提案のモードで入れるかどうかを編集者が1件ずつ決めます。 取材した書き手が意図して使った言い回しを、決まりの名目で消さないためです。
3番目をコードで先にやるのにも理由があります。 置き換えの表で表せる決まりは、AI に頼むより正規表現のほうが取りこぼしが無く、毎回同じ結果になります。 AI に残すのは、表で表しきれないゆれと誤字だけです。
02今回想定するシステム構成
書き手(Google ドキュメントで原稿を書き、管理シートを「校正依頼」に) ▼【トリガー】時間主導型(15分ごと) Google Apps Script ├──▶ 管理シートから「校正依頼」の原稿を拾う ├──▶ DocumentApp で本文を取り出す ├──▶ 置き換えの表で決まった表記のゆれを探す(正規表現) ▼ Gemini API(Interactions、構造化出力、store=false) │ 残りの表記のゆれ・誤字の指摘/店舗の情報の抜き出し(JSON) ▼ Google Apps Script ├──▶ 指摘の「直す前の文字列」が本文にあるかを確かめる ├──▶ 抜き出した値と店舗の台帳を、数字と表記をそろえて比べる ▼ 管理シートの「校正の一覧」タブ + 担当の編集者へ通知 ▼ 【人】編集者が採るものを原稿に入れる/営業が店舗に確かめる
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Google Apps Script | Power Automate、Make |
| 生成AI | Gemini API(Interactions、構造化出力) | Claude API、OpenAI API |
| 原稿 | Google ドキュメント | - |
| 保管 | Google スプレッドシート(原稿の管理シート・店舗の台帳・表記の決まり) | - |
| 通知 | Gmail | Google Chat |
新しく作るのは、表記の決まりのシートです。 共有のドキュメントにある80項目を、1行1項目の表に移します。列は「番号・決まり・誤りの例・正しい例・種類」で、種類は「置き換え」と「判断」の2つに分けます。 「お問合せ」→「お問い合わせ」のように機械的に置き換えられるものは置き換え、「店名のあとに支店名を書く」のように文脈で決まるものは判断です。
生成の部品は Gemini API です。 公式のページでは、POST /v1beta/interactions のリクエストに response_format を付け、mime_type を application/json、schema に JSON Schema を渡すと、スキーマに沿った JSON が返るとされています。minLength/maxLength はエラーにならず、サーバーが外して無視するとされているので、長さの確認はコードの側で行います。
入出力の保存も、ここで止めておきます。 公式のページでは、Interactions は既定で保存され(store=true)、有料の枠で55日、無料の枠で1日保たれ、リクエストに store=false を付ければ保存されないとされています。掲載前の原稿は外に出る前の情報なので、store=false を付けます。
03どうやって実装するのか
処理の起点を決める
起点は、15分ごとの時間主導型のトリガーです。 Apps Script が原稿の管理シートを見て、状態が「校正依頼」の行を拾います。
ドキュメントの保存やシートの編集をきっかけにしない理由は2つあります。書き手は書きながら何度も保存するので、保存のたびに校正が走ると、書きかけの原稿に指摘が出ます。 状態を「校正依頼」にするという書き手の操作を合図にすれば、書き終えた原稿だけが対象になります。もう1つは、締め切り前に依頼が重なっても、15分ごとに一定の本数ずつ処理すれば、実行時間の上限に当たりにくいことです。
公式の割り当ての表では、1回の実行は6分までとされています。1回の実行で処理する原稿は5本までにし、残りは次の回に回します。 処理を始めた行は状態を「校正中」に変え、次の回で二重に拾わないようにします。終わったら「校正結果あり」にします。
6分を超えて止まった行は「校正中」のまま残ります。 30分以上「校正中」のままの行は、次の回で「校正依頼」に戻して拾い直します。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 原稿の本文 | 見出し、本文、情報の欄(営業時間・定休日・電話番号・住所・価格) | Google ドキュメント |
| 原稿の管理 | 原稿のドキュメントの ID、店舗の番号、書き手、担当の編集者、掲載の号、枠(広告/取材)、状態 | 原稿の管理シート |
| 店舗の台帳 | 店舗の番号、店名、住所、電話番号、営業時間、定休日、確認した日 | 店舗の台帳のシート |
| 表記の決まり | 番号、決まり、誤りの例、正しい例、種類(置き換え/判断) | 表記の決まりのシート |
質を決めるのは、店舗の番号です。 原稿と台帳を店名で結びつけると、「カフェ ○○」と「○○カフェ」、本店と支店で引けない店舗が出ます。管理シートに店舗の番号の列を足し、書き手が原稿を登録するときに番号を選ぶ形にします。 新しい店舗は、営業が先に台帳に行を作ります。
台帳の「確認した日」も渡します。 半年以上前に確認した値と食い違ったときは、原稿のほうが新しい可能性が高いと分かります。どちらを疑うかの手がかりを、一覧に一緒に出します。
データの取得方法を決める
本文は DocumentApp でドキュメントを開き、getBody() から取り出します。公式のページでは、Body の getText() は要素の内容を文字列として返すとされています。AI に渡すのはこの文字列です。 画像や表の装飾は渡しません。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 本文の文字列 | Body.getText() | AI への入力、置き換えの表での検索、指摘の照合 |
| 情報の欄 | 本文のうち「営業時間」「定休日」「TEL」などの見出しの付いた行 | AI の抜き出しと突き合わせる |
| 店舗の情報 | 店舗の台帳を店舗の番号で引く | 抜き出した値と比べる |
| 表記の決まり(判断) | 表記の決まりのシートの種類が「判断」の行 | AI への入力 |
| 表記の決まり(置き換え) | 同じく「置き換え」の行 | コードでの検索 |
置き換えの表での検索は、本文の文字列に対して JavaScript の正規表現で行います。 公式のページでは、Body の findText() は正規表現で探せるものの、キャプチャグループやモード修飾子など一部の機能は十分に対応していないとされ、要素の中の文字のかたまりごとに照らすとされています。複雑な表現は getText() の文字列のほうで探し、findText() は使いません。
台帳は店舗の番号で1行だけを引き、AI には渡しません。 比べるのは Apps Script です。台帳を AI に渡すと、AI が台帳の値で原稿を「直した」指摘を返し、原稿に何が書かれていたかが一覧から消えます。
AIへ渡す前に整形する
- 状態の確認 … 状態が「校正依頼」で、店舗の番号が入っている行だけを拾います。番号が空の行は「店舗の番号なし」として書き手に戻します
- 本文の取り出し …
getText()で文字列にし、前後の空白を落とします - 長さの確認 … 3,000字を超える原稿は、特集の記事などの別の扱いとして AI に渡さず、編集者に回します
- 置き換えの表での検索 … 種類が「置き換え」の決まりを順に当て、見つかった箇所を「決まりの番号・直す前・直した後・位置」として先に一覧に載せます
- 全角・半角のそろえ … 照らし合わせ用に、本文の写しの数字とハイフンを半角にそろえた文字列も作ります。AI に渡すのは元の本文のほうです。 全角の数字そのものが表記の決まりの対象だからです
- 台帳の値のそろえ … 電話番号は数字だけにし、営業時間は「HH:MM-HH:MM」の形、定休日は曜日の集合にそろえておきます
4番目で見つかったものは、AI に重ねて探させません。 指示文に「次の指摘はすでに見つかっている」と渡し、同じ箇所を二重に指摘しないようにします。 編集者が同じ指摘を2回見ると、一覧そのものを信用しなくなります。
AIに処理させる
させるのは2つです。表記の決まり(判断)に照らした表記のゆれ・誤字の指摘と、店舗の情報を書かれたとおりに抜き出すことです。
| させること | 材料 | 判断できないときの扱い |
|---|---|---|
| 表記のゆれ・誤字の指摘 | 本文、表記の決まり(判断)、すでに見つかった指摘 | 決まりに無いが気になる箇所は category: other で出し、決まりの番号を空にする |
| 店舗の情報の抜き出し | 本文(情報の欄と本文の両方) | 書かれていなければ空。同じ項目が2か所にあれば両方を出す |
| 価格の書き方の抜き出し | 本文の価格の表示 | 税込かどうかが文字から読めなければ tax_label: none |
店舗の情報は、情報の欄と本文の両方から抜き出させます。 第3章の(c)のとおり、本文に「火曜日はお休み」と書かれていれば、それも定休日として出させます。同じ項目が2か所に出てくれば両方を返させ、食い違いはコードが見つけます。
価格は、税込の表示があるかを文字から読ませるだけです。 国税庁のページでは、事業者が消費者にあらかじめ価格を表示するときは、税込の価格を表示することが義務付けられ、チラシの広告や新聞の広告など媒体を問わないとされています。認められる表示の例として「11,000円」「11,000円(税込)」「11,000円(税抜価格10,000円)」などが挙げられています。AI には「(税込)」「税抜」などの文字があるかを抜き出させ、税込として足りるかの判断は表記の決まりと編集者に置きます。
| させないこと | 理由 |
|---|---|
| 店舗の情報を台帳の値で直す | どちらが正しいかは店舗にしか分からない |
| 原稿への書き込み | 採るかどうかは編集者が決める |
| 文の書き換え・要約 | 書き手の文体を残す。校正の範囲を超える |
| 税率の計算・税込の価格の算出 | 税率の扱いは時期と品目で変わる。店舗に確かめる |
| 表現の適否の判断 | 景品表示法などの判断は別の確認の流れに置く |
4行目は、これから特に効いてきます。 同じ国税庁のページでは、令和9年4月1日から令和11年3月31日までの2年間、飲食料品の譲渡について消費税率が引き下げられ、飲食料品の総額表示の特例が設けられるとされています。飲食店の紹介の原稿では、その時期の前後で価格の書き方が変わりえます。AI が税込の価格を計算して書き直すと、どの税率で計算したかが分からない値が誌面に載ります。
指示内容を固定する
あなたは地域の情報誌の校正の担当です。店舗の紹介の原稿を読み、
表記の決まりに照らした指摘と、店舗の情報の抜き出しを行います。
【指摘の決まり】
- 【表記の決まり】に反する箇所を指摘し、rule_no に番号を入れてください。
- 誤字・脱字、送り仮名の誤り、同じ原稿の中での表記の不統一も指摘してください。
決まりに無いものは category を other にし、rule_no を空にしてください。
- original には、原稿の本文から直す前の文字列をそのまま写してください。
1文字も変えないでください。1つの段落の中の、前後を含めて10〜30字ほどにしてください。
- suggestion には直した後の文字列を、original と同じ範囲で書いてください。
- 【すでに見つかった指摘】と同じ箇所は指摘しないでください。
- 文の言い回し、店舗の魅力の書き方、文体は直さないでください。
【抜き出しの決まり】
- 営業時間、定休日、電話番号、住所、価格を、原稿に書かれたとおりに抜き出してください。
数字や記号を直さないでください。全角・半角もそのままにしてください。
- 情報の欄だけでなく、本文に書かれたものも抜き出し、where に field か body を入れてください。
- 同じ項目が2か所以上にあれば、すべて出してください。
- 書かれていない項目は出さないでください。推測で埋めないでください。
- 価格には、「税込」「税抜」「消費税」などの文字が付いているかを tax_label に入れてください。
税込の価格を計算しないでください。
【すでに見つかった指摘】{rule_hits}
【表記の決まり】{rules}
【原稿の本文】{body}
「1文字も変えないで写す」を明記するのは、照合のためです。 写した文字列が本文に無ければ、その指摘はコードで外します。指摘の正しさを AI の言い分ではなく、本文の文字に置きます。
「数字や記号を直さない」は、抜き出しの命です。 AI は「03-1234-5678」と「03ー1234ー5678」を同じものとして、そろえた形で返したくなります。原稿に長音の「ー」が入っていること自体が表記の誤りなので、そろえられると見つけたかった誤りが消えます。
出力形式を固定する
次の形の JSON で受け取ります。
{
"corrections": [
{
"category": "notation | typo | inconsistency | other",
"rule_no": "R-012",
"original": "",
"suggestion": "",
"reason": ""
}
],
"store_facts": [
{
"item": "hours | closed_days | phone | address | price",
"where": "field | body",
"text": "",
"tax_label": "tax_included | tax_excluded | none | not_price"
}
]
}
指摘と抜き出しを分けて持つのは、行き先が違うからです。 corrections は編集者が原稿に入れるかを決める一覧へ、store_facts は Apps Script が台帳と比べる材料へ回ります。抜き出しは AI の判断を含まない値なので、比べ方を変えても AI を呼び直さずに済みます。
受け取ったあと、Apps Script が次の照合をします。
| 照合 | やり方 | 結果 |
|---|---|---|
| 指摘の実在 | original が本文の文字列に含まれるか(indexOf) | 含まれなければ外し、外した数を記録 |
| 指摘の範囲 | original と suggestion の長さ(60字以内か) | 長すぎるものは文の書き換えとして外す |
| 電話番号 | 数字だけにして台帳と比べる。数字以外の文字(長音・全角)があれば表記の指摘にも足す | 一致/食い違い |
| 営業時間 | 「HH:MM-HH:MM」の形にして比べる。そろえられないものは「読めない」 | 一致/食い違い/読めない |
| 定休日 | 曜日の集合にして比べる。field と body で違えば、それも食い違い | 一致/食い違い |
| 価格 | tax_label が none の価格を一覧に出す | 要確認 |
長さの確認をコードで行うのは、スキーマに書いても効かないからです。 公式のページでは、minLength/maxLength は制約付きの生成で無視され、サーバーが外すとされています。エラーにならないので、書いて安心してしまうのがいちばん危ない形です。 一方で minItems/maxItems と、数値の minimum/maximum は効くとされています。
校正の一覧は、原稿ごとに次の形で管理シートのタブに書きます。
【原稿 2611-034 ○○食堂(取材枠)担当:編集A】
指摘(決まり) R-012 「お問合せ」→「お問い合わせ」
指摘(AI) R-031 「11時〜20時」→「11:00〜20:00」
指摘(AI) other 「こだわりの自家製のタレ」→ 同じ原稿で「たれ」と混在
店舗の情報 電話 食い違い(原稿 0X-XXXX-1234/台帳 0X-XXXX-1243、台帳の確認 2026-04)
店舗の情報 定休日 field「火曜」/body「月曜はお休み」で食い違い
価格 「ランチ 900円」税込の表示なし
外した指摘 1件(本文に無い文字列) システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 原稿の管理シート | SpreadsheetApp | 「校正依頼」を拾い、状態を変え、校正の一覧を書く |
| 原稿 | DocumentApp | 本文を読む。書き込まない |
| 店舗の台帳・表記の決まり | SpreadsheetApp | 読むだけ |
| Gemini API | UrlFetchApp で v1beta/interactions を呼ぶ | 指摘と抜き出し |
| 担当の編集者 | Gmail | 校正の一覧ができたことを知らせる |
原稿のドキュメントには書き込みません。 指摘は一覧に出し、編集者が提案のモードで入れます。Apps Script が原稿を直接書き換えると、誰がどこを直したかが原稿の履歴から追いにくくなります。 書き手は提案を見て、採るか戻すかを決められます。
店舗の台帳にも書き込みません。 食い違いが出ても、台帳を直すのは営業が店舗に確かめたあとです。
API の鍵は、スクリプトのプロパティに置きます。 URL Fetch の呼び出しは、公式の割り当ての表で Workspace のアカウントなら1日100,000回とされ、月240本では問題になりません。
人が確認する
編集者は、校正の一覧を見てから原稿を開きます。 一覧を見ずに原稿を頭から読むと、これまでと同じ時間がかかります。
- 店舗の情報の食い違いを先に見る … 電話・営業時間・定休日の食い違いは、営業に確認を頼みます。台帳の確認した日が古ければ、原稿の側が正しい可能性も伝えます
- 指摘を採るかを決める … 決まりの番号が付いた指摘は原則として採り、
otherの指摘は書き手の意図を考えて決めます - 文の流れを読む … AI が見ない部分です。店舗の魅力が伝わるか、取材の内容と合っているかを読みます
- 価格の要確認を片付ける … 税込の表示が無い価格は、書き手か営業に確かめます
3番目は、この構成で編集者に残す本来の仕事です。 表記と数字の確認から手が空いた分を、ここに使います。
目標は、240本をならして1本4分です。 一覧の確認に1〜2分、文の流れを読むのに2〜3分という見込みです。食い違いの多い号は4分を超えますが、その分は営業の確認に回る時間です。
例外に対処する
| 起きること | 対応 |
|---|---|
| 店舗の番号が空 | 校正せず、書き手に「店舗の番号なし」で戻す |
| 台帳に店舗が無い(新しい店舗) | 抜き出しだけを一覧に出し、「台帳なし」として営業に台帳の作成を頼む |
| 3,000字を超える原稿 | 特集の記事として AI に渡さず、編集者が読む |
指摘の original が本文に無い | 外して数を記録する。多い月は指示か決まりの書き方を見直す |
| 営業時間が「ランチ」「ディナー」など2つの枠 | 枠ごとに比べる。そろえられなければ「読めない」として人へ |
| 「不定休」「祝日は営業」など台帳の形にならない | 「読めない」として人へ。機械で一致と判定しない |
| Gemini API が応答しない・形が崩れる | 1回だけ呼び直す。だめなら置き換えの表の指摘と台帳の照らし合わせの欄だけで一覧を出し、「AI の指摘なし」と明記する |
| 6分の上限で止まる | 「校正中」のまま30分たった行を「校正依頼」に戻す |
| 書き手が校正中に原稿を直した | 一覧の作成の時刻と原稿の更新の時刻を並べ、後から直された原稿は「校正後に更新あり」と出す |
7行目で「AI の指摘なし」と明記するのが大事です。 一覧が空に見えると、指摘が無いのか AI が動かなかったのかが分かりません。動かなかったときは、そう書きます。
6行目のように、台帳の形に収まらない書き方は、一致とも食い違いとも言いません。 「不定休」と「定休日なし」を同じとみなすかどうかは、店舗に聞くまで分かりません。
記録を残す
- 原稿ごとの校正の一覧(決まりの指摘、AI の指摘、店舗の情報の照らし合わせ、価格の要確認)
- AI に渡した本文と表記の決まりの版、返ってきた JSON の全文
- 照合で外した指摘 … 本文に無かった文字列と、長すぎて外したもの
- 編集者が採った指摘と採らなかった指摘
- 店舗の情報の食い違いと、営業が店舗に確かめた結果(どちらが正しかったか)
- 表記の決まりのシートの変更の履歴
4つ目は、表記の決まりを直す材料です。 other の指摘のうち毎号採られているものは、決まりに足すべきものです。逆に、決まりの番号付きなのに採られない指摘は、決まりの書き方が現場と合っていません。
5つ目は、台帳の当てになり方を測る材料です。 食い違いのうち台帳の側が古かった割合が高ければ、原稿より先に台帳の確認の仕方を直すほうが効きます。
04実装レベルの3段階
本記事の想定は半自動化です。 1本12分のうち、表記のゆれ探し・台帳との照らし合わせ・価格の確認は一覧になり、残るのは一覧の確認と文の流れを読むことだけです。 この段階で1本4分になります。 本格構成は、台帳の側を直す話です。 食い違いのうち台帳が古かったものが多いなら、掲載の前に店舗へ確認を送る仕組みを足します。校正の側をいくら速くしても、台帳が古ければ食い違いは減りません。
05工数削減シミュレーション
導入後 240件 × 4分 ÷ 60 = 16 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 月刊の地域情報誌やフリーペーパーで、飲食店・美容室・教室などの紹介の原稿を毎号数十〜数百本載せている編集部。原稿を Google ドキュメントで受け、店舗の営業時間・定休日・電話番号を別の台帳で持っているのに、照らし合わせが編集者の目視になっている場合。表記の決まりはあるが、編集者によって直し方が違う場合。地域の店舗の紹介を載せる商工会・観光協会の広報誌にも使える。
- 1号の掲載が十数本で、ベテランの編集者が全部読んで足りる場合。店舗の情報を台帳として持っておらず、原稿の内容が唯一の情報源になっている場合。原稿が紙や PDF でしか届かない場合。なお、掲載の可否、広告の表現が法令に触れるかの判断、店舗への事実の確認は、この構成では代替できません。
07最小構成で試す方法
- 先月号の原稿から20本を選ぶ(刷ったあとに訂正を出したもの、ベテランが多く直したものを入れる)
- 表記の決まりのうち、よく使う30項目を1行1項目の表にする
- 手元の AI サービスの画面に、第7章の指示文と30項目を貼る
- 20本の本文を1本ずつ貼り、指摘と店舗の情報の抜き出しをさせる
- ベテランの編集者が入れた直しと並べ、同じ箇所を拾えているか、原稿に無い文字列を直す前として書いていないかを見る
- 抜き出した電話番号・営業時間・定休日を、台帳と手で比べる
5番目の後半を最優先で見ます。 原稿に無い文字列を「直す前」として書く癖が強ければ、本番の照合で外す数が増えます。照合で外せばよいので致命的ではありませんが、指示の書き方を直す目安になります。
| 出てきた内容 | 判断 |
|---|---|
| ベテランの直しの大半を拾い、抜き出しが原稿どおり | Apps Script とのつなぎ込みに進む |
| 抜き出しで数字や記号をそろえてしまう | 指示の書き方で直る。照合で使う値は原稿どおりであることが前提 |
| 文の言い回しまで書き換える | 決まりの範囲の指示を強め、長さの照合で外す前提にする |
訂正を出した原稿で、食い違いが拾えるかを必ず見てください。 それが拾えなければ、この構成を入れる理由のいちばん大きな部分が成り立ちません。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| AI が原稿に無い文を「直す前」として書く | original が本文にあるかをコードで照らし、無ければ外す |
| AI が抜き出しで数字や記号をそろえる | 書かれたとおりに写すよう指示し、照合はコードが行う |
| AI が台帳の値で原稿を直した指摘を返す | 台帳を AI に渡さない |
| スキーマの長さの制約が効かない | minLength/maxLength は黙って外される。長さはコードで確かめる |
| 書きかけの原稿に指摘が出る | 保存ではなく、書き手が「校正依頼」にした原稿だけを拾う |
| 締め切り前に実行が止まる | 1回5本までにし、「校正中」のまま残った行を拾い直す |
findText() で複雑な表現が探せない | getText() の文字列で探す |
| 同じ箇所の指摘が2回出る | 置き換えの表の指摘を AI に渡し、重ねて探させない |
| 店名で台帳を引いて引けない | 店舗の番号で結びつける |
| 掲載前の原稿が保存される | store=false を付ける。 無料の枠は使わない |
| 税込の価格を AI が計算して書く | 計算を禁じる。令和9年4月からの飲食料品の税率の引下げの前後は特に、店舗に確かめる |
| 不定休などを一致と判定する | 台帳の形にならないものは「読めない」にする |
上の3行が、この構成の失敗のほとんどです。 どれも「AI が原稿の文字を変えて返す」という同じ癖から出ています。原稿に何が書かれていたかを、AI の出力ではなく本文の文字で確かめることで守ります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 掲載前の店舗の紹介の原稿、店舗の住所・電話番号・営業時間、価格、取材で聞いた店主の名前や経歴です。広告の枠の原稿は、掲載の前は店舗と自社のあいだの情報です。
- 有料の枠で、
store=falseを付けて呼ぶ … 公式の規約では、有料の枠ではプロンプトと応答を製品の改善に使わず、禁止された使い方の検知のために限られた期間だけ記録するとされています。Interactions の保存は既定で有効なので、別に止めます - 台帳を外に出さない … 店舗の台帳は、営業が集めた店舗の連絡先の一覧です。照らし合わせは Apps Script の中で行い、AI には渡しません
- AI に原稿を書き換えさせない … 指摘は一覧に出すだけです。書き手の文を守ることは、取材した店舗との約束でもあります
- 表現の適否は別の確認に回す … 「地域で一番」「必ず痩せる」のような表現が法令に触れるかは、この構成では判断しません。編集長が見る別の確認の流れに置きます
- 価格の扱いは決まりと店舗の確認で決める … 税込の表示として足りるか、税率の変わり目の表示をどうするかは、国税庁などの公表を確かめたうえで編集部の決まりに書きます
- 利用者を18歳以上の社員に限る … 公式の規約では、API を使うには18歳以上であることが求められています。この構成を使うのは編集部の社員だけで、読者が触れる仕組みには組み込みません
誤りが起きた場合のリスクは、誤った店舗の情報を刷ることと、正しい原稿を決まりの名目で崩すことの2つです。 前者は台帳との照らし合わせを機械で全件に当て、後者は採るかを編集者が決めることで防ぎます。
10まず何から始めるか
1週目:表記の決まりを表にする
共有のドキュメントにある80項目を、1行1項目のシートに移します。種類を「置き換え」と「判断」に分け、置き換えの項目には正規表現を書きます。 原稿の管理シートに店舗の番号の列を足し、台帳の番号と結びつけます。
2週目:20本で試す
先月号の原稿20本を、手元の AI サービスで指摘と抜き出しにかけます。訂正を出した原稿の食い違いが拾えるか、抜き出しが原稿どおりかを最優先で見ます。
3週目:置き換えの表と台帳の照らし合わせを作る
Apps Script で「校正依頼」の原稿を拾い、置き換えの表での検索と、台帳の値のそろえ方と比べ方を作ります。この時点では AI を呼ばず、コードだけでどこまで拾えるかを見ます。
4週目:Gemini API をつなぐ
Interactions に store=false を付けて呼び、指摘と抜き出しを受け取って、本文との照合を足します。校正の一覧を1号分出し、編集者が採った割合を数えます。
2か月目: 採られなかった指摘と other の指摘から、表記の決まりを直します。台帳の確認した日を一覧に出し、営業の確認の結果を記録し始めます。3か月目以降: 1本12分が何分になったかを実測し、食い違いのうち台帳が古かった割合を見ます。表記の決まりの見直しが毎号の作業として回り、台帳の確認の仕方まで決まった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
POST /v1beta/interactions に response_format(type: "text"、mime_type: "application/json"、schema)を付けると構造化出力が返ること。minLength/maxLength などは制約付きの生成で無視されサーバーが外すこと。minimum/maximum、minItems/maxItems は効くこと | Google AI for Developers: Structured outputs | 2026-10-27 |
Interactions が既定で保存され(store=true)、有料の枠で55日・無料の枠で1日保たれ、store=false で保存を止められること | Google AI for Developers: Interactions API | 2026-10-27 |
| 無料の枠では送った内容と応答が製品の改善に使われ人が読むことがあり、機密・個人の情報を送らないよう求めていること。有料の枠ではプロンプトと応答を製品の改善に使わないこと。API の利用に18歳以上が求められること | Gemini API Additional Terms of Service | 2026-10-27 |
Body の getText() が内容を文字列で返すこと。findText() が正規表現で探せるが、キャプチャグループやモード修飾子など一部の機能に十分対応していないこと | Google for Developers: Class Body | 2026-10-27 |
| 1回の実行が6分まで、URL Fetch が Workspace で1日100,000回であること | Google for Developers: Quotas for Google Services | 2026-10-27 |
| 消費者にあらかじめ価格を表示するときに税込の価格の表示が義務付けられ、媒体を問わないこと。認められる表示の例。令和9年4月1日から令和11年3月31日までの2年間、飲食料品の譲渡の消費税率が引き下げられ、飲食料品の総額表示の特例が設けられること | 国税庁: No.6902「総額表示」の義務付け | 2026-10-27 |
価格の表示の決まりと、広告の表現の適否は、国税庁などの公表と編集部の方針に沿って決めてください。 本記事は公式のページで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-2063)についてのご相談はこちらから。
