Media > AI活用ユースケース > 研究開発 > 研究員が入力するテーマ別の工数を毎月集計し、計画との差が大きいテーマと理由の候補を研究開発の管理者に要約して届ける

研究員が入力するテーマ別の工数を毎月集計し、計画との差が大きいテーマと理由の候補を研究開発の管理者に要約して届ける

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

研究員が入力したテーマ別の工数を毎月集計して計画と比べ、差の大きいテーマについて、作業メモから理由の候補を要約します。グループ長は、自分のテーマの一覧を読んで理由を確かめるところから始められます。

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

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

導入前(Before)
  1. 研究企画が、フォームの回答のシートから前の月の行を取り出し、ピボットテーブルでテーマ別に合計する
  2. テーマ計画のシートから同じ月の計画工数を引いて並べ、差と比率を計算する
  3. 差の大きいテーマに色を付け、グループごとのシートに分けてグループ長に送る
  4. グループ長が、色の付いたテーマについて回答のシートを開き、作業メモを1行ずつ読む
  5. メモで分からないものは、テーマリーダーや研究員にチャットで聞く
  6. グループ長が理由を1〜2行にまとめてシートに書き込み、研究企画に返す
  7. 研究企画が全グループの分をまとめ、運営会議の資料にする
導入後(After)
  1. 人研究員が、今までどおり毎週フォームで工数と作業メモを入力する
  2. 自動毎月3日の朝、Apps Script が前の月の回答を読み、テーマ別に合計する
  3. 自動テーマ計画と突き合わせ、差の比率と時間数の閾値で「差が大きい」テーマを決める
  4. 自動研究員の月の合計時間を所定の時間と比べ、入力漏れの疑いを拾う
  5. 自動差の大きいテーマについて、その月の作業メモをグループごとに Gemini API に渡す
  6. 自動Gemini API が、理由の候補・根拠のメモ・理由の区分を JSON で返す
  7. 自動集計の一覧のシートに書き、グループ長ごとに自分のテーマの要約をメールで送る
  8. 人グループ長が、理由の候補と根拠のメモを読み、確かめた理由を一覧に書き込む
  9. 人研究企画が、区分ごとの件数と書き込まれた理由を運営会議の資料にまとめる
各工程の詳しい説明を読む
  1. 研究企画が、フォームの回答のシートから前の月の行を取り出し、ピボットテーブルでテーマ別に合計する
  2. テーマ計画のシートから同じ月の計画工数を引いて並べ、差と比率を計算する
  3. 差の大きいテーマに色を付け、グループごとのシートに分けてグループ長に送る
  4. グループ長が、色の付いたテーマについて回答のシートを開き、作業メモを1行ずつ読む
  5. メモで分からないものは、テーマリーダーや研究員にチャットで聞く
  6. グループ長が理由を1〜2行にまとめてシートに書き込み、研究企画に返す
  7. 研究企画が全グループの分をまとめ、運営会議の資料にする

(a)集計の手順が人に付いている。 ピボットテーブルの作り方、月をまたぐ週の扱い、廃止したテーマコードの読み替えは、研究企画の担当者1人の手順書の中にあります。 その人が休むと、集計の日が数日ずれます。

(b)「差が大きい」の線が月によって違う。 色を付ける基準は「だいたい2割以上」ですが、計画が月10時間の小さなテーマでは2割は2時間で、毎月のように色が付いてしまいます。 担当者はそれを知っているので、小さなテーマは目で見て外します。外し方は書かれていません。

(c)作業メモを読むのに時間がかかる。 1つのテーマに月30〜80行のメモがあり、グループ長は全部を読んで理由を探します。理由がはっきり書かれているのはそのうちの数行です。 残りは「評価」「合成」「データ整理」のような作業名だけの行です。

