Media > AI活用ユースケース > 人事 > 各部門の月次の人員数と人件費の計画・実績を集計し、差の大きい部門と理由の候補を経営企画の月次報告のコメントにまとめる

各部門の月次の人員数と人件費の計画・実績を集計し、差の大きい部門と理由の候補を経営企画の月次報告のコメントにまとめる

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

部門ごとの月次の人員数と人件費の計画と実績を集め、差を「人数による差」と「1人あたりの差」に分けて計算します。差の大きい部門について、入社・退職・異動・残業の動きから理由の候補を挙げ、月次報告のコメントの下書きにします。

サマリー
生成AI
ChatGPT/Claude/Gemini
連携・自動化
Google Apps Script/Make/Power Automate/Python
対象業界
IT・SaaS/商社/製造
対象部門
人事/経営企画
対象業務
書類作成/集計・分析
主な課題
データ分析に時間がかかる/属人化している/書類作成に時間がかかる
AIで行う処理
要約
主な効果
判断支援/品質標準化/工数削減
導入難易度
★★☆☆☆
実装レベル
半自動化
費用感
API連携(中)
人間の確認
条件付き
現在工数
20h/月
AI導入後
6h/月
想定削減
70%
年間削減
168h
モデル条件による試算値です。実在企業の実績ではありません。

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

導入前(Before)
  1. 第3営業日に、人事の担当が給与の仕組みから部門別の人件費の集計を出し、スプレッドシートに貼る
  2. 人事の仕組みから、月末の在籍者数と月中の入社・退職・異動の一覧を出して貼る
  3. 経営企画の担当が、部門ごとに計画との差を計算し、差の大きい部門に色を付ける
  4. 差の大きい部門について、入退社や異動の一覧を見て、理由になりそうな動きを探す
  5. 分からない部門は、人事の担当と部門の管理職にメールやチャットで聞く
  6. 部門ごとのコメントを書き、事業部ごとにまとめて月次報告に貼る
導入後(After)
  1. 人第3営業日に、人事の担当が給与と人事の仕組みのCSVを共有ドライブのフォルダに置く
  2. 自動30分ごとのトリガーで、スクリプトがフォルダを見て、3つのCSVがそろったら読み込む
  3. 自動部門ごとに、人員数・人件費の計画と実績の差を計算する
  4. 自動人件費の差を「人数による差」「1人あたりの差」に分け、1人あたりの差を内訳ごとに分ける
  5. 自動差が基準を超えた部門を選び、5名未満の部門は事業部の単位にまとめる
  6. 自動選んだ部門の分解の数字と、入社・退職・異動・残業の件数と採用の進捗を Gemini API に渡す
  7. 自動理由の候補(数字の根拠付き)と、コメントの下書きと、部門に確かめる点が返る
  8. 自動月次報告のコメント案のシートに書き出し、経営企画の Google Chat のスペースに知らせる
  9. 人経営企画の担当がコメント案を読み、確かめる点だけを部門の管理職に聞く
  10. 人コメントを直して月次報告に貼る
各工程の詳しい説明を読む
  1. 第3営業日に、人事の担当が給与の仕組みから部門別の人件費の集計を出し、スプレッドシートに貼る
  2. 人事の仕組みから、月末の在籍者数と月中の入社・退職・異動の一覧を出して貼る
  3. 経営企画の担当が、部門ごとに計画との差を計算し、差の大きい部門に色を付ける
  4. 差の大きい部門について、入退社や異動の一覧を見て、理由になりそうな動きを探す
  5. 分からない部門は、人事の担当と部門の管理職にメールやチャットで聞く
  6. 部門ごとのコメントを書き、事業部ごとにまとめて月次報告に貼る

(a)差の分け方が担当の頭の中にある。 人件費が計画より多いとき、人が多いからなのか、1人あたりが高いからなのかを、担当者は数字を見て経験で判断しています。 分け方を式にしていないため、担当者が替わると説明の筋が変わります。

