Media > AI活用ユースケース > 人事 > 作業者の力量管理表を教育記録から更新して、期限切れと配置の穴を出す

作業者の力量管理表を教育記録から更新して、期限切れと配置の穴を出す

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

教育の受講記録や修了証、資格証の写しから、誰が何をいつ受けたかを読み取り、作業者の力量管理表を更新します。あわせて、有効期限の切れた力量と、できる人が1人しかいない作業を一覧にします。

サマリー
生成AI
ChatGPT/Claude/Gemini
連携・自動化
Google Apps Script/Make/Power Automate
対象業界
介護/医療/建設/物流/製造
対象部門
人事/生産
対象業務
データ入力・転記/台帳・マスタ管理
主な課題
入力作業が多い/引き継ぎができていない/期限・対応漏れが起きる
AIで行う処理
抽出
主な効果
入力漏れ削減/属人化解消/工数削減
導入難易度
★☆☆☆☆
実装レベル
最小構成
費用感
既存ツールのみ(小)
人間の確認
必須
現在工数
19.5h/月
AI導入後
6h/月
想定削減
69%
年間削減
162h
モデル条件による試算値です。実在企業の実績ではありません。

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

導入前(Before)
  1. 教育を実施した部署から、受講者の名簿が回ってくる
  2. 本人が資格を取得・更新したとき、資格証の写しをメールか紙で出す
  3. 外部研修の修了証は、現場の事務所のファイルに綴じられる
  4. 担当者がそれらを開き、誰が何をいつ受けたかを読む
  5. 力量管理表を開き、その作業者の行と、該当する作業の列を探す
  6. セルの区分を書き換え、取得日を入れる
  7. 更新の周期を覚えている範囲で思い出し、有効期限の列に日付を入れる
  8. 月に1回、期限の列を目で見て、切れているもの・近いものを探す
導入後(After)
  1. 人証明書を提出のフォームから出す(担当者が代理で出してよい)
  2. 自動フォーム送信をきっかけにスクリプトが動き、形式・向き・大きさを確かめる
  3. 自動社員名簿と突き合わせて提出者の候補を絞り、読み取りにかける
  4. 自動氏名・力量の名称・取得日・交付した機関を返す
  5. 自動力量の名称を、対応表の力量コードのどれかに当てる。当たらなければ `unmapped` にする
  6. 自動取得日に対応表の更新の周期を足して、有効期限を計算する
  7. 自動力量管理表の「下書き」欄に行を書く。本体のセルはまだ書き換えない
  8. 人担当者が下書きを開き、原本と見比べて確定する
  9. 自動毎朝、期限の切れた力量と、期限が近いものを一覧に出す
  10. 自動毎月、できる人が1人しかいない作業と、人数が下限を割っている作業を一覧に出す
  11. 自動人事の異動・退職の予定と突き合わせ、その部署でできる人がいなくなる作業を出す
各工程の詳しい説明を読む
  1. 教育を実施した部署から、受講者の名簿が回ってくる
  2. 本人が資格を取得・更新したとき、資格証の写しをメールか紙で出す
  3. 外部研修の修了証は、現場の事務所のファイルに綴じられる
  4. 担当者がそれらを開き、誰が何をいつ受けたかを読む
  5. 力量管理表を開き、その作業者の行と、該当する作業の列を探す
  6. セルの区分を書き換え、取得日を入れる
  7. 更新の周期を覚えている範囲で思い出し、有効期限の列に日付を入れる
  8. 月に1回、期限の列を目で見て、切れているもの・近いものを探す

(a)更新がそのつど反映されない。 4番から7番までを1件ずつやるので、忙しい月は後回しになります。後回しになった記録は、翌月にまとめて処理されるか、忘れられます。 表を見る人は、それが最新かを知りません。

