Media > AI活用ユースケース > 採用 > 面接の当日辞退・無断欠席のおそれを応募者とのやり取りから見込み、前日の確認連絡の優先順と文面を作る

面接の当日辞退・無断欠席のおそれを応募者とのやり取りから見込み、前日の確認連絡の優先順と文面を作る

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

翌日に面接を控えた応募者について、応募からのやり取り(返信の速さ・日程変更の回数・応募経路など)から当日来ないおそれを見込みます。おそれの高い順に、電話で確かめる人とメールで足りる人を分け、確認連絡の文面を下書きします。

サマリー
生成AI
ChatGPT/Claude/Gemini
連携・自動化
Google Apps Script/Make/Power Automate/Python
対象業界
介護/宿泊/小売/物流/飲食
対象部門
採用
対象業務
書類作成/集計・分析
主な課題
人手が足りない/判断に時間がかかる/属人化している
AIで行う処理
予測
主な効果
属人化解消/工数削減/機会損失防止
導入難易度
★★☆☆☆
実装レベル
半自動化
費用感
API連携(中)
人間の確認
条件付き
現在工数
40h/月
AI導入後
10h/月
想定削減
75%
年間削減
360h
モデル条件による試算値です。実在企業の実績ではありません。

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

導入前(Before)
  1. 夕方、担当者が応募者台帳から翌日の面接を抜き出す
  2. 1人ずつ、台帳の記録とGmailのやり取りを開き、これまでの様子を確かめる
  3. 返信が遅かった、日程を何度も変えた、文面がそっけないなど、気になる人を選ぶ
  4. 気になる人には電話をかけ、それ以外には定型の確認メールを送る
  5. 返信や電話の結果を台帳にメモする
  6. 翌日、面接に来たかどうかを各施設から聞いて台帳に記録する
導入後(After)
  1. 自動毎日15時台、スクリプトが応募者台帳から翌日の面接を抜き出す
  2. 自動応募者ごとにGmailのやり取りを検索し、返信までの時間、日程変更の回数、未返信の案内の数を数える
  3. 自動生成AIが応募者からの文面を読み、迷いや不安の表れを決められた分類で書き出す
  4. 自動過去6か月の面接の結果から作った点数表で、来ないおそれの点数を出す
  5. 自動点数から優先度(A・B・C)を決め、Aは電話、B・Cはメールと連絡手段を振る
  6. 自動生成AIが、優先度と書き出した不安に合わせて確認の文面と電話で話すことの要点を下書きする
  7. 自動B・Cの確認メールをGmailの下書きとして作り、確認リストのシートに並べる
  8. 人担当者が確認リストを見て、Aの人に電話をかける
  9. 人下書きを確かめて送る
  10. 人翌日、来たかどうかを台帳に記録する(月に1回、点数表を作り直す材料になる)
各工程の詳しい説明を読む
  1. 夕方、担当者が応募者台帳から翌日の面接を抜き出す
  2. 1人ずつ、台帳の記録とGmailのやり取りを開き、これまでの様子を確かめる
  3. 返信が遅かった、日程を何度も変えた、文面がそっけないなど、気になる人を選ぶ
  4. 気になる人には電話をかけ、それ以外には定型の確認メールを送る
  5. 返信や電話の結果を台帳にメモする
  6. 翌日、面接に来たかどうかを各施設から聞いて台帳に記録する

(a)全員に同じ確認を送っても、来ない人は減らない。 定型の確認メールに返信する人の多くは、もともと来る人です。来ないおそれの高い人ほど、メールを読まないか、読んでも返しません。 手をかけるべき相手に、手がかかっていません。

(b)電話をかける相手の選び方が勘になっている。 古くからの担当者は、やり取りの文面から「この人は来ない気がする」と当てますが、その勘は言葉になっておらず、新しい担当者には引き継がれていません。

(c)前日の夕方に作業が集中する。 翌日の面接が20件ある日は、2番目のやり取りの確認だけで1時間近くかかります。電話をかける時間が残らず、結局全員にメールだけを送る日が出ます。

(d)結果を見返していない。 6番目で来たかどうかを記録していても、どんな人が来なかったかを数えたことがありません。 記録はあるのに、翌月の確認のしかたに生かされていません。