(b)理由を聞いて回るのに時間がかかる。 「3課の人件費が計画より8%多い」の理由を探すには、入退社の一覧、異動の一覧、残業時間の集計を順に開きます。それでも分からなければ、部門の管理職に聞き、返事を待ちます。 第5営業日に間に合わない部門は「確認中」のまま報告に載ります。

(c)コメントの書き方がそろっていない。 ある月は「採用遅延による」、別の月は「中途入社2名の入社時期が計画より1か月遅れたため」と、同じ種類の差でも書き方と細かさが違います。 経営会議の出席者が月をまたいで見比べにくい報告になっています。

(d)小さな部門の数字が個人に近づく。 3名の課で「1人あたりの人件費が計画より高い」と書くと、誰かの昇給や手当の話がそのまま見えます。 担当者が気づいて書き方を変えている月と、そうでない月があります。

  1. 【人】 第3営業日に、人事の担当が給与と人事の仕組みのCSVを共有ドライブのフォルダに置く
  2. 【自動】 30分ごとのトリガーで、スクリプトがフォルダを見て、3つのCSVがそろったら読み込む
  3. 【自動】 部門ごとに、人員数・人件費の計画と実績の差を計算する
  4. 【自動】 人件費の差を「人数による差」「1人あたりの差」に分け、1人あたりの差を内訳ごとに分ける
  5. 【自動】 差が基準を超えた部門を選び、5名未満の部門は事業部の単位にまとめる
  6. 【自動】 選んだ部門の分解の数字と、入社・退職・異動・残業の件数と採用の進捗を Gemini API に渡す
  7. 【自動】 理由の候補(数字の根拠付き)と、コメントの下書きと、部門に確かめる点が返る
  8. 【自動】 月次報告のコメント案のシートに書き出し、経営企画の Google Chat のスペースに知らせる
  9. 【人】 経営企画の担当がコメント案を読み、確かめる点だけを部門の管理職に聞く
  10. 【人】 コメントを直して月次報告に貼る

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 ScriptPower Automate、Make、Python
生成AIGemini 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どうやって実装するのか

Step1

処理の起点を決める

時間主導型のトリガーを30分ごとに1つ置き、第3〜第5営業日だけ処理します。 営業日の判定は、会社の休日の一覧のシートを見て行います。それ以外の日は、何もせずに終わります。 時間主導型のトリガーは、指定した時間帯の中で動く時刻が少しずれます。

処理を始める条件は、3つのCSVがそろったことです。 人件費の集計、在籍者と入退社・異動の一覧、採用の進捗の3つが、その月の日付のファイル名でフォルダにあるかを見ます。1つでも欠けていれば待ち、第5営業日の朝になっても欠けていれば、Chat に「未着」と知らせます。 人件費だけで差を出すと、理由の候補が何も書けない部門が並びます。

同じ月の処理は1回だけにします。 処理が終わると、その月を「処理済み」としてスクリプト プロパティに書きます。人事の担当がCSVを差し替えたときは、ファイルの更新日時が処理済みの日時より新しいかを見て、その月を処理し直します。 コメント案のシートは、前の版を残してから上書きします。

Step2

入力データを集める

データ中身取得元
人件費の集計部門コード、基本給・手当、残業代、賞与の引当、法定福利費、派遣・業務委託費給与の仕組みのCSV
在籍者部門コード、月初と月末の在籍者数、月の平均の在籍者数、休職者数人事の仕組みのCSV
入退社・異動部門コード、種類(入社・退職・異動の入り・異動の出)、件数、発令日人事の仕組みのCSV
残業時間部門コード、残業の合計時間、前年同月の時間人事の仕組みのCSV
採用の進捗部門コード、計画の採用数、入社済み、内定済み、選考中採用の進捗の一覧
計画部門コード・月ごとの計画の人数、人件費の計画とその内訳、計画の単価計画のシート

