Media > AI活用ユースケース > 人事 > 毎月のパルスサーベイの自由記述をテーマと感情で分類し、部署ごとの要点にまとめて人事と管理職へ返す

毎月のパルスサーベイの自由記述をテーマと感情で分類し、部署ごとの要点にまとめて人事と管理職へ返す

実装ステータス:構成例 技術的に実現可能な構成として設計したもの。自社未検証

毎月のパルスサーベイで集まる自由記述を、決めておいたテーマと感情の区分で1件ずつ分類し、部署ごとの件数と要点にまとめます。管理職には部署の要約を、人事には要対応の記述の一覧を分けて返します。

サマリー
生成AI
ChatGPT/Claude/Gemini
連携・自動化
Google Apps Script/Make/Power Automate/Python
対象業界
IT・SaaS/人材/小売/製造
対象部門
人事
対象業務
分類・仕分け/集計・分析
主な課題
データ分析に時間がかかる/人手が足りない/属人化している
AIで行う処理
分類
主な効果
品質標準化/対応スピード向上/工数削減
導入難易度
★☆☆☆☆
実装レベル
半自動化
費用感
API連携(中)
人間の確認
条件付き
現在工数
32h/月
AI導入後
8h/月
想定削減
75%
年間削減
288h
モデル条件による試算値です。実在企業の実績ではありません。

01導入前 / 導入後の業務フロー

導入前(Before)
  1. フォームの回答期間が終わったら、回答のスプレッドシートから自由記述の列を部署ごとに並べ替える
  2. 担当2名で部署を分け、自由記述を1件ずつ読む
  3. 1件ごとに、テーマと「前向き/不満/要望/その他」を隣の列に手で書く
  4. ハラスメントや体調の話が書かれていれば、別のシートに写して人事の責任者に知らせる
  5. 部署ごとにテーマの件数を数え、目立つ声を数件選ぶ
  6. 管理職ごとに、部署の要点を文章にしてメールで送る
  7. 全社の傾向を人事の責任者向けにまとめる
導入後(After)
  1. 自動フォームの回答期間が終わった翌朝、スクリプトが回答のシートから自由記述を取り出す
  2. 自動氏名・社員番号・メールアドレスらしい文字列を伏せ字にし、部署の回答数を数える
  3. 自動自由記述を20件ずつまとめて Gemini API に送り、テーマ・感情・要対応の印を付けさせる
  4. 自動返ってきた区分が決めた値の中にあるかを確かめ、外れたものは「再分類待ち」にする
  5. 自動部署ごとにテーマと感情の件数を集計し、回答が5件未満の部署は上の組織にまとめる
  6. 自動部署ごとに、件数と原文を言い換えた要点の下書きを作らせる
  7. 人人事の担当が、要対応の印が付いた記述と「その他」に入った記述を原文で読む
  8. 人人事の担当が、部署ごとの要点の下書きを読み、書き手が分かる言い回しが残っていないかを確かめる
  9. 人確かめた要点を、管理職へのメールの下書きから送る
  10. 自動分類の結果と、人が直した区分をシートに残す
各工程の詳しい説明を読む
  1. フォームの回答期間が終わったら、回答のスプレッドシートから自由記述の列を部署ごとに並べ替える
  2. 担当2名で部署を分け、自由記述を1件ずつ読む
  3. 1件ごとに、テーマと「前向き/不満/要望/その他」を隣の列に手で書く
  4. ハラスメントや体調の話が書かれていれば、別のシートに写して人事の責任者に知らせる
  5. 部署ごとにテーマの件数を数え、目立つ声を数件選ぶ
  6. 管理職ごとに、部署の要点を文章にしてメールで送る
  7. 全社の傾向を人事の責任者向けにまとめる

(a)読み終わる前に次の回が来る。 480件を2名で読み、分類して文章にするまでに、ほぼ2週間かかります。管理職に返るのは回答から3〜4週間後で、書かれた出来事はもう過ぎています。 毎月取る意味が薄れ、回答する側にも「出しても返ってこない」と映ります。

(b)分類の付け方が人によって違う。 「残業が続いて上司に相談しにくい」は、業務量の話か、上司との関係の話か。担当者によって付ける区分が分かれ、部署の件数が担当者の癖で動きます。 担当を入れ替えた月に、ある部署の「上司との関係」が急に増えたように見えたことがあります。

