市役所が地域のイベントの後援・共催の申請をフォームで受け、Apps Script と AI で要綱の基準に照らした書類の不足と確認点を拾う
地域の団体から届くイベントの後援・共催の申請を Google フォームで受け、Apps Script が添付の書類とそろえて AI に渡します。AI は要綱の基準に照らした不足・食い違い・確認点を根拠の文つきで返し、職員はその一覧から確かめます。
- 生成AI
- ChatGPT/Claude
- 連携・自動化
- Google Apps Script/Make/Power Automate
- 対象業界
- その他/自治体
- 対象部門
- 総務
- 対象業務
- 内容確認・チェック/比較検討
- 主な課題
- 判断に時間がかかる/属人化している/確認ミスが多い
- AIで行う処理
- 判定
- 主な効果
- 判断支援/品質標準化/工数削減
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- フォームの回答を受付の一覧で見て、受付の番号を振る
- 申請者から別にメールで届いた事業計画書・収支予算書・チラシの案を、受信箱で探して開く
- 申請書の回答と添付の書類を並べ、事業名・日時・場所・入場料・主催者が合っているかを見る
- 行事の日付から、1か月前の期限に間に合っているかを数える
- 事業の内容・物品の販売・協賛の企業の扱いを読み、営利・政治・宗教の除外に触れないかを考える
- 不足や疑問があれば、申請者へ問い合わせのメールを書く
- 書類がそろったものを、所管の課へ回付する
- 自動フォームの送信をきっかけに Apps Script が動き、受付の番号を振って申請者へ受付のメールを送る
- 【人/申請者】 申請者が、受付のメールに返信する形で、事業計画書・収支予算書・チラシの案の PDF を送る
- 自動1時間ごとの時間主導型のトリガーで、受付の番号の付いた返信を Gmail で探し、添付の PDF を取り出す
- 自動行事の日付から期限に間に合っているか、要る書類がそろっているかを、スクリプトの規則で見る
- 自動書類がそろった申請について、Claude API に申請書の回答と PDF を渡し、食い違い・除外の基準に触れる記載・確認点を返させる
- 自動受付の一覧の横の列に結果を書き、申請者への問い合わせの文案を Gmail の下書きにする
- 人総務課の職員が、AI の指摘を根拠の文と PDF の該当箇所で確かめる
- 人問い合わせが要るものは下書きを直して送り、そろったものは所管の課へ回付する
各工程の詳しい説明を読む
- フォームの回答を受付の一覧で見て、受付の番号を振る
- 申請者から別にメールで届いた事業計画書・収支予算書・チラシの案を、受信箱で探して開く
- 申請書の回答と添付の書類を並べ、事業名・日時・場所・入場料・主催者が合っているかを見る
- 行事の日付から、1か月前の期限に間に合っているかを数える
- 事業の内容・物品の販売・協賛の企業の扱いを読み、営利・政治・宗教の除外に触れないかを考える
- 不足や疑問があれば、申請者へ問い合わせのメールを書く
- 書類がそろったものを、所管の課へ回付する
(a)確認の観点が人によって違う。 ベテランの職員は、チラシの協賛の企業の欄、物品の販売の記載、講演の講師の肩書きまで見ます。異動してきたばかりの職員は、申請書の欄が埋まっているかを見て終わります。 同じ申請が、受け付ける人によって所管の課への回り方が変わります。
(b)添付が別に届くので、突き合わせが重い。 フォームには書類の欄を置いていないため、事業計画書とチラシは申請者がメールで送ります。どのメールがどの申請の添付か、件名だけでは分からないことがあります。
(c)不足が分かるのが遅い。 書類の不足は、所管の課が審査に入ってから見つかることもあります。その時点で行事まで3週間を切っていると、申請者は印刷したチラシの差し替えに追われます。
(d)除外の基準の読み方が難しい。 「専ら営利」かどうかは、物品の販売があるだけでは決まりません。判断がつかない申請は、職員が所管の課と相談し、そのぶん回付が遅れます。
- 【自動】 フォームの送信をきっかけに Apps Script が動き、受付の番号を振って申請者へ受付のメールを送る
- 【人/申請者】 申請者が、受付のメールに返信する形で、事業計画書・収支予算書・チラシの案の PDF を送る
- 【自動】 1時間ごとの時間主導型のトリガーで、受付の番号の付いた返信を Gmail で探し、添付の PDF を取り出す
- 【自動】 行事の日付から期限に間に合っているか、要る書類がそろっているかを、スクリプトの規則で見る
- 【自動】 書類がそろった申請について、Claude API に申請書の回答と PDF を渡し、食い違い・除外の基準に触れる記載・確認点を返させる
- 【自動】 受付の一覧の横の列に結果を書き、申請者への問い合わせの文案を Gmail の下書きにする
- 【人】 総務課の職員が、AI の指摘を根拠の文と PDF の該当箇所で確かめる
- 【人】 問い合わせが要るものは下書きを直して送り、そろったものは所管の課へ回付する
7番目が、この設計の分かれ目です。 AI の指摘は、確かめるべき場所の目印です。「営利の目的と読める記載」と出ても、それで不承認にはしません。 職員が書類を読み、所管の課と協議して、市が判断します。
4番目を AI にさせないのも、意図してのことです。 期限の計算と、有料の行事に収支予算書が付いているかは、日付と回答の値で機械的に決まります。 ここを AI に任せると、ときどき数え違えます。
02今回想定するシステム構成
申請者 ── Google フォーム(申請書の項目+確認の質問) ▼ 回答がスプレッドシートに書き込まれる 【トリガー①】スプレッドシートのフォーム送信(インストール型) Google Apps Script ├── 受付の番号を振り、受付の一覧の行に書く └── 申請者へ受付のメール(件名に受付の番号、添付の送り方を案内) 申請者 ── 受付のメールに返信して PDF を添付 ▼ 【トリガー②】時間主導型(1時間ごと) Google Apps Script ├── Gmail を受付の番号で探し、添付の PDF を取り出す ├── 規則で見る:期限・必要な書類・添付の形式 ├── Claude API(UrlFetchApp、PDF+構造化出力) │ ── 食い違い・除外の基準に触れる記載・確認点・根拠の文 ├── 受付の一覧の横の列 ── 結果と状態を書く └── GmailApp ── 申請者への問い合わせの下書き(送らない) ▼ 【総務課の職員が確かめて送る・回付する】
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Google Apps Script | Make、Power Automate |
| 生成AI | Claude API(PDF の入力、構造化出力) | OpenAI API |
| 受付 | Google フォーム | Microsoft Forms |
| 保管 | Google スプレッドシート(受付の一覧、要綱の基準の表) | - |
| メール | Gmail(申請の受付用のアカウント) | - |
新しく足すのは、Apps Script と、受付の一覧の横の列と、要綱の基準の表です。 フォームと受付の一覧はいまのものを使います。Apps Script は、申請の受付用の Gmail のアカウントで作ります。 公式のページでは、インストール型のトリガーは常に作った人のアカウントで動きます。職員の個人のアカウントで作ると、その職員が異動したときに止まります。
きっかけは2つです。 公式のページでは、インストール型のトリガーには、フォームの送信のトリガー(Google フォームの側とスプレッドシートの側の2種類)と、時間主導型のトリガーがあります。時間主導型は1分ごとから月に1回まで選べ、開始の時刻は少しずれることがあります。 添付は申請者が後から送るので、届いたかを1時間ごとに見に行く形にします。
PDF は Claude API にそのまま渡します。 公式のページでは、PDF は document の内容のブロックに base64 で入れて送れます。1回のリクエストの大きさは32MBまで、ページは600まで(文脈の窓が100万トークン未満のリクエストは100まで)で、パスワードや暗号化のかかった PDF は扱えません。 事業計画書とチラシの案で数ページなので、上限には遠く届きません。
結果は構造化出力で受け取ります。 公式のページでは、output_config.format に type: "json_schema" とスキーマを渡すと、その形の JSON が返ります。オブジェクトには additionalProperties: false が要り、数値の minimum・maximum などの制約は使えません。
03どうやって実装するのか
処理の起点を決める
フォームの送信(トリガー①)と、1時間ごとの見回り(トリガー②)の2本です。 トリガー①は受付だけを行い、AI は呼びません。添付が届く前に AI に読ませても、確かめる材料が足りないからです。
トリガー①は、スプレッドシートの側のフォーム送信のトリガーです。 公式のページでは、そのイベントには質問の名前と値の組(namedValues)と、書き込まれた範囲(range)が入ります。範囲から行の位置が分かるので、受付の番号と結果を同じ行の横の列に書けます。
トリガー②は、1時間ごとの時間主導型です。 受付の一覧で状態が「添付待ち」の行を拾い、その受付の番号で Gmail を探します。添付がそろった行だけを AI に回し、そろわない行は次の回にもう一度見ます。 受付から7日たっても添付が届かない行は、「催促」の状態にします(例外処理)。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 申請書の回答 | 団体名、代表者、連絡先、事業名、目的、内容、実施の日時と場所、入場料等(無料/有料)、他の後援の予定、後援か共催か | フォームの回答 |
| 確認の質問の回答 | 物品の販売の有無と内容、協賛の企業の有無、政党・候補者の関与、宗教の団体の関与、募金の有無、参加の見込みの人数 | フォームの回答 |
| 添付の書類 | 事業計画書、収支予算書(有料の場合)、チラシ・ポスターの案 | 受付のメールへの返信の添付(PDF) |
| 要綱の基準の表 | 承認の基準、除外の基準、要る書類、期限、AI に見させる観点 | スプレッドシートの別のシート |
| 過去の申請 | 同じ団体の直近の申請の事業名と結果 | 受付の一覧 |
確認の質問をフォームに置くのが、この構成の土台です。 「物品の販売はありますか」「政党や候補者が関わりますか」と、除外の基準に関わることを申請者に直接答えてもらいます。 AI が書類から読むのは、その答えと書類の記載が合っているかです。答えが「無い」のに、チラシに「〇〇党〇〇支部協賛」とあれば、それが確認点になります。
要綱の基準の表は、条文をそのまま写した列と、観点を書いた列に分けます。 「専ら営利を目的とする事業」の条文の隣に、「入場料が実費を大きく超えていないか」「主催者の商品の販売が事業の中心になっていないか」のように、総務課が実際に見ている観点を書きます。この観点の列は、ベテランの職員の見方を言葉にしたものです。
データの取得方法を決める
| 取るもの | どこから | どの操作で |
|---|---|---|
| 申請書の回答 | 受付の一覧の行 | フォーム送信のイベントの namedValues と range |
| 受付のメールへの返信 | 申請の受付用の Gmail | 受付の番号を件名に含むスレッドを検索する |
| 添付の PDF | 返信のメッセージ | getAttachments() で添付を取り出す |
| 要綱の基準の表 | 別のシート | シートの値を読む |
| AI の結果 | Claude API | UrlFetchApp で Messages API を呼ぶ |
添付は getAttachments() で取り出します。 公式のページでは、メッセージのすべての添付を GmailAttachment の配列で返し、オプションでインラインの画像を含めるか、通常の添付を含めるかを指定できます。署名の画像が添付として拾われないよう、インラインの画像は含めない指定にします。
受付の番号は、件名の先頭に角かっこで入れます。 「【後援受付 K-2026-0412】」のように決めておけば、返信の件名にもそのまま残ります。申請者が新しいメールで送ってきた場合は件名に番号が無いので、送り主のアドレスと申請書の連絡先で照らし、合えば職員に確かめさせます。
PDF は base64 にして Claude API に渡します。 添付の中身をバイトで取り出し、Utilities の base64Encode で文字列にし、document のブロックの data に入れます。1回のリクエストに、申請書の回答と、その申請の PDF をすべて入れます。 書類ごとに分けて呼ぶと、事業計画書とチラシの案の食い違いを AI が見比べられません。
API のキーは、スクリプトのプロパティに置き、コードに書きません。 公式のページでは、スクリプトのプロパティはスクリプトのすべての利用者から使える、アプリ全体の設定の保存場所です。スクリプトを編集できる人を総務課の担当に限り、キーが課の外に見えないようにします。
AIへ渡す前に整形する
- 期限の確認 … 行事の初日と受付の日の差を数え、1か月前を切っていれば「期限」の印を付けます
- 要る書類の確認 … 入場料等が「有料」なのに収支予算書が無ければ「不足」とします
- 添付の形式の確認 … PDF 以外(画像・Word)は職員に PDF への変換を頼む印を付け、AI に渡しません
- パスワード付きの PDF の確認 … 読めない PDF は、申請者に外して送り直してもらう印を付けます
- 大きさの確認 … 添付の合計が大きすぎるものは、ページ数の多い書類を分けて送ってもらいます
- 同じ団体の直近の申請 … 受付の一覧で同じ団体の申請を探し、事業名と結果を AI に渡します
1番目と2番目は、AI に渡す前にスクリプトで決めます。 期限は日付の引き算、収支予算書の要否は回答の値で決まり、ここに判断の余地はありません。 結果は AI の指摘とは別の列に書き、職員がひと目で見分けられるようにします。
4番目は、Claude API の側の制約でもあります。 公式のページでは、パスワードや暗号化のかかった PDF は扱えないとされています。エラーになってから気づくより、前で止めます。
AIに処理させる
| させること | 返す項目 | 決め方 |
|---|---|---|
| 申請書と添付の食い違い | mismatches | 事業名・日時・場所・入場料等・主催者・後援か共催か の6項目を、申請書と各書類で比べる |
| 除外の基準に触れうる記載 | exclusion_flags | 営利・政治・宗教の観点ごとに、触れうる記載があれば根拠の文を写す |
| 確認の質問の答えと書類の食い違い | answer_conflicts | 「物品の販売なし」なのにチラシに販売の記載がある、など |
| 名義の表示の先走り | premature_logo | チラシの案に、承認の前から市の名前や章が入っているか |
| 申請者への問い合わせ | questions | 上の指摘のうち、申請者に尋ねるべきものを1文ずつ |
| 書類の要約 | summary | 職員が回付の前に読む3行ほどの要約 |
exclusion_flags は、触れうる記載を拾うだけです。 「専ら営利」かどうかは、事業全体の中での物品の販売の重さで決まり、一文だけでは決まりません。 AI には、記載の場所と原文を返させ、「営利である」とは書かせません。
premature_logo は、地味ですが手戻りの多い観点です。 申請者は、承認を見込んでチラシに「後援:〇〇市」と刷ってしまうことがあります。承認の前の案なら直せますが、印刷の後だと刷り直しになります。 案の段階で拾い、問い合わせの文に「承認の通知の前の印刷はお控えください」と添えます。
| させないこと | 理由 |
|---|---|
| 承認・不承認の結論 | 市が要綱に照らして決める |
| 暴力団の関与の判断 | 書類から読むものではない。市の手続きで確かめる |
| 政治的・宗教的な活動かの断定 | 記載の場所を返すだけ。所管の課と協議して決める |
| 期限の計算と書類の要否 | スクリプトの規則で決める |
| 団体の評判の推測 | 団体名から推し量らない |
| 事業の安全の判断 | 会場の収容や警備は、所管の課と会場の管理者が見る |
指示内容を固定する
あなたは市役所の総務課で、後援・共催の申請の書類を確かめる係です。
申請書の回答と、添付の PDF に書かれていることだけを使ってください。
承認・不承認を判断しないでください。
【1. 食い違い(mismatches)】
事業名・実施の日時・実施の場所・入場料等・主催者・後援か共催か の6項目を、
申請書の回答と各書類で比べ、違いがあれば項目、申請書の値、書類の値、
書類の名前とページを返してください。表記の揺れ(全角と半角、曜日の有無)は
違いとして扱わないでください。
【2. 除外の基準に触れうる記載(exclusion_flags)】
要綱の基準の表(ここに貼る)の観点ごとに、触れうる記載があれば、
観点の番号、書類の名前とページ、原文をそのまま quote に写してください。
「営利である」「政治活動である」と結論を書かないでください。
触れうる記載が無ければ、空の配列にしてください。
【3. 確認の質問の答えとの食い違い(answer_conflicts)】
確認の質問への申請者の答えと、書類の記載が食い違うものを返してください。
【4. 名義の表示(premature_logo)】
チラシ・ポスターの案に、この市の名前や章が後援・共催として入っていれば true。
【厳守事項】
- 書類に書かれていないことを推測で補わないでください。
- 団体名や代表者の名前から、団体の性格を推し量らないでください。
- quote には、書類の文をそのまま写してください。要約しないでください。
- 読めないページがあれば unreadable_pages に書き、推測で埋めないでください。
【申請書の回答】{answers}
【確認の質問の回答】{checks}
【同じ団体の直近の申請】{history}
「結論を書かない」を2か所で念押ししています。 生成AI は、触れうる記載を見つけると「この事業は営利目的に当たる可能性が高い」とまとめたがります。その一文が受付の一覧に残ると、職員が読み、所管の課に伝わり、いつの間にか結論として扱われます。 原文の場所だけを返させます。
表記の揺れを違いとして扱わない指示も要ります。 「10月12日(日)」と「10/12」が別の値として出ると、食い違いの一覧が揺れで埋まり、本当の食い違いが見えなくなります。
出力形式を固定する
次のスキーマの JSON で受け取ります。 スキーマはオブジェクトごとに additionalProperties: false にします。
{
"application_id": "K-2026-0412",
"mismatches": [
{ "field": "入場料等", "form_value": "無料",
"doc_value": "参加費 大人1,000円", "doc": "チラシの案", "page": 1 }
],
"exclusion_flags": [
{ "criterion": "営利-2", "doc": "事業計画書", "page": 2,
"quote": "会場内で主催者の健康食品の販売ブースを設ける" }
],
"answer_conflicts": [
{ "question": "物品の販売の有無", "answer": "なし",
"doc": "事業計画書", "quote": "会場内で主催者の健康食品の販売ブースを設ける" }
],
"premature_logo": true,
"unreadable_pages": [],
"questions": ["チラシの案の参加費と、申請書の入場料等(無料)が異なります。どちらが正しいでしょうか。"],
"summary": ""
}
1つ目の理由は、指摘ごとに書類とページと原文が付くことです。 職員は PDF を頭から読まずに、指摘のページを開いて原文を確かめるだけで済みます。 これが30分を10分にする中身です。
2つ目は、exclusion_flags の criterion で要綱の観点に戻れることです。 観点の番号は要綱の基準の表の番号なので、どの条文に関わる指摘かが職員と所管の課で共通になります。
3つ目は、questions をそのまま問い合わせの下書きに使えることです。 スクリプトは、questions を並べ、決まった前置きと結びを付けて下書きにします。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 受付の一覧 | スプレッドシートの読み書き | 受付の番号、状態、規則の結果、AI の結果を横の列に書く |
| 申請の受付用の Gmail | GmailApp | 受付のメールの送信、返信の検索、添付の取り出し、問い合わせの下書き |
| Claude API | UrlFetchApp | 申請書の回答と PDF を渡し、構造化出力で受け取る |
| 文書管理のシステム | 職員の手作業 | 回付と決裁は、いまの手順のまま |
問い合わせは下書きにとどめ、送りません。 GmailApp の下書きは、送信をしない操作です。申請者に届く文は、職員が指摘を確かめた後に、職員が送ります。
文書管理のシステムとはつなぎません。 回付と決裁は、市の文書の手続きそのものです。この構成は、回付の前の確認までを受け持ちます。
呼び出しの回数は、上限に遠く届きません。 公式のページでは、Google Workspace のアカウントの URL Fetch の呼び出しは1日10万回まで、1回の実行は6分までです。月120件なら1日に数件で、1時間ごとの見回りの1回で処理する件数を数件に絞れば、6分にも収まります。
人が確認する
- 規則の結果を先に見る … 「期限」「不足」の印のあるものは、AI の指摘より先に申請者へ連絡します
- 食い違いを原文で確かめる …
mismatchesのページを開き、どちらの値が正しいかを申請者に尋ねるか決めます - 除外の基準に触れうる記載を読む …
exclusion_flagsの原文を読み、事業全体の中での重さを見て、所管の課と協議するかを決めます - 問い合わせの下書きを直して送る … 尋ねる必要のない指摘は消します
- 回付する … そろったものを、AI の要約と職員の所見を添えて所管の課へ回します
- 指摘を退けたら記録する … 退けた指摘と理由を、受付の一覧に書きます
3番目を AI の指摘だけで済ませないでください。 町内会の祭りの「模擬店の販売」と、企業の「自社の商品の販売ブース」は、どちらも物品の販売です。同じ指摘が出ても、事業の中での位置づけがまるで違います。 そこを読むのが職員の仕事です。
目標は、120件をならして1件10分です。 指摘の無い申請は要約を読んで回付するだけで数分、除外の基準に触れうる記載のある申請は所管の課との相談が入って長くなります。
例外に対処する
| 起きること | 対応 |
|---|---|
| 受付から7日たっても添付が届かない | 状態を「催促」にし、職員が申請者に連絡する |
| 件名に受付の番号の無いメールで届く | 送り主と申請書の連絡先で照らし、職員が確かめて紐づける |
| PDF にパスワードがかかっている | 申請者に外して送り直してもらう |
| PDF 以外の形式で届く | 職員が申請者に PDF での送り直しを頼む |
| 読めないページがある | unreadable_pages を見て、職員が原本で読む |
| 期限の1か月前を切っている | 規則の印。AI の結果を待たずに職員が申請者と所管の課に連絡する |
| 申請の内容の変更の連絡が届く | 変更の届出として受付の一覧に記録し、もう一度 AI に回す |
| Claude API がエラーを返す | 状態を「添付あり・未確認」のままにし、次の見回りで再試行する |
| 構造化出力が返らない | 職員の手作業の確認に回す |
期限の行は、AI の処理の外で動かします。 行事まで1か月を切った申請は、書類の確認より先に、受け付けるかどうかの連絡が要ります。 AI の結果を待つ1時間が、申請者にとってはチラシの印刷の締切に響きます。
記録を残す
- フォームの回答の全文と、受け付けた日時、受付の番号
- 添付が届いたメールのメッセージの ID と受信の日時、添付のファイル名
- 規則の結果(期限、要る書類、形式)
- AI に渡した要綱の基準の表の版と、AI の結果の JSON の全文
- 職員が退けた指摘と理由、問い合わせを送った日時
- 回付の日と、承認・不承認の結果(文書管理のシステムの番号)
要綱の基準の表の版を残すのは、要綱が改正されるからです。 浜田市の要綱は令和8年4月1日施行と附則にあり、要綱が変わると同じ書類でも指摘が変わります。 どの版の観点で見たかを残しておかないと、後から確認の経過を説明できません。
04実装レベルの3段階
半自動化で、1件30分が10分になります。 本記事の想定はこの段階です。添付を探して並べる時間と、書類を頭から読む時間が消え、残るのは指摘の確認と判断です。 本格構成は、市の電子申請の仕組みとの相性で決まります。 書類の添付まで1つのフォームで受けられれば、Gmail での紐づけの段が要らなくなります。まず半自動化で、指摘の質と基準の表を固めてください。
05工数削減シミュレーション
導入後 120件 × 10分 ÷ 60 = 20 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 市区町村の総務課や市民協働の担当課で、地域の団体・実行委員会・企業から届く後援・共催の名義の使用の申請を、毎月百件前後受け付けている場合。職員が申請書と事業計画書・収支予算書・チラシの案を1件ずつ読み、要綱の承認の基準に当てはまるか、書類がそろっているかを確かめていて、確認の観点が担当者ごとに違う場合。申請を Google フォームで受けており、Google Workspace を使っている場合。
- 後援・共催の申請が年に数十件で、担当者が1人で全件を見て足りている場合。申請を紙と窓口だけで受けていて、電子で受ける見込みがない場合。名義の使用の可否を、要綱ではなく個別の協議で決めている場合。なお、後援・共催の承認・不承認の決定、暴力団の関与の確認、事業の安全の判断は、この構成では代替できません。
07最小構成で試す方法
- 先月の申請から20件を選ぶ(うち数件は、後から書類の不足や食い違いが見つかったものを入れる)
- 要綱の除外の基準と、ベテランの職員が見ている観点を、表に書き出す
- 1件ずつ、申請書の回答と添付の PDF を、手元の生成AIの画面に入れる
- 第7章の指示の要点(6項目の食い違い、触れうる記載の原文、結論を書かない)を添えて、指摘を返させる
- 当時の職員の確認の記録と並べる
2番目に時間をかけてください。 「専ら営利」の観点を書き出そうとすると、ベテランの職員が何を見ていたかが初めて言葉になります。 その表は、AI を使わない場合でも新しい職員の手引きになります。
| 出てきた内容 | 判断 |
|---|---|
| 当時見つかった食い違いを AI も拾った | Apps Script の構築に進む |
| 表記の揺れが食い違いとして並ぶ | 指示の書き方で直る。構成は有効 |
| 職員の間で観点がそろっていなかった | 基準の表の詰めが先。 AI の問題ではない |
画面に PDF を入れるときは、個人の情報の扱いを確かめてください。 申請書には代表者の氏名と連絡先が入ります。試すのは、市が利用を認めた環境に限ります。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| AI が「営利に当たる」と結論を書く | 指示で2か所禁じ、原文と場所だけを返させる |
| 表記の揺れが食い違いに並ぶ | 揺れを違いとして扱わない指示を書く |
| 添付がどの申請のものか分からない | 件名に受付の番号を入れ、返信で送ってもらう |
| 署名の画像が添付として拾われる | getAttachments() でインラインの画像を含めない |
| トリガーが職員の異動で止まる | 申請の受付用のアカウントで作る |
| パスワード付きの PDF でエラーになる | 前処理で止め、送り直してもらう |
| 期限の数え違い | AI に数えさせず、スクリプトで日付を引く |
| 構造化出力で 400 が返る | 数値の minimum・maximum を外す。オブジェクトは additionalProperties: false |
| 職員の間で観点がそろわない | 基準の表の観点の列を、ベテランの見方から書き出す |
上の1行が、この構成でいちばん避けたい失敗です。 AI の結論めいた一文が一覧に残ると、市の判断より先に、書類の確認の段で結論ができてしまいます。 結論を書かせない設計と、退けた指摘の記録で防ぎます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 申請する団体の名前、代表者の氏名と連絡先、事業の内容、そして協賛の企業や講師の名前です。
- 外部の AI へ渡す範囲を決める … 書類の確認に要るのは、事業の内容と書類です。代表者の電話番号や住所は、AI に渡す回答から外します
- 市の利用の決まりに従う … 生成AIの API の利用は、市の情報セキュリティの決まりで認められた範囲で行います。データの扱いは、利用する API の提供元の条件を確かめます
- AI の指摘を判断として扱わない … 指摘は確かめる場所の目印です。承認・不承認は、要綱に照らして市が決めます
- 政治・宗教の観点は慎重に扱う … 触れうる記載を拾うことは、申請者の思想や信条を評価することではありません。一覧の指摘の文言は、原文と場所に限ります
- 暴力団の関与は書類から判断しない … 要綱の除外の基準にありますが、AI の指摘の対象にしません。 市の手続きで確かめます
- 一覧を見られる人を限る … 受付の一覧は、総務課と所管の課の担当者に限ります
誤りが起きた場合のリスクは、食い違いを見落として承認することと、触れうる記載の指摘が結論として扱われることの2つです。 前者は職員の原文の確認で、後者は結論を書かせない設計で防ぎます。
10まず何から始めるか
1週目:基準の表をつくる
要綱の承認の基準と除外の基準を表に写し、ベテランの職員が見ている観点を、条文ごとに書き出します。 あわせて、フォームに確認の質問(物品の販売、協賛の企業、政党・候補者、宗教の団体、募金)を足します。
2週目:20件で試す
先月の申請から20件を選び、市が利用を認めた生成AIの画面で指摘を返させます。当時見つかった食い違いを拾えているか、結論めいた文が出ていないかを最優先で見ます。
3週目:受付と添付の紐づけをつくる
申請の受付用のアカウントで Apps Script を作り、受付の番号を振って受付のメールを送るところと、返信の添付を取り出すところまでを組みます。この時点では AI を呼ばず、規則の結果(期限・不足)だけを一覧に書きます。
4週目:AI の指摘を並べて見る
Claude API の呼び出しを足し、1週間分の申請について職員が指摘を読みます。原文の写しが正確か、表記の揺れが並んでいないかを見ます。
2か月目: 問い合わせの下書きを足し、退けた指摘を数えます。3か月目以降: 退けた指摘の多い観点を基準の表で直します。どの職員が受けても、同じ申請に同じ確認点が並ぶようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 専ら営利を目的とする事業、政治的活動又は宗教的活動と認められる事業、暴力団などが関与する事業を後援しないこと。申請書に事業計画書と収支予算書(入場料・参加料等を徴収する場合)を添え、事業の開始の1月前までに出すこと。令和8年4月1日施行であること | 浜田市後援名義の使用承認に関する取扱要綱(PDF) | 2026-10-15 |
| 政治活動及び宗教活動を主たる目的とするとき、営利を目的とするときなどに後援等を許可しないこと。申請書を開催日の1箇月前までに総務課を経て提出し、変更は開催日の15日前までに届け出ること | 下野市後援等名義の使用許可に関する取扱要綱(PDF) | 2026-10-15 |
| インストール型のトリガーにフォーム送信(フォームの側とスプレッドシートの側)と時間主導型があり、時間主導型は1分ごとから月1回まで選べ、開始の時刻が少しずれうること。作った人のアカウントで動くこと | Apps Script: Installable Triggers | 2026-10-15 |
スプレッドシートの側のフォーム送信のイベントに namedValues と range が入ること | Apps Script: Event Objects | 2026-10-15 |
createDraft が下書きを作る操作で、オプションに name・replyTo などがあること。Gmail を検索する search があること | Apps Script: GmailApp | 2026-10-15 |
getAttachments() がメッセージの添付を返し、インラインの画像と通常の添付を含めるかを指定できること | Apps Script: GmailMessage | 2026-10-15 |
base64Encode がバイトの配列から base64 の文字列を作ること | Apps Script: Utilities | 2026-10-15 |
| スクリプトのプロパティが、スクリプトのすべての利用者から使えるアプリ全体の設定の保存場所であること | Apps Script: Properties Service | 2026-10-15 |
| Google Workspace のアカウントで URL Fetch が1日10万回まで、1回の実行が6分までであること | Apps Script: Quotas | 2026-10-15 |
PDF を document のブロックに base64 で渡せること。リクエストが32MBまで、ページが600まで(100万トークン未満の文脈の窓では100まで)、パスワードや暗号化のある PDF は扱えないこと | Claude: PDF support | 2026-10-15 |
構造化出力で output_config.format に type: "json_schema" を渡すこと。オブジェクトの additionalProperties を false にし、数値の minimum・maximum が使えないこと | Claude: Structured outputs | 2026-10-15 |
後援・共催の承認・不承認と、除外の基準に当たるかの判断は、各自治体の要綱に照らして市が行ってください。 本記事は上記のページで確認できた範囲だけを扱っており、要綱の中身は自治体ごとに違います。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1660)についてのご相談はこちらから。