(b)期限の切れた資格で作業させてしまう。 8番の目視は、60列×220行の格子を見る作業です。期限の列が埋まっていない行は、目視でも見つかりません。 7番で「思い出せなかったので空にした」セルが、そのまま見落としになります。

(c)できる人が1人しかいない作業に気づかない。 表は行ごとに更新するので、見るのは横の行です。ところが配置の穴は縦の列にあります。列を縦に数える作業は、誰の仕事にもなっていません。 1人しかいない作業は、その人が休んだ日の朝に発覚します。

(d)異動と退職が反映されるのが遅い。 異動の連絡は来ますが、その人が抜けたあと、その部署でできる人がいなくなる作業までは出てきません。「誰がいなくなったか」は分かっても、「何ができなくなったか」は分かりません。

  1. 【人】 証明書を提出のフォームから出す(担当者が代理で出してよい)
  2. 【自動】 フォーム送信をきっかけにスクリプトが動き、形式・向き・大きさを確かめる
  3. 【自動】 社員名簿と突き合わせて提出者の候補を絞り、読み取りにかける
  4. 【自動】 氏名・力量の名称・取得日・交付した機関を返す
  5. 【自動】 力量の名称を、対応表の力量コードのどれかに当てる。当たらなければ unmapped にする
  6. 【自動】 取得日に対応表の更新の周期を足して、有効期限を計算する
  7. 【自動】 力量管理表の「下書き」欄に行を書く。本体のセルはまだ書き換えない
  8. 【人】 担当者が下書きを開き、原本と見比べて確定する
  9. 【自動】 毎朝、期限の切れた力量と、期限が近いものを一覧に出す
  10. 【自動】 毎月、できる人が1人しかいない作業と、人数が下限を割っている作業を一覧に出す
  11. 【自動】 人事の異動・退職の予定と突き合わせ、その部署でできる人がいなくなる作業を出す

8番目が、この設計の分かれ目です。人が見るのは全件ではありません。 力量コードに当たり、日付も氏名も読み取れたものは一括で確定します。時間を使うのは、対応表に無い名称と、読み取れなかったものだけです。

6番目をスクリプトの側に置いているのも、意図してのことです。 更新の周期は対応表の決まりごとで、証明書を見て判断するものではありません。AIに期限を返させると、印刷された期限と計算した期限のどちらが正しいのかが分からなくなります。

9番から11番は、件数と関係なく動きます。 提出が0件の月でも期限は近づき、異動の予定は入ってきます。Before の④がここに移ったことが、いちばんの変化です。

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

構成図
受講記録・修了証・資格証の写し(PDF/撮影した画像)
   ▼【トリガー】Google フォームへの提出 + 毎朝7時の時間主導型
Google Apps Script ── 形式・向き・大きさの確認、社員名簿との突合
   ▼
Gemini API(構造化出力)
   │   誰が/何を/いつ/どの機関が を読み取る。有効期限は読み取らない
   ▼
Google Apps Script ── 取得日 + 対応表の更新の周期 = 有効期限
   ▼
力量管理表の「下書き」欄へ書く ──【人が原本と見比べて確定】
   ▼
力量管理表(行=作業者、列=作業)+ 作業と必要な力量の対応表
   ├──▶ 期限の切れた力量の一覧
   ├──▶ 期限の近い力量の一覧(手配が間に合う時期に出す)
   ├──▶ できる人が1人しかいない作業の一覧
   └──▶ 異動・退職でできる人がいなくなる作業の一覧
   ▼
Gemini API ── 受講案内の下書き ──▶【人が読んで送信】
役割想定する製品代替候補
実行環境Google Apps ScriptPower Automate、Make
処理Gemini APIClaude API、OpenAI API

力量管理表、対応表、社員名簿は、新しく足す製品ではありません。 どれもスプレッドシートで足り、新しく契約するのは生成AIの利用分だけです。 提出の入口も Google フォームで済みます。