(e)施設ごとに事情が違う。 駅から遠い郊外の施設と、駅前の施設では来ない理由が違います。同じ確認のしかたを全施設にそろえているため、送迎や道順の案内が要る人にもそれが届いていません。

  1. 【自動】 毎日15時台、スクリプトが応募者台帳から翌日の面接を抜き出す
  2. 【自動】 応募者ごとにGmailのやり取りを検索し、返信までの時間、日程変更の回数、未返信の案内の数を数える
  3. 【自動】 生成AIが応募者からの文面を読み、迷いや不安の表れを決められた分類で書き出す
  4. 【自動】 過去6か月の面接の結果から作った点数表で、来ないおそれの点数を出す
  5. 【自動】 点数から優先度(A・B・C)を決め、Aは電話、B・Cはメールと連絡手段を振る
  6. 【自動】 生成AIが、優先度と書き出した不安に合わせて確認の文面と電話で話すことの要点を下書きする
  7. 【自動】 B・Cの確認メールをGmailの下書きとして作り、確認リストのシートに並べる
  8. 【人】 担当者が確認リストを見て、Aの人に電話をかける
  9. 【人】 下書きを確かめて送る
  10. 【人】 翌日、来たかどうかを台帳に記録する(月に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 ScriptPython、Power Automate、Make
生成AIGemini APIOpenAI 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どうやって実装するのか

Step1

処理の起点を決める

毎日15時台に動く時間主導型トリガーを起点にします。 面接の前日の夕方に、担当者が電話をかけられる時間を残すためです。午前中に動かすと、その日の午後に日程変更の連絡が来た人が反映されません。

土日の面接がある施設は、金曜に土・日・月の3日分をまとめて出します。 翌日の分だけを出す設計にすると、週末の面接の確認が週末の当番に寄ります。

同じ日に二度動かさない仕組みも入れます。 確認リストのシートに作成日を残し、同じ日付の行があれば作り直さずに終わります。手で再実行したときに、下書きが二重にできるのを防ぎます。

Step2

入力データを集める

データ中身取得元
翌日の面接応募者ID、氏名、施設、職種、面接の日時、面接官応募者台帳
選考の経過応募日、応募経路、面接の日時を決めた日、日程変更の回数応募者台帳
やり取り応募者とのメールの送受信の日時と本文採用用のGmail
点数表行動の区分ごとの点数(過去6か月の結果から作る)「点数表」シート
過去の結果面接に来た・事前に辞退・当日辞退・無断欠席応募者台帳

質を決めるのは、いちばん下の行です。 来たかどうかの記録が無ければ、点数表を作れません。当日辞退と無断欠席を分けて記録します。 当日辞退は連絡があるぶん、枠の入れ替えに間に合うことがあり、手当てのしかたが違います。

台帳から読まない列を、先に決めておきます。 生年月日、性別、国籍、住所、家族の情報は、台帳にあってもスクリプトが読み込まない設計にします(第13章)。

Step3

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

やり取りは、応募者のメールアドレスで 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の人数は、その日に電話をかけられる件数で決めます。

Step4

AIへ渡す前に整形する

  1. 翌日の面接の抜き出し … 台帳の面接日時が翌日(金曜は月曜まで)の行。取り消し済みの行は除く
  2. アドレスの確認 … 台帳のアドレスでGmailを検索し、1通も見つからなければ「やり取りなし」とする
  3. 本文の整理 … 引用部分(「>」で始まる行、「〜さんは書きました」以下)と署名を落とす
  4. 個人の情報を落とす … 本文中の電話番号、住所らしい文字列を伏せ字にしてから生成AIに渡す
  5. 長さの制限 … 1人あたり直近の5通まで。それより前のやり取りは数えるだけにして本文は渡さない
  6. 処理済みの印 … 確認リストに出した応募者には作成日を付け、二重に下書きを作らない

検索は、開始位置と件数を指定する 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番目を省かないでください。 応募者は返信の中に、通勤の事情として住所や最寄り駅を書くことがあります。分類に必要なのは「通勤に不安がある」という事実だけで、住所そのものではありません。

Step5

AIに処理させる

させるのは2つです。 1つ目は、応募者の文面を決められた分類に置き換えること。2つ目は、優先度と分類に合わせた確認の文面を下書きすることです。

分類文面の例点数表での扱い
other_offer「ほかでも面接を受けていて」加点の区分
schedule_doubt「もしかすると行けないかもしれません」加点の区分
commute_concern「初めて行く場所なので」「バスの時間が」加点の区分(電話で道順を伝える)
condition_question時給・シフト・寮についての質問が未解決加点の区分(電話で答える)
positive「楽しみにしています」「よろしくお願いします」減点の区分
none分類に当たる文面が無い点数に影響しない

分類には、根拠にした文をそのまま写させます。 担当者が電話をかける前に、なぜAになったのかを、その人自身の言葉で読めるようにするためです。

させないこと理由
来ないおそれの点数を出すこと点数は点数表で計算する。AIに出させると毎回ぶれる
人柄や意欲の評価選考の判断に近づく。分類は決められた6つまで
年齢・性別・国籍などの推測文面から推し量らせない。使わない情報を作り出さない
合否や面接の取りやめの提案見込みの用途は連絡の順番だけ
確認メールの送信下書きまで。送るのは人

3行目は、指示に書かないと起きます。 文面の言葉づかいから年代や国籍を推し量り、根拠の欄に書くことがあります。書かれた時点で、使わないと決めた情報が記録に残ります。

Step6

指示内容を固定する

あなたはホテルの採用担当を補助する立場です。
翌日に面接を控えた応募者から届いたメールの本文を読み、
下の分類に当たる表れがあるかを書き出してください。

【分類】
- 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}