(c)管理職への返し方が決まらない。 原文を貼れば誰が書いたか分かる、要約すれば担当者の書き方で印象が変わる。結局、担当者がその都度判断していて、部署によって返る中身の濃さが違います。

(d)要対応の記述が埋もれる。 4番目は、読んだ担当者が気づいたときだけ行われます。疲れてきた後半の部署ほど、見落としが起きやすくなります。 気づくのが遅れると、対応が1か月遅れます。

  1. 【自動】 フォームの回答期間が終わった翌朝、スクリプトが回答のシートから自由記述を取り出す
  2. 【自動】 氏名・社員番号・メールアドレスらしい文字列を伏せ字にし、部署の回答数を数える
  3. 【自動】 自由記述を20件ずつまとめて Gemini API に送り、テーマ・感情・要対応の印を付けさせる
  4. 【自動】 返ってきた区分が決めた値の中にあるかを確かめ、外れたものは「再分類待ち」にする
  5. 【自動】 部署ごとにテーマと感情の件数を集計し、回答が5件未満の部署は上の組織にまとめる
  6. 【自動】 部署ごとに、件数と原文を言い換えた要点の下書きを作らせる
  7. 【人】 人事の担当が、要対応の印が付いた記述と「その他」に入った記述を原文で読む
  8. 【人】 人事の担当が、部署ごとの要点の下書きを読み、書き手が分かる言い回しが残っていないかを確かめる
  9. 【人】 確かめた要点を、管理職へのメールの下書きから送る
  10. 【自動】 分類の結果と、人が直した区分をシートに残す

7番目と8番目が、人の仕事として残る部分です。 要対応の記述は、人事が原文を読んで対応を決めます。部署の要点は、AIが言い換えた後でも出来事の具体さから書き手が分かることがあるので、送る前に人が読みます。 送信は人が行います。

分類そのものには人が1件ずつ手を入れません。 迷う記述はAIに「その他」と「確信が低い」を付けさせ、その分だけを人が見ます。全件を人が見直すと、32.0時間がほとんど減りません。

02今回想定するシステム構成

構成図
Google フォーム(パルスサーベイ。メールアドレスは集めない)
   ▼ 回答のスプレッドシート
【トリガー】時間主導型(毎日1回。回答期間の終了翌日だけ処理する)
Google Apps Script
   ├──▶ 自由記述の取り出しと伏せ字
   ├──▶ 部署ごとの回答数の確認
   ▼
Gemini API(有料の枠、構造化出力)
   │   ① テーマ(固定の7区分) ② 感情(4区分) ③ 要対応の印
   ▼
Google Apps Script ── 値の確認、部署ごとの集計、少人数の部署のまとめ
   ▼
Gemini API ── 部署ごとの要点の下書き(言い換え)
   ▼
Google Apps Script ── 結果のシートへ書き出し、管理職宛てメールの下書き
   ▼
【人事が要対応の記述と要点を確かめてから送る】
役割想定する製品代替候補
実行環境Google Apps ScriptPower Automate、Make、Python
生成AIGemini API(有料の枠、構造化出力)Claude API、OpenAI API
シートGoogle スプレッドシート(回答・部署マスタ・分類結果・区分の定義)Microsoft 365 のブック
メールGmail(管理職への返送の下書き)Outlook

新しく足すのは、スクリプトと Gemini API の契約だけです。 フォームも回答のシートも、今使っているものをそのまま使います。スクリプトが書き込むのは、分類結果のシートだけです。 回答のシートは読むだけにし、元の回答には手を入れません。

土台になるのは、Google Apps Script のインストール型トリガーです。 時間主導型のトリガーは毎分から毎月までの間隔で関数を動かせ、インストール型トリガーは作成した人のアカウントで実行されます。 回答のシートを読める人事の担当者のアカウントで作り、ほかの人の権限で動かないようにします。

スクリプトの実行時間には上限があります。 1回の実行は6分まで、トリガーの合計の実行時間は Google Workspace のアカウントで1日6時間まで、外部へのURLの呼び出しは1日100,000回までとされています。480件を1件ずつ API に送ると6分に近づくので、20件ずつまとめて送り、どこまで終わったかを記録して続きから再開します。