(d)理由の書き方がグループ長によって違う。 「装置待ち」と書く人もいれば、「計画が甘かった」と書く人もいます。同じ装置の予約が取れずに3つのグループのテーマが遅れていても、運営会議で並べると3つの別々の理由に見えます。 研究所の全体で効く手当てが見えにくくなります。

  1. 【人】 研究員が、今までどおり毎週フォームで工数と作業メモを入力する
  2. 【自動】 毎月3日の朝、Apps Script が前の月の回答を読み、テーマ別に合計する
  3. 【自動】 テーマ計画と突き合わせ、差の比率と時間数の閾値で「差が大きい」テーマを決める
  4. 【自動】 研究員の月の合計時間を所定の時間と比べ、入力漏れの疑いを拾う
  5. 【自動】 差の大きいテーマについて、その月の作業メモをグループごとに Gemini API に渡す
  6. 【自動】 Gemini API が、理由の候補・根拠のメモ・理由の区分を JSON で返す
  7. 【自動】 集計の一覧のシートに書き、グループ長ごとに自分のテーマの要約をメールで送る
  8. 【人】 グループ長が、理由の候補と根拠のメモを読み、確かめた理由を一覧に書き込む
  9. 【人】 研究企画が、区分ごとの件数と書き込まれた理由を運営会議の資料にまとめる

8番目が、この設計の分かれ目です。 AI の要約は理由の「候補」で、グループ長はそれを確かめて自分の言葉で書き込みます。確かめる作業は残しますが、メモを最初から全部読む作業は無くなります。 根拠のメモの番号が付いているので、候補が怪しければその数行だけを読めば足ります。

3番目と4番目を規則で決めているのも、意図してのことです。 どのテーマを見るか、誰の入力が漏れているかは、数字だけで決まるので AI に任せる理由がありません。 閾値は研究企画がシートで持ち、運営会議で変えられるようにします。

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

構成図
研究員が毎週フォームで工数と作業メモを入力
   │  回答は1つのスプレッドシートに入る
   ▼【トリガー】毎月3日 8時台(時間主導型)
Google Apps Script
   ├──▶ 前の月の回答をテーマ別に合計
   ├──▶ テーマ計画と突き合わせ(比率と時間数の閾値で判定)
   ├──▶ 研究員の月の合計と所定の時間の比較(入力漏れの疑い)
   ├──▶ Gemini API(構造化出力)
   │       差の大きいテーマの作業メモ → 理由の候補・根拠・区分
   ├──▶ 集計の一覧のシートに書く
   └──▶ MailApp でグループ長ごとに要約を送る
   ▼
【グループ長が理由を確かめて一覧に書き込む】
   ▼
研究企画が運営会議の資料にまとめる
役割想定する製品代替候補
実行環境Google Apps ScriptMake、Power Automate
生成AIGemini API(構造化出力。有料の枠で使う)Claude API、OpenAI API
保管Google スプレッドシート(工数の回答、テーマ計画、研究員の一覧、閾値、集計の一覧)-
通知Gmail(MailApp)Google Chat

新しく足すのは、Apps Script と、閾値・研究員の一覧・集計の一覧のシートだけです。 フォームと回答のシート、テーマ計画のシートは、いまのものを使います。勤怠のシステムや人事のシステムにはつなぎません。 所定の時間は研究員の一覧のシートに持たせます。

Apps Script は、回答のスプレッドシートに付けるスクリプトとして書きます。 トリガーは、毎月決まった日に動く時間主導型のトリガーです。公式のページでは、onMonthDay() で月の何日に動かすかを、atHour() で何時に動かすかを指定できるとされています。また、時間主導型のトリガーの時刻は少しずれることがあり、9時に設定すると9時から10時のあいだの時刻が選ばれ、その時刻が保たれるとされています。グループ長の始業までに届けばよいので、8時台にします。

インストール型のトリガーは、作った人のアカウントで動きます。 公式のページでは、トリガーから送ったメールはトリガーを作った人のアカウントから送られるとされています。研究企画の担当者の個人のアカウントで作ると、異動のあとに集計が止まります。研究企画の共有のアカウントで作ります。

AI の処理は Gemini API の構造化出力で行います。 公式のページでは、/v1beta/interactions に送る要求の response_format に mime_type: "application/json" と schema を指定すると、スキーマに沿った JSON が返るとされています。スキーマでは enum と required が使えます。

Gemini API は有料の枠で使います。 利用規約では、無料の枠では送った内容と応答が製品の改善に使われ、人が読むことがあるとされ、有料の枠ではプロンプトと応答を製品の改善に使わないとされています。研究の作業メモには、未発表の材料の名前や条件が書かれます。無料の枠に流してはいけない情報です。

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

Step1

処理の起点を決める

集計は、毎月3日の8時台に動く時間主導型のトリガーを起点にします。 ScriptApp.newTrigger() に timeBased()・onMonthDay(3)・atHour(8) を続けて作ります。動くと、前の月の1日から末日までの回答を読みます。