「日程を変えられることを伝える」を入れるのは、来られない人に連絡をもらうためです。 迷っている人に念押しを重ねると、黙って来ない方を選びやすくなります。前日に「行けない」と言ってもらえれば、その枠を別の応募者に回せます。

Step7

出力形式を固定する

分類は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の下書きへのリンク
結果担当者が記入(電話がつながった/日程変更/辞退の連絡/返信なし)

理由の列を省かないでください。 点数だけが並ぶと、担当者は点数を信じるか無視するかのどちらかになります。理由が読めれば、電話で何を話せばよいかが分かります。

Step8

システムへ連携する

つなぎ先方式内容
応募者台帳Apps Script から読み取り翌日の面接、選考の経過、過去の結果
採用用のGmailGmailApp.search/createDraftやり取りの収集と、確認メールの下書き
Gemini APIUrlFetchApp で呼び出し文面の分類と、確認の文面の下書き
確認リスト・点数表Apps Script から書き込み優先度、理由、下書き

応募者台帳には書き込みません。 スクリプトが書くのは、確認リストと点数表の2つのシートだけです。来たかどうかの記録は、翌日に担当者が台帳へ入れます。

1回の実行は6分までという制限があります。翌日の面接が20件なら分類と下書きで40回の呼び出しになり、1件ずつ待つと6分に近づきます。呼び出しは fetchAll でまとめて送り、終わらなかった分は次の実行に回します。 トリガーの合計実行時間は Google Workspace のアカウントで1日6時間です。

Step9

人が確認する

人が手をかけるのは、Aの人への電話と、下書きの確認です。

  1. Aの人に電話をかける … 要点を見ながら、日時と場所を確かめ、不安があれば聞きます
  2. 来られないと分かったら日程を組み直す … 空いた枠は、面接を待っている別の応募者に案内します
  3. B・Cの下書きを確かめて送る … 日時と場所が台帳と合っているかを必ず見ます
  4. 結果の列に記入する … 電話がつながったか、日程を変えたか、辞退の連絡があったか

下書きの日時の確認を省かないでください。 日程変更の直後は、台帳とGmailの最新のやり取りが食い違っていることがあり、古い日時の確認を送ると、それが原因で来なくなります。

目標は、400件をならして1件1.5分です。 Cの人は下書きの日時を確かめて送るだけで1分かからず、Bは文面を読んで直すので2分前後です。Aの電話の時間はこの1.5分に含めていません(第10章)。

点数と担当者の感覚が違うときは、担当者の判断を優先します。 BやCの人でも、気になれば電話をかけます。そのときは結果の列に「担当者の判断で電話」と残します。 点数表を作り直すときの材料になります。

Step10

例外に対処する

起きること対応
Gmailにやり取りが見つからない「やり取りなし」として優先度をAにする
生成AIの呼び出しが失敗する分類なしで点数を出し、理由の列に「文面未確認」と出す
evidence が本文に無いその分類を捨てる
6分の制限に届いた残りを次の実行に回し、確認リストに「処理中」と出す
過去の件数が少ない区分点数表で0点として扱い、作り直しまで使わない
当日に日程変更の連絡が来た確認リストを手で直す。翌日分の下書きは作り直さない
トリガーが止まっている作成者に通知のメールが届く。共有アカウントの受信箱を毎日見る