Gemini API は有料の枠で使います。 規約では、有料のサービスでは送ったプロンプトや応答を Google が製品の改善に使わないとされています。一方、無料のサービスでは人が入力と出力を読むことがあり、機密や個人の情報を送らないよう書かれています。 社員の声を扱う以上、無料の枠では使いません。

構造化出力は、いまの公式の書き方に合わせます。 /v1beta/interactions に response_format を付け、mime_type を application/json、schema にJSONスキーマを入れます。スキーマでは enum で選択肢の値を列挙でき、分類の区分を決めた値の中に閉じ込められます。

03どうやって実装するのか

Step1

処理の起点を決める

時間主導型のトリガーを、毎朝6時台に1つ置きます。 毎日動きますが、処理するのは回答期間が終わった翌日だけです。回答期間の終了日は、区分の定義のシートに人事が毎月書き込みます。終了日の翌日でなければ、スクリプトは何もせずに終わります。

フォームの送信のたびには動かしません。 送信ごとのトリガーでも1件ずつ分類はできますが、回答期間の途中で部署の件数を出すと、回答の早い人の声だけで部署の傾向が決まって見えます。 回答が出そろってから一度に分類し、集計します。

処理は3つの段に分けます。 1段目で取り出しと伏せ字、2段目で分類、3段目で集計と要点の下書きです。どの段のどの件まで終わったかをスクリプト プロパティに残し、6分に近づいたら区切って、次の実行(同じ朝の15分後に置いた2つ目のトリガー)で続きから始めます。

同じ回が二度処理されないようにします。 処理を始めるときにロックを取り、分類結果のシートにその回の印があれば止まります。手で再実行したときに二重に集計されると、部署の件数が倍になります。

Step2

入力データを集める

データ中身取得元
回答回答日時、部署(選択式)、5段階評価5問、自由記述回答のスプレッドシート
部署マスタ部署コード、部署名、上の組織、管理職のメールアドレス、在籍人数人事の部署マスタ
区分の定義テーマ7区分と感情4区分の名前と説明、迷ったときの決め方の例区分の定義のシート
要対応の定義人事だけに回す記述の種類と、その例区分の定義のシート
前月までの集計部署×テーマ×感情の件数分類結果のシート

AIに渡すのは、伏せ字にした自由記述と、区分の定義だけです。 部署名も5段階評価の点数も渡しません。部署名を渡すと、AIはその部署らしい分類に寄せてきます。 点数を渡すと、点の低い回答の記述を不満に寄せます。記述そのものだけで区分を決めさせます。

区分の定義が、分類の質を決めます。 テーマの名前だけを渡すと、「残業が続いて上司に相談しにくい」の行き先が毎回揺れます。「業務量の多さそのものが主語なら業務量、相談のしにくさが主語なら上司との関係」のように、迷ったときの決め方を例とともに書いておきます。 これは今の担当2名が迷ってきた記述から作ります。

Step3

データの取得方法を決める

回答のシートは、スプレッドシートの範囲をまとめて読みます。回答期間の開始日と終了日で回答日時を絞り、その回の分だけを取り出します。 フォームのイベントの値を使う方法もありますが、この構成はまとめて処理するため、シートから読むほうが単純です。

取るものどこから何に使うか
その回の自由記述と部署回答のシート(回答日時で絞る)分類の対象
部署の上の組織と在籍人数部署マスタ少人数の部署のまとめ先
管理職のメールアドレス部署マスタ返送の下書きの宛先
区分の定義と要対応の定義区分の定義のシートプロンプトに埋め込む
前月の件数分類結果のシート前月との比較

Gemini API の鍵はスクリプト プロパティに置きます。 プロパティは文字列のキーと値の組で保存され、アプリ全体の設定を持たせる場所とされています。スクリプトの本文に鍵を書かないでください。 スクリプトの編集権限を持つ人を、人事の担当者に限ります。

API の呼び出しは UrlFetchApp で行います。 muteHttpExceptions を true にすると、失敗した応答でも例外にならずに応答が返るので、状態コードを見て、再試行するか「再分類待ち」にするかを決められます。

Step4