3日にするのは、入力の締めを待つためです。 研究員の入力は毎週金曜ですが、月末の週の分は翌月の最初の金曜まで入らないことがあります。1日に集計すると、月末の数日分が抜けた数字で差を出すことになります。 研究所の決まりとして「月末の週の分は翌月2日までに入力」と定め、3日の朝に集計します。

3日が土日に当たる月も、そのまま動かします。 集計とメールは人の手を要さず、グループ長が週明けに読めば足ります。 祝日の多い月だけ日をずらす、という運用にすると、ずらし忘れが起きます。

週が月をまたぐときの扱いを決めておきます。 フォームの「週」は週の始まりの月曜の日付で入るので、月曜が前の月なら前の月の分として数えます。日割りはしません。計画工数も同じ決まりで立てていれば、差は月の境目でずれません。

集計のやり直しは、手動の実行で行います。 入力の遅れがあとから届いたときは、研究企画がスクリプトのメニューから「前月を再集計」を実行します。再集計ではメールを送らず、一覧のシートだけを書き換えます。 同じ要約が二度届くと、どちらが新しいかで迷うからです。

Step2

入力データを集める

データ中身取得元
工数の回答週、研究員の番号、テーマコード、時間数、作業メモ回答のスプレッドシート
テーマ計画テーマコード、テーマ名、グループ、テーマリーダー、月別の計画工数、状態(進行中・中断・終了)テーマ計画のシート
研究員の一覧研究員の番号、所属のグループ、月の所定の時間、兼務の割合研究員の一覧のシート
閾値差の比率の閾値、差の時間数の閾値、入力漏れとみなす割合閾値のシート
前の月の一覧テーマごとの差、グループ長が書き込んだ理由集計の一覧のシート

質を決めるのは、作業メモです。 AI が理由の候補を出せるのは、メモに手がかりがあるときだけです。メモが空の行ばかりのテーマは、「メモからは分からない」としか返りません。 第12章でも扱いますが、作業メモの欄に「予定と違ったことがあれば一言」という説明を書き添えるだけで、手がかりの量は変わります。

前の月の一覧を渡すのは、続いている差を見分けるためです。 2か月続けて同じ理由で遅れているテーマは、一時的な遅れではありません。前の月にグループ長が書いた理由を添えると、AI は「先月から続く装置待ち」のように、続いていることを要約に書けます。

Step3

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

取るものどこからどう取るか
前の月の回答回答のシート週の列で前の月の行に絞る
計画と状態テーマ計画のシートテーマコードで引く
所定の時間研究員の一覧研究員の番号で引く
前の月の理由集計の一覧のシート前の月の行をテーマコードで引く

シートは実行の最初に getValues() でまとめて読みます。 1行ずつ読むと、回答が月に1,500行を超えるこの規模では遅くなります。公式の割り当てでは、1回の実行は6分までです。読み込みと集計は数秒で終わりますが、AI の呼び出しが入るので、時間を食う処理を減らしておきます。

処理は、次の順で行います。

1. 前の月の回答を読み、テーマコードを正規化する(全角・半角、廃止コードの読み替え)
2. テーマ別に合計し、テーマ計画の計画工数と並べる
3. 差の比率と時間数の両方が閾値を超えたテーマに flag を立てる(R1)
4. 計画が0なのに実績があるテーマ、状態が「終了」なのに実績があるテーマを拾う(R2)
5. 研究員ごとの月の合計を所定の時間と比べ、少なすぎる人を入力漏れの疑いとする(R3)
6. flag の立ったテーマの作業メモを、グループごとにまとめる
7. グループごとに Gemini API を呼び、JSON を受け取る(失敗したら数字だけで送る)
8. 集計の一覧のシートに書き、グループ長ごとにメールを送る

3番目で比率と時間数の両方を見るのが、第3章の(b)への答えです。 比率だけだと小さなテーマに毎月 flag が立ち、時間数だけだと大きなテーマの小さなずれを拾います。たとえば「比率20%以上、かつ差が16時間以上」のように両方を満たすものだけにすると、研究企画が目で外していた分が規則になります。

7番目は、テーマごとではなくグループごとに呼びます。 差の大きいテーマが月に15〜20件あるとして、テーマごとに呼ぶと実行時間が6分に近づきます。グループごとなら呼び出しは6回で済みます。 それでも6分を超えそうなときは、終わったグループをスクリプトのプロパティに記録し、数分後に続きを動かすトリガーを作って残りを処理します。