土台になるのは、Apps Script の「インストール可能なトリガー」です。 公式の説明では、時間主導型は毎分から月1回までの間隔で設定でき、イベントで動くものとしてはフォーム送信や、シートの値・構造が変わったときのトリガーがあるとされています。

運用で効いてくる性質が2つあります。 1つは、常に作成した人のアカウントで実行されること。担当者が異動すると止まるので、引き継ぎの手順を先に決めます。もう1つは、「スクリプトの実行やAPIリクエストではトリガーは動かない」こと。テストは手で実行します。

シートは二次元配列として扱います。 公式の説明では、Apps Script はセル・行・列を表す二次元配列を操作する形でシートを扱い、読み取りは getDataRange().getValues()、行の追加は appendRow()、入力規則は newDataValidation() とされています。60列×220行の格子を縦に数えるのは、この配列を1列ずつ数えるだけです。 外部のAPIは UrlFetchApp.fetch(url, {'muteHttpExceptions': true}) で呼び、応答は getContentText() を JSON.parse() に通すとされています。

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

Step1

処理の起点を決める

起点は2つあります。 フォームの送信と、毎朝7時の時間主導型です。役割が違います。

フォーム送信は、記録が発生したその日のうちに下書きを作るためのものです。月90件はまとめても回る量ですが、まとめると「提出したのに表に無い」期間ができます。 その期間に配置を決めると、表に無い力量は無いものとして扱われます。

毎朝7時の時間主導型は、件数と関係なく動かすためのものです。期限の切れた力量も、1人しかできない作業も、提出が0件の日でも数えます。Before で誰の仕事にもなっていなかった④が、ここに入ります。 配置の穴の一覧は月初の朝に出します。なお、実行の時刻はぴったりになりません。

Step2

入力データを集める

データ中身取得元
証明書のファイル受講記録、修了証、資格証の写し。PDFまたは画像提出フォームの添付
作業と必要な力量の対応表作業コード、作業名、必要な力量コード、更新の周期、手配に必要な日数、必要な人数の下限自社で作る。この構成の土台
力量管理表行=作業者、列=作業。区分、取得日、有効期限、確定した人と日スプレッドシート
社員名簿社員番号、氏名、旧姓、所属、異動・退職の予定日人事

質を決めるのは、上から2つ目です。 対応表が無ければ、読み取った「フォークリフト運転技能講習修了証」という文字列を、どの列に入れるかが決まりません。AIに選ばせると、似た名前の列に入ります。 入った1件は、できないはずの人ができる人として表に残ります。

対応表には、更新の周期と、手配に必要な日数を持たせます。 周期は有効期限の計算に、日数は「いつ一覧に出すか」に使います。年に2回しか開かれない更新研修は、期限の3か月前に出しても間に合いません。

Step3

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

取るものどこから何に使うか
証明書のファイルフォームの回答に付いたファイル読み取りの入力
力量コードの一覧対応表のシートAIに選ばせる選択肢
更新の周期・手配に必要な日数対応表のシート有効期限の計算と、一覧に出す時期
区分・取得日・有効期限力量管理表のシート期限の一覧と、列ごとの人数

シートは getDataRange().getValues() で受け取り、下書きの行は appendRow() で足します。対応表と社員名簿は、AIに渡す前にスクリプトの側で読みます。 AIへ渡すのは、力量コードの一覧と、氏名の近い上位5件だけです。

読み取りは UrlFetchApp.fetch で Gemini API を呼びます。 muteHttpExceptions を有効にすると、エラーの応答も本文として受け取れるので、何が返ったかを下書きに残せます。 画像をインラインで送る場合はリクエスト全体で20MBまでとされ、大きいものは Files API を使うとされています。

Step4

