面接の当日辞退・無断欠席のおそれを応募者とのやり取りから見込み、前日の確認連絡の優先順と文面を作る
翌日に面接を控えた応募者について、応募からのやり取り(返信の速さ・日程変更の回数・応募経路など)から当日来ないおそれを見込みます。おそれの高い順に、電話で確かめる人とメールで足りる人を分け、確認連絡の文面を下書きします。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Google Apps Script/Make/Power Automate/Python
- 対象業界
- 介護/宿泊/小売/物流/飲食
- 対象部門
- 採用
- 対象業務
- 書類作成/集計・分析
- 主な課題
- 人手が足りない/判断に時間がかかる/属人化している
- AIで行う処理
- 予測
- 主な効果
- 属人化解消/工数削減/機会損失防止
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 夕方、担当者が応募者台帳から翌日の面接を抜き出す
- 1人ずつ、台帳の記録とGmailのやり取りを開き、これまでの様子を確かめる
- 返信が遅かった、日程を何度も変えた、文面がそっけないなど、気になる人を選ぶ
- 気になる人には電話をかけ、それ以外には定型の確認メールを送る
- 返信や電話の結果を台帳にメモする
- 翌日、面接に来たかどうかを各施設から聞いて台帳に記録する
- 自動毎日15時台、スクリプトが応募者台帳から翌日の面接を抜き出す
- 自動応募者ごとにGmailのやり取りを検索し、返信までの時間、日程変更の回数、未返信の案内の数を数える
- 自動生成AIが応募者からの文面を読み、迷いや不安の表れを決められた分類で書き出す
- 自動過去6か月の面接の結果から作った点数表で、来ないおそれの点数を出す
- 自動点数から優先度(A・B・C)を決め、Aは電話、B・Cはメールと連絡手段を振る
- 自動生成AIが、優先度と書き出した不安に合わせて確認の文面と電話で話すことの要点を下書きする
- 自動B・Cの確認メールをGmailの下書きとして作り、確認リストのシートに並べる
- 人担当者が確認リストを見て、Aの人に電話をかける
- 人下書きを確かめて送る
- 人翌日、来たかどうかを台帳に記録する(月に1回、点数表を作り直す材料になる)
各工程の詳しい説明を読む
- 夕方、担当者が応募者台帳から翌日の面接を抜き出す
- 1人ずつ、台帳の記録とGmailのやり取りを開き、これまでの様子を確かめる
- 返信が遅かった、日程を何度も変えた、文面がそっけないなど、気になる人を選ぶ
- 気になる人には電話をかけ、それ以外には定型の確認メールを送る
- 返信や電話の結果を台帳にメモする
- 翌日、面接に来たかどうかを各施設から聞いて台帳に記録する
(a)全員に同じ確認を送っても、来ない人は減らない。 定型の確認メールに返信する人の多くは、もともと来る人です。来ないおそれの高い人ほど、メールを読まないか、読んでも返しません。 手をかけるべき相手に、手がかかっていません。
(b)電話をかける相手の選び方が勘になっている。 古くからの担当者は、やり取りの文面から「この人は来ない気がする」と当てますが、その勘は言葉になっておらず、新しい担当者には引き継がれていません。
(c)前日の夕方に作業が集中する。 翌日の面接が20件ある日は、2番目のやり取りの確認だけで1時間近くかかります。電話をかける時間が残らず、結局全員にメールだけを送る日が出ます。
(d)結果を見返していない。 6番目で来たかどうかを記録していても、どんな人が来なかったかを数えたことがありません。 記録はあるのに、翌月の確認のしかたに生かされていません。
(e)施設ごとに事情が違う。 駅から遠い郊外の施設と、駅前の施設では来ない理由が違います。同じ確認のしかたを全施設にそろえているため、送迎や道順の案内が要る人にもそれが届いていません。
- 【自動】 毎日15時台、スクリプトが応募者台帳から翌日の面接を抜き出す
- 【自動】 応募者ごとにGmailのやり取りを検索し、返信までの時間、日程変更の回数、未返信の案内の数を数える
- 【自動】 生成AIが応募者からの文面を読み、迷いや不安の表れを決められた分類で書き出す
- 【自動】 過去6か月の面接の結果から作った点数表で、来ないおそれの点数を出す
- 【自動】 点数から優先度(A・B・C)を決め、Aは電話、B・Cはメールと連絡手段を振る
- 【自動】 生成AIが、優先度と書き出した不安に合わせて確認の文面と電話で話すことの要点を下書きする
- 【自動】 B・Cの確認メールをGmailの下書きとして作り、確認リストのシートに並べる
- 【人】 担当者が確認リストを見て、Aの人に電話をかける
- 【人】 下書きを確かめて送る
- 【人】 翌日、来たかどうかを台帳に記録する(月に1回、点数表を作り直す材料になる)
8番目と9番目が、この設計の分かれ目です。 自動で送るのではなく、担当者が優先度の高い人から手をかける順番を作ることが目的です。 準備の時間が減った分を、Aの人への電話に回します。
4番目の点数は、生成AIに出させていません。 過去の結果から作った点数表をスクリプトで当てるだけです。生成AIの役目は、数えられない文面を決められた分類に置き換えることまでで、点数そのものは毎回同じ計算で出ます。
02今回想定するシステム構成
応募者台帳(Googleスプレッドシート)+ 採用用のGmail ▼【トリガー】時間主導型トリガー(毎日15時台) Google Apps Script ├── 翌日の面接を抜き出す ├── GmailApp.search で応募者ごとのやり取りを集める ├── 返信までの時間・日程変更の回数・未返信の数を数える ▼ UrlFetchApp で呼び出し(応募者からの文面だけ) Gemini API ── 文面から迷い・不安の表れを分類する(根拠の文つき) ▼ JSONで返す Google Apps Script ├── 「点数表」シートで来ないおそれの点数を出す ├── 優先度(A・B・C)と連絡手段を決める ▼ UrlFetchApp で呼び出し Gemini API ── 確認の文面と、電話で話すことの要点の下書き ▼ Google Apps Script ── GmailApp.createDraft で下書きを作る ▼ 「明日の確認リスト」シート ▼ 【担当者がAに電話し、B・Cの下書きを確かめて送る】
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Google Apps Script | Python、Power Automate、Make |
| 生成AI | Gemini API | OpenAI API、Claude API |
| 台帳 | Googleスプレッドシート | Microsoft Lists |
| メール | Gmail(採用用の共有アカウント) | Outlook |
スプレッドシートとGmailは、新しく足すものではありません。 応募者台帳と採用用のGmailをそのまま使い、足すのは「点数表」と「明日の確認リスト」の2つのシートだけです。
実行環境を Apps Script にしたのは、台帳もメールもGoogleの中にあるからです。 時間主導型トリガーは毎分から月1回まで設定でき、9時のトリガーなら9時から10時のあいだのどこかで動き、その時刻は日ごとに保たれるとされています。担当者が16時から電話をかけ始められるよう、15時台に設定します。
インストール型のトリガーは、作成した人のアカウントで動きます。 担当者の個人アカウントで作ると、その人が異動したときに止まります。採用用の共有アカウントで作ります。 失敗したときは、作成者に通知のメールが届きます。
Gmailのやり取りは GmailApp.search で集めます。 Gmailを検索語で探し、該当するスレッドの配列を返します。下書きは createDraft で作り、本文はテキストかHTMLにでき、送信者名や返信先も指定できます。この構成では送信の機能を使いません。
「点数表」シートは、採用チームが読める形で持ちます。 どの区分が何点かが表になっていれば、なぜその人がAなのかを、担当者が自分で説明できます。 点数の出し方が見えないと、担当者は結果を信じないか、信じすぎるかのどちらかになります。
生成AIは UrlFetchApp で呼びます。 method、contentType、headers、payload を指定し、muteHttpExceptions を true にすると失敗の応答でも例外で止まらず応答が返るので、応答コードを見て再試行を決められます。
03どうやって実装するのか
処理の起点を決める
毎日15時台に動く時間主導型トリガーを起点にします。 面接の前日の夕方に、担当者が電話をかけられる時間を残すためです。午前中に動かすと、その日の午後に日程変更の連絡が来た人が反映されません。
土日の面接がある施設は、金曜に土・日・月の3日分をまとめて出します。 翌日の分だけを出す設計にすると、週末の面接の確認が週末の当番に寄ります。
同じ日に二度動かさない仕組みも入れます。 確認リストのシートに作成日を残し、同じ日付の行があれば作り直さずに終わります。手で再実行したときに、下書きが二重にできるのを防ぎます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 翌日の面接 | 応募者ID、氏名、施設、職種、面接の日時、面接官 | 応募者台帳 |
| 選考の経過 | 応募日、応募経路、面接の日時を決めた日、日程変更の回数 | 応募者台帳 |
| やり取り | 応募者とのメールの送受信の日時と本文 | 採用用のGmail |
| 点数表 | 行動の区分ごとの点数(過去6か月の結果から作る) | 「点数表」シート |
| 過去の結果 | 面接に来た・事前に辞退・当日辞退・無断欠席 | 応募者台帳 |
質を決めるのは、いちばん下の行です。 来たかどうかの記録が無ければ、点数表を作れません。当日辞退と無断欠席を分けて記録します。 当日辞退は連絡があるぶん、枠の入れ替えに間に合うことがあり、手当てのしかたが違います。
台帳から読まない列を、先に決めておきます。 生年月日、性別、国籍、住所、家族の情報は、台帳にあってもスクリプトが読み込まない設計にします(第13章)。
データの取得方法を決める
やり取りは、応募者のメールアドレスで GmailApp.search を呼んで集めます。 検索語に from: と to: でアドレスを入れ、応募日以降に絞ります。集めたスレッドから、送受信の日時と本文を取り出し、次の値を数えます。
| 数えるもの | 数え方 | 区分の例 |
|---|---|---|
| 最初の返信までの時間 | 面接の案内を送ってから、応募者が初めて返信するまで | 3時間以内/当日中/翌日以降 |
| 日程変更の回数 | 台帳の変更回数の列 | 0回/1回/2回以上 |
| 応募から面接までの日数 | 応募日から面接日まで | 3日以内/4〜7日/8日以上 |
| 未返信の案内 | こちらから送って返信の無いメールの数 | 0通/1通/2通以上 |
| 応募経路 | 台帳の応募経路の列 | 媒体ごと/紹介/直接 |
| 面接の時間帯 | 面接の開始時刻 | 午前/午後/夕方 |
区分の境目は、最初は上の例で始め、点数表を作り直すときに見直します。 細かく分けすぎると、1つの区分に入る過去の件数が少なくなり、点数がぶれます。
生成AIに渡すのは、応募者から届いた本文だけです。 こちらから送った定型の案内や、署名・引用の部分は外します。
点数表は、過去6か月の面接の結果から作ります。 区分ごとに「来なかった割合」(当日辞退と無断欠席の合計)を出し、全体の割合と比べて点数にします。計算はスプレッドシートの集計で足ります。
| 区分の来なかった割合(全体との比) | 点数 |
|---|---|
| 全体の2倍以上 | +3 |
| 全体の1.5倍以上2倍未満 | +2 |
| 全体の1.2倍以上1.5倍未満 | +1 |
| 全体の0.8倍超1.2倍未満 | 0 |
| 全体の0.8倍以下 | -1 |
| 過去の件数が30件未満 | 0(使わない) |
区分の境目と点数の刻みは例です。 大事なのは、どの区分が何点かを、表として誰でも読める形にしておくことです。生成AIが書き出した分類も、同じ表に1つの区分として載せ、同じ計算で点数にします。合計点が高い順に並べ、上位をA、次をB、残りをCとします。Aの人数は、その日に電話をかけられる件数で決めます。
AIへ渡す前に整形する
- 翌日の面接の抜き出し … 台帳の面接日時が翌日(金曜は月曜まで)の行。取り消し済みの行は除く
- アドレスの確認 … 台帳のアドレスでGmailを検索し、1通も見つからなければ「やり取りなし」とする
- 本文の整理 … 引用部分(「>」で始まる行、「〜さんは書きました」以下)と署名を落とす
- 個人の情報を落とす … 本文中の電話番号、住所らしい文字列を伏せ字にしてから生成AIに渡す
- 長さの制限 … 1人あたり直近の5通まで。それより前のやり取りは数えるだけにして本文は渡さない
- 処理済みの印 … 確認リストに出した応募者には作成日を付け、二重に下書きを作らない
検索は、開始位置と件数を指定する search(query, start, max) を使います。 スレッドの合計が大きすぎると失敗するとされているためです。骨組みは次のとおりです。
// 応募者ごとのやり取りを集め、返信までの時間を数える(骨組み)
function collectThreads(applicant) {
const q = `(from:${applicant.email} OR to:${applicant.email}) after:${applicant.appliedYmd}`;
const threads = GmailApp.search(q, 0, 20);
const msgs = GmailApp.getMessagesForThreads(threads).flat()
.sort((a, b) => a.getDate() - b.getDate());
return msgs.map(m => ({
fromApplicant: m.getFrom().includes(applicant.email),
at: m.getDate(),
body: stripQuoteAndSignature(m.getPlainBody())
}));
}
4番目を省かないでください。 応募者は返信の中に、通勤の事情として住所や最寄り駅を書くことがあります。分類に必要なのは「通勤に不安がある」という事実だけで、住所そのものではありません。
AIに処理させる
させるのは2つです。 1つ目は、応募者の文面を決められた分類に置き換えること。2つ目は、優先度と分類に合わせた確認の文面を下書きすることです。
| 分類 | 文面の例 | 点数表での扱い |
|---|---|---|
other_offer | 「ほかでも面接を受けていて」 | 加点の区分 |
schedule_doubt | 「もしかすると行けないかもしれません」 | 加点の区分 |
commute_concern | 「初めて行く場所なので」「バスの時間が」 | 加点の区分(電話で道順を伝える) |
condition_question | 時給・シフト・寮についての質問が未解決 | 加点の区分(電話で答える) |
positive | 「楽しみにしています」「よろしくお願いします」 | 減点の区分 |
none | 分類に当たる文面が無い | 点数に影響しない |
分類には、根拠にした文をそのまま写させます。 担当者が電話をかける前に、なぜAになったのかを、その人自身の言葉で読めるようにするためです。
| させないこと | 理由 |
|---|---|
| 来ないおそれの点数を出すこと | 点数は点数表で計算する。AIに出させると毎回ぶれる |
| 人柄や意欲の評価 | 選考の判断に近づく。分類は決められた6つまで |
| 年齢・性別・国籍などの推測 | 文面から推し量らせない。使わない情報を作り出さない |
| 合否や面接の取りやめの提案 | 見込みの用途は連絡の順番だけ |
| 確認メールの送信 | 下書きまで。送るのは人 |
3行目は、指示に書かないと起きます。 文面の言葉づかいから年代や国籍を推し量り、根拠の欄に書くことがあります。書かれた時点で、使わないと決めた情報が記録に残ります。
指示内容を固定する
あなたはホテルの採用担当を補助する立場です。
翌日に面接を控えた応募者から届いたメールの本文を読み、
下の分類に当たる表れがあるかを書き出してください。
【分類】
- other_offer ......... 他社の選考や内定に触れている
- schedule_doubt ...... 面接の日時に来られるかどうか迷いを示している
- commute_concern ..... 道順・交通手段・時間に不安を示している
- condition_question .. 時給・シフト・寮などの質問があり、こちらの回答が無い
- positive ............ 面接に前向きな言葉がある
- none ................ 上のどれにも当たらない
【厳守事項】
- 本文に書かれていることだけで判断してください。推測で分類を足さないでください。
- 1つの分類につき、根拠にした文を evidence にそのまま写してください。
根拠の文が無い分類は書かないでください。
- 応募者の人柄、意欲、能力を評価しないでください。
- 年齢、性別、国籍、出身地、家族について推測したり書いたりしないでください。
- 来る・来ないの予想、点数、合否に関わることは書かないでください。
- 伏せ字(***)になっている部分を復元しようとしないでください。
【応募者からの本文(新しい順、最大5通)】{messages}
下書きを作るときは、別の指示で呼びます。
次の応募者に、明日の面接の確認の連絡を作ります。
優先度が A の場合は、電話で話すことの要点を3つまでの箇条書きで。
B・C の場合は、メールの本文を作ってください。
【必ず入れること】面接の日時、施設名、場所({access})、持ち物、連絡先
【分類に応じて足すこと】
- commute_concern があれば、最寄り駅からの道順を入れる
- condition_question があれば、質問に答えられる担当者がいることを伝える
- schedule_doubt があれば、日程を変えられることを伝える
【書かないこと】
- 来ないことを前提にした言い方、催促や念押しの繰り返し
- 面接に来ないと不利になる、といった表現
【応募者の名前】{name} 【分類と根拠】{signals} 【優先度】{priority}
「日程を変えられることを伝える」を入れるのは、来られない人に連絡をもらうためです。 迷っている人に念押しを重ねると、黙って来ない方を選びやすくなります。前日に「行けない」と言ってもらえれば、その枠を別の応募者に回せます。
出力形式を固定する
分類はJSONで受け取ります。 Gemini API の構造化出力(response_format に mime_type として application/json と、スキーマを渡す機能)を使い、signal の選択肢を enum で固定します。
{
"applicant_id": "",
"signals": [
{ "signal": "other_offer | schedule_doubt | commute_concern | condition_question | positive",
"evidence": "", "message_date": "" }
]
}
Apps Script から渡すスキーマは次の形です。
const schema = {
type: 'object',
properties: {
applicant_id: { type: 'string' },
signals: { type: 'array', items: {
type: 'object',
properties: {
signal: { type: 'string', enum: ['other_offer','schedule_doubt',
'commute_concern','condition_question','positive'] },
evidence: { type: 'string' },
message_date: { type: 'string' }
},
required: ['signal', 'evidence']
} }
},
required: ['applicant_id', 'signals']
};
値の検査はスクリプトで行います。 構造化出力はJSONとして正しい形で返りますが、値はアプリケーション側で必ず検査するよう公式の説明にあります。evidence の文が実際に本文に含まれているかを文字列で照合し、含まれていなければその分類を捨てます。
点数と優先度は、スクリプトが確認リストに書きます。
| 列 | 中身 |
|---|---|
| 優先度 | A(電話)/B(メール、文面を個別に)/C(メール、定型に近い) |
| 点数 | 点数表で出した合計 |
| 理由 | 加点になった区分と分類(例:未返信2通、schedule_doubt) |
| 根拠 | evidence の文 |
| 下書き | Aは電話の要点、B・CはGmailの下書きへのリンク |
| 結果 | 担当者が記入(電話がつながった/日程変更/辞退の連絡/返信なし) |
理由の列を省かないでください。 点数だけが並ぶと、担当者は点数を信じるか無視するかのどちらかになります。理由が読めれば、電話で何を話せばよいかが分かります。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 応募者台帳 | Apps Script から読み取り | 翌日の面接、選考の経過、過去の結果 |
| 採用用のGmail | GmailApp.search/createDraft | やり取りの収集と、確認メールの下書き |
| Gemini API | UrlFetchApp で呼び出し | 文面の分類と、確認の文面の下書き |
| 確認リスト・点数表 | Apps Script から書き込み | 優先度、理由、下書き |
応募者台帳には書き込みません。 スクリプトが書くのは、確認リストと点数表の2つのシートだけです。来たかどうかの記録は、翌日に担当者が台帳へ入れます。
1回の実行は6分までという制限があります。翌日の面接が20件なら分類と下書きで40回の呼び出しになり、1件ずつ待つと6分に近づきます。呼び出しは fetchAll でまとめて送り、終わらなかった分は次の実行に回します。 トリガーの合計実行時間は Google Workspace のアカウントで1日6時間です。
人が確認する
人が手をかけるのは、Aの人への電話と、下書きの確認です。
- Aの人に電話をかける … 要点を見ながら、日時と場所を確かめ、不安があれば聞きます
- 来られないと分かったら日程を組み直す … 空いた枠は、面接を待っている別の応募者に案内します
- B・Cの下書きを確かめて送る … 日時と場所が台帳と合っているかを必ず見ます
- 結果の列に記入する … 電話がつながったか、日程を変えたか、辞退の連絡があったか
下書きの日時の確認を省かないでください。 日程変更の直後は、台帳とGmailの最新のやり取りが食い違っていることがあり、古い日時の確認を送ると、それが原因で来なくなります。
目標は、400件をならして1件1.5分です。 Cの人は下書きの日時を確かめて送るだけで1分かからず、Bは文面を読んで直すので2分前後です。Aの電話の時間はこの1.5分に含めていません(第10章)。
点数と担当者の感覚が違うときは、担当者の判断を優先します。 BやCの人でも、気になれば電話をかけます。そのときは結果の列に「担当者の判断で電話」と残します。 点数表を作り直すときの材料になります。
例外に対処する
| 起きること | 対応 |
|---|---|
| Gmailにやり取りが見つからない | 「やり取りなし」として優先度をAにする |
| 生成AIの呼び出しが失敗する | 分類なしで点数を出し、理由の列に「文面未確認」と出す |
evidence が本文に無い | その分類を捨てる |
| 6分の制限に届いた | 残りを次の実行に回し、確認リストに「処理中」と出す |
| 過去の件数が少ない区分 | 点数表で0点として扱い、作り直しまで使わない |
| 当日に日程変更の連絡が来た | 確認リストを手で直す。翌日分の下書きは作り直さない |
| トリガーが止まっている | 作成者に通知のメールが届く。共有アカウントの受信箱を毎日見る |
1行目でAにするのは、やり取りが無いこと自体が手がかりだからです。 求人媒体の画面だけで日程が決まった人は、こちらのメールを一度も見ていない可能性があります。
記録を残す
- 確認リストの全行(点数、理由、根拠、優先度、下書き)を日付ごとに残す
- 生成AIに渡した本文(伏せ字の後)と、返ってきたJSON
- 担当者の結果の記入と、「担当者の判断で電話」の記録
- 翌日の面接の結果(来た・事前に辞退・当日辞退・無断欠席)
- 点数表の版と、作り直した日
4つ目と1つ目を突き合わせるのが、この構成のいちばん大事な記録です。 Aの人とCの人で、実際に来なかった割合がどれだけ違うかを月に1回見ます。差が無ければ、点数表が当たっていません。
04実装レベルの3段階
半自動化で、1件6分が1.5分になり、この段階が本記事の想定です。 台帳とGmailを開いて様子を確かめる作業がなくなり、人の仕事は確認リストを読むことと、下書きを確かめることになります。 本格構成で足すのは、来られない人が出たときの手当てです。 空いた枠に入れられる応募者を台帳から探し、案内の下書きを作ります。半自動化の運用で、前日に辞退の連絡がどれだけ取れるようになったかを見てから進みます。
05工数削減シミュレーション
導入後 400件 × 1.5分 ÷ 60 = 10 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 客室清掃・宴会・レストランなどのパート・アルバイトを通年で大量に採用しているホテル・旅館チェーンや、同じ形の採用を続ける飲食・小売・介護・物流の事業者。面接が月に数百件あり、前日の確認連絡を採用担当が全員に同じように送っている場合。応募者台帳をGoogleスプレッドシートで持ち、応募者とのやり取りを採用用のGmailで行っている場合。面接に来たかどうかの結果を記録している(または記録を始められる)場合。
- 面接が月に数十件で、担当者が全員に電話できている場合。応募者とのやり取りが求人媒体の画面の中だけで行われ、記録を取り出せない場合。過去の面接の結果(来た・来なかった)の記録が無く、作る予定もない場合。なお、合否や面接を行うかどうかの判断にこの見込みを使うことは想定していません。
07最小構成で試す方法
- 過去3か月の面接の結果を台帳から抜き出す(来た・当日辞退・無断欠席を分ける)
- 第7章の6つの数えるもののうち、台帳だけで数えられるもの(日程変更、応募経路、応募から面接までの日数)を列にする
- 区分ごとに、来なかった人の割合を出す
- 割合の高い区分に当たる人を、来週の面接の中から選ぶ
- 選んだ人にだけ電話をかけ、それ以外は今までどおりメールを送る
- 翌週、電話をかけた人とそうでない人で、来なかった割合を比べる
ここまで生成AIを使っていません。 先に確かめるのは、台帳の数字だけで来ない人に差が出るかどうかです。差が出なければ、文面を読ませても点数は当たりません。
| 出てきた内容 | 判断 |
|---|---|
| 区分によって来なかった割合がはっきり違う | 点数表を作り、Apps Script に進む |
| 違いはあるが、件数が少なくてぶれる | 区分をまとめて粗くする。構成は有効 |
| 来たかどうかの記録が抜けている | 記録が先。 AIの問題ではない |
3行目が出ることは珍しくありません。 失敗ではなく、結果を記録していなかったことが分かったということです。 その場合は、1か月だけ結果を4つに分けて記録してから始めます。各施設の面接官に、面接の当日中に台帳へ入れてもらう流れを先に作ります。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 点数を生成AIに出させてしまう | 点数は点数表で計算する。AIは分類まで |
| 属性の情報が点数に入り込む | 読み込む列を決め、台帳の属性の列は読まない |
| 分類の根拠が本文に無い | evidence を本文と照合し、無ければ捨てる |
| 点数だけが並んで使われない | 理由と根拠の列を必ず出す |
| 区分を細かく分けすぎる | 過去の件数が少ない区分は使わない |
| 6分の制限で止まる | fetchAll でまとめ、残りは次の実行へ |
| 担当者の異動でトリガーが止まる | 共有アカウントで作る |
| 日程変更の直後に古い日時で確認する | 送る前に台帳と照らす |
| 念押しの文面で来なくなる | 日程を変えられることを伝える |
| 施設の面接官に点数が伝わる | 確認リストを本部だけが開けるシートに置く |
| 繁忙期と閑散期で当たり方が変わる | 月1回の作り直しで、直近の期間の結果を使う |
上の2行が、この構成の失敗のほとんどです。 どちらも、見込みが「人を選ぶ道具」に変わってしまう入口です。点数は計算で、使う情報は行動だけ、という線を最初に引きます。
最後の行は、運用を始めて数か月たってから効いてきます。 点数表が当たらなくなっても、確認リストは毎日同じ顔つきで出てきます。AとCの差を毎月数えていないと、当たらなくなったことに気づけません。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 応募者の氏名、連絡先、選考の経過、応募者とのメールの本文です。
- 見込みを選考に使わない … 厚生労働省は、公正な採用選考には応募者の適性と能力に基づいた基準で行うことが必要としています。来ないおそれの点数は適性でも能力でもありません。合否、面接の取りやめ、面接の順番の後回しに使わないことを、運用の決まりとして書いておきます
- 属性の情報を読まない … 同じページは、本籍地や家族の職業のような本人に責任のない事項、宗教や支持政党のような本来自由であるべき事項を採用の基準にしないよう求め、職業安定法により社会的差別の原因となるおそれのある個人情報の収集は原則として認められていないとしています。この構成は、そもそもその情報を読み込みません
- 生成AIに渡す本文を絞る … 応募者からの本文だけを、電話番号や住所を伏せてから渡します
- 点数を応募者に見せない、施設に配らない … 確認リストは本部の採用チームだけが開けるシートに置きます。施設の面接官が点数を見ると、面接の印象に響きます
- 催促にしない … 下書きの文面は、来られないなら連絡をくださいという案内にします
- 保管の期間を決める … 不採用・辞退になった応募者のやり取りと点数を、いつ消すかを先に決めます
誤りが起きた場合のリスクは、点数の高い人が不利に扱われることと、点数の低い人への確認が手薄になることの2つです。 前者は運用の決まりで、後者は月1回の結果との照合で防ぎます。
10まず何から始めるか
1週目:結果を4つに分けて記録する
面接に来た・事前に辞退・当日辞退・無断欠席の4つで、台帳に記録する列を作ります。過去3か月分は、分かる範囲で埋めます。
2週目:台帳の数字だけで割合を出す
日程変更の回数、応募経路、応募から面接までの日数で区分を作り、来なかった割合を出します。区分によって差が出るかを最優先で見ます。
3週目:電話をかける人を選んで試す
割合の高い区分の人にだけ電話をかけ、翌週に結果を比べます。あわせて、台帳から読まない列と、見込みを使わない用途を運用の決まりに書きます。
4週目:Apps Script で確認リストを作る
Gmailのやり取りを数え、点数表で優先度を出すところまで作ります。この時点では生成AIを使わず、数字だけの確認リストで1週間回します。
2か月目: 文面の分類と確認の下書きを足し、1件6分が何分になったかを実測します。3か月目以降: 点数表を月に1回作り直し、AとCで来なかった割合の差を見ます。差が保たれ、前日に辞退の連絡が取れる件数が増えた時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 時間主導型トリガーが毎分から月1回まで設定でき、9時のトリガーなら9時から10時のあいだで動き、その時刻が日ごとに保たれること。インストール型のトリガーが作成者のアカウントで動くこと。失敗時に作成者へ通知のメールが届くこと | Google for Developers: Installable Triggers | 2026-10-05 |
| 1回の実行が6分まで、トリガーの合計実行時間が一般90分/Workspace 6時間、トリガーがスクリプト・ユーザーごとに20個、URL Fetch が1日20,000回/100,000回であること。予告なく変わりうること | Google for Developers: Quotas for Google Services | 2026-10-05 |
fetch/fetchAll と、method・contentType・headers・payload・muteHttpExceptions(true なら失敗時も応答を返す) | Google for Developers: Class UrlFetchApp | 2026-10-05 |
GmailApp.search が検索語に当たるスレッドを返し、スレッドが大きすぎると失敗するため開始位置と件数を指定する版があること。getMessagesForThreads がスレッドごとのメッセージを返すこと。createDraft で下書きを作れ、テキストかHTMLの本文、送信者名・返信先などを指定できること | Google for Developers: Class GmailApp | 2026-10-05 |
GmailMessage の getDate(日時)、getFrom(送信者)、getPlainBody(HTMLを除いた本文) | Google for Developers: Class GmailMessage | 2026-10-05 |
response_format に mime_type(application/json)とスキーマを渡すこと。enum・required が使えること。抽出や分類が用途に挙がること。値はアプリケーション側で検査すべきこと | Google AI for Developers: Structured outputs | 2026-10-05 |
| 公正な採用選考が応募者の適性と能力に基づいた基準で行われるべきこと。本人に責任のない事項(本籍地、家族の職業など)と本来自由であるべき事項(宗教、支持政党など)。職業安定法により、社会的差別の原因となるおそれのある個人情報の収集が原則として認められないこと | 厚生労働省: 公正な採用選考の基本 | 2026-10-05 |
見込みをどの用途に使い、どの用途に使わないかは、自社の採用の責任者と決めてください。 本記事は上記の公開情報で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0411)についてのご相談はこちらから。