7番目で AI が失敗しても、メールは送ります。 差の数字と入力漏れの疑いは規則だけで決まります。要約の欄を「生成に失敗。メモは一覧のシートを参照」として送り、研究企画にだけ失敗を知らせます。

Step4

AIへ渡す前に整形する

  1. 研究員の番号を外す … AI に渡すのは、テーマコード、週、時間数、作業メモだけです。誰のメモかは渡しません
  2. メモに番号を振る … 「M-0412」のように、行ごとに番号を付けて渡します。AI には根拠をこの番号で返させます
  3. 空のメモを数える … 作業メモが空の行は渡さず、空の行の数と時間数の合計だけを添えます
  4. 作業名だけのメモを分けない … 「評価」「合成」のような短いメモもそのまま渡します。どの作業に時間が寄ったかの手がかりになります
  5. 数字は規則で計算したものを渡す … 計画工数、実績、差、比率は、スクリプトで計算した値を渡します。AI に計算させません
  6. 前の月の理由を添える … 前の月にグループ長が書き込んだ理由を、テーマごとに1つ添えます

1番目で研究員の番号を外すのは、第1章で書いたとおり、個人の評価に使わないためです。 番号を渡すと、AI は「特定の研究員の工数が他テーマに流れている」のような人に紐づいた要約を書きます。それが一覧に載れば、グループ長の手元で評価の材料になってしまいます。テーマの単位で要約させるには、人の手がかりを最初から渡さないのが確実です。

5番目は、AI に数字を作らせないためです。 差や比率を AI に計算させると、要約の中の数字と一覧の数字が食い違うことがあります。数字は規則が出し、AI はその数字を言い換えずに引用するだけにします。

Step5

AIに処理させる

させるのは、差の大きいテーマごとに、作業メモから差の理由の候補を要約し、根拠のメモと理由の区分を付けることです。

見るものさせること例
実績が計画より少ないテーマのメモ何が進まなかったか、何に時間が回ったかの候補「評価装置の予約が取れず待ち」が3行 → equipment_wait
実績が計画より多いテーマのメモ何に余分に時間がかかったかの候補「再合成」「条件の振り直し」が続く → rework
他テーマへの言及応援・掛け持ちの手がかり「Bテーマの試作を応援」 → support_other
前の月の理由続いているかどうか先月も装置待ち → continuing: true

理由の区分は、研究企画が決めた語彙から選ばせます。 装置待ち、試料・材料の入荷待ち、外部の委託・分析の待ち、やり直し、他テーマの応援、計画の見込み違い、テーマの前倒し、メモからは分からない、の8つです。区分をそろえると、第3章の(d)で書いた「同じ装置待ちが3つの別々の理由に見える」問題が消えます。 運営会議では、区分ごとの件数をまず見られます。

させないこと理由
差が大きいかどうかの判断閾値の規則で決める
研究員ごとの工数の評価個人の評価に使わない
テーマを続けるか止めるかの提案運営会議と研究所長が決める
研究の中身の良し悪しの評価工数の話ではない
差や比率の計算スクリプトで計算した値を使う
メモに無い理由を推し量って書く事実として会議に持ち込まれる

3行目と6行目が、この構成でいちばん守るべきことです。 工数が計画を大きく下回るテーマを渡すと、AI は親切に「優先度の見直しを検討してはどうか」と書き足しがちです。テーマの継続の話は、研究の見込みや事業の都合で決まるもので、工数の差だけで出せる結論ではありません。 スキーマに提案を書く欄を作らず、指示でも禁じます。

Step6

指示内容を固定する

あなたは研究所の研究企画の担当として、研究テーマの工数が計画と大きく
ずれた理由の「候補」を、研究員の作業メモから整理する立場です。
研究の良し悪し、研究員の働きぶり、テーマを続けるべきかは判断しません。

【入力】
- 各テーマについて:テーマコード、計画工数、実績工数、差、比率(計算済み)
- そのテーマの、前の月の作業メモ(memo_id 付き)
- メモが空だった行の数と、その時間数の合計
- 前の月にグループ長が書いた理由(無い場合もある)