AIへ渡す前に整形する

  1. 回の絞り込み … 回答日時が回答期間に入るものだけを取り出します。期間外の回答は数に入れません
  2. 空欄と記号だけの記述の除外 … 「特になし」「なし」「—」などは分類せず、「記述なし」として数えます
  3. 伏せ字 … メールアドレス、社員番号の形の数字、電話番号の形の数字を正規表現で [伏せ字] に置き換えます
  4. 人名の候補の伏せ字 … 部署マスタの管理職の氏名と、社員名簿の姓が記述に含まれていれば [氏名] に置き換えます。AIに渡す前に、こちらで消しておきます
  5. 長すぎる記述の扱い … 1件が800字を超えるものは分割せず、そのまま1件として送ります。ただし1回にまとめる件数を減らします
  6. 部署の回答数の確認 … 部署ごとの自由記述の件数を数え、5件未満の部署には「上の組織にまとめる」の印を付けます
  7. 20件ずつのまとまりにする … 部署を混ぜて20件ずつに分けます。同じまとまりに1つの部署だけが入らないよう、並び順を回答日時で混ぜます

4番目を軽く見ないでください。 自由記述には「○○さんの指示が毎回変わる」のように、特定の社員の名前が書かれることがあります。 AIに渡す前に消しておけば、要点の下書きに名前が残ることもありません。名簿に無い呼び方(あだ名など)は消せないので、8番目の人の確認で拾います。

7番目で部署を混ぜるのは、まとまりの中の他の記述に引っ張られないためです。 同じ部署の不満が20件並ぶと、AIは中立の記述まで不満に寄せることがあります。

Step5

AIに処理させる

させるのは2つです。 1つ目は、自由記述1件ずつにテーマ・感情・要対応の印を付けること。2つ目は、集計が済んだ部署ごとに、件数の多いテーマについて原文を言い換えた要点を書くことです。

させること中身判断できないときの扱い
テーマの分類固定の7区分から主なテーマを1つ、関係するテーマを最大2つどれにも当たらなければ「その他」
感情の分類前向き/不満/要望/中立 の4区分両方が混ざるときは主な方。迷えば low_confidence
要対応の印ハラスメント、心身の不調、法令違反の疑い、退職の意思のいずれかをうかがわせるかうかがわせる語があれば印を付ける。迷えば付ける側
分類の根拠区分を決めた記述の中の語句原文の語句をそのまま写す
部署の要点件数の多いテーマごとに、言い換えた要点を2〜3行件数が少なければ「目立った声なし」

要対応の印だけは「迷えば付ける」にしています。 テーマと感情は、迷えば「その他」や低い確信で人に回せば済みます。要対応の記述を見落とすと、対応が1か月遅れます。 付けすぎた分は人事が原文を読んで外せばよく、見落とすより安くつきます。

させないこと理由
書き手の推定匿名で取ったサーベイの前提を壊す
部署や管理職の良し悪しの評価集計の目的と違う。評価は人が行う
要対応の記述への対応の決定人事が原文を読んで決める
区分にない新しいテーマを作ること月ごとの比較ができなくなる
原文の引用を要点に入れること言い回しから書き手が分かる
件数の集計スクリプトが数える。AIに数えさせない

いちばん起きやすい失敗は、5行目です。 要点を書かせると、AIは「『会議が多すぎて資料を作る時間がない』という声がありました」のように原文を引用して具体的にしようとします。引用は、部署の人数が少ないほど書き手の見当をつけやすくします。 言い換えを指示し、さらに原文と同じ8文字以上の並びが要点に残っていないかをスクリプトで確かめます。

Step6

指示内容を固定する

1つ目の指示(分類)は次のとおりです。

あなたは人事部で、社員向けアンケートの自由記述を分類する立場です。
記述ごとに、決められた区分の中から選んでください。新しい区分を作らないでください。

【テーマ(主なテーマを1つ、関係するテーマを最大2つ)】
{theme_definitions}
(各テーマの説明と、迷ったときの決め方の例を含む)

【感情(1つ)】
- positive ... 前向き・満足・感謝
- negative ... 不満・困りごと
- request .... 具体的な要望・提案
- neutral .... 事実の報告など、どれにも当たらない

【要対応の印(当てはまるものをすべて)】
- harassment ... 言動による嫌がらせ・威圧をうかがわせる
- health ....... 心身の不調・眠れない・限界などをうかがわせる
- compliance ... 法令や社内規程に反する行為の疑い
- resignation .. 退職や異動を強く考えていることをうかがわせる
うかがわせる語句があれば印を付けてください。迷ったときは付けてください。