AIへ渡す前に整形する

  1. 形式の確認 … 画像は PNG、JPEG、WEBP、HEIC、HEIF が対応するとされています。それ以外はPDFに変換します
  2. 向きの確認 … 公式の推奨に「画像が正しく回転しているかを確かめる」とあります。現場から出たものは横倒しや逆さまが混じります
  3. 鮮明さの確認 … 同じく「ぼやけていない鮮明な画像を使う」とあります。判定できない写りのものは撮り直します
  4. 大きさの確認 … PDFは最大50MBまたは1,000ページ、画像のインライン送信は合計20MBまでです
  5. 複数人分の分割 … 集合教育の受講者名簿は1枚に何十人分も載ります。人ごとの行に分けてから渡します
  6. 社員の特定 … 社員番号があれば使い、無ければ氏名と所属で名簿を引きます。旧姓の列も見ます

2番目と3番目を軽く見ないでください。 修了証はその場で撮られるので、斜め・影・反射が入ります。写りが悪いだけのものを「書かれていない」と扱うと、受けたはずの教育が記録から消えます。 読み取れないものは人に回す分岐を、ここで作ります。

Step5

AIに処理させる

させるのは、証明書から4つを読み取り、力量コードを1つ選ぶことだけです。

読み取るもの判定の仕方判断できないときの扱い
受けた人の氏名(あれば社員番号)名簿の候補と突き合わせる複数なら ambiguous、無ければ not_found
受けた教育・取得した資格の名称書かれた文字列をそのまま返すかすれ・手書きで確定できなければ unreadable
受けた日・交付された日日付として解釈できるか複数の日付があれば ambiguous
交付した機関・事業者の名称記載の有無書かれていなければ missing
力量コード対応表の一覧から1つ選ぶどれにも当たらなければ unmapped

いちばん下の行が、この構成の要です。 unmapped は失敗ではなく、対応表がまだその力量を持っていないという事実の記録です。寄せさせると、この事実が消えます。

させないこと理由
有効期限の計算・読み取り更新の周期は対応表にある。読み取りと計算を分ける
その人がその作業をしてよいかの結論資格の要否は所管の窓口と専門家に確認するもの
対応表に無い力量名を新しく作るunmapped で止める。対応表を直すのは人
「できる/できない」の判定見るのは記録の有無だけ。現場の評価は別のもの

1行目がいちばん起きやすい失敗です。 証明書に有効期限が印刷されていることもあり、何も言わなければ読み取って返します。印刷された期限と、周期から計算した期限が食い違ったとき、どちらを信じるかを決める場所がありません。

Step6

指示内容を固定する

あなたは製造現場の教育記録を整理する担当者です。
提出された証明書の画像またはPDFを見て、書かれていることだけを書き出して
ください。推測で埋めないでください。

【読み取る4つ】
1. 受けた人の氏名(書かれていれば社員番号も)
2. 受けた教育・取得した資格の名称(書かれているとおりの文字列)
3. 受けた日・交付された日
4. 交付した機関・事業者の名称

【力量コードの割り当て】
- 下の一覧から、2で読み取った名称に対応する code を1つ選んでください。
- どれにも当てはまらないときは match を unmapped にし、code を空にして
  ください。新しい code を作らないでください。
- 名前が似ているという理由で選ばないでください。迷ったら unmapped です。

【status の選び方】
- ok ......... 値が読み取れ、その項目として解釈できる
- missing .... 書かれていない
- unreadable . 文字はあるが、かすれ・手書き・写りで確定できない
- ambiguous .. 候補が複数あり、1つに決められない
迷ったときに ok を選ばないでください。

【厳守事項】
- 有効期限を書かないでください。印刷されていても読み取らないでください。
  期限は対応表の規則で計算します。
- その人がその作業をしてよいかを書かないでください。
- 日付は読み取った文字列を value に写し、西暦を date に入れてください。
  読み取れない桁を推測で埋めないでください。
- 氏名は書かれた文字をそのまま写し、旧字体を新字体に直さないでください。
- evidence には、判定の根拠にした文字列をそのまま写してください。
- 証明書でない書類は、document_type に種類を書いてください。