【してほしいこと】
1. メモの中から、計画とずれた理由の手がかりになる記述を探す
2. 理由の候補を1〜3つ、各80字以内で書く
3. 各候補に、根拠にした memo_id を必ず付ける
4. 各候補に、次の区分から1つを付ける
   equipment_wait / material_wait / outsource_wait / rework /
   support_other / plan_mismatch / ahead_of_plan / unknown
5. 前の月の理由と同じ種類の理由が今月も続いていれば continuing を true にする

【厳守事項】
- メモに書かれていない理由を推し量って書かないでください。
  手がかりが無ければ、区分を unknown にし、候補の本文は
  「メモからは理由が分かりません」としてください。
- 根拠の memo_id が付けられない候補は書かないでください。
- 数字は入力の値をそのまま使い、計算し直したり丸めたりしないでください。
- テーマを止める・続ける・人を移すなどの提案を書かないでください。
- 特定の人の働き方についての記述を書かないでください。
- メモが空の行が多いことは、空の行の数として事実だけを書いてください。
  「記録が不十分」などの評価を書かないでください。

【テーマ】{themes_json}

「根拠の memo_id が付けられない候補は書かない」が、推し量りを止める仕掛けです。 推し量りを禁じるだけでは、AI は「一般に材料系の研究では装置の確保がボトルネックになりやすく」のようなもっともらしい一般論を候補に入れます。根拠の番号を必須にすると、一般論には付ける番号が無いので、候補から消えます。

unknown の本文を決めた文言にしているのは、一覧で目に付くようにするためです。 グループ長が読むとき、メモから分からないテーマこそ自分で聞きに行くべきテーマです。言い回しが毎回変わると、読み飛ばされます。

Step7

出力形式を固定する

構造化出力で、次の形の JSON を受け取ります。

{
  "group": "",
  "themes": [
    { "theme_code": "",
      "direction": "under | over",
      "candidates": [
        { "reason": "",
          "category": "equipment_wait | material_wait | outsource_wait | rework | support_other | plan_mismatch | ahead_of_plan | unknown",
          "memo_ids": [""],
          "continuing": false }
      ],
      "empty_memo_rows": 0 }
  ]
}

スキーマでは category と direction を enum で縛り、memo_ids を required にします。memo_ids に入った番号が、渡したメモの番号に本当にあるかは、受け取ったあとにスクリプトで確かめます。 無い番号が返った候補は、一覧に載せる前に落とし、研究企画に知らせます。

理由の1つ目は、数字と文を別の層に置けることです。 計画・実績・差・比率は一覧のシートの列に規則が書き、AI の JSON には数字を返させません(empty_memo_rows は渡した値をそのまま返させ、照合に使います)。要約の文の中の数字と列の数字が食い違う、という事故が起きません。

2つ目は、区分で集計できることです。 category の件数をグループごと、研究所の全体で数えると、「今月は装置待ちが7テーマ」のような見出しが運営会議の資料の最初に置けます。

3つ目は、continuing で続いている差を拾えることです。 2か月以上続く装置待ちは、グループ長のレベルでは解けない問題であることが多く、研究所として装置の増設や予約の決まりを見直す材料になります。

グループ長に届くメールは、一覧の該当する行をそのまま文にしたものです。

【今月の工数の差:第2グループ(4テーマ)】
■ T-2207 計画120h/実績78h(−35.0%)
  候補1[装置待ち・先月から継続]評価装置の予約が取れず、耐久試験の開始が遅れた
       根拠:M-0412、M-0433、M-0457
  メモが空の行:6行(18h)
■ T-2215 計画40h/実績64h(+60.0%)
  候補1[やり直し]合成の収率が出ず、条件を変えて再合成を3回行った
       根拠:M-0501、M-0518
※ 理由は作業メモからの候補です。確かめて一覧の「確認した理由」に書き込んでください。
Step8

システムへ連携する

つなぎ先方式内容
回答のスプレッドシートSpreadsheetApp(読み取り)前の月の工数と作業メモ
テーマ計画・研究員の一覧・閾値SpreadsheetApp(読み取り)計画工数、所定の時間、閾値
Gemini APIUrlFetchApp理由の候補・根拠・区分の JSON
集計の一覧のシートSpreadsheetApp(書き込み)テーマごとの数字、候補、確認した理由の空欄
GmailMailAppグループ長ごとの要約、研究企画への失敗の知らせ