【厳守事項】
- 書いた人が誰か、どの部署かを推測しないでください。
- 部署や上司の良し悪しを判断しないでください。
- evidence には、区分を決めた語句を記述からそのまま写してください。
- 記述の内容が短く区分を決めきれないときは、theme を other、
  confidence を low にしてください。
- [伏せ字][氏名]の中身を推測しないでください。
- 入力の id をそのまま返し、件数を増やしたり減らしたりしないでください。

【記述(id と本文)】{comments}

2つ目の指示(部署の要点)は次のとおりです。

あなたは人事部で、部署の管理職へ返す要点の下書きを書く立場です。
次の件数の表と、テーマごとの記述をもとに、件数の多いテーマを最大3つ選び、
テーマごとに要点を2〜3行で書いてください。

【厳守事項】
- 記述の文をそのまま引用しないでください。必ず言い換えてください。
- 特定の出来事・日付・会議名・案件名・人数など、書いた人が分かる具体を書かないでください。
- 「〜という声が複数ありました」のように、件数の表の範囲で書いてください。
  件数が1件だけのテーマは要点に書かないでください。
- 部署や管理職の良し悪しを評価しないでください。改善策を指示しないでください。
- 要対応の印が付いた記述は渡していません。触れないでください。

【件数の表】{counts}
【テーマごとの記述(伏せ字済み)】{comments_by_theme}

「件数が1件だけのテーマは書かない」が、匿名を守るもう一つの線です。 1件だけの声は、それを書いた人と結び付きやすいからです。1件の声は人事が原文で読み、要点からは外します。

部署の要点を作るときは、要対応の印が付いた記述を最初から外して渡します。 指示で「触れない」と書くだけでなく、入力に入れないことで守ります。

Step7

出力形式を固定する

分類は次の形のJSONで受け取ります。 response_format の schema で、theme と sentiment と flags の値を enum で列挙しておきます。

{
  "results": [
    {
      "id": "R2026-10-0137",
      "theme_main": "workload",
      "theme_sub": ["manager_relation"],
      "sentiment": "negative",
      "flags": [],
      "confidence": "high | low",
      "evidence": "締め切りが重なって毎週残業"
    }
  ]
}

1つ目の理由は、enum で区分を決めた値の中に閉じ込められることです。 自由な文で返させると「業務負荷」「仕事量」「忙しさ」が別の区分として並び、集計のたびに名寄せが要ります。 それでも公式の説明では値の確かめはアプリケーションで行うようにとあるので、スクリプトで区分の一覧と照らし、外れたものは「再分類待ち」にします。

2つ目は、id で入力と出力を突き合わせられることです。 20件送って19件しか返らない、同じ id が二度返る、といったことをスクリプトで見つけられます。数が合わないまとまりは、まとまりごと送り直します。

3つ目は、flags を部署の集計と別の道に流せることです。 flags が空でない記述は、部署の要点の入力から外し、人事の要対応の一覧にだけ載せます。

部署の要点は次の形で受け取ります。

{
  "dept_code": "D14",
  "highlights": [
    { "theme": "workload", "count": 9, "summary": "" }
  ],
  "no_clear_theme": false
}

count はAIに数えさせず、スクリプトが入れた値をそのまま返させます。 返ってきた count が件数の表と違えば、その部署の要点は使いません。

Step8

システムへ連携する

つなぎ先方式内容
回答のスプレッドシート読み取りのみその回の自由記述と部署
部署マスタ・区分の定義読み取りのみまとめ先、宛先、区分の説明
Gemini APIUrlFetchApp で呼び出し分類と、部署の要点の下書き
分類結果のシート書き込み1件ごとの区分、部署×テーマ×感情の件数
Gmail下書きの作成管理職ごとの返送メールの下書き

管理職へのメールは下書きまでにします。 人事の担当が要点を読み、書き手が分かる言い回しが残っていないかを確かめてから送ります。自動で送ると、確認の前に要点が管理職に届きます。

要対応の一覧は、人事の責任者と担当だけが開けるシートに分けて書きます。 分類結果のシートと同じブックに置くと、共有の範囲を広げたときに一緒に見えてしまいます。

Step9