AIに渡すのは、件数と金額の集計だけです。 社員の名前・社員番号・個人の給与は、CSVの段階で含めません。入退社と異動も、部門ごとの件数と発令日だけを渡します。 「誰が辞めたか」は、差を説明するのに要りません。

計画の内訳が、説明の質を決めます。 人件費の計画が合計だけだと、1人あたりの差を内訳に分けられず、「1人あたりが高い」以上のことが言えません。 計画のシートに、残業代・賞与の引当・法定福利費・派遣と業務委託費の内訳を持たせます。

Step3

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

CSVは、共有ドライブの人件費のフォルダから読みます。フォルダの中のファイルを一覧にし、その月の3つのファイルを開いて中身を文字列として取り出し、CSVを2次元の配列にする関数(Utilities.parseCsv)で表の形にします。 給与の仕組みのCSVの文字コードがUTF-8でなければ、文字コードを指定して取り出します。

取るものどこから何に使うか
部門別の人件費と内訳人件費の集計のCSV差の計算
月の平均の在籍者数在籍者のCSV人数による差と1人あたりの差
入退社・異動の件数と発令日入退社・異動のCSV理由の候補の材料
残業時間と前年同月在籍者のCSV(残業の列)残業代の差の材料
採用の計画と進捗採用の進捗の一覧人数による差の材料

部門コードは、計画のシートと照らしてから使います。 期中の組織の変更で、給与の仕組みと計画のシートで部門コードがずれることがあります。計画に無い部門コードが出たら、その部門の差は計算せず、「組織変更の確認」として一覧に出します。 対応表のシートに、新旧の部門コードの組を持たせます。

Step4

AIへ渡す前に整形する

  1. そろいの確認 … 3つのCSVの部門の数が計画の部門の数と合うか。合わない部門は「組織変更の確認」にします
  2. 人件費の差 … 部門ごとに、実績から計画を引きます
  3. 人数による差 … (月の平均の在籍者数の実績 − 計画の人数)× 計画の単価
  4. 1人あたりの差 … 人件費の差 − 人数による差
  5. 1人あたりの差の内訳 … 残業代・賞与の引当・法定福利費・基本給と手当の、1人あたりの計画との差に月の平均の在籍者数を掛けたもの。派遣・業務委託費は、人数に入らないので別の行で出します
  6. 差の大きい部門の選び方 … 人件費の差が計画の3%以上かつ50万円以上、または人数の差が2名以上の部門
  7. 少人数の部門のまとめ … 月の平均の在籍者数が5名未満の部門は、1人あたりの差と内訳を出さず、事業部の単位に足し合わせてから6番目の基準で選び直します
  8. AIへ渡す数字の用意 … 選んだ部門について、分解の数字、入退社・異動の件数と発令日、残業時間の前年同月比、採用の計画と進捗を部門ごとにまとめます

3番目から7番目は、すべてスクリプトの式です。 差の分け方を式にすると、同じ差がどの月も同じ言葉で説明される下地ができます。

3番目で月末ではなく月の平均の在籍者数を使うのは、月の途中の入退社を正しく数えるためです。 20日に入社した人は、月末の人数には1名として入りますが、人件費には3分の1か月分しか入りません。月末の人数で割ると、入社の多い月ほど1人あたりの人件費が低く出ます。 月の平均の在籍者数を人事の仕組みが出せない場合は、在籍の日数から計算します。

7番目は、計算の都合ではなく個人の情報を守るための手順です。 少人数の部門の1人あたりの差は、ほぼ個人の給与の変化です。AIに渡す前の段階で、出さない形にします。

Step5

AIに処理させる

させるのは、選ばれた部門について、分解された差を入退社・異動・残業・採用の動きと結び付けて理由の候補を挙げ、月次報告のコメントの下書きを書くことです。

させること中身判断できないときの扱い
主な差の特定人数による差と1人あたりの差のどちらが大きいか、内訳のどれが大きいか両方が小さく打ち消し合っていれば「混在」
理由の候補入退社・異動・残業・採用の動きと結び付けた候補を最大3つ手がかりが無ければ「記録からは分からない」
コメントの下書き決めた型で2文以内—
確かめる点部門の管理職に聞くことを1〜2個—
来月以降に続くか採用の遅れなど、来月も続きそうかの印分からなければ書かない