API キーは、スクリプトのプロパティに置きます。 コードに書くと、スクリプトを開ける人すべてにキーが見えます。公式の割り当てでは、URL Fetch の呼び出しはGoogle Workspace のアカウントで1日10万回、MailApp の宛先は1日1,500で、月に一度、数十通を送るこの構成では余裕があります。

回答のシートとテーマ計画には書き込みません。 書き込むのは集計の一覧のシートだけで、グループ長が理由を書き込む列は、スクリプトが上書きしない列として分けます。再集計で数字の列を書き換えても、グループ長の書き込みは残ります。

Step9

人が確認する

グループ長が見るのは、自分のグループの flag の立ったテーマだけです。 1グループあたり月に2〜4テーマです。

  1. 候補と根拠のメモを読む … 根拠の番号のメモを一覧から開き、候補の要約がメモと合っているかを見ます
  2. unknown のテーマは自分で聞く … テーマリーダーに直接聞きます。ここだけは、今までと同じ時間がかかります
  3. 確認した理由を書き込む … 候補をそのまま使ってよいなら写し、違えば書き直します。区分も直せます
  4. 入力漏れの疑いの人に声をかける … 疑いは研究企画からグループ長に届きます。数字を直すのは研究員本人です

研究企画は、確認した理由の列が埋まったかを月の5日に見ます。 埋まっていないグループにだけ声をかけ、運営会議の資料には確認した理由だけを載せます。 AI の候補のまま会議に出すことはしません。

目標は、テーマ1件をならして10分です。 flag の立たないテーマは数字を見るだけで、立ったテーマは候補の確認に数分、unknown は聞き取りで数十分です。unknown が多い月は、作業メモの書き方を見直す合図になります。

Step10

例外に対処する

起きること対応
テーマ計画に無いテーマコードunknown_theme として一覧の末尾に載せ、研究企画が読み替えを決める
計画が0なのに実績があるR2 として載せる。AI には渡さない。計画の入れ忘れか、無計画の作業かを研究企画が確かめる
状態が「終了」のテーマに実績R2 として載せる。テーマコードの選び間違いが多い
研究員の月の合計が少なすぎるR3(入力漏れの疑い)。差の判定はその人の分が欠けたまま行うので、一覧に注記する
作業メモがすべて空のテーマAI に渡さず、unknown として「メモがありません」と載せる
Gemini API が応答しない・形が違う一度だけやり直し、だめなら数字だけで送る。研究企画に知らせる
返った memo_ids が存在しないその候補を落とし、研究企画に知らせる
6分を超えそう終わったグループを記録し、続きのトリガーで残りを処理する

4行目の注記を省かないでください。 入力漏れの人が担当するテーマは、実績が計画を下回って見えます。漏れのせいで flag が立ったテーマに、AI が「装置待ち」のような理由を付けてしまうと、二重に誤ります。 一覧には「このテーマの研究員のうち1名に入力漏れの疑い」と出し、グループ長が先に入力を確かめるようにします。

Step11

記録を残す

  • 集計の一覧のシート:月ごとのタブに、テーマごとの計画・実績・差・比率、flag、AI の候補、グループ長が確認した理由
  • AI に渡したメモの番号の一覧と、返った JSON の全文(月ごとのログのシート)
  • その月に使った閾値(比率・時間数・入力漏れの割合)
  • 再集計の実行日時と、誰が実行したか
  • メールの送信日時と宛先

「その月に使った閾値」を残すのは、閾値が運営会議で変わるためです。 閾値を下げた月は flag の数が増えます。閾値の変化を残していないと、「今月は遅れたテーマが多い」のか「線を下げただけ」なのかが分かりません。

AI の候補とグループ長の確認した理由を並べて残すと、半年後に候補の当たり外れが分かります。 区分を直された割合が高い区分は、指示の書き方か区分の定義のほうを見直します。

04実装レベルの3段階

最小構成:差の大きいテーマのメモを手で AI の画面に貼り、理由の候補を出させる / テーマごとのメモの要約
半自動化:上記+Apps Script で集計・閾値の判定・AI の呼び出し・メールまでを月に一度自動で行う / 集計から要約の配信まで
本格構成:上記+区分ごとの推移のグラフ、続く差の自動の追跡、運営会議の資料の下書きまでを作る / 運営会議の資料の準備まで