人が確認する

  1. 要対応の一覧を最初に読む … 印が付いた記述を原文で読み、対応するかを決めます。付けすぎを外すのも人の仕事です
  2. 「その他」と low の記述を読む … 区分を直したら、直した区分を結果のシートに書きます
  3. 部署の要点を読む … 書き手が分かる具体(出来事、時期、少人数の役割名など)が残っていないかを見て、残っていれば消します
  4. 少人数の部署のまとめ先を確かめる … 上の組織にまとめた部署が、まとめた先でも5件未満なら、その回は返しません
  5. 送る … 下書きを確かめてから、人が送ります

3番目を省かないでください。 AIが言い換えても、「新しい評価制度の説明会のあと」のような時期の手がかりが残ることがあります。部署の人数が少ないほど、その手がかりだけで書き手の見当がつきます。

目標は、480件をならして1件1分です。 要対応と「その他」と low を合わせて1〜2割ほどを人が原文で読み、残りは集計の表と要点を読むだけ、という想定です。

Step10

例外に対処する

起きること対応
API が失敗の状態コードを返すそのまとまりを最大2回送り直し、だめなら「再分類待ち」にして翌朝の実行で続ける
返ってきた区分が決めた値の外その件を「再分類待ち」にし、単独で送り直す。2回外れたら人へ
返ってきた件数が送った件数と違うまとまりごと送り直す
6分に近づいたどこまで終わったかを記録して止め、次のトリガーで続きから
部署を選ばずに回答した「部署不明」として全社の集計にだけ入れる
自由記述が外国語そのまま分類させる。要点の下書きは日本語で書かせる
部署の自由記述が5件未満上の組織にまとめる。まとめても5件未満ならその回は返さない
要点に原文と同じ並びが残ったその部署の要点を作り直す。2回続けば人が書く
組織変更で部署コードが変わった部署マスタの旧コードと新コードの対応を見て、前月との比較をつなぐ

いちばん多いのは、下から3行目と、少人数の部署の扱いです。 どちらもAIの精度ではなく、匿名を守る線の問題です。線を下げて返す部署を増やすより、返さない回があってよいと先に決めておくほうが、回答する側の信頼を保てます。

Step11

記録を残す

  • その回の回答期間、送った件数、分類できた件数、「再分類待ち」の件数
  • 1件ごとの区分(theme_main、theme_sub、sentiment、flags、confidence、evidence)
  • 人が区分を直した記録 … どの記述を、どの区分からどの区分へ変えたか
  • 部署×テーマ×感情の件数と、上の組織にまとめた部署の一覧
  • 管理職に送った要点の最終版と、送った日時
  • そのとき使った区分の定義の版

2つ目の記録には、自由記述の原文を持たせません。 原文は回答のシートにあり、結果のシートには id と区分だけを残します。原文の写しを増やすほど、見られる場所が増えます。

最後の行は、区分の定義を直したときに効きます。 定義を変えると、前の月の件数と並べられなくなります。どの月がどの版で分類されたかが残っていれば、比べてよい範囲が分かります。

人が直した記録は、区分の定義の改善に使います。 毎月同じ型の記述が直されているなら、迷ったときの決め方の例をその型で書き足します。

04実装レベルの3段階

最小構成:自由記述を手でAIの画面に貼り、区分を付けさせる / 1回分の分類
半自動化:上記+スクリプトが回答期間の終了後に分類・集計し、部署の要点とメールの下書きまで作る / 分類・集計・要点の下書き
本格構成:上記+前月比の大きな変化を拾って人事の面談の候補を出し、区分の定義の改善案を毎月作る / 変化の検知と定義の見直しまで

本記事が想定するのは半自動化です。 管理職への送信と、要対応の記述への対応は人が行います。1件4分が1分になるのはこの段階です。 本格構成に進むのは、半自動化を3か月ほど回して、人が直した区分の記録がたまってからにしてください。 直された型が分かれば、定義の改善案を作らせる材料がそろいます。記録が無いまま改善案を作らせると、AIが自分の分類に合わせて定義を書き換える形になります。

05工数削減シミュレーション

前提値(モデル条件)
対象人数
2 名
月間件数
480 件
1件あたり現在時間
4 分
1件あたり導入後時間
1 分
現在  480件 × 4分 ÷ 60 = 32 時間/月
導入後 480件 × 1分 ÷ 60 = 8 時間/月
月間削減時間
24h
削減率
75%
年間削減時間
288h
年間金額換算(時間単価3,500円)
101万円
モデル条件による試算であり、実際の効果は業務内容・運用方法によって異なります。

自社条件で導入効果を整理したい方へ

このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。

AI活用について相談する

06向いている企業・向いていない企業

向いている
  1. 社員が数百名ほどで、毎月または隔週に Google フォームで短い社員アンケート(パルスサーベイ)を取り、自由記述を人事の担当者が読んで分類している会社。自由記述が月に数百件あり、読み終わる前に次の回が来てしまう場合。管理職に部署の結果を返したいが、誰が書いたか分かってしまうことを心配して返し方が決まっていない場合。Google Workspace を使っていて、スクリプトを動かせる担当者がいる場合。
向いていない
  1. 社員が数十名で、自由記述が月に数十件しか無い場合(人が読んだほうが早く、匿名性も保ちにくい)。サーベイを外部の専用サービスで取っており、そのサービスに分類と集計の機能がすでにある場合。自由記述を記名で取っており、個人の評価や処遇に使うことを前提にしている場合(この構成は個人を特定しない集計のためのものです)。AIに部署や管理職の良し悪しを判定させたい場合。

07最小構成で試す方法

  1. 前回のサーベイの自由記述から、部署を混ぜて100件を取り出す(氏名などは手で伏せてから)
  2. 今の担当2名が付けた区分を、その100件について並べておく
  3. 区分の定義(テーマ7区分と感情4区分、迷ったときの決め方の例)を文章にする
  4. 手元のAIサービスの画面に、定義と100件を貼り、「定義の区分の中から1つずつ選び、根拠の語句を写してください。新しい区分を作らないでください」と指示する
  5. AIの区分と、担当2名の区分を突き合わせる

100件は、社内で使ってよいと決まっている AI サービスで行ってください。 個人の利用登録のサービスに社員の声を貼らないでください。

出てきた内容判断
担当2名の区分とおおむね同じスクリプトでの自動化に進む
担当2名の区分どうしが割れていた記述で、AIも揺れる定義の決め方の例を書き足す。 構成は有効
AIが新しい区分を作る、原文を引用する指示と構造化出力の enum で直る

2行目が出ることは珍しくありません。 それは、これまで担当者の癖で件数が動いていた記述が、どこにあったかが分かったということです。AIを入れる前に、区分の定義を詰める材料になります。

08実装時につまずきやすいポイント

問題対策
毎月ちがう切り口で要約される区分を固定し、enum で閉じ込める。 新しい区分は作らせない
同じ記述が月によって別の区分になる迷ったときの決め方の例を定義に書き足す
要点に原文が引用される言い換えを指示し、原文と同じ並びが残っていないかをスクリプトで確かめる
少人数の部署で書き手が分かる5件未満は上の組織にまとめる。 まとめても足りなければ返さない
要対応の記述が部署の要点に混ざるflags が付いた記述を要点の入力から外す
部署名を渡して分類が寄る部署名と点数をAIに渡さない
6分の上限で止まる20件ずつまとめ、どこまで終わったかを記録して続きから再開
手で再実行して件数が倍になるロックを取り、その回の印があれば止まる
無料の枠で社員の声を送る有料の枠を使う。 無料の枠は人が入出力を読むことがある
鍵をスクリプトの本文に書くスクリプト プロパティに置き、編集権限を絞る
組織変更で前月と比べられない部署マスタに旧コードと新コードの対応を持たせる

上の3行が、運用に乗るかどうかを決めます。 分類の値が揺れれば月ごとの比較ができず、要点に原文が残れば管理職に返せません。どちらもAIの賢さではなく、区分と出口の設計で守るものです。

下から3行目は、試すときに起きやすい失敗です。 最小構成の100件を、個人の登録のサービスや無料の枠で試さないでください。

09セキュリティ・AIガバナンス上の注意点

この構成で扱うデータ: 社員の自由記述(職場への不満、上司との関係、心身の状態に触れるものを含む)、所属部署、そして管理職のメールアドレスです。

  1. 匿名で取ったものを、特定しようとしない … AIにも人にも、書き手を推定させない設計にします。フォームでメールアドレスを集めない設定のまま運用し、スクリプトの側でも回答日時と部署を組み合わせて個人を絞り込む集計をしません
  2. 原文を見る人を絞る … 原文は人事の担当と責任者だけが見ます。管理職に返すのは件数と言い換えた要点だけです
  3. 要対応の記述は人事だけで扱う … 管理職本人が関わっている可能性があります。部署の要点の入力から外し、別の権限のシートに置きます
  4. 有料の枠で使う … Gemini API の規約では、有料のサービスではプロンプトと応答を製品の改善に使わないとされ、無料のサービスには機密や個人の情報を送らないよう書かれています
  5. 個人の評価に使わない … この集計は部署の状態を見るためのものです。サーベイの結果を管理職の評価に直結させると、管理職が部下の回答を気にするようになり、回答の中身が変わります
  6. 回答する社員に使い方を伝える … 自由記述をAIで分類すること、原文を見るのは人事だけであること、管理職には要約だけが返ることを、サーベイの案内に書いておきます