コメントの型を決めておくのが要点です。 「(部門)の人件費は計画比(差)。主に(人数による差/1人あたりの差)で、(理由)による。」の2文に収めます。型がそろうと、経営会議で月をまたいで見比べられます。

理由の候補には、必ず根拠にした入力の項目名と数字を付けさせます。 「中途入社の計画3名に対し入社済み1名(hiring_plan、hiring_joined)」のように書かせ、根拠の項目が入力に無い候補は、スクリプトの側で外します。

させないこと理由
差の金額や分解の計算・修正式で出した数字を変えさせない
個人の昇給・評価・退職の事情の推測入力に無く、個人の話になる
人員の計画の見直しや配置の提案経営と部門が決める
部門や管理職の評価月次報告の目的と違う
入力に無い外の事情(市場の賃金の動きなど)確かめようのない理由が並ぶ

2行目がいちばん起きやすい失敗です。 1人あたりの差が大きい部門について、AIは「昇給の影響と考えられる」と書きがちです。入力に昇給の情報は無く、少人数の部門なら特定の個人の話に読まれます。 内訳で説明できない1人あたりの差は、「確かめる点」に質問として書かせます。

Step6

指示内容を固定する

あなたは会社の経営企画部で、月次報告の人件費の欄のコメントを書く担当を補佐します。
差の金額と、人数による差・1人あたりの差・内訳への分解は、すでに式で計算されています。
あなたの役割は、その差の理由の候補と、コメントの下書きと、部門に確かめる点を出すことです。

【入力(部門ごと)】
- 人件費の計画・実績・差、人数による差、1人あたりの差とその内訳
- 計画の人数、月の平均の在籍者数、休職者数
- 入社・退職・異動の入り・異動の出の件数と発令日
- 残業時間と前年同月の時間
- 採用の計画数・入社済み・内定済み・選考中

【コメントの型】
「(部門名)の人件費は計画比(差の率)。主に(人数による差/1人あたりの差)で、(理由)による。」
2文以内。理由が分からないときは「理由は確認中。」とする。

【厳守事項】
- 差の金額、率、分解の数字を計算し直したり、修正したりしないでください。
- 個人の昇給・評価・退職の事情を推測しないでください。
- 入力に無い事情(市場の賃金、景気、部門の方針など)を理由の候補にしないでください。
  必要なら「確かめる点」に質問として書いてください。
- 理由の候補には、必ず evidence に入力の項目名と数字を書いてください。
  evidence を書けない候補は出さないでください。
- 人員の計画の見直しや、配置の変更を提案しないでください。
- 「事業部まとめ」と書かれた行は、1人あたりの差に触れないでください。

【部門ごとの入力】{departments}

「事業部まとめの行は1人あたりの差に触れない」を入れているのは、前処理の7番目と対です。 スクリプトの側で数字を渡していなくても、AIは人数と人件費の差から1人あたりを計算して書いてくることがあります。 指示でも禁じ、スキーマにもその欄を作りません。

Step7

出力形式を固定する

次の形の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 で翌月の報告につなげられることです。 採用の遅れのように来月も続く差に印が付いていれば、翌月のコメント案を作るときに、前月の理由として入力に足せます。

Step8

システムへ連携する

つなぎ先方式内容
共有ドライブの人件費のフォルダフォルダのファイルを一覧にして読む3つのCSV
計画・対応表・休日のシート読み取り差の計算と、組織変更の照合
差の分解のシート書き込み部門ごとの差と分解
Gemini APIUrlFetchApp.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」のように書き、部門ごとの金額は載せません。

Step9

人が確認する