最小構成では、集計の時間は減りません。 ピボットテーブルを作る作業が残るからです。メモを読む時間がどれだけ減るかを確かめる段階です。 半自動化で1件30分が10分になり、この段階が本記事の想定です。 集計と突き合わせ(①)は自動になり、メモを読む作業(②)は候補と根拠の確認に変わります。理由の書き込み(③)は、候補を写すか直すかになります。 本格構成は、半自動化で半年分の確認した理由がたまってから考えます。 区分ごとの推移を見るには、区分が安定して使われている必要があります。最初から資料の下書きまで作ると、区分の定義が固まらないうちに会議の形が決まってしまいます。

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

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

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

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

AI活用について相談する

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

向いている
  1. 研究員が数十名から数百名いて、研究テーマごとに工数の計画を立てている化学・素材・電機・医薬などの研究所。研究員がテーマ別の工数を Google フォームやスプレッドシートに入力しているが、計画との差を見て理由を聞き取る作業が月末にグループ長と研究企画に集中している場合。工数の入力に短い作業メモの欄がある場合。Google Workspace を使っている場合。
向いていない
  1. 研究テーマが数件で、グループ長が日々の会話で進み具合を把握できている場合。工数をテーマ別に分けて入力していない場合。作業メモの欄が無く、数字しか残っていない場合。工数の記録を研究員の評価に使う運用になっている場合(この構成は個人の評価に使わない前提です)。なお、テーマの継続・中止や人の配置の判断は、この構成では代替できません。

07最小構成で試す方法

  1. 先月の回答のシートから、計画との差が大きかったテーマを5つ選ぶ(グループ長が理由を書き込んだもの)
  2. その5テーマの作業メモを、研究員の番号の列を消してから書き出す
  3. 手元の Gemini の画面に、テーマごとに計画・実績・差と作業メモを貼る
  4. 第7章の指示の要点(根拠のメモを付ける、メモに無い理由を書かない、区分から選ぶ)を伝える
  5. 出てきた候補を、グループ長が実際に書いた理由と突き合わせる

ここで見るのは、候補の当たり外れより、根拠の付き方です。 根拠のメモを読んで「確かにそう書いてある」と言える候補が出るなら、構成は有効です。

出てきた内容判断
グループ長の理由と同じ候補が、根拠付きで出たApps Script で集計とつなぐ段階に進む
根拠の無い一般論が候補に入った指示の書き方で直る。根拠の番号を必須にする
ほとんどのテーマが unknown になった作業メモの書き方が先。 AI の問題ではない

3行目が出たら、作業メモの欄の説明を変えて1か月待ちます。 「予定と違ったことがあれば一言(例:装置待ち、再合成、他テーマの応援)」と例を添えるだけで、手がかりの量は大きく変わります。 手元の画面で試すときは、有料の枠の契約の下で使い、無料の枠の画面に未発表の情報を貼らないでください。

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

問題対策
小さなテーマに毎月 flag が立つ比率と時間数の両方を閾値にする
AI が一般論を理由の候補に入れる根拠の memo_id を必須にし、無い番号は落とす
AI がテーマの見直しを提案するスキーマに提案の欄を作らず、指示でも禁じる
要約の中の数字が一覧と食い違う数字は規則が出し、AI に計算させない
作業メモが空ばかりで unknown だらけフォームの欄の説明に例を添える
入力漏れのせいで差が出るR3 で拾い、該当テーマに注記する
月をまたぐ週の数え方がずれる週の月曜の日付で月を決め、計画も同じ決まりで立てる
6分の実行時間を超えるグループごとに呼び、続きのトリガーで残りを処理する
担当者の異動で集計が止まるトリガーを研究企画の共有のアカウントで作る
再集計でグループ長の書き込みが消える書き込みの列をスクリプトが上書きしない列に分ける
研究員の名前が要約に出る番号を外してから渡す
無料の枠に未発表の情報を流す有料の枠で契約し、API キーを共有のアカウントで管理する

上の2行が、この構成の使われ方を決めます。 flag が多すぎればグループ長は一覧を読まなくなり、候補が一般論ならグループ長は候補を信じなくなります。どちらも、最初の2〜3か月で印象が決まります。 閾値は少し高めから始め、根拠の番号の照合は最初の版から入れてください。

下の2行は、研究所の信頼に関わります。 工数の記録から人の名前が出る、未発表の材料の名前が外に出る、のどちらかが一度でも起きると、研究員は作業メモを書かなくなります。 メモが無くなれば、この構成は数字の集計に戻ります。

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

