作業者の力量管理表を教育記録から更新して、期限切れと配置の穴を出す
教育の受講記録や修了証、資格証の写しから、誰が何をいつ受けたかを読み取り、作業者の力量管理表を更新します。あわせて、有効期限の切れた力量と、できる人が1人しかいない作業を一覧にします。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Google Apps Script/Make/Power Automate
- 対象業界
- 介護/医療/建設/物流/製造
- 対象部門
- 人事/生産
- 対象業務
- データ入力・転記/台帳・マスタ管理
- 主な課題
- 入力作業が多い/引き継ぎができていない/期限・対応漏れが起きる
- AIで行う処理
- 抽出
- 主な効果
- 入力漏れ削減/属人化解消/工数削減
- 導入難易度
- ★☆☆☆☆
- 実装レベル
- 最小構成
- 費用感
- 既存ツールのみ(小)
- 人間の確認
- 必須
01導入前 / 導入後の業務フロー
- 教育を実施した部署から、受講者の名簿が回ってくる
- 本人が資格を取得・更新したとき、資格証の写しをメールか紙で出す
- 外部研修の修了証は、現場の事務所のファイルに綴じられる
- 担当者がそれらを開き、誰が何をいつ受けたかを読む
- 力量管理表を開き、その作業者の行と、該当する作業の列を探す
- セルの区分を書き換え、取得日を入れる
- 更新の周期を覚えている範囲で思い出し、有効期限の列に日付を入れる
- 月に1回、期限の列を目で見て、切れているもの・近いものを探す
- 人証明書を提出のフォームから出す(担当者が代理で出してよい)
- 自動フォーム送信をきっかけにスクリプトが動き、形式・向き・大きさを確かめる
- 自動社員名簿と突き合わせて提出者の候補を絞り、読み取りにかける
- 自動氏名・力量の名称・取得日・交付した機関を返す
- 自動力量の名称を、対応表の力量コードのどれかに当てる。当たらなければ `unmapped` にする
- 自動取得日に対応表の更新の周期を足して、有効期限を計算する
- 自動力量管理表の「下書き」欄に行を書く。本体のセルはまだ書き換えない
- 人担当者が下書きを開き、原本と見比べて確定する
- 自動毎朝、期限の切れた力量と、期限が近いものを一覧に出す
- 自動毎月、できる人が1人しかいない作業と、人数が下限を割っている作業を一覧に出す
- 自動人事の異動・退職の予定と突き合わせ、その部署でできる人がいなくなる作業を出す
各工程の詳しい説明を読む
- 教育を実施した部署から、受講者の名簿が回ってくる
- 本人が資格を取得・更新したとき、資格証の写しをメールか紙で出す
- 外部研修の修了証は、現場の事務所のファイルに綴じられる
- 担当者がそれらを開き、誰が何をいつ受けたかを読む
- 力量管理表を開き、その作業者の行と、該当する作業の列を探す
- セルの区分を書き換え、取得日を入れる
- 更新の周期を覚えている範囲で思い出し、有効期限の列に日付を入れる
- 月に1回、期限の列を目で見て、切れているもの・近いものを探す
(a)更新がそのつど反映されない。 4番から7番までを1件ずつやるので、忙しい月は後回しになります。後回しになった記録は、翌月にまとめて処理されるか、忘れられます。 表を見る人は、それが最新かを知りません。
(b)期限の切れた資格で作業させてしまう。 8番の目視は、60列×220行の格子を見る作業です。期限の列が埋まっていない行は、目視でも見つかりません。 7番で「思い出せなかったので空にした」セルが、そのまま見落としになります。
(c)できる人が1人しかいない作業に気づかない。 表は行ごとに更新するので、見るのは横の行です。ところが配置の穴は縦の列にあります。列を縦に数える作業は、誰の仕事にもなっていません。 1人しかいない作業は、その人が休んだ日の朝に発覚します。
(d)異動と退職が反映されるのが遅い。 異動の連絡は来ますが、その人が抜けたあと、その部署でできる人がいなくなる作業までは出てきません。「誰がいなくなったか」は分かっても、「何ができなくなったか」は分かりません。
- 【人】 証明書を提出のフォームから出す(担当者が代理で出してよい)
- 【自動】 フォーム送信をきっかけにスクリプトが動き、形式・向き・大きさを確かめる
- 【自動】 社員名簿と突き合わせて提出者の候補を絞り、読み取りにかける
- 【自動】 氏名・力量の名称・取得日・交付した機関を返す
- 【自動】 力量の名称を、対応表の力量コードのどれかに当てる。当たらなければ
unmappedにする - 【自動】 取得日に対応表の更新の周期を足して、有効期限を計算する
- 【自動】 力量管理表の「下書き」欄に行を書く。本体のセルはまだ書き換えない
- 【人】 担当者が下書きを開き、原本と見比べて確定する
- 【自動】 毎朝、期限の切れた力量と、期限が近いものを一覧に出す
- 【自動】 毎月、できる人が1人しかいない作業と、人数が下限を割っている作業を一覧に出す
- 【自動】 人事の異動・退職の予定と突き合わせ、その部署でできる人がいなくなる作業を出す
8番目が、この設計の分かれ目です。人が見るのは全件ではありません。 力量コードに当たり、日付も氏名も読み取れたものは一括で確定します。時間を使うのは、対応表に無い名称と、読み取れなかったものだけです。
6番目をスクリプトの側に置いているのも、意図してのことです。 更新の周期は対応表の決まりごとで、証明書を見て判断するものではありません。AIに期限を返させると、印刷された期限と計算した期限のどちらが正しいのかが分からなくなります。
9番から11番は、件数と関係なく動きます。 提出が0件の月でも期限は近づき、異動の予定は入ってきます。Before の④がここに移ったことが、いちばんの変化です。
02今回想定するシステム構成
受講記録・修了証・資格証の写し(PDF/撮影した画像) ▼【トリガー】Google フォームへの提出 + 毎朝7時の時間主導型 Google Apps Script ── 形式・向き・大きさの確認、社員名簿との突合 ▼ Gemini API(構造化出力) │ 誰が/何を/いつ/どの機関が を読み取る。有効期限は読み取らない ▼ Google Apps Script ── 取得日 + 対応表の更新の周期 = 有効期限 ▼ 力量管理表の「下書き」欄へ書く ──【人が原本と見比べて確定】 ▼ 力量管理表(行=作業者、列=作業)+ 作業と必要な力量の対応表 ├──▶ 期限の切れた力量の一覧 ├──▶ 期限の近い力量の一覧(手配が間に合う時期に出す) ├──▶ できる人が1人しかいない作業の一覧 └──▶ 異動・退職でできる人がいなくなる作業の一覧 ▼ Gemini API ── 受講案内の下書き ──▶【人が読んで送信】
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Google Apps Script | Power Automate、Make |
| 処理 | Gemini API | Claude 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どうやって実装するのか
処理の起点を決める
起点は2つあります。 フォームの送信と、毎朝7時の時間主導型です。役割が違います。
フォーム送信は、記録が発生したその日のうちに下書きを作るためのものです。月90件はまとめても回る量ですが、まとめると「提出したのに表に無い」期間ができます。 その期間に配置を決めると、表に無い力量は無いものとして扱われます。
毎朝7時の時間主導型は、件数と関係なく動かすためのものです。期限の切れた力量も、1人しかできない作業も、提出が0件の日でも数えます。Before で誰の仕事にもなっていなかった④が、ここに入ります。 配置の穴の一覧は月初の朝に出します。なお、実行の時刻はぴったりになりません。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 証明書のファイル | 受講記録、修了証、資格証の写し。PDFまたは画像 | 提出フォームの添付 |
| 作業と必要な力量の対応表 | 作業コード、作業名、必要な力量コード、更新の周期、手配に必要な日数、必要な人数の下限 | 自社で作る。この構成の土台 |
| 力量管理表 | 行=作業者、列=作業。区分、取得日、有効期限、確定した人と日 | スプレッドシート |
| 社員名簿 | 社員番号、氏名、旧姓、所属、異動・退職の予定日 | 人事 |
質を決めるのは、上から2つ目です。 対応表が無ければ、読み取った「フォークリフト運転技能講習修了証」という文字列を、どの列に入れるかが決まりません。AIに選ばせると、似た名前の列に入ります。 入った1件は、できないはずの人ができる人として表に残ります。
対応表には、更新の周期と、手配に必要な日数を持たせます。 周期は有効期限の計算に、日数は「いつ一覧に出すか」に使います。年に2回しか開かれない更新研修は、期限の3か月前に出しても間に合いません。
データの取得方法を決める
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 証明書のファイル | フォームの回答に付いたファイル | 読み取りの入力 |
| 力量コードの一覧 | 対応表のシート | AIに選ばせる選択肢 |
| 更新の周期・手配に必要な日数 | 対応表のシート | 有効期限の計算と、一覧に出す時期 |
| 区分・取得日・有効期限 | 力量管理表のシート | 期限の一覧と、列ごとの人数 |
シートは getDataRange().getValues() で受け取り、下書きの行は appendRow() で足します。対応表と社員名簿は、AIに渡す前にスクリプトの側で読みます。 AIへ渡すのは、力量コードの一覧と、氏名の近い上位5件だけです。
読み取りは UrlFetchApp.fetch で Gemini API を呼びます。 muteHttpExceptions を有効にすると、エラーの応答も本文として受け取れるので、何が返ったかを下書きに残せます。 画像をインラインで送る場合はリクエスト全体で20MBまでとされ、大きいものは Files API を使うとされています。
AIへ渡す前に整形する
- 形式の確認 … 画像は PNG、JPEG、WEBP、HEIC、HEIF が対応するとされています。それ以外はPDFに変換します
- 向きの確認 … 公式の推奨に「画像が正しく回転しているかを確かめる」とあります。現場から出たものは横倒しや逆さまが混じります
- 鮮明さの確認 … 同じく「ぼやけていない鮮明な画像を使う」とあります。判定できない写りのものは撮り直します
- 大きさの確認 … PDFは最大50MBまたは1,000ページ、画像のインライン送信は合計20MBまでです
- 複数人分の分割 … 集合教育の受講者名簿は1枚に何十人分も載ります。人ごとの行に分けてから渡します
- 社員の特定 … 社員番号があれば使い、無ければ氏名と所属で名簿を引きます。旧姓の列も見ます
2番目と3番目を軽く見ないでください。 修了証はその場で撮られるので、斜め・影・反射が入ります。写りが悪いだけのものを「書かれていない」と扱うと、受けたはずの教育が記録から消えます。 読み取れないものは人に回す分岐を、ここで作ります。
AIに処理させる
させるのは、証明書から4つを読み取り、力量コードを1つ選ぶことだけです。
| 読み取るもの | 判定の仕方 | 判断できないときの扱い |
|---|---|---|
| 受けた人の氏名(あれば社員番号) | 名簿の候補と突き合わせる | 複数なら ambiguous、無ければ not_found |
| 受けた教育・取得した資格の名称 | 書かれた文字列をそのまま返す | かすれ・手書きで確定できなければ unreadable |
| 受けた日・交付された日 | 日付として解釈できるか | 複数の日付があれば ambiguous |
| 交付した機関・事業者の名称 | 記載の有無 | 書かれていなければ missing |
| 力量コード | 対応表の一覧から1つ選ぶ | どれにも当たらなければ unmapped |
いちばん下の行が、この構成の要です。 unmapped は失敗ではなく、対応表がまだその力量を持っていないという事実の記録です。寄せさせると、この事実が消えます。
| させないこと | 理由 |
|---|---|
| 有効期限の計算・読み取り | 更新の周期は対応表にある。読み取りと計算を分ける |
| その人がその作業をしてよいかの結論 | 資格の要否は所管の窓口と専門家に確認するもの |
| 対応表に無い力量名を新しく作る | unmapped で止める。対応表を直すのは人 |
| 「できる/できない」の判定 | 見るのは記録の有無だけ。現場の評価は別のもの |
1行目がいちばん起きやすい失敗です。 証明書に有効期限が印刷されていることもあり、何も言わなければ読み取って返します。印刷された期限と、周期から計算した期限が食い違ったとき、どちらを信じるかを決める場所がありません。
指示内容を固定する
あなたは製造現場の教育記録を整理する担当者です。
提出された証明書の画像または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 の欄に書いて返してきます。
出力形式を固定する
次の形の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が返すのは事実の記録までです。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| Google フォーム | フォーム送信のトリガー | 提出をきっかけに処理を始める |
| Gemini API | UrlFetchApp.fetch | 証明書の読み取りと、案内文の下書き |
| 対応表・社員名簿のシート | getValues() で読み取り | 力量コード、更新の周期、異動の予定 |
| 力量管理表・一覧のシート | appendRow() で書き込み | 下書きの行と、期限切れ・配置の穴の一覧 |
力量管理表の本体のセルには書き込みません。 書くのは「下書き」のシートまでです。確定を人に残しておけば、間違えた1件が、その日の配置の判断に使われません。
人事システムへも書き込みません。 異動・退職の予定は読むだけで、出すのは「その作業ができる人がいなくなる」という一覧だけです。
人が確認する
人が開くのは、unmapped と、人へ回されたものだけです。 すべて読み取れて力量コードにも当たったものは、一覧を流し見て一括で確定します。全件を原本と見比べると、第10章の6.0時間に収まりません。
unmappedを先に見る … 対応表にその力量がまだ無いということです。直すのは対応表であって、力量管理表ではありません- 読み取れなかったものを見る …
unreadableの多くは写りの問題です。原本が手元にあれば見て入れ、無ければ撮り直しを依頼します - 同姓同名・旧姓を確かめる …
ambiguousとnot_foundはここです。社員番号を書いてもらう運用に変えるのが、いちばん早い対策です
期限切れの一覧は、確定とは別に人が見ます。 一覧が出ることと、その人を作業から外すことは別です。誰がその判断をするのかを、運用を始める前に決めてください。
目標は、90件をならして1件4分です。 開くのは2割前後という想定で、多い月は、写りの問題か対応表の不足です。
例外に対処する
| 起きること | 対応 |
|---|---|
| 修了証が手書きで読み取れない | unreadable で人へ。推測で埋めない |
| 写真が斜め・ぼやけている | 公式の推奨は「正しい向きに回転する」「ぼやけた画像を避ける」。撮り直す |
| 1枚に複数人の受講者名簿 | 人ごとの行に分けて再投入。分けられなければ人へ |
| 証明書の名称が対応表に無い | unmapped。対応表を直すのが先。力量管理表には入れない |
| 同姓同名・旧姓で特定できない | ambiguous。名簿に旧姓の列を持たせる。AIに氏名を直させない |
| 同じ証明書が二度提出される | 社員番号・力量コード・取得日で照合し、二重に登録しない |
| 周期の無い力量に期限が入る | 対応表の周期が空なら、期限の列も空のままにする |
| ファイルが上限を超える | PDFは50MBまたは1,000ページ、画像のインラインは20MB。分割する |
| 担当者の異動で処理が止まる | トリガーは作成した人のアカウントで実行される。 引き継ぎを決めておく |
上から3行が件数の大半を占めます。 どれもAIの問題ではなく、提出のしかたの問題です。 フォームの案内文を直すほうが早く効きます。
記録を残す
- 提出された証明書のファイルと、提出日時・提出者
- Gemini API が返したJSONの全文(
statusとevidenceを含む) - 計算した有効期限と、そのとき参照した対応表の版
- 確定した人と日時、確定の前後で値が変わった項目
unmappedになった名称の一覧と、力量ごとのunreadableの発生率- 期限切れが一覧に出てから、対応されるまでの日数
3つ目で「そのときの対応表の版」を残すのは、更新の周期が後から変わるためです。 周期を直すと過去の期限の意味が変わり、当時の版が無いと、どこまで計算し直せばよいかが決まりません。 そしていちばん下の行が、この構成が効いているかの物差しです。 期限切れが出るようになっても、対応までの日数が縮まなければ、出すだけで終わっています。
04実装レベルの3段階
本記事が想定するのは最小構成です。 対応表を作り、読み取りと期限の計算を生成AIの画面と数式で行うところまでで、1件13分が4分になります。 月90件は1日あたり4件から5件で、手で貼っても回る量です。 半自動と本格構成は、対応表が安定してからの話です。 unmapped が毎月出ているうちは、自動化しても人が開く件数は減りません。 段階を飛ばさないでください。 最小構成を1か月続けると、対応表に足りない力量と、読めない提出の割合が分かります。その2つを直してから自動化してください。
05工数削減シミュレーション
導入後 90件 × 4分 ÷ 60 = 6 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- フォークリフト、玉掛け、有機溶剤、高所作業、特定の設備の操作、顧客が指定する認定など、作業ごとに受けた教育や資格を確かめてから人を配置している製造業・建設業・物流業の現場。力量管理表は作ってあるが、受講記録や資格証の写しを見ながら手で更新しており、最後にそろえたのがいつか言えない場合。月に数十件の受講・取得・更新・異動があり、期限の近いものを更新研修の手配に間に合う時期に出したい場合。スプレッドシートと生成AIだけで始められる範囲から試したい場合。
- 作業者が数名で、誰が何をできるかを全員が把握している場合。教育管理の製品をすでに入れており、受講記録の登録から有効期限の管理までその製品の中で完結している場合。提出される証明書の大半が手書きで、写りの確認に人手がかかるほうが大きい場合。なお、法令で定められた資格や教育が必要かどうかという判断は、所管の窓口と専門家に確認するものであり、この構成では代替できません。
07最小構成で試す方法
スプレッドシートと生成AIの画面だけで始められます。プログラムは1行も書きません。
- スプレッドシートを1つ作り、対応表のシートを足す。列は作業名、必要な力量、更新の周期、手配に必要な日数、必要な人数の下限(まず上位20作業だけでよい)
- 同じファイルに力量管理表のシートを作る。行に作業者、列に作業。区分は入力規則で固定する
- 直近3か月の証明書を20枚集め、手元のAIサービスの画面に1枚ずつ貼る
- 第7章の指示と力量コードの一覧を一緒に渡して読み取らせる
- 出てきた結果を力量管理表に写し、取得日に対応表の周期を足して期限の列を埋める
- 力量管理表の列を縦に数え、「できる」が1人以下の作業を書き出す
6番目が本体です。 ここまでは表を作り直しているだけですが、この数え上げで、配置の穴が初めて数字になります。
| 出てきた内容 | 判断 |
|---|---|
| 対応表に無い名称が半分以上出た | 対応表の整備が先。 精度の問題ではない |
| 期限の列が半分空になった | 更新の周期が対応表に入っていない。 周期を埋める |
| 「できる」が1人以下の作業が想定より多い | この構成を進める理由がここにあります |
| 印刷された有効期限を読み取って返してきた | 指示の書き方で直る。構成は有効 |
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 対応表を作らずに読み取りから始める | 成り立ちません。 対応表が先。AIに必要な資格を推測させない |
| AIに有効期限を読み取らせる | 更新の周期は対応表にある。読み取りと計算を分ける |
| 対応表に無い名称を似た力量に寄せる | unmapped で止める。寄せた1件は、できないはずの人ができる人として残る |
| 力量管理表の本体に直接書き込む | 下書き欄に入れ、人が確定する。確定前の値を配置の判断に使わせない |
| 「できる」の意味が人によって違う | 3つの区分に決め、入力規則で固定する |
| 期限の一覧が手配に間に合わない時期に出る | 手配に必要な日数を対応表に持ち、その分だけ前に出す |
| 異動・退職の予定が反映されない | 名簿の予定日と突き合わせる。予定表そのものはAIへ渡さない |
| 写りの悪い写真が続く | 提出フォームに撮り方の案内を出す。読み取りの精度を上げるより効く |
| 力量管理表が人事評価に使われる | 使わないことを、運用を始める前に文書にする |
| 資格の要否を社内だけで決める | 所管の窓口と専門家に確認する。 この構成は要否を判断しない |
上から3行が、この構成の失敗のほとんどです。 どれも「対応表に書いてあるはずのことを、AIに決めさせた」という同じ形をしています。読み取りは事実の記録、判断は対応表、という線を引けているかどうかで、運用に乗るかが決まります。
下から2行も、同じくらい早く効いてきます。 表が評価に使われると分かった瞬間、現場からの提出が止まります。そして、この表がどれだけ正確でも、資格の要否の判断は表の外にあります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 社員の氏名・旧姓・社員番号・所属、受けた教育と取得した資格、その取得日、そして異動・退職の予定日です。証明書の画像には、生年月日や本籍が写り込むことがあります。
- この表は「誰が何をできないか」の一覧でもある … できることを並べた表であると同時に、空欄が並んだ表です。 閲覧の範囲を、生産管理と人事の担当者と各職場の責任者に限ってください。全社に共有する表ではありません
- 人事評価に転用しない … 資格の有無は本人の処遇に直接かかわります。この表を評価の材料に使わないことを、運用を始める前に文書にしてください。 評価に使われると分かった瞬間、証明書の提出そのものが遅れます。 遅れれば、本来の目的が損なわれます
- 資格の要否そのものは、所管の窓口と専門家に委ねる … この構成が出すのは、「どの証明書が、いつ提出され、計算するといつまでか」という事実だけです。法令上どの資格や教育が必要かは、所管の窓口と専門家に確認してください
- 外部へ渡す範囲を、証明書1枚と力量コードの一覧に限る … 社員名簿ごとAIに渡さないでください。渡すのは氏名の近い上位5件までです。異動・退職の予定日はスクリプトの側だけで扱います
- 証明書の画像に写り込むものを減らす … 生年月日や本籍が印刷されている証明書は、必要な範囲だけを撮るよう案内します。保存先のアクセス権も表に合わせます
- 一覧が出たあと、誰が作業を止めるのかを決める … 一覧が毎朝出るのに、誰もその人を作業から外さない状態が、いちばん危険です。「出す」と「止める」を別の人の仕事にすると、どちらも「もう片方がやった」になります
誤りのリスクは、期限の切れた力量を有効なものとして残すことと、有効な力量を期限切れとして出すことの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技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 時間主導型が毎分から月1回まで設定でき、フォーム送信のトリガーもあること。作成した人のアカウントで実行され、スクリプトの実行では動かないこと | Google: トリガー | 2026-09-28 |
シートを二次元配列として扱い、getValues() / appendRow() / newDataValidation() が使えること。UrlFetchApp.fetch で外部APIを呼べること | Google: Sheets / Google: 外部API | 2026-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)についてのご相談はこちらから。