【力量コードの一覧】{skill_codes}
【社員名簿の候補(氏名の近い上位5件)】{person_candidates}

「名前が似ているという理由で選ばない」を明記しないと、必ず寄せます。 「有機溶剤業務従事者」と「特定化学物質作業主任者」は文字の並びが近く、何も言わなければどちらかに入ります。 入った1件は「できる人」として数えられ、配置の穴の一覧から消えます。「有効期限を書かない」を2か所に書いているのも同じ理由で、外すだけでは evidence の欄に書いて返してきます。

Step7

出力形式を固定する

次の形のJSONで受け取ります。

{
  "document_type": "training_record | certificate | license_copy | other",
  "person": { "name_on_document": "", "employee_no": "",
              "match": "matched | not_found | ambiguous" },
  "skill":  { "name_on_document": "", "code": "",
              "match": "matched | unmapped" },
  "acquired": { "value": "", "date": "" },
  "issuer": "",
  "fields": [
    { "item": "person_name", "status": "ok | missing | unreadable | ambiguous",
      "evidence": "" }
  ]
}

fields にはこの形の要素を4つ並べます。item は person_name / skill_name / acquired_date / issuer です。

Gemini API の構造化出力で、この形を指定します。 公式の説明では JSON Schema の一部に対応し、properties / required / enum / format などが使えるとされています。match と status は enum で固定します。 自由記述にすると、unmapped のつもりで「該当なし」と返ってくるためです。ただし公式には「非常に大きい、または入れ子の深いスキーマは拒否されることがある」ともあり、1枚につき、この程度の浅い形で1回呼ぶのが安全です。

期限の列がこのJSONに無いのは、意図してのことです。 有効期限は acquired.date に周期を足してスクリプトが計算します。下書きに入れてよいかの判定も、AIには返させません。

条件スクリプトが決める扱い
fields がすべて ok、person が matched、skill が matched下書きの欄に入れる
skill.match が unmapped対応表の見直しに回す。力量管理表には入れない
unreadable / ambiguous / not_found が1つでもある人へ回す

この表を規則の側に置けば、基準が変わっても直すのは規則だけです。 AIが返すのは事実の記録までです。

Step8

システムへ連携する

つなぎ先方式内容
Google フォームフォーム送信のトリガー提出をきっかけに処理を始める
Gemini APIUrlFetchApp.fetch証明書の読み取りと、案内文の下書き
対応表・社員名簿のシートgetValues() で読み取り力量コード、更新の周期、異動の予定
力量管理表・一覧のシートappendRow() で書き込み下書きの行と、期限切れ・配置の穴の一覧

力量管理表の本体のセルには書き込みません。 書くのは「下書き」のシートまでです。確定を人に残しておけば、間違えた1件が、その日の配置の判断に使われません。

人事システムへも書き込みません。 異動・退職の予定は読むだけで、出すのは「その作業ができる人がいなくなる」という一覧だけです。

Step9

人が確認する

人が開くのは、unmapped と、人へ回されたものだけです。 すべて読み取れて力量コードにも当たったものは、一覧を流し見て一括で確定します。全件を原本と見比べると、第10章の6.0時間に収まりません。

  1. unmapped を先に見る … 対応表にその力量がまだ無いということです。直すのは対応表であって、力量管理表ではありません
  2. 読み取れなかったものを見る … unreadable の多くは写りの問題です。原本が手元にあれば見て入れ、無ければ撮り直しを依頼します
  3. 同姓同名・旧姓を確かめる … ambiguous と not_found はここです。社員番号を書いてもらう運用に変えるのが、いちばん早い対策です

期限切れの一覧は、確定とは別に人が見ます。 一覧が出ることと、その人を作業から外すことは別です。誰がその判断をするのかを、運用を始める前に決めてください。

目標は、90件をならして1件4分です。 開くのは2割前後という想定で、多い月は、写りの問題か対応表の不足です。