1行目でAにするのは、やり取りが無いこと自体が手がかりだからです。 求人媒体の画面だけで日程が決まった人は、こちらのメールを一度も見ていない可能性があります。

Step11

記録を残す

  • 確認リストの全行(点数、理由、根拠、優先度、下書き)を日付ごとに残す
  • 生成AIに渡した本文(伏せ字の後)と、返ってきたJSON
  • 担当者の結果の記入と、「担当者の判断で電話」の記録
  • 翌日の面接の結果(来た・事前に辞退・当日辞退・無断欠席)
  • 点数表の版と、作り直した日

4つ目と1つ目を突き合わせるのが、この構成のいちばん大事な記録です。 Aの人とCの人で、実際に来なかった割合がどれだけ違うかを月に1回見ます。差が無ければ、点数表が当たっていません。

04実装レベルの3段階

最小構成:台帳の数字だけで区分ごとの割合を出し、電話をかける人を手で選ぶ / 優先度の目安
半自動化:上記+Apps Script でGmailのやり取りを数え、生成AIで文面を分類し、確認リストと下書きを作る / 優先度、理由、下書きの作成
本格構成:上記+点数表の月次の作り直しを自動化し、空いた枠に別の応募者を案内する下書きまで作る / 確認の準備と、枠の入れ替えの準備

半自動化で、1件6分が1.5分になり、この段階が本記事の想定です。 台帳とGmailを開いて様子を確かめる作業がなくなり、人の仕事は確認リストを読むことと、下書きを確かめることになります。 本格構成で足すのは、来られない人が出たときの手当てです。 空いた枠に入れられる応募者を台帳から探し、案内の下書きを作ります。半自動化の運用で、前日に辞退の連絡がどれだけ取れるようになったかを見てから進みます。

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

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

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

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

AI活用について相談する

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

向いている
  1. 客室清掃・宴会・レストランなどのパート・アルバイトを通年で大量に採用しているホテル・旅館チェーンや、同じ形の採用を続ける飲食・小売・介護・物流の事業者。面接が月に数百件あり、前日の確認連絡を採用担当が全員に同じように送っている場合。応募者台帳をGoogleスプレッドシートで持ち、応募者とのやり取りを採用用のGmailで行っている場合。面接に来たかどうかの結果を記録している(または記録を始められる)場合。
向いていない
  1. 面接が月に数十件で、担当者が全員に電話できている場合。応募者とのやり取りが求人媒体の画面の中だけで行われ、記録を取り出せない場合。過去の面接の結果(来た・来なかった)の記録が無く、作る予定もない場合。なお、合否や面接を行うかどうかの判断にこの見込みを使うことは想定していません。

07最小構成で試す方法

  1. 過去3か月の面接の結果を台帳から抜き出す(来た・当日辞退・無断欠席を分ける)
  2. 第7章の6つの数えるもののうち、台帳だけで数えられるもの(日程変更、応募経路、応募から面接までの日数)を列にする
  3. 区分ごとに、来なかった人の割合を出す
  4. 割合の高い区分に当たる人を、来週の面接の中から選ぶ
  5. 選んだ人にだけ電話をかけ、それ以外は今までどおりメールを送る
  6. 翌週、電話をかけた人とそうでない人で、来なかった割合を比べる

ここまで生成AIを使っていません。 先に確かめるのは、台帳の数字だけで来ない人に差が出るかどうかです。差が出なければ、文面を読ませても点数は当たりません。

出てきた内容判断
区分によって来なかった割合がはっきり違う点数表を作り、Apps Script に進む
違いはあるが、件数が少なくてぶれる区分をまとめて粗くする。構成は有効
来たかどうかの記録が抜けている記録が先。 AIの問題ではない

3行目が出ることは珍しくありません。 失敗ではなく、結果を記録していなかったことが分かったということです。 その場合は、1か月だけ結果を4つに分けて記録してから始めます。各施設の面接官に、面接の当日中に台帳へ入れてもらう流れを先に作ります。

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

問題対策
点数を生成AIに出させてしまう点数は点数表で計算する。AIは分類まで
属性の情報が点数に入り込む読み込む列を決め、台帳の属性の列は読まない
分類の根拠が本文に無いevidence を本文と照合し、無ければ捨てる
点数だけが並んで使われない理由と根拠の列を必ず出す
区分を細かく分けすぎる過去の件数が少ない区分は使わない
6分の制限で止まるfetchAll でまとめ、残りは次の実行へ
担当者の異動でトリガーが止まる共有アカウントで作る
日程変更の直後に古い日時で確認する送る前に台帳と照らす
念押しの文面で来なくなる日程を変えられることを伝える
施設の面接官に点数が伝わる確認リストを本部だけが開けるシートに置く
繁忙期と閑散期で当たり方が変わる月1回の作り直しで、直近の期間の結果を使う