誤りが起きた場合のリスクは、書き手が分かってしまうことと、要対応の記述を見落とすことの2つです。 前者は要点の引用と少人数の部署から、後者は区分の揺れと担当者の疲れから起きます。前者はスクリプトの線で、後者は「迷えば付ける」で守ります。

10まず何から始めるか

1週目:区分の定義を書く

テーマ7区分と感情4区分の名前と説明を書き、今の担当2名が迷ってきた記述を10件ほど集めて、どちらに入れるかを決めた例を添えます。 要対応の4種類の定義も、同じ形で書きます。

2週目:100件で試す

前回の自由記述から部署を混ぜて100件を取り出し、氏名を伏せてから、社内で使ってよいAIサービスで分類させます。担当2名の区分と並べ、割れた記述を定義に書き足します。

3週目:匿名を守る線を決める

何件未満の部署を上の組織にまとめるか、要点に何を書かないかを、人事の責任者と決めます。 あわせて、サーベイの案内に「自由記述はAIで分類する」「原文は人事だけが見る」を書き足します。

4週目:スクリプトで分類と集計までをつなぐ

回答期間の終了翌日に動くトリガーを置き、分類と部署ごとの件数の集計までを作ります。この時点では管理職へ返さず、人事の中で結果を見ます。

2か月目: 部署の要点の下書きと、メールの下書きを足し、人事が確かめてから管理職へ返します。3か月目以降: 人が直した区分の記録を見て定義を直し、1件4分が何分になったかを実測します。回答期間の終了から数日で管理職に返せるようになった時点で、この構成は完成です。


11関連ユースケース

12この仕組みを理解するための記事

13技術仕様の確認日・参考情報

技術仕様確認日:2026-10-07/最終更新:2026-10-07
確認した内容情報源確認日
時間主導型のトリガーが毎分から毎月までの間隔で動かせること。フォームの送信などのイベントのトリガーがあること。インストール型トリガーは作成した人のアカウントで実行されることGoogle: Installable triggers2026-10-07
スプレッドシートのフォーム送信のイベントが values・namedValues・range を持つこと。時間主導型のイベントの項目Google: Event objects2026-10-07
1回の実行が6分まで、トリガーの合計実行時間が Workspace のアカウントで1日6時間、URLの呼び出しが1日100,000回、プロパティの値が9KBまでであることGoogle: Quotas for Google Services2026-10-07
UrlFetchApp の fetch・fetchAll、muteHttpExceptions を true にすると失敗の応答でも例外にならず応答が返ることGoogle: Class UrlFetchApp2026-10-07
プロパティがキーと値の文字列で保存され、スクリプト プロパティがアプリ全体の設定に使われることGoogle: Properties Service2026-10-07
MailApp の送信と、htmlBody・cc・name などのオプションGoogle: Class MailApp2026-10-07
構造化出力が /v1beta/interactions の response_format(mime_type に application/json、schema)で指定できること。enum で選択肢を列挙できること。値はアプリケーションで確かめるよう書かれていることGoogle: Structured outputs(Gemini API)2026-10-07
有料のサービスではプロンプトと応答を製品の改善に使わないこと。無料のサービスでは人が入出力を読むことがあり、機密や個人の情報を送らないよう書かれていること。利用者が18歳以上であることGoogle: Gemini API Additional Terms of Service2026-10-07

匿名を守る線(何件未満をまとめるか)と、要対応の記述への対応の手順は、自社の人事と産業保健の担当で決めてください。 本記事は公式ページで確認できた製品の仕様だけを扱っています。

実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。

自社の業務に使えるAI活用候補を整理します

このユースケース(UC-0782)についてのご相談はこちらから。

AI活用について相談する
目次