Step10

例外に対処する

起きること対応
修了証が手書きで読み取れないunreadable で人へ。推測で埋めない
写真が斜め・ぼやけている公式の推奨は「正しい向きに回転する」「ぼやけた画像を避ける」。撮り直す
1枚に複数人の受講者名簿人ごとの行に分けて再投入。分けられなければ人へ
証明書の名称が対応表に無いunmapped。対応表を直すのが先。力量管理表には入れない
同姓同名・旧姓で特定できないambiguous。名簿に旧姓の列を持たせる。AIに氏名を直させない
同じ証明書が二度提出される社員番号・力量コード・取得日で照合し、二重に登録しない
周期の無い力量に期限が入る対応表の周期が空なら、期限の列も空のままにする
ファイルが上限を超えるPDFは50MBまたは1,000ページ、画像のインラインは20MB。分割する
担当者の異動で処理が止まるトリガーは作成した人のアカウントで実行される。 引き継ぎを決めておく

上から3行が件数の大半を占めます。 どれもAIの問題ではなく、提出のしかたの問題です。 フォームの案内文を直すほうが早く効きます。

Step11

記録を残す

  • 提出された証明書のファイルと、提出日時・提出者
  • Gemini API が返したJSONの全文(status と evidence を含む)
  • 計算した有効期限と、そのとき参照した対応表の版
  • 確定した人と日時、確定の前後で値が変わった項目
  • unmapped になった名称の一覧と、力量ごとの unreadable の発生率
  • 期限切れが一覧に出てから、対応されるまでの日数

3つ目で「そのときの対応表の版」を残すのは、更新の周期が後から変わるためです。 周期を直すと過去の期限の意味が変わり、当時の版が無いと、どこまで計算し直せばよいかが決まりません。 そしていちばん下の行が、この構成が効いているかの物差しです。 期限切れが出るようになっても、対応までの日数が縮まなければ、出すだけで終わっています。

04実装レベルの3段階

最小構成:対応表と力量管理表を1つのファイルに作り、証明書を生成AIの画面で読み取って写す。期限と人数は数式で数える / 読み取りと期限の計算
半自動化:上記+フォーム送信のトリガーで下書きの行を作り、毎朝の期限の一覧と月次の配置の穴を自動で出す / 記録と一覧づくり
本格構成:上記+人事の異動・退職の予定と突き合わせ、受講案内の下書きまで出す / 期限の先出しと文面の下書き

本記事が想定するのは最小構成です。 対応表を作り、読み取りと期限の計算を生成AIの画面と数式で行うところまでで、1件13分が4分になります。 月90件は1日あたり4件から5件で、手で貼っても回る量です。 半自動と本格構成は、対応表が安定してからの話です。 unmapped が毎月出ているうちは、自動化しても人が開く件数は減りません。 段階を飛ばさないでください。 最小構成を1か月続けると、対応表に足りない力量と、読めない提出の割合が分かります。その2つを直してから自動化してください。

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

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

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

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

AI活用について相談する

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

向いている
  1. フォークリフト、玉掛け、有機溶剤、高所作業、特定の設備の操作、顧客が指定する認定など、作業ごとに受けた教育や資格を確かめてから人を配置している製造業・建設業・物流業の現場。力量管理表は作ってあるが、受講記録や資格証の写しを見ながら手で更新しており、最後にそろえたのがいつか言えない場合。月に数十件の受講・取得・更新・異動があり、期限の近いものを更新研修の手配に間に合う時期に出したい場合。スプレッドシートと生成AIだけで始められる範囲から試したい場合。
向いていない
  1. 作業者が数名で、誰が何をできるかを全員が把握している場合。教育管理の製品をすでに入れており、受講記録の登録から有効期限の管理までその製品の中で完結している場合。提出される証明書の大半が手書きで、写りの確認に人手がかかるほうが大きい場合。なお、法令で定められた資格や教育が必要かどうかという判断は、所管の窓口と専門家に確認するものであり、この構成では代替できません。

