各部門の月次の人員数と人件費の計画・実績を集計し、差の大きい部門と理由の候補を経営企画の月次報告のコメントにまとめる
部門ごとの月次の人員数と人件費の計画と実績を集め、差を「人数による差」と「1人あたりの差」に分けて計算します。差の大きい部門について、入社・退職・異動・残業の動きから理由の候補を挙げ、月次報告のコメントの下書きにします。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Google Apps Script/Make/Power Automate/Python
- 対象業界
- IT・SaaS/商社/製造
- 対象部門
- 人事/経営企画
- 対象業務
- 書類作成/集計・分析
- 主な課題
- データ分析に時間がかかる/属人化している/書類作成に時間がかかる
- AIで行う処理
- 要約
- 主な効果
- 判断支援/品質標準化/工数削減
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 第3営業日に、人事の担当が給与の仕組みから部門別の人件費の集計を出し、スプレッドシートに貼る
- 人事の仕組みから、月末の在籍者数と月中の入社・退職・異動の一覧を出して貼る
- 経営企画の担当が、部門ごとに計画との差を計算し、差の大きい部門に色を付ける
- 差の大きい部門について、入退社や異動の一覧を見て、理由になりそうな動きを探す
- 分からない部門は、人事の担当と部門の管理職にメールやチャットで聞く
- 部門ごとのコメントを書き、事業部ごとにまとめて月次報告に貼る
- 人第3営業日に、人事の担当が給与と人事の仕組みのCSVを共有ドライブのフォルダに置く
- 自動30分ごとのトリガーで、スクリプトがフォルダを見て、3つのCSVがそろったら読み込む
- 自動部門ごとに、人員数・人件費の計画と実績の差を計算する
- 自動人件費の差を「人数による差」「1人あたりの差」に分け、1人あたりの差を内訳ごとに分ける
- 自動差が基準を超えた部門を選び、5名未満の部門は事業部の単位にまとめる
- 自動選んだ部門の分解の数字と、入社・退職・異動・残業の件数と採用の進捗を Gemini API に渡す
- 自動理由の候補(数字の根拠付き)と、コメントの下書きと、部門に確かめる点が返る
- 自動月次報告のコメント案のシートに書き出し、経営企画の Google Chat のスペースに知らせる
- 人経営企画の担当がコメント案を読み、確かめる点だけを部門の管理職に聞く
- 人コメントを直して月次報告に貼る
各工程の詳しい説明を読む
- 第3営業日に、人事の担当が給与の仕組みから部門別の人件費の集計を出し、スプレッドシートに貼る
- 人事の仕組みから、月末の在籍者数と月中の入社・退職・異動の一覧を出して貼る
- 経営企画の担当が、部門ごとに計画との差を計算し、差の大きい部門に色を付ける
- 差の大きい部門について、入退社や異動の一覧を見て、理由になりそうな動きを探す
- 分からない部門は、人事の担当と部門の管理職にメールやチャットで聞く
- 部門ごとのコメントを書き、事業部ごとにまとめて月次報告に貼る
(a)差の分け方が担当の頭の中にある。 人件費が計画より多いとき、人が多いからなのか、1人あたりが高いからなのかを、担当者は数字を見て経験で判断しています。 分け方を式にしていないため、担当者が替わると説明の筋が変わります。
(b)理由を聞いて回るのに時間がかかる。 「3課の人件費が計画より8%多い」の理由を探すには、入退社の一覧、異動の一覧、残業時間の集計を順に開きます。それでも分からなければ、部門の管理職に聞き、返事を待ちます。 第5営業日に間に合わない部門は「確認中」のまま報告に載ります。
(c)コメントの書き方がそろっていない。 ある月は「採用遅延による」、別の月は「中途入社2名の入社時期が計画より1か月遅れたため」と、同じ種類の差でも書き方と細かさが違います。 経営会議の出席者が月をまたいで見比べにくい報告になっています。
(d)小さな部門の数字が個人に近づく。 3名の課で「1人あたりの人件費が計画より高い」と書くと、誰かの昇給や手当の話がそのまま見えます。 担当者が気づいて書き方を変えている月と、そうでない月があります。
- 【人】 第3営業日に、人事の担当が給与と人事の仕組みのCSVを共有ドライブのフォルダに置く
- 【自動】 30分ごとのトリガーで、スクリプトがフォルダを見て、3つのCSVがそろったら読み込む
- 【自動】 部門ごとに、人員数・人件費の計画と実績の差を計算する
- 【自動】 人件費の差を「人数による差」「1人あたりの差」に分け、1人あたりの差を内訳ごとに分ける
- 【自動】 差が基準を超えた部門を選び、5名未満の部門は事業部の単位にまとめる
- 【自動】 選んだ部門の分解の数字と、入社・退職・異動・残業の件数と採用の進捗を Gemini API に渡す
- 【自動】 理由の候補(数字の根拠付き)と、コメントの下書きと、部門に確かめる点が返る
- 【自動】 月次報告のコメント案のシートに書き出し、経営企画の Google Chat のスペースに知らせる
- 【人】 経営企画の担当がコメント案を読み、確かめる点だけを部門の管理職に聞く
- 【人】 コメントを直して月次報告に貼る
3番目から5番目をスクリプトの式で行うのが、この設計の土台です。 差の分け方が毎月同じ式で出るので、担当者が替わっても説明の筋は変わりません。
9番目で聞くのは、AIが「記録からは分からない」とした点だけです。 入退社や残業の件数で説明できる差は、聞かずにコメントにできます。聞いて回る部門の数が減ることが、2日半の締切に効きます。
02今回想定するシステム構成
給与の仕組み(部門別の人件費の集計CSV) 人事の仕組み(在籍者・入退社・異動のCSV)・採用の進捗の一覧 ▼ 共有ドライブのフォルダ(人事の担当が置く) 【トリガー】時間主導型(第3〜第5営業日、30分ごと) Google Apps Script ├──▶ 3つのCSVがそろったか確かめて読む ├──▶ 計画との差を計算し、人数による差と1人あたりの差に分ける ├──▶ 差の大きい部門を選ぶ(5名未満は事業部へ) ▼ Gemini API(構造化出力) │ 理由の候補・コメントの下書き・確かめる点 ▼ Google Apps Script ── コメント案のシートへ書き出す └──▶ Google Chat の経営企画のスペースへ知らせる(Webhook) ▼ 【経営企画が確かめ、部門に聞いて、月次報告へ】
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Google Apps Script | Power Automate、Make、Python |
| 生成AI | Gemini API(有料の枠、構造化出力) | Claude API、OpenAI API |
| シート | Google スプレッドシート(計画・集計・差の分解・コメント案) | Microsoft 365 のブック |
| 通知 | Google Chat(経営企画のスペースへの Webhook) | Gmail |
新しく足すのは、スクリプトと Gemini API の契約だけです。 給与と人事の仕組みには書き込みません。CSVを出すのは、これまでどおり人事の担当です。 給与の仕組みから共有ドライブへ自動で出す設定ができるなら、本格構成で足します。
土台になるのは、Google Apps Script の時間主導型のトリガーです。 毎分から毎月までの間隔で関数を動かせ、インストール型トリガーは作成した人のアカウントで実行されます。 人件費のフォルダとシートは、そのアカウントの権限で読み書きするため、トリガーは人事部の管理用のアカウントで作ります。
スクリプトの実行時間には上限があります。 1回の実行は6分まで、トリガーの合計の実行時間は Google Workspace のアカウントで1日6時間まで、外部の API の呼び出しは1日100,000回までとされています。40部門の計算は短く、AIを呼ぶのも差の大きい部門だけなので、1回の実行で収まる規模です。
知らせには、Google Chat の受信 Webhook を使います。 外部からスペースへ一方向に投稿する仕組みで、投稿はスペースあたり毎秒1回までの上限を、そのスペースのすべての Webhook で分け合います。
03どうやって実装するのか
処理の起点を決める
時間主導型のトリガーを30分ごとに1つ置き、第3〜第5営業日だけ処理します。 営業日の判定は、会社の休日の一覧のシートを見て行います。それ以外の日は、何もせずに終わります。 時間主導型のトリガーは、指定した時間帯の中で動く時刻が少しずれます。
処理を始める条件は、3つのCSVがそろったことです。 人件費の集計、在籍者と入退社・異動の一覧、採用の進捗の3つが、その月の日付のファイル名でフォルダにあるかを見ます。1つでも欠けていれば待ち、第5営業日の朝になっても欠けていれば、Chat に「未着」と知らせます。 人件費だけで差を出すと、理由の候補が何も書けない部門が並びます。
同じ月の処理は1回だけにします。 処理が終わると、その月を「処理済み」としてスクリプト プロパティに書きます。人事の担当がCSVを差し替えたときは、ファイルの更新日時が処理済みの日時より新しいかを見て、その月を処理し直します。 コメント案のシートは、前の版を残してから上書きします。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 人件費の集計 | 部門コード、基本給・手当、残業代、賞与の引当、法定福利費、派遣・業務委託費 | 給与の仕組みのCSV |
| 在籍者 | 部門コード、月初と月末の在籍者数、月の平均の在籍者数、休職者数 | 人事の仕組みのCSV |
| 入退社・異動 | 部門コード、種類(入社・退職・異動の入り・異動の出)、件数、発令日 | 人事の仕組みのCSV |
| 残業時間 | 部門コード、残業の合計時間、前年同月の時間 | 人事の仕組みのCSV |
| 採用の進捗 | 部門コード、計画の採用数、入社済み、内定済み、選考中 | 採用の進捗の一覧 |
| 計画 | 部門コード・月ごとの計画の人数、人件費の計画とその内訳、計画の単価 | 計画のシート |
AIに渡すのは、件数と金額の集計だけです。 社員の名前・社員番号・個人の給与は、CSVの段階で含めません。入退社と異動も、部門ごとの件数と発令日だけを渡します。 「誰が辞めたか」は、差を説明するのに要りません。
計画の内訳が、説明の質を決めます。 人件費の計画が合計だけだと、1人あたりの差を内訳に分けられず、「1人あたりが高い」以上のことが言えません。 計画のシートに、残業代・賞与の引当・法定福利費・派遣と業務委託費の内訳を持たせます。
データの取得方法を決める
CSVは、共有ドライブの人件費のフォルダから読みます。フォルダの中のファイルを一覧にし、その月の3つのファイルを開いて中身を文字列として取り出し、CSVを2次元の配列にする関数(Utilities.parseCsv)で表の形にします。 給与の仕組みのCSVの文字コードがUTF-8でなければ、文字コードを指定して取り出します。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 部門別の人件費と内訳 | 人件費の集計のCSV | 差の計算 |
| 月の平均の在籍者数 | 在籍者のCSV | 人数による差と1人あたりの差 |
| 入退社・異動の件数と発令日 | 入退社・異動のCSV | 理由の候補の材料 |
| 残業時間と前年同月 | 在籍者のCSV(残業の列) | 残業代の差の材料 |
| 採用の計画と進捗 | 採用の進捗の一覧 | 人数による差の材料 |
部門コードは、計画のシートと照らしてから使います。 期中の組織の変更で、給与の仕組みと計画のシートで部門コードがずれることがあります。計画に無い部門コードが出たら、その部門の差は計算せず、「組織変更の確認」として一覧に出します。 対応表のシートに、新旧の部門コードの組を持たせます。
AIへ渡す前に整形する
- そろいの確認 … 3つのCSVの部門の数が計画の部門の数と合うか。合わない部門は「組織変更の確認」にします
- 人件費の差 … 部門ごとに、実績から計画を引きます
- 人数による差 … (月の平均の在籍者数の実績 − 計画の人数)× 計画の単価
- 1人あたりの差 … 人件費の差 − 人数による差
- 1人あたりの差の内訳 … 残業代・賞与の引当・法定福利費・基本給と手当の、1人あたりの計画との差に月の平均の在籍者数を掛けたもの。派遣・業務委託費は、人数に入らないので別の行で出します
- 差の大きい部門の選び方 … 人件費の差が計画の3%以上かつ50万円以上、または人数の差が2名以上の部門
- 少人数の部門のまとめ … 月の平均の在籍者数が5名未満の部門は、1人あたりの差と内訳を出さず、事業部の単位に足し合わせてから6番目の基準で選び直します
- AIへ渡す数字の用意 … 選んだ部門について、分解の数字、入退社・異動の件数と発令日、残業時間の前年同月比、採用の計画と進捗を部門ごとにまとめます
3番目から7番目は、すべてスクリプトの式です。 差の分け方を式にすると、同じ差がどの月も同じ言葉で説明される下地ができます。
3番目で月末ではなく月の平均の在籍者数を使うのは、月の途中の入退社を正しく数えるためです。 20日に入社した人は、月末の人数には1名として入りますが、人件費には3分の1か月分しか入りません。月末の人数で割ると、入社の多い月ほど1人あたりの人件費が低く出ます。 月の平均の在籍者数を人事の仕組みが出せない場合は、在籍の日数から計算します。
7番目は、計算の都合ではなく個人の情報を守るための手順です。 少人数の部門の1人あたりの差は、ほぼ個人の給与の変化です。AIに渡す前の段階で、出さない形にします。
AIに処理させる
させるのは、選ばれた部門について、分解された差を入退社・異動・残業・採用の動きと結び付けて理由の候補を挙げ、月次報告のコメントの下書きを書くことです。
| させること | 中身 | 判断できないときの扱い |
|---|---|---|
| 主な差の特定 | 人数による差と1人あたりの差のどちらが大きいか、内訳のどれが大きいか | 両方が小さく打ち消し合っていれば「混在」 |
| 理由の候補 | 入退社・異動・残業・採用の動きと結び付けた候補を最大3つ | 手がかりが無ければ「記録からは分からない」 |
| コメントの下書き | 決めた型で2文以内 | — |
| 確かめる点 | 部門の管理職に聞くことを1〜2個 | — |
| 来月以降に続くか | 採用の遅れなど、来月も続きそうかの印 | 分からなければ書かない |
コメントの型を決めておくのが要点です。 「(部門)の人件費は計画比(差)。主に(人数による差/1人あたりの差)で、(理由)による。」の2文に収めます。型がそろうと、経営会議で月をまたいで見比べられます。
理由の候補には、必ず根拠にした入力の項目名と数字を付けさせます。 「中途入社の計画3名に対し入社済み1名(hiring_plan、hiring_joined)」のように書かせ、根拠の項目が入力に無い候補は、スクリプトの側で外します。
| させないこと | 理由 |
|---|---|
| 差の金額や分解の計算・修正 | 式で出した数字を変えさせない |
| 個人の昇給・評価・退職の事情の推測 | 入力に無く、個人の話になる |
| 人員の計画の見直しや配置の提案 | 経営と部門が決める |
| 部門や管理職の評価 | 月次報告の目的と違う |
| 入力に無い外の事情(市場の賃金の動きなど) | 確かめようのない理由が並ぶ |
2行目がいちばん起きやすい失敗です。 1人あたりの差が大きい部門について、AIは「昇給の影響と考えられる」と書きがちです。入力に昇給の情報は無く、少人数の部門なら特定の個人の話に読まれます。 内訳で説明できない1人あたりの差は、「確かめる点」に質問として書かせます。
指示内容を固定する
あなたは会社の経営企画部で、月次報告の人件費の欄のコメントを書く担当を補佐します。
差の金額と、人数による差・1人あたりの差・内訳への分解は、すでに式で計算されています。
あなたの役割は、その差の理由の候補と、コメントの下書きと、部門に確かめる点を出すことです。
【入力(部門ごと)】
- 人件費の計画・実績・差、人数による差、1人あたりの差とその内訳
- 計画の人数、月の平均の在籍者数、休職者数
- 入社・退職・異動の入り・異動の出の件数と発令日
- 残業時間と前年同月の時間
- 採用の計画数・入社済み・内定済み・選考中
【コメントの型】
「(部門名)の人件費は計画比(差の率)。主に(人数による差/1人あたりの差)で、(理由)による。」
2文以内。理由が分からないときは「理由は確認中。」とする。
【厳守事項】
- 差の金額、率、分解の数字を計算し直したり、修正したりしないでください。
- 個人の昇給・評価・退職の事情を推測しないでください。
- 入力に無い事情(市場の賃金、景気、部門の方針など)を理由の候補にしないでください。
必要なら「確かめる点」に質問として書いてください。
- 理由の候補には、必ず evidence に入力の項目名と数字を書いてください。
evidence を書けない候補は出さないでください。
- 人員の計画の見直しや、配置の変更を提案しないでください。
- 「事業部まとめ」と書かれた行は、1人あたりの差に触れないでください。
【部門ごとの入力】{departments}
「事業部まとめの行は1人あたりの差に触れない」を入れているのは、前処理の7番目と対です。 スクリプトの側で数字を渡していなくても、AIは人数と人件費の差から1人あたりを計算して書いてくることがあります。 指示でも禁じ、スキーマにもその欄を作りません。
出力形式を固定する
次の形のJSONで受け取ります。 Gemini API の構造化出力を使い、/v1beta/interactions への要求の response_format に、mime_type を application/json、schema に下の形のスキーマを入れて渡します。
{
"dept_code": "D-2310",
"is_rollup": false,
"main_driver": "headcount | per_capita | mixed",
"main_component": "overtime | bonus_accrual | welfare | base_pay | contractor | none",
"reason_candidates": [
{ "text": "", "evidence": [{ "field": "hiring_joined", "value": "1" }] }
],
"comment_draft": "",
"questions_for_dept": [""],
"likely_to_continue": "yes | no | unknown"
}
1つ目の理由は、evidence をスクリプトで照合できることです。 field に書かれた項目名が入力に本当にあり、value が入力の数字と一致するかを確かめます。一致しない候補は外し、「根拠不一致」として記録します。 構造化出力は JSON の形を守りますが、値の正しさはアプリケーションで確かめるよう、公式の説明にもあります。
2つ目は、main_driver と main_component で、スクリプトの計算とAIの読みを突き合わせられることです。 人数による差が1人あたりの差より大きいのに per_capita と返ってきたら、AIが数字を読み違えています。 スクリプトの計算と合わない行には印を付け、コメント案を人が先に読むよう並べます。
3つ目は、likely_to_continue で翌月の報告につなげられることです。 採用の遅れのように来月も続く差に印が付いていれば、翌月のコメント案を作るときに、前月の理由として入力に足せます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 共有ドライブの人件費のフォルダ | フォルダのファイルを一覧にして読む | 3つのCSV |
| 計画・対応表・休日のシート | 読み取り | 差の計算と、組織変更の照合 |
| 差の分解のシート | 書き込み | 部門ごとの差と分解 |
| Gemini API | UrlFetchApp.fetch() で POST | 理由の候補・コメントの下書き・確かめる点 |
| コメント案のシート | 書き込み | 部門ごとのコメント案と確かめる点 |
| Google Chat | 受信 Webhook に POST | 「コメント案ができた」と件数の知らせ |
UrlFetchApp.fetch() は、method に post、contentType に JSON、headers に API キー、payload に要求の本文を入れて呼びます。muteHttpExceptions を true にすると、失敗の応答でも例外を投げずに応答を返します。 状態コードを見て、その部門を次の実行で再試行するかを決めます。
API キーと Webhook の URL は、コードに書かずスクリプト プロパティに置きます。 スクリプト プロパティはスクリプトのすべての利用者で共有されるため、スクリプトの編集権限は人事と経営企画の担当に限ります。 Webhook の URL は公開の場所に貼らないよう公式も注意しています。
Chat に送るのは、件数とシートへのリンクだけです。 「差の大きい部門 9、事業部まとめ 2、確かめる点あり 4、組織変更の確認 1」のように書き、部門ごとの金額は載せません。
人が確認する
経営企画の担当が、コメント案を全部読んでから月次報告に貼ります。 経営会議に出る文章なので、AIの下書きをそのまま貼ることはしません。
- 取り込みの状態を見る … 「未着」「組織変更の確認」が無いか。あれば人事の担当に確かめてから先に進みます
- 印の付いた行を先に読む …
main_driverがスクリプトの計算と合わない行、根拠不一致で候補が外れた行 - 確かめる点を部門に聞く … AIが「記録からは分からない」とした部門だけに聞きます
- コメントを直す … 部門から聞いた事情を足し、型に沿っているかを見ます
- 事業部まとめの行を見る … 少人数の部門の個人の事情が読み取れる書き方になっていないかを確かめます
5番目は、経営企画の担当が最後の砦になる確認です。 スクリプトとAIの両方で防いでいますが、部門名と理由の組み合わせだけで個人が分かることがあります。 「育児休業からの復帰」のような理由は、少人数の部門では書かない約束にします。
目標は、40部門をならして1部門9分です。 差の小さい部門は数字を見るだけで数十秒、差の大きい部門はコメント案を読んで直すので10分を超え、部門に聞く部門はさらに長くかかります。
例外に対処する
| 起きること | 対応 |
|---|---|
| CSVが第5営業日の朝までにそろわない | 処理せず、Chat に「未着」と知らせる |
| 計画に無い部門コードが出る | 差を計算せず「組織変更の確認」。対応表に新旧の組を足す |
| 月の平均の在籍者数が出せない | 在籍の日数から計算する。計算できなければ月末の人数を使い、印を付ける |
| 休職者が多い部門 | 休職者数を入力に入れ、人数による差の説明に使わせる |
| 計画の内訳が空の部門 | 1人あたりの差の内訳を出さず、合計の差だけで説明する |
| Gemini API がエラーを返す | 差の分解は先にシートへ出し、コメント案は「未取得」とする |
evidence が入力と一致しない | 候補を外し、「根拠不一致」として記録 |
| CSVが差し替えられた | 更新日時を見て処理し直し、前の版のコメント案を残す |
6行目の扱いが大事です。 Gemini API が止まった月でも、差の分解は式で出ているので、担当者は数字から自分でコメントを書けます。 これまでの手作業より短い時間で済みます。
記録を残す
- 取り込んだCSVのファイル名と更新日時、部門の数
- 部門ごとの差と分解の数字と、そのとき使った計画の版と計算の式の版
- AIに渡した入力と、返ってきたJSONの全文
- 根拠不一致で外した候補と、
main_driverが合わなかった行 - 担当者が直した後のコメントと、部門に聞いた内容
- 少人数のため事業部にまとめた部門の一覧
5つ目が、翌月の入力の材料になります。 部門に聞いて分かった事情(期中の組織変更、計画に無かった増員の承認など)を記録しておけば、翌月は同じ質問をせずに済みます。
04実装レベルの3段階
本記事の想定は半自動化です。 1部門30分が9分になる計算は、この段階で置いています。人事の担当がCSVを置く作業と、経営企画の担当が部門に聞く作業は残します。 本格構成で足すのは、部門への確かめる点の依頼です。 部門の管理職にフォームで確かめる点を送り、回答をコメント案に戻します。部門側の手間が増えるため、確かめる点の数が毎月安定してから作ります。
05工数削減シミュレーション
導入後 40件 × 9分 ÷ 60 = 6 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 従業員が数百〜数千名で、課・部の単位で人員と人件費の計画を持っている IT・SaaS、製造、商社などの会社。経営企画が毎月、部門ごとの人員と人件費の計画と実績の差を月次報告にまとめ、その理由を人事や各部門に聞いて回っている場合。給与の仕組みと人事の仕組みから、部門別の集計をCSVで出せる場合。
- 部門が数個で、経営企画の担当が全部門の事情を把握している場合。人件費の計画を部門別に持っておらず、全社の合計でしか管理していない場合。1部門の人数が数名ばかりで、部門別の人件費を出すと個人の給与が分かってしまう場合(事業部の単位に上げて使ってください)。AIに人員の計画の見直しや配置の判断をさせたい場合(この構成が出すのは差の数字と理由の候補までです)。
07最小構成で試す方法
- 先月の月次報告から、差の大きかった5部門を選ぶ
- 5部門の人件費の計画と実績、月の平均の在籍者数を表に並べ、人数による差と1人あたりの差を手で計算する
- 5部門の入退社・異動の件数と残業時間、採用の進捗を同じ表に並べる
- 表を会社が契約しているAIサービスに貼る(部門名は記号に置き換える)
- 「この差の理由の候補を、根拠の項目と数字付きで最大3つ出し、2文のコメントにしてください。入力に無い事情は書かず、確かめる点として質問にしてください」と指示する
- 出てきたコメントを、先月の報告に載ったコメントと比べる
2番目は、AIを使わずに分解の式を確かめる手順です。 人数による差と1人あたりの差に分けたとき、先月の報告のコメントの説明と筋が合うかを先に見ます。
| 出てきた内容 | 判断 |
|---|---|
| 分解の筋が先月の説明と合い、AIのコメントも同じ理由を挙げた | スクリプトとの連携に進む |
| 筋は合うが、AIが昇給などの推測を書いた | 指示の書き方で直る。構成は有効 |
| 分解の筋が先月の説明と合わない | 月の平均の在籍者数と計画の内訳が先。 AIの前に式と計画を直す |
3行目が出ることは珍しくありません。 月末の人数で計算していたり、計画の単価に賞与の引当が入っていなかったりすると、分解が実際の動きとずれます。 計画の立て方を人事と確かめ直すきっかけになります。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 月末の人数で割って1人あたりがずれる | 月の平均の在籍者数を使う |
| 計画の内訳が無く、1人あたりの差を分けられない | 計画のシートに内訳と単価を持たせる |
| 組織変更で部門コードが合わない | 対応表を持ち、合わなければ計算しない |
| 少人数の部門で個人の給与が見える | 5名未満は事業部にまとめ、1人あたりの差を出さない |
| AIが昇給や退職の事情を推測する | 指示で禁じ、確かめる点に回させる |
| AIが1人あたりを計算して書く | スキーマに欄を作らず、事業部まとめの行では禁じる |
| 理由の候補の根拠が入力と違う | evidence を照合し、一致しない候補を外す |
| コメントの書き方が月ごとに違う | コメントの型を指示に入れる |
| 人件費のCSVが共有のフォルダで広く見える | フォルダの共有を人事と経営企画の担当に限る |
上の3行が、分解の数字の失敗のほとんどです。 どれもAIとは関係がなく、計画と実績の数え方がそろっていないことから起きます。ここを直すほうが、コメントの精度を上げるより効きます。
4行目は、最初から設計に入れてください。 運用が始まってから気づくと、それまでの月次報告に個人の給与に近い数字が載っていたことになります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 部門別の人件費とその内訳、在籍者数、入退社・異動の件数、残業時間、採用の進捗です。個人ごとのデータは含めませんが、部門の人数が少ないと個人の給与に近づく情報です。
- 有料の枠で使う … Gemini API の追加の利用規約では、無料の枠に送った内容は製品の改善に使われ、人が読むことがあるとされ、機密の情報や個人の情報を送らないよう求められています。 有料の枠では、プロンプトと応答を製品の改善に使わないとされています。人件費を扱う以上、有料の枠で使います
- 個人の単位のデータを入れない … CSVの段階で、社員の名前・社員番号・個人の給与を含めない形で出します
- 少人数の部門をまとめる … 5名未満の部門は事業部にまとめ、1人あたりの差を出しません
- フォルダとシートの共有を絞る … 人件費のフォルダ、差の分解とコメント案のシートは、人事と経営企画の担当だけが開ける設定にします。 スクリプトを動かすアカウントも人事部の管理用にします
- 知らせに数字を載せない … Chat には件数とリンクだけを送ります
- AIに判断させない … 人員の計画の見直し、配置の変更、部門の評価は、経営と部門が行います。 この構成が出すのは、差の数字と理由の候補までです
誤りが起きた場合のリスクは、差の理由を取り違えて経営会議の判断がずれることと、個人の給与や事情が報告から読み取れてしまうことの2つです。 前者は分解の式と evidence の照合で、後者は少人数のまとめと担当者の最後の確認で防ぎます。
10まず何から始めるか
1週目:計画の内訳をそろえる
計画のシートに、部門ごとの人件費の内訳(基本給と手当・残業代・賞与の引当・法定福利費・派遣と業務委託費)と計画の単価を持たせます。少人数の部門をどの事業部にまとめるかも、人事と決めます。
2週目:5部門で分解を確かめる
先月の差の大きかった5部門について、人数による差と1人あたりの差を手で計算し、先月のコメントの説明と比べます。月末の人数と月の平均の在籍者数の両方で計算し、違いを見ます。
3週目:取り込みと分解を作る
3つのCSVを共有ドライブから取り込み、全部門の差と分解、少人数のまとめを一覧に出すところまで作ります。この時点ではAIを呼びません。 差の大きい部門が毎月何部門になるかを数えます。
4週目:コメント案を足す
差の大きい部門について Gemini API を呼び、理由の候補とコメント案を一覧に出します。最初の1か月は、担当者が自分で書いたコメントと並べて比べます。
2か月目: コメント案を下書きとして使う運用に切り替え、部門に聞いた内容を記録します。3か月目以降: 前月の理由を入力に引き継ぎ、確かめる点の数の推移を見ます。1部門30分が何分になったかと、部門に聞かずにコメントにできた部門の割合を実測した時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 時間主導型のトリガーが毎分から毎月の間隔で動き、時刻が少しずれること。インストール型トリガーが作成した人のアカウントで実行されること | Google for Developers: Installable triggers | 2026-10-07 |
| 1回の実行が6分まで。トリガーの合計実行時間が Google Workspace で1日6時間。URL の取得が Google Workspace で1日100,000回 | Google for Developers: Quotas for Google Services | 2026-10-07 |
Utilities.parseCsv() が CSV の文字列を2次元の配列にすること | Google for Developers: Utilities | 2026-10-07 |
UrlFetchApp.fetch() の method・contentType・payload・headers・muteHttpExceptions | Google for Developers: UrlFetchApp | 2026-10-07 |
| スクリプト プロパティがスクリプトのすべての利用者で共有されること | Google for Developers: Properties Service | 2026-10-07 |
| 受信 Webhook が一方向の知らせで、スペースあたり毎秒1回の上限を共有すること。URL を公開の場所に貼らないこと | Google for Developers: Send Google Chat messages with incoming webhooks | 2026-10-07 |
Gemini API の構造化出力が /v1beta/interactions の response_format(mime_type と schema)で指定でき、値の正しさはアプリケーションで確かめるべきこと | Google AI for Developers: Structured output | 2026-10-07 |
| 無料の枠の内容は製品の改善に使われ人が読むことがあり、機密・個人の情報を送らないよう求められること。有料の枠ではプロンプトと応答を改善に使わないこと | Google AI for Developers: Gemini API Additional Terms of Service | 2026-10-07 |
差の大きい部門の基準、少人数の部門をまとめる人数、計画の内訳の立て方は、自社の実情に合わせて決めてください。 本記事は Google for Developers と Google AI for Developers で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0817)についてのご相談はこちらから。