経営企画の担当が、コメント案を全部読んでから月次報告に貼ります。 経営会議に出る文章なので、AIの下書きをそのまま貼ることはしません。

  1. 取り込みの状態を見る … 「未着」「組織変更の確認」が無いか。あれば人事の担当に確かめてから先に進みます
  2. 印の付いた行を先に読む … main_driver がスクリプトの計算と合わない行、根拠不一致で候補が外れた行
  3. 確かめる点を部門に聞く … AIが「記録からは分からない」とした部門だけに聞きます
  4. コメントを直す … 部門から聞いた事情を足し、型に沿っているかを見ます
  5. 事業部まとめの行を見る … 少人数の部門の個人の事情が読み取れる書き方になっていないかを確かめます

5番目は、経営企画の担当が最後の砦になる確認です。 スクリプトとAIの両方で防いでいますが、部門名と理由の組み合わせだけで個人が分かることがあります。 「育児休業からの復帰」のような理由は、少人数の部門では書かない約束にします。

目標は、40部門をならして1部門9分です。 差の小さい部門は数字を見るだけで数十秒、差の大きい部門はコメント案を読んで直すので10分を超え、部門に聞く部門はさらに長くかかります。

Step10

例外に対処する

起きること対応
CSVが第5営業日の朝までにそろわない処理せず、Chat に「未着」と知らせる
計画に無い部門コードが出る差を計算せず「組織変更の確認」。対応表に新旧の組を足す
月の平均の在籍者数が出せない在籍の日数から計算する。計算できなければ月末の人数を使い、印を付ける
休職者が多い部門休職者数を入力に入れ、人数による差の説明に使わせる
計画の内訳が空の部門1人あたりの差の内訳を出さず、合計の差だけで説明する
Gemini API がエラーを返す差の分解は先にシートへ出し、コメント案は「未取得」とする
evidence が入力と一致しない候補を外し、「根拠不一致」として記録
CSVが差し替えられた更新日時を見て処理し直し、前の版のコメント案を残す

6行目の扱いが大事です。 Gemini API が止まった月でも、差の分解は式で出ているので、担当者は数字から自分でコメントを書けます。 これまでの手作業より短い時間で済みます。

Step11

記録を残す

  • 取り込んだCSVのファイル名と更新日時、部門の数
  • 部門ごとの差と分解の数字と、そのとき使った計画の版と計算の式の版
  • AIに渡した入力と、返ってきたJSONの全文
  • 根拠不一致で外した候補と、main_driver が合わなかった行
  • 担当者が直した後のコメントと、部門に聞いた内容
  • 少人数のため事業部にまとめた部門の一覧

5つ目が、翌月の入力の材料になります。 部門に聞いて分かった事情(期中の組織変更、計画に無かった増員の承認など)を記録しておけば、翌月は同じ質問をせずに済みます。

04実装レベルの3段階

最小構成:数部門の差を手で分解し、理由の候補とコメントをAIの画面で出させる / 分解の式と指示の確かめ
半自動化:上記+スクリプトでCSVの取り込み・差の分解・少人数のまとめを毎月行い、差の大きい部門のコメント案と確かめる点を一覧に出す / コメント案の作成
本格構成:上記+給与と人事の仕組みからのCSVの自動の出力、部門の管理職への確かめる点の自動の依頼と回答の取り込み、前月の理由の引き継ぎ / 集計から部門への確認までの全体

本記事の想定は半自動化です。 1部門30分が9分になる計算は、この段階で置いています。人事の担当がCSVを置く作業と、経営企画の担当が部門に聞く作業は残します。 本格構成で足すのは、部門への確かめる点の依頼です。 部門の管理職にフォームで確かめる点を送り、回答をコメント案に戻します。部門側の手間が増えるため、確かめる点の数が毎月安定してから作ります。

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

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

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

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

AI活用について相談する

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

向いている
  1. 従業員が数百〜数千名で、課・部の単位で人員と人件費の計画を持っている IT・SaaS、製造、商社などの会社。経営企画が毎月、部門ごとの人員と人件費の計画と実績の差を月次報告にまとめ、その理由を人事や各部門に聞いて回っている場合。給与の仕組みと人事の仕組みから、部門別の集計をCSVで出せる場合。