07最小構成で試す方法

スプレッドシートと生成AIの画面だけで始められます。プログラムは1行も書きません。

  1. スプレッドシートを1つ作り、対応表のシートを足す。列は作業名、必要な力量、更新の周期、手配に必要な日数、必要な人数の下限(まず上位20作業だけでよい)
  2. 同じファイルに力量管理表のシートを作る。行に作業者、列に作業。区分は入力規則で固定する
  3. 直近3か月の証明書を20枚集め、手元のAIサービスの画面に1枚ずつ貼る
  4. 第7章の指示と力量コードの一覧を一緒に渡して読み取らせる
  5. 出てきた結果を力量管理表に写し、取得日に対応表の周期を足して期限の列を埋める
  6. 力量管理表の列を縦に数え、「できる」が1人以下の作業を書き出す

6番目が本体です。 ここまでは表を作り直しているだけですが、この数え上げで、配置の穴が初めて数字になります。

出てきた内容判断
対応表に無い名称が半分以上出た対応表の整備が先。 精度の問題ではない
期限の列が半分空になった更新の周期が対応表に入っていない。 周期を埋める
「できる」が1人以下の作業が想定より多いこの構成を進める理由がここにあります
印刷された有効期限を読み取って返してきた指示の書き方で直る。構成は有効

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

問題対策
対応表を作らずに読み取りから始める成り立ちません。 対応表が先。AIに必要な資格を推測させない
AIに有効期限を読み取らせる更新の周期は対応表にある。読み取りと計算を分ける
対応表に無い名称を似た力量に寄せるunmapped で止める。寄せた1件は、できないはずの人ができる人として残る
力量管理表の本体に直接書き込む下書き欄に入れ、人が確定する。確定前の値を配置の判断に使わせない
「できる」の意味が人によって違う3つの区分に決め、入力規則で固定する
期限の一覧が手配に間に合わない時期に出る手配に必要な日数を対応表に持ち、その分だけ前に出す
異動・退職の予定が反映されない名簿の予定日と突き合わせる。予定表そのものはAIへ渡さない
写りの悪い写真が続く提出フォームに撮り方の案内を出す。読み取りの精度を上げるより効く
力量管理表が人事評価に使われる使わないことを、運用を始める前に文書にする
資格の要否を社内だけで決める所管の窓口と専門家に確認する。 この構成は要否を判断しない

上から3行が、この構成の失敗のほとんどです。 どれも「対応表に書いてあるはずのことを、AIに決めさせた」という同じ形をしています。読み取りは事実の記録、判断は対応表、という線を引けているかどうかで、運用に乗るかが決まります。

下から2行も、同じくらい早く効いてきます。 表が評価に使われると分かった瞬間、現場からの提出が止まります。そして、この表がどれだけ正確でも、資格の要否の判断は表の外にあります。

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

この構成で扱うデータ: 社員の氏名・旧姓・社員番号・所属、受けた教育と取得した資格、その取得日、そして異動・退職の予定日です。証明書の画像には、生年月日や本籍が写り込むことがあります。

  1. この表は「誰が何をできないか」の一覧でもある … できることを並べた表であると同時に、空欄が並んだ表です。 閲覧の範囲を、生産管理と人事の担当者と各職場の責任者に限ってください。全社に共有する表ではありません
  2. 人事評価に転用しない … 資格の有無は本人の処遇に直接かかわります。この表を評価の材料に使わないことを、運用を始める前に文書にしてください。 評価に使われると分かった瞬間、証明書の提出そのものが遅れます。 遅れれば、本来の目的が損なわれます
  3. 資格の要否そのものは、所管の窓口と専門家に委ねる … この構成が出すのは、「どの証明書が、いつ提出され、計算するといつまでか」という事実だけです。法令上どの資格や教育が必要かは、所管の窓口と専門家に確認してください
  4. 外部へ渡す範囲を、証明書1枚と力量コードの一覧に限る … 社員名簿ごとAIに渡さないでください。渡すのは氏名の近い上位5件までです。異動・退職の予定日はスクリプトの側だけで扱います
  5. 証明書の画像に写り込むものを減らす … 生年月日や本籍が印刷されている証明書は、必要な範囲だけを撮るよう案内します。保存先のアクセス権も表に合わせます
  6. 一覧が出たあと、誰が作業を止めるのかを決める … 一覧が毎朝出るのに、誰もその人を作業から外さない状態が、いちばん危険です。「出す」と「止める」を別の人の仕事にすると、どちらも「もう片方がやった」になります

