自治体の福祉の担当が民生委員から毎月届く活動の記録をフォームで集め、地区ごとの集計と要対応の案件を拾う
民生委員から毎月届く活動の記録をフォームで集め、相談・支援の件数と訪問の回数を地区ごとに集計します。気になる世帯の記述をAIで4つに分け、職員が先に読むべき要対応の一覧を作ります。
- 生成AI
- Azure OpenAI Service/ChatGPT/Claude
- 連携・自動化
- Google Apps Script/Power Automate
- 対象業界
- その他/自治体
- 対象部門
- 総務
- 対象業務
- 分類・仕分け/集計・分析
- 主な課題
- データ分析に時間がかかる/入力作業が多い/期限・対応漏れが起きる
- AIで行う処理
- 分類
- 主な効果
- 入力漏れ削減/工数削減/機会損失防止
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 地区の定例会で、委員から紙の記録票を受け取る
- 職員が記録票の件数を、地区ごとの集計表に転記する
- 自由記述を読み、気になる世帯の記述に付箋を付ける
- 付箋の付いた記述について、高齢者・障害者・子ども・生活困窮の担当の係に伝えるかを決める
- 名簿と突き合わせ、出ていない委員に電話で催促する
- 地区ごとの集計を合計して、市の報告と定例会の資料を作る
- 人委員が、毎月の活動をフォームで出す(紙で出す委員の分は、職員が同じフォームに入力する)
- 自動フォームの送信をきっかけに Apps Script が動き、名簿と照らして委員と地区を確かめる
- 自動件数の欄を規則で点検する(空欄、桁の誤り、前の月との大きな差)
- 自動自由記述が書かれていれば、Claude API が4つの区分と分野に分け、根拠の文を写す
- 自動「急ぎ」と出たものは、地区の担当の職員にすぐメールで知らせる
- 自動毎月5日の朝、地区ごとの集計、未提出の委員、要対応の一覧をシートに書き出す
- 人職員が要対応の一覧を上から読み、委員に話を聞いて、担当の係へつなぐかを決める
各工程の詳しい説明を読む
- 地区の定例会で、委員から紙の記録票を受け取る
- 職員が記録票の件数を、地区ごとの集計表に転記する
- 自由記述を読み、気になる世帯の記述に付箋を付ける
- 付箋の付いた記述について、高齢者・障害者・子ども・生活困窮の担当の係に伝えるかを決める
- 名簿と突き合わせ、出ていない委員に電話で催促する
- 地区ごとの集計を合計して、市の報告と定例会の資料を作る
(a)転記が多い。 180枚の記録票の件数を手で写すので、定例会の翌週は転記で係が埋まります。 写し間違いは、合計が合わなくなってから気づきます。
(b)気になる記述が読まれないまま残る。 3番の読み方が職員ごとに違い、転記に追われる月は自由記述が後回しになります。 委員が書いた「食事を取っていない様子」が、翌月の記録票で「入院された」に変わってから読まれることがあります。
(c)未提出に気づくのが遅い。 記録票が定例会でまとめて出るので、出ていない委員が分かるのは名簿と突き合わせたときです。委員の体調が悪いことの手がかりでもあります。
(d)地区ごとの傾向が見えない。 分野別の件数は合計されますが、どの地区で生活困窮の相談が増えているかを見るには、集計表を並べ直す必要があります。地区の定例会では、その地区の今月の数字は出せても、前の月や他の地区と比べた数字は出せていません。 委員の側からも、自分たちの活動がどう変わっているかが見えにくい状態です。
- 【人】 委員が、毎月の活動をフォームで出す(紙で出す委員の分は、職員が同じフォームに入力する)
- 【自動】 フォームの送信をきっかけに Apps Script が動き、名簿と照らして委員と地区を確かめる
- 【自動】 件数の欄を規則で点検する(空欄、桁の誤り、前の月との大きな差)
- 【自動】 自由記述が書かれていれば、Claude API が4つの区分と分野に分け、根拠の文を写す
- 【自動】 「急ぎ」と出たものは、地区の担当の職員にすぐメールで知らせる
- 【自動】 毎月5日の朝、地区ごとの集計、未提出の委員、要対応の一覧をシートに書き出す
- 【人】 職員が要対応の一覧を上から読み、委員に話を聞いて、担当の係へつなぐかを決める
2番目から4番目が、フォームの1件ごとに動きます。 委員が出した日のうちに、記述の読み分けまで終わります。5番目の知らせは、月の途中に届いた記録にも効きます。
6番目の集計は、AIを使いません。 地区ごとの件数の合計と、名簿にあってフォームに無い委員の洗い出しは、スプレッドシートの値を数えるだけです。数える仕事は規則に、読む仕事はAIに、と分けています。
7番目は省けません。 一覧の区分はAIの読みで、つなぐかどうかは、委員の話を聞いた職員が決めます。
02今回想定するシステム構成
民生委員(スマートフォン・パソコン)/職員の代理入力(紙で出す委員) ▼ Google フォーム(毎月の活動の記録) ▼【トリガー】スプレッドシートの側のフォーム送信のトリガー Google Apps Script(課の共有のアカウント) ├──▶ 名簿と照らす(委員番号・地区) ├──▶ 件数の規則の点検(空欄/桁/前月との差) ├──▶ Claude API:自由記述の区分と分野(構造化出力) ├──▶ スプレッドシート:記録の一覧、要対応の一覧 └──▶ Gmail:急ぎの知らせ(地区の担当の職員へ) ▼【トリガー】時間主導型(毎月5日の朝) Google Apps Script ├──▶ 地区ごとの集計、未提出の委員の一覧 └──▶ Gmail:係長への下書き(集計と要対応の件数) ▼【人】職員が要対応の一覧を読み、委員に話を聞いてつなぐ
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Google Apps Script | Power Automate |
| 生成AI | Claude API(構造化出力) | OpenAI API、Azure OpenAI(Microsoft Foundry) |
| 受付 | Google フォーム | Microsoft Forms |
| 保管 | Google スプレッドシート(回答、名簿、記録の一覧、要対応の一覧、地区ごとの集計) | - |
| メール | Gmail(課の共有のアカウント) | - |
新しく足すのは、フォームと Apps Script と、一覧と集計のシートだけです。 名簿と地区ごとの集計表は今のものを使い、フォームの回答のスプレッドシートに名簿のシートを移します。
きっかけは、スプレッドシートの側のフォーム送信のトリガーです。 公式のページでは、このトリガーのイベントには、質問の名前と回答を持つ namedValues と、書き込まれた行の range が入ります。インストール型のトリガーは作った人のアカウントで動くとされているので、職員の個人のアカウントではなく、課の共有のアカウントで作ります。
AIは Claude API を UrlFetchApp で呼びます。 公式のページでは、構造化出力は output_config.format に type: "json_schema" を渡し、オブジェクトの additionalProperties を false にします。数値の minimum・maximum と文字列の minLength・maxLength は使えず、 使うと400のエラーになります。
代替候補から Gemini API を外しているのは、記述に子どもの世帯のことが含まれるからです。 民生委員は児童委員を兼ね、子どもと妊産婦の見守りも職務です。18歳未満の情報を扱う題材では、規約上の制限がある Gemini を避けます。
03どうやって実装するのか
処理の起点を決める
2つのトリガーを使います。 1つはフォームの送信、もう1つは毎月の集計です。
フォームの送信のトリガーは、委員が記録を出すたびに1件ずつ動きます。 スプレッドシートの側のフォーム送信のトリガーを、課の共有のアカウントでインストールします。1件ごとに名簿の照合、件数の点検、記述の読み分けまでを終えます。
毎月の集計は、時間主導型のトリガーで動かします。 公式のページでは、時間主導型のトリガーは月に1回まで間隔を空けられ、 実行の時刻は指定した時間帯の中でずらされることがあります。イベントには day-of-month が入るので、毎日朝に動かして、5日のときだけ集計する形にしても構いません。5日にするのは、定例会の前に地区ごとの資料をそろえるためです。
トリガーが失敗したとき、Apps Script は持ち主に「Summary of failures for Apps Script」の件名のメールを送るとされています。共有のアカウントのメールを係で見る決まりにし、失敗した月の集計を見落とさないようにします。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 活動の記録 | 委員番号、活動の月、分野別の相談・支援の件数、訪問・連絡の回数、行事・会議の参加、気になる世帯・相談の概要(自由記述) | Google フォーム |
| 委員の名簿 | 委員番号、地区、担当の区域、児童委員・主任児童委員の別、地区の担当の職員 | スプレッドシート |
| 前の月の記録 | 同じ委員の前の月の件数と、要対応の一覧の状態 | 記録の一覧のシート |
| 区分の決まり | 4つの区分の説明と例文、分野の説明 | スクリプトの中の指示文 |
質を決めるのは、フォームの自由記述の欄の書き方の決まりです。 委員には、世帯の氏名や住所を書かず、委員が手元で持つ整理番号(「A-3」など)で書くようにお願いします。職員が詳しく知りたいときは、委員に電話で聞きます。記録の一覧に氏名が並ばないことが、この構成の前提です。
フォームの件数の欄は、数字だけの欄にします。 「3件くらい」と書ける欄にすると、規則で数えられません。フォームの回答の検証で、0以上の整数だけを受けるように設定します。
データの取得方法を決める
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 回答の項目 | イベントの namedValues | 件数と自由記述 |
| 書き込まれた行 | イベントの range | 結果を同じ行の横に書く |
| 委員の地区と担当の職員 | 名簿のシート(委員番号で引く) | 地区の集計と知らせの宛先 |
| 前の月の件数 | 記録の一覧のシート | 大きな差の点検 |
| API のキー | スクリプトのプロパティ | Claude API の呼び出し |
API のキーはスクリプトのプロパティに置きます。 公式のページでは、スクリプトのプロパティはそのスクリプトのすべての利用者で共有され、ほかのスクリプトとは共有されないとされています。スクリプトを編集できる人を、課の担当者に絞ります。
AIに渡すのは、自由記述と、委員の種別(民生委員・主任児童委員)だけです。 委員番号、地区、件数は渡しません。区分の結果を記録の行に書き戻すのは、スクリプトが range の行番号で行います。
AIへ渡す前に整形する
- 名簿との照合 … 委員番号で名簿を引き、無ければ「名簿に無い委員番号」として職員に回します
- 同じ月の二重の提出 … 同じ委員番号と活動の月の行が既にあれば、新しい行に「再提出」の印を付けます
- 件数の点検(規則) … 空欄、3桁以上の数、前の月の3倍を超える数に印を付けます
- 自由記述の有無 … 空なら AIを呼ばず、区分を「記述なし」にします
- 氏名らしい書き方の印 … 「様」「さん」の前に漢字の続く書き方があれば、AIに渡す前に職員の確認の印を付けます
- 読み分け(AI) … 区分と分野と根拠の文を受け取ります
- 書き戻し … 記録の行の横に、点検の印、区分、根拠の文を書きます
3番目の「前の月の3倍」は、誤りを決めつけるためではありません。 行事の多い月は実際に増えます。印を付けて職員が見るだけにし、件数は書き換えません。
5番目を省くと、決まりを守らずに氏名を書いた記述が、そのまま外部の API に送られます。 印の付いた記述は、職員が氏名を整理番号に直してから読み分けに回します。
6番目の呼び出しは、たとえば次の形になります。 キーはスクリプトのプロパティから読み、指示文と JSON スキーマはスクリプトの中に置きます。
function classifyNote(note, memberType) {
const key = PropertiesService.getScriptProperties().getProperty('ANTHROPIC_API_KEY');
const body = {
model: MODEL_ID, // 使うモデルは課で決めて定数にする
max_tokens: 2000,
system: INSTRUCTION, // 下の「プロンプト」の全文
messages: [{ role: 'user', content: '種別:' + memberType + '\n記述:\n' + note }],
output_config: { format: { type: 'json_schema', schema: SCHEMA } }
};
const res = UrlFetchApp.fetch('https://api.anthropic.com/v1/messages', {
method: 'post', contentType: 'application/json', muteHttpExceptions: true,
headers: { 'x-api-key': key, 'anthropic-version': '2023-06-01' },
payload: JSON.stringify(body)
});
if (res.getResponseCode() !== 200) return null; // 呼び出し側で「未処理」にする
const text = JSON.parse(res.getContentText()).content[0].text;
return JSON.parse(text);
}
戻り値が null のときは、行に「未処理」と書いて終えます。 例外を投げてトリガーを失敗させると、同じ月に失敗のメールが何通も届きます。やり直しは翌朝の時間主導型のトリガーにまとめます。
AIに処理させる
させるのは、自由記述を4つの区分のどれかに分け、分野を付け、根拠にした委員の文を写すことだけです。
| 区分 | 当てはめる記述 |
|---|---|
urgent | 命や安全にかかわる様子(倒れていた、食事や水が取れていない、電気・ガス・水道が止まっている、けがやあざ、暴力や放置の疑い) |
referral | 介護・障害・生活困窮・子育てなどの支援の窓口につなぐことを考える様子 |
watch | 委員が見守りを続けている様子。変化は書かれていない |
report | 活動の報告だけ(行事の手伝い、研修への参加など) |
区分は1つの記述に1つではなく、世帯ごとに1つです。 1つの記述に3つの世帯のことが書かれていれば、整理番号ごとに3つの行を返させます。 世帯をまとめると、急ぎの1件が見守りの2件に埋もれます。
迷ったときは、重いほうに倒させます。 referral と urgent で迷えば urgent です。職員が読んで「急ぎではない」と直す手間は、急ぎを見落とす影響よりずっと小さいからです。
| させないこと | 理由 |
|---|---|
| 支援が要るかを決める | 委員の話を聞いて職員が決める |
| つなぐ先の機関を決める | 世帯の事情と制度の要件で変わる。区分の分野は候補にとどめる |
| 虐待などの疑いを断定する | 断定の言葉が一覧に残ると、確かめる前に扱いが決まってしまう |
| 件数を数える | 件数は数の欄から規則で出す |
| 記述を言い換えて要約する | 職員は委員の言葉で読む。言い換えると様子の度合いが変わる |
5行目がいちばん起きやすい失敗です。 「最近元気がない」が「抑うつ状態の可能性」のように書き換わると、委員が見たものより重く、または違う形で一覧に残ります。根拠の文は、委員の書いたままを写させます。
指示内容を固定する
あなたは市の地域福祉課の職員の補助として、民生委員・児童委員の
毎月の活動の記録の自由記述を読み、職員が先に読むべきものを分けます。
支援の要否、つなぐ先、疑いの有無は判断しません。職員が読んで決めます。
【入力】
- 自由記述(世帯は委員の整理番号で書かれています)
- 委員の種別(民生委員/主任児童委員)
【やること】
1. 記述を世帯(整理番号)ごとに分ける。整理番号が無い記述は「番号なし」で1つにする。
2. 世帯ごとに区分を urgent/referral/watch/report から1つ選ぶ。
迷ったら重いほう(urgent > referral > watch > report)を選ぶ。
3. 分野を elderly/disability/child/poverty/other から選ぶ(複数可)。
4. evidence に、区分の根拠にした記述の文をそのまま写す。
5. 委員が「電話で連絡済み」「〇〇につないだ」と書いていれば、
already_contacted を true にし、その文を contacted_quote に写す。
【厳守事項】
- 記述を言い換えないでください。evidence は書かれたままの文です。
- 病名、障害名、虐待などの言葉を、記述に無いのに使わないでください。
- 支援が要る、〇〇につなぐべき、と書かないでください。
- 件数を数えたり、記述から件数を推し量ったりしないでください。
- 氏名や住所らしい語が書かれていても、出力に写さないでください。
evidence に含まれる場合は、その語を「〇〇」に置き換えてください。
- 記述が活動の報告だけなら report にしてください。
「迷ったら重いほう」を順番まで書くのは、AIが真ん中に寄せるからです。 何も書かないと、迷った記述の多くが watch になります。一覧の上に来ないものは、その月に読まれません。
already_contacted を取らせるのは、委員がもう動いている件を見分けるためです。 委員が地域包括支援センターに連絡済みと書いていれば、職員の仕事はつなぐことではなく、つながったかを確かめることになります。
出力形式を固定する
構造化出力で、次の形の JSON を受け取ります。
{
"households": [
{
"ref": "A-3",
"category": "urgent | referral | watch | report",
"domains": ["elderly"],
"evidence": "一人暮らしの方、最近食事を取っていない様子。ゴミが出ていない",
"already_contacted": false,
"contacted_quote": ""
}
]
}
JSON スキーマでは、category と domains の値を enum で決め、 すべてのオブジェクトに additionalProperties: false を付けます。スキーマの中心は次の形です。
{
"type": "object",
"properties": {
"households": { "type": "array", "items": {
"type": "object",
"properties": {
"ref": { "type": "string" },
"category": { "type": "string", "enum": ["urgent", "referral", "watch", "report"] },
"domains": { "type": "array", "items": { "type": "string",
"enum": ["elderly", "disability", "child", "poverty", "other"] } },
"evidence": { "type": "string" },
"already_contacted": { "type": "boolean" },
"contacted_quote": { "type": "string" }
},
"required": ["ref", "category", "domains", "evidence", "already_contacted", "contacted_quote"],
"additionalProperties": false } }
},
"required": ["households"],
"additionalProperties": false
}
1つ目の理由は、category で一覧を並べられることです。 要対応の一覧のシートは、urgent → referral → watch の順に並べ、report は一覧に載せません。 職員は上から読みます。
2つ目は、households の配列で世帯ごとの行にできることです。 一覧には、委員番号、地区、整理番号、区分、分野、根拠の文、連絡済みかの列が並びます。職員が対応したら、同じ行に「対応」「つないだ先」「確かめた日」を書きます。
3つ目は、毎月の集計に区分の件数をそのまま使えることです。 地区ごとの集計に「urgent の件数」「referral の件数」の列を足し、どの地区で要対応が増えているかを、第3章の(d)の答えとして見られます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| Google フォーム | スプレッドシートの側のフォーム送信のトリガー | 記録を受け取る |
| 名簿のシート | SpreadsheetApp で読む | 委員の地区と担当の職員を引く |
| Claude API | UrlFetchApp(構造化出力) | 自由記述の区分と分野 |
| 記録の一覧・要対応の一覧のシート | SpreadsheetApp で書く | 点検の印、区分、根拠の文 |
| Gmail | GmailApp.sendEmail | 急ぎの知らせ(宛先は名簿の担当の職員に限る) |
| Gmail | GmailApp.createDraft | 毎月の集計の、係長あての下書き |
急ぎの知らせは、宛先を名簿の「担当の職員」の列に限ります。 公式のページでは、sendEmail はメールを送る操作、createDraft は下書きを作る操作です。送る操作を使うのは、宛先が庁内の職員のアドレスに決まっているときだけにします。委員への連絡は、職員が電話で行います。
知らせの本文には、委員番号と整理番号と区分だけを書き、根拠の文は書きません。 本文を読むには要対応の一覧のシートを開く形にし、メールの中に世帯の様子を残しません。
人が確認する
職員が、要対応の一覧のすべての行を読みます。
urgentを先に読む … 委員に電話で様子を聞き、担当の係につなぐかを決めます。知らせが届いたその日に行いますreferralを読む … 委員と話し、支援の窓口を案内するか、見守りを続けるかを決めますalready_contactedの行を確かめる … つながった先に、つながったかを確かめます- 区分を直す … 読んで区分が違えば直し、直した理由を一言書きます
- 件数の印を確かめる … 点検の印の付いた件数を委員に確かめ、誤りなら直します
目標は、180件をならして1件3分です。
例外に対処する
| 起きること | 対応 |
|---|---|
| 名簿に無い委員番号 | 区分の処理をせず、職員に回す。番号の打ち間違いか、新任の委員かを確かめる |
| 同じ月の二重の提出 | 新しい行に「再提出」の印。集計は新しい行で数え、前の行は残す |
| 自由記述に氏名が書かれている | AIに渡さず職員の確認へ。整理番号に直してから読み分けに回す |
| API がエラーを返す | 区分を「未処理」にして行に書き、翌朝の時間主導型のトリガーでやり直す |
| 締切を過ぎても出ていない委員 | 毎月の集計で未提出の一覧に出す。職員が電話で様子を聞く |
| 紙で出す委員 | 職員が同じフォームに代理で入力する。入力者の欄に職員の名前を入れる |
| 急ぎが記録で届く | 知らせを受けた職員が委員に電話で確かめる。委員には電話で知らせる決まりを改めて伝える |
最後の行は、この構成の限界です。 月の途中で記録が出されても、AIの知らせは職員が見て初めて動きます。命にかかわることは、記録ではなく電話で、という決まりがあってはじめて、AIの網が意味を持ちます。
記録を残す
- フォームの回答の全文(回答のスプレッドシート)
- 点検の印と、区分・分野・根拠の文(記録の一覧)
- 要対応の一覧の対応の記録(対応した職員、つないだ先、確かめた日)
- 職員が区分を直した記録と理由
- 急ぎの知らせを送った日時と宛先
- 毎月の地区ごとの集計(月ごとのシート)
04実装レベルの3段階
半自動化で、1件12分が6分程度になります。 転記と集計はなくなりますが、自由記述を読んで拾う作業が残ります。本格構成で3分になり、この段階が本記事の想定です。 差が大きいのは、180件の記述を全部読む作業が、要対応の一覧を上から読む作業に変わるからです。 段階を飛ばさないでください。 半自動化で委員がフォームに慣れるまでに、数か月かかることがあります。 記述の書き方の決まり(整理番号で書く)が守られてから、読み分けを足します。
05工数削減シミュレーション
導入後 180件 × 3分 ÷ 60 = 9 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 民生委員・児童委員の事務局を受け持つ市町村の地域福祉の担当課や、事務を受託する社会福祉協議会で、委員から毎月活動の記録を受け取り、件数の集計と気になる世帯の記述の読み取りを職員が手で行っている場合。委員が百人から数百人いて、記録の記述が地区の担当の職員にしか読まれていない場合。Google Workspace を使っている、または使える場合。
- 委員が数十人で、職員が全員の記録を読み切れている場合。活動の記録を紙だけで受けることが決まっていて、フォームに移せない場合。急ぎの連絡を毎月の記録で受ける運用の場合(急ぎは電話で受ける決まりが先)。なお、支援が要るかどうか、どの関係機関につなぐか、虐待などの疑いの判断は、この構成では代替できません。
07最小構成で試す方法
- 先月の記録票から30枚を選ぶ(職員が付箋を付けた記述を必ず入れる)
- 自由記述を、氏名を整理番号に直して書き写す
- 手元のAIサービスに区分の説明と1枚分の記述を貼り、「世帯ごとに区分を選び、根拠の文を書かれたまま写して。迷ったら重いほうに。支援の要否と病名を書かないで」と指示する
- 出てきた区分を、職員の付箋と並べる
30枚は必ずやってください。 フォームとスクリプトを作る前に、「委員の記述から、職員が拾っていたものを拾えるのか」を確かめます。
| 出てきた内容 | 判断 |
|---|---|
付箋の付いた記述が urgent か referral に入っている | フォームとスクリプトを作る段階に進む |
| 記述を言い換えたり、病名を書いたりする | 指示の書き方で直る。構成は有効 |
付箋の無い記述まで urgent が多い | 区分の例文を足す。重いほうに倒すのは意図どおりなので、件数を見て決める |
1行目の逆、付箋の付いた記述が watch や report に入ったときは、その記述を必ず読み直してください。 委員の書き方が控えめで、様子の度合いが文に出ていないことがあります。その場合は、区分の例文に、その書き方を足すことで直ります。職員が付箋を付けた理由を一言ずつ書き出しておくと、例文がそのまま作れます。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 記述に氏名が書かれる | 整理番号で書く決まりを伝え、氏名らしい書き方に印を付けてAIに渡さない |
| 急ぎを記録で知らせてくる | 電話で知らせる決まりを先に伝える。AIの急ぎは最後の網 |
| AIが記述を言い換える | 根拠の文を書かれたままにさせる |
| 迷った記述が見守りに寄る | 重いほうに倒す順番を指示に書く |
| 件数の欄に文字が入る | フォームの回答の検証で整数だけを受ける |
| トリガーが個人のアカウントで動く | 課の共有のアカウントで作る。異動で止まらない |
| JSON スキーマで400のエラー | 数値の最小・最大、文字列の長さの制約を使わない |
| 委員がフォームに慣れない | 紙の記録票を残し、職員が代理で入力する期間を置く |
上の2行が、この構成の失敗のほとんどです。 どちらも、AIの前に、委員との決まりで止めるものです。スクリプトの作りより、地区の定例会での説明に時間をかけてください。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 地域の世帯の暮らしの様子、高齢者・障害者・子ども・生活に困っている世帯についての委員の観察、委員番号と担当の区域です。要配慮個人情報に当たりうる、きわめて機微な情報です。
- 世帯を特定できる情報を記録に入れない … 委員に、氏名や住所ではなく整理番号で書いてもらいます。厚生労働省のページでは、民生委員・児童委員は要援護者の私生活に立ち入り、生活上、精神上、肉体上の秘密に触れることが多いため、守秘義務が課せられています。 記録の書き方もその前提で決めます
- 外部の API に渡す前に、市の決まりに照らす … 自由記述を Claude API に渡すことが、市の個人情報の取扱いの決まりと、外部のサービスの利用の決まりで認められるかを、情報政策と個人情報保護の担当と確かめます。認められない場合は、最小構成と半自動化(AIを使わない集計)までにします
- AIに判断させない … 区分は職員が読む順番を決めるためのもので、支援の要否や疑いの有無を決めるものではありません
- 知らせのメールに世帯の様子を書かない … 委員番号と整理番号と区分だけにし、根拠の文はシートで読みます
- シートの共有を絞る … 要対応の一覧は、係の職員だけが開けるようにします。委員や他の課に共有しません
- API のキーを守る … スクリプトのプロパティは、スクリプトの利用者で共有されます。スクリプトを編集できる人を絞ります
誤りが起きた場合のリスクは、急ぎの記述を見落とすことと、世帯の様子を外へ漏らすことの2つです。 前者は電話の決まりと重いほうに倒す区分で、後者は整理番号で書く決まりと共有の絞り込みで止めます。
10まず何から始めるか
1週目:庁内の確認を取る
自由記述を外部の API に渡してよいかを、情報政策と個人情報保護の担当と確かめます。ここが決まらないうちは、AIの読み分けを作りません。
2週目:30枚で試す
先月の記録票30枚の記述を、氏名を整理番号に直して手元のAIサービスに貼り、区分を選ばせます。職員の付箋の付いた記述を拾えているか、記述を言い換えていないかを最優先で見ます。
3週目:フォームと決まりを作る
フォームの件数の欄を整数だけにし、自由記述の欄に「整理番号で書く」の説明を入れます。地区の定例会で、委員に書き方と「急ぎは電話で」の決まりを説明します。
4週目:集計のスクリプトを作る
フォーム送信のトリガーで名簿の照合と件数の点検を、時間主導型のトリガーで地区ごとの集計と未提出の一覧を作ります。この時点ではAIを呼びません。
2か月目以降: 委員がフォームに慣れたら、Claude API の読み分けと要対応の一覧、急ぎの知らせを足します。職員が区分を直した記録を3か月分並べて指示を見直し、1件12分が何分になったかを実測します。職員が毎月の要対応の一覧を、5日のうちに読み終えられるようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 民生委員の職務(民生委員法第14条)として、住民の生活状態の把握、生活に関する相談と助言、福祉サービスの情報の提供、福祉事務所その他の関係行政機関の業務への協力などがあること。児童委員の職務(児童福祉法第17条)に児童及び妊産婦の生活と環境の状況の把握などがあること | 厚生労働省: 民生委員・児童委員はどのような活動をしているのですか? | 2026-10-26 |
| 民生委員・児童委員が、要援護者の私生活に立ち入り生活上、精神上、肉体上の秘密に触れることが多いため、守秘義務が課せられていること | 厚生労働省: 民生委員・児童委員にはどのような義務があるのですか? | 2026-10-26 |
| インストール型のトリガーが作った人のアカウントで動くこと。時間主導型のトリガーが月に1回まで間隔を空けられること。Sheets と Forms のフォーム送信のトリガーがあること。失敗時に「Summary of failures for Apps Script」のメールが届くこと | Google: Installable triggers | 2026-10-26 |
Sheets のフォーム送信のイベントに namedValues・range・values が入ること。時間主導型のイベントに day-of-month が入ること | Google: Event objects | 2026-10-26 |
| 1回の実行が6分まで、トリガーの合計の実行時間が Workspace で1日6時間、URL Fetch が Workspace で1日100,000回、トリガーが1人1スクリプト20個までであること | Google: Quotas for Google Services | 2026-10-26 |
| スクリプトのプロパティがそのスクリプトのすべての利用者で共有され、ほかのスクリプトとは共有されないこと | Google: Properties Service | 2026-10-26 |
構造化出力が output_config.format に type: "json_schema" を渡す形であること。オブジェクトの additionalProperties を false にすること。数値の minimum・maximum、文字列の minLength・maxLength が使えず400になること。enum の値が大文字と小文字だけ違って返ることがあること | Claude Docs: Structured outputs | 2026-10-26 |
支援の要否、つなぐ先の機関、虐待などの疑いの判断は、職員と関係の係が、委員の話を聞いて行ってください。 本記事は厚生労働省のページと、Google・Anthropic の公式ページで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1825)についてのご相談はこちらから。