向いていない
  1. 部門が数個で、経営企画の担当が全部門の事情を把握している場合。人件費の計画を部門別に持っておらず、全社の合計でしか管理していない場合。1部門の人数が数名ばかりで、部門別の人件費を出すと個人の給与が分かってしまう場合(事業部の単位に上げて使ってください)。AIに人員の計画の見直しや配置の判断をさせたい場合(この構成が出すのは差の数字と理由の候補までです)。

07最小構成で試す方法

  1. 先月の月次報告から、差の大きかった5部門を選ぶ
  2. 5部門の人件費の計画と実績、月の平均の在籍者数を表に並べ、人数による差と1人あたりの差を手で計算する
  3. 5部門の入退社・異動の件数と残業時間、採用の進捗を同じ表に並べる
  4. 表を会社が契約しているAIサービスに貼る(部門名は記号に置き換える)
  5. 「この差の理由の候補を、根拠の項目と数字付きで最大3つ出し、2文のコメントにしてください。入力に無い事情は書かず、確かめる点として質問にしてください」と指示する
  6. 出てきたコメントを、先月の報告に載ったコメントと比べる

2番目は、AIを使わずに分解の式を確かめる手順です。 人数による差と1人あたりの差に分けたとき、先月の報告のコメントの説明と筋が合うかを先に見ます。

出てきた内容判断
分解の筋が先月の説明と合い、AIのコメントも同じ理由を挙げたスクリプトとの連携に進む
筋は合うが、AIが昇給などの推測を書いた指示の書き方で直る。構成は有効
分解の筋が先月の説明と合わない月の平均の在籍者数と計画の内訳が先。 AIの前に式と計画を直す

3行目が出ることは珍しくありません。 月末の人数で計算していたり、計画の単価に賞与の引当が入っていなかったりすると、分解が実際の動きとずれます。 計画の立て方を人事と確かめ直すきっかけになります。

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

問題対策
月末の人数で割って1人あたりがずれる月の平均の在籍者数を使う
計画の内訳が無く、1人あたりの差を分けられない計画のシートに内訳と単価を持たせる
組織変更で部門コードが合わない対応表を持ち、合わなければ計算しない
少人数の部門で個人の給与が見える5名未満は事業部にまとめ、1人あたりの差を出さない
AIが昇給や退職の事情を推測する指示で禁じ、確かめる点に回させる
AIが1人あたりを計算して書くスキーマに欄を作らず、事業部まとめの行では禁じる
理由の候補の根拠が入力と違うevidence を照合し、一致しない候補を外す
コメントの書き方が月ごとに違うコメントの型を指示に入れる
人件費のCSVが共有のフォルダで広く見えるフォルダの共有を人事と経営企画の担当に限る

上の3行が、分解の数字の失敗のほとんどです。 どれもAIとは関係がなく、計画と実績の数え方がそろっていないことから起きます。ここを直すほうが、コメントの精度を上げるより効きます。

4行目は、最初から設計に入れてください。 運用が始まってから気づくと、それまでの月次報告に個人の給与に近い数字が載っていたことになります。

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

この構成で扱うデータ: 部門別の人件費とその内訳、在籍者数、入退社・異動の件数、残業時間、採用の進捗です。個人ごとのデータは含めませんが、部門の人数が少ないと個人の給与に近づく情報です。

  1. 有料の枠で使う … Gemini API の追加の利用規約では、無料の枠に送った内容は製品の改善に使われ、人が読むことがあるとされ、機密の情報や個人の情報を送らないよう求められています。 有料の枠では、プロンプトと応答を製品の改善に使わないとされています。人件費を扱う以上、有料の枠で使います
  2. 個人の単位のデータを入れない … CSVの段階で、社員の名前・社員番号・個人の給与を含めない形で出します
  3. 少人数の部門をまとめる … 5名未満の部門は事業部にまとめ、1人あたりの差を出しません
  4. フォルダとシートの共有を絞る … 人件費のフォルダ、差の分解とコメント案のシートは、人事と経営企画の担当だけが開ける設定にします。 スクリプトを動かすアカウントも人事部の管理用にします
  5. 知らせに数字を載せない … Chat には件数とリンクだけを送ります
  6. AIに判断させない … 人員の計画の見直し、配置の変更、部門の評価は、経営と部門が行います。 この構成が出すのは、差の数字と理由の候補までです