誤りのリスクは、期限の切れた力量を有効なものとして残すことと、有効な力量を期限切れとして出すことの2つです。 前者は unreadable を確定済みに混ぜると起き、後者は対応表の周期が違っていると起きます。どちらも、対応表と確定の手順の問題です。

10まず何から始めるか

1週目:対応表を作る

作業の多い上位20作業について、作業名、必要な力量、更新の周期、手配に必要な日数、必要な人数の下限を1枚の表にします。周期と日数は、所管の窓口と専門家に確認した内容を写します。 60作業すべてを一度に埋める必要はありません。上位20作業で月の件数の大半が埋まります。

2週目:列を縦に数える

いまの力量管理表をそのまま使い、列ごとに「1人でできる」の人数を数えます。 1人以下の列を書き出してください。この数え上げが、この構成を進めるかどうかの判断材料になります。

3週目:20枚で試す

直近の証明書を20枚選び、手元のAIサービスに貼って第7章の指示で読み取らせます。対応表に無い名称がどれだけ出るかと、印刷された有効期限を返してこないかを最優先で見ます。

4週目:期限の列を埋める

読み取った取得日に対応表の周期を足して、期限の列を数式で埋めます。この時点で、期限切れの一覧が初めて全件について出ます。 誰が止めるのかを、ここで決めます。

2か月目: 提出のフォームを作り、フォーム送信のトリガーで下書きの行を作ります。毎朝の期限の一覧と、月初の配置の穴の一覧を出します。3か月目以降: 人事の予定との突合と案内文の下書きを足し、1件13分が何分になったかを実測します。unmapped の件数と、期限切れが対応されるまでの日数が減った時点で、この構成は完成です。


11関連ユースケース

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

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

技術仕様確認日:2026-09-28/最終更新:2026-09-28
確認した内容情報源確認日
時間主導型が毎分から月1回まで設定でき、フォーム送信のトリガーもあること。作成した人のアカウントで実行され、スクリプトの実行では動かないことGoogle: トリガー2026-09-28
シートを二次元配列として扱い、getValues() / appendRow() / newDataValidation() が使えること。UrlFetchApp.fetch で外部APIを呼べることGoogle: Sheets / Google: 外部API2026-09-28
構造化出力が JSON Schema の一部に対応し、enum / required が使えること。大きく入れ子の深いスキーマは拒否されうることGoogle: 構造化出力2026-09-28
画像は PNG/JPEG/WEBP/HEIC/HEIF、インラインは20MBまで。両辺384ピクセル以下で258トークン、以上は768×768のタイルごとに258トークン。PDFは最大50MBまたは1,000ページ、1ページ258トークン。正しい向きで、ぼやけた画像を避けることGoogle: 画像 / Google: 文書2026-09-28
安全衛生教育を雇入れ時と危険有害業務に就くときに実施するとされていること厚生労働省: 安全衛生2026-09-28

法令上どの資格や教育が必要かという判断は、所管の窓口と専門家に確認してください。 本記事は、自社の対応表にもとづく力量管理表の更新を扱っています。

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

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

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

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