この構成で扱うデータ: 研究テーマの名前と計画、研究員ごとの工数、そして作業メモに書かれる未発表の材料・条件・装置の名前です。

  1. 有料の枠で使う … Gemini API の利用規約では、無料の枠では送った内容が製品の改善に使われ、人が読むことがあるとされています。研究の作業メモは無料の枠に流しません。 手元の画面で試すときも同じです
  2. 研究員の番号と名前を AI に渡さない … テーマの単位の要約に人の手がかりは要りません。個人の評価の材料にしない、という約束を仕組みで守ります
  3. 工数の記録を評価に使わないことを、研究員に伝える … 集計の目的が「テーマの差の理由を早く知ること」だと伝えておかないと、入力される数字が実態から離れていきます
  4. 集計の一覧の閲覧の範囲を絞る … 一覧には全テーマの差と理由が載ります。グループ長には自分のグループのタブだけを見せ、全体は研究企画と研究所長に限ります
  5. テーマを続けるか止めるかを、この一覧だけで決めない … 工数の差は研究の見込みを表しません。判断は運営会議で、研究の中身と合わせて行います
  6. API キーの管理 … スクリプトのプロパティに置き、スクリプトの編集の権限を研究企画の数名に絞ります

誤りが起きた場合のリスクは、根拠の無い理由が事実として会議に持ち込まれることと、入力漏れの差を研究の遅れと取り違えることの2つです。 前者は根拠の番号の必須化と照合で、後者は入力漏れの規則と注記で防ぎます。どちらも、AI の判断ではなく規則の側で守ります。

10まず何から始めるか

1週目:閾値と理由の区分を決める

研究企画とグループ長で、「差が大きい」の比率と時間数、理由の区分の8つを決めます。過去3か月の集計に当てはめて、flag の数が月に15〜20件になるかを確かめます。 多すぎれば時間数の閾値を上げます。

2週目:5テーマで試す

先月の差の大きいテーマを5つ選び、研究員の番号を消した作業メモを、有料の枠の Gemini の画面に貼って候補を出させます。グループ長が書いた理由と比べ、根拠の付いていない候補が出ていないかを最優先で見ます。

3週目:フォームの欄の説明を変える

作業メモの欄に「予定と違ったことがあれば一言(例:装置待ち、再合成、他テーマの応援)」と書き添えます。研究員に、工数の記録は評価に使わないことをあわせて伝えます。

4週目:集計から一覧までを作る

Apps Script で、前の月の回答の集計、閾値の判定、入力漏れの疑いの拾い出し、一覧のシートへの書き込みまでを作ります。この時点では AI を呼ばず、数字だけの一覧を研究企画が見ます。

2か月目: Gemini API の呼び出しと、根拠の番号の照合、グループ長へのメールを足します。3か月目以降: グループ長が区分を直した割合を数え、指示と区分の定義を見直します。unknown の割合が下がり、運営会議の資料が前日までにそろうようになった時点で、この構成は完成です。


11関連ユースケース

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

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

技術仕様確認日:2026-10-09/最終更新:2026-10-12
確認した内容情報源確認日
時間主導型のトリガーがあること。時刻が少しずれることがあり、9時に設定すると9時から10時のあいだが選ばれて保たれること。インストール型のトリガーが作った人のアカウントで動き、メールもその人のアカウントから送られることGoogle Apps Script: Installable Triggers2026-10-09
時間主導型のトリガーで onMonthDay() により月の何日に、atHour() により何時に動かすかを指定できることGoogle Apps Script: Class ClockTriggerBuilder2026-10-09
1回の実行が6分までであること。URL Fetch の呼び出しが Google Workspace で1日10万回であること。MailApp の宛先が Google Workspace で1日1,500であることGoogle Apps Script: Quotas for Google Services2026-10-09
/v1beta/interactions に送る要求で response_format に mime_type: "application/json" と schema を指定すると JSON で返ること。enum・required が使えることGemini API: Structured output2026-10-09
無料の枠では送った内容と応答が製品の改善に使われ、人が読むことがあること。有料の枠ではプロンプトと応答を製品の改善に使わないことGemini API Additional Terms of Service2026-10-09

閾値と理由の区分は、研究所の運営の決めごととして研究企画とグループ長で決めてください。 本記事は上記の公式のページで確認できた範囲だけを扱っています。

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

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

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

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