上の2行が、この構成の失敗のほとんどです。 どちらも、見込みが「人を選ぶ道具」に変わってしまう入口です。点数は計算で、使う情報は行動だけ、という線を最初に引きます。

最後の行は、運用を始めて数か月たってから効いてきます。 点数表が当たらなくなっても、確認リストは毎日同じ顔つきで出てきます。AとCの差を毎月数えていないと、当たらなくなったことに気づけません。

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

この構成で扱うデータ: 応募者の氏名、連絡先、選考の経過、応募者とのメールの本文です。

  1. 見込みを選考に使わない … 厚生労働省は、公正な採用選考には応募者の適性と能力に基づいた基準で行うことが必要としています。来ないおそれの点数は適性でも能力でもありません。合否、面接の取りやめ、面接の順番の後回しに使わないことを、運用の決まりとして書いておきます
  2. 属性の情報を読まない … 同じページは、本籍地や家族の職業のような本人に責任のない事項、宗教や支持政党のような本来自由であるべき事項を採用の基準にしないよう求め、職業安定法により社会的差別の原因となるおそれのある個人情報の収集は原則として認められていないとしています。この構成は、そもそもその情報を読み込みません
  3. 生成AIに渡す本文を絞る … 応募者からの本文だけを、電話番号や住所を伏せてから渡します
  4. 点数を応募者に見せない、施設に配らない … 確認リストは本部の採用チームだけが開けるシートに置きます。施設の面接官が点数を見ると、面接の印象に響きます
  5. 催促にしない … 下書きの文面は、来られないなら連絡をくださいという案内にします
  6. 保管の期間を決める … 不採用・辞退になった応募者のやり取りと点数を、いつ消すかを先に決めます

誤りが起きた場合のリスクは、点数の高い人が不利に扱われることと、点数の低い人への確認が手薄になることの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技術仕様の確認日・参考情報

技術仕様確認日:2026-10-05/最終更新:2026-10-05
確認した内容情報源確認日
時間主導型トリガーが毎分から月1回まで設定でき、9時のトリガーなら9時から10時のあいだで動き、その時刻が日ごとに保たれること。インストール型のトリガーが作成者のアカウントで動くこと。失敗時に作成者へ通知のメールが届くことGoogle for Developers: Installable Triggers2026-10-05
1回の実行が6分まで、トリガーの合計実行時間が一般90分/Workspace 6時間、トリガーがスクリプト・ユーザーごとに20個、URL Fetch が1日20,000回/100,000回であること。予告なく変わりうることGoogle for Developers: Quotas for Google Services2026-10-05
fetch/fetchAll と、method・contentType・headers・payload・muteHttpExceptions(true なら失敗時も応答を返す)Google for Developers: Class UrlFetchApp2026-10-05
GmailApp.search が検索語に当たるスレッドを返し、スレッドが大きすぎると失敗するため開始位置と件数を指定する版があること。getMessagesForThreads がスレッドごとのメッセージを返すこと。createDraft で下書きを作れ、テキストかHTMLの本文、送信者名・返信先などを指定できることGoogle for Developers: Class GmailApp2026-10-05
GmailMessage の getDate(日時)、getFrom(送信者)、getPlainBody(HTMLを除いた本文)Google for Developers: Class GmailMessage2026-10-05
response_format に mime_type(application/json)とスキーマを渡すこと。enum・required が使えること。抽出や分類が用途に挙がること。値はアプリケーション側で検査すべきことGoogle AI for Developers: Structured outputs2026-10-05
公正な採用選考が応募者の適性と能力に基づいた基準で行われるべきこと。本人に責任のない事項(本籍地、家族の職業など)と本来自由であるべき事項(宗教、支持政党など)。職業安定法により、社会的差別の原因となるおそれのある個人情報の収集が原則として認められないこと厚生労働省: 公正な採用選考の基本2026-10-05

見込みをどの用途に使い、どの用途に使わないかは、自社の採用の責任者と決めてください。 本記事は上記の公開情報で確認できた範囲だけを扱っています。

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

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

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

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