誤りが起きた場合のリスクは、差の理由を取り違えて経営会議の判断がずれることと、個人の給与や事情が報告から読み取れてしまうことの2つです。 前者は分解の式と evidence の照合で、後者は少人数のまとめと担当者の最後の確認で防ぎます。

10まず何から始めるか

1週目:計画の内訳をそろえる

計画のシートに、部門ごとの人件費の内訳(基本給と手当・残業代・賞与の引当・法定福利費・派遣と業務委託費)と計画の単価を持たせます。少人数の部門をどの事業部にまとめるかも、人事と決めます。

2週目:5部門で分解を確かめる

先月の差の大きかった5部門について、人数による差と1人あたりの差を手で計算し、先月のコメントの説明と比べます。月末の人数と月の平均の在籍者数の両方で計算し、違いを見ます。

3週目:取り込みと分解を作る

3つのCSVを共有ドライブから取り込み、全部門の差と分解、少人数のまとめを一覧に出すところまで作ります。この時点ではAIを呼びません。 差の大きい部門が毎月何部門になるかを数えます。

4週目:コメント案を足す

差の大きい部門について Gemini API を呼び、理由の候補とコメント案を一覧に出します。最初の1か月は、担当者が自分で書いたコメントと並べて比べます。

2か月目: コメント案を下書きとして使う運用に切り替え、部門に聞いた内容を記録します。3か月目以降: 前月の理由を入力に引き継ぎ、確かめる点の数の推移を見ます。1部門30分が何分になったかと、部門に聞かずにコメントにできた部門の割合を実測した時点で、この構成は完成です。


11関連ユースケース

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

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

技術仕様確認日:2026-10-07/最終更新:2026-10-07
確認した内容情報源確認日
時間主導型のトリガーが毎分から毎月の間隔で動き、時刻が少しずれること。インストール型トリガーが作成した人のアカウントで実行されることGoogle for Developers: Installable triggers2026-10-07
1回の実行が6分まで。トリガーの合計実行時間が Google Workspace で1日6時間。URL の取得が Google Workspace で1日100,000回Google for Developers: Quotas for Google Services2026-10-07
Utilities.parseCsv() が CSV の文字列を2次元の配列にすることGoogle for Developers: Utilities2026-10-07
UrlFetchApp.fetch() の method・contentType・payload・headers・muteHttpExceptionsGoogle for Developers: UrlFetchApp2026-10-07
スクリプト プロパティがスクリプトのすべての利用者で共有されることGoogle for Developers: Properties Service2026-10-07
受信 Webhook が一方向の知らせで、スペースあたり毎秒1回の上限を共有すること。URL を公開の場所に貼らないことGoogle for Developers: Send Google Chat messages with incoming webhooks2026-10-07
Gemini API の構造化出力が /v1beta/interactions の response_format(mime_type と schema)で指定でき、値の正しさはアプリケーションで確かめるべきことGoogle AI for Developers: Structured output2026-10-07
無料の枠の内容は製品の改善に使われ人が読むことがあり、機密・個人の情報を送らないよう求められること。有料の枠ではプロンプトと応答を改善に使わないことGoogle AI for Developers: Gemini API Additional Terms of Service2026-10-07

差の大きい部門の基準、少人数の部門をまとめる人数、計画の内訳の立て方は、自社の実情に合わせて決めてください。 本記事は Google for Developers と Google AI for Developers で確認できた範囲だけを扱っています。

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

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

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

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