その日に面接がある面接官へ、候補者ごとの応募書類の要点・前の選考の評価・確かめるべき点を1通にまとめて毎朝送る
その日に面接がある面接官へ、候補者ごとの応募書類の要点、前の選考の評価、確かめるべき点を、毎朝1通のメールにまとめて送ります。面接官は、書類と評価を探して読む代わりに、届いた1通を読んで面接に入れます。
- 生成AI
- Azure OpenAI Service/ChatGPT/Claude
- 連携・自動化
- Google Apps Script/Make/Power Automate/Python
- 対象業界
- IT・SaaS/その他/人材
- 対象部門
- 人事/採用
- 対象業務
- 情報検索/要約
- 主な課題
- 人手が足りない/引き継ぎができていない/情報が見つからない
- AIで行う処理
- 要約
- 主な効果
- 品質標準化/工数削減/検索時間短縮
- 導入難易度
- ★☆☆☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 採用チームが、面接の予定をカレンダーに作り、面接官を招待する
- 面接の前に、面接官が候補者台帳を開き、候補者の番号で行を探す
- 行のリンクから応募書類のPDFを開き、経歴を読む
- 前の段階の評価を読み、懸念と持ち越し事項を拾う
- 確かめる点と聞きたいことを、手元にメモする
- 面接に入る
- 人採用チームが、今までどおり決まった名前で面接の予定をカレンダーに作る
- 自動毎日18時台、Apps Script が翌日の面接の予定を共有のカレンダーから拾う
- 自動予定の名前から候補者の番号と段階を取り、候補者台帳で書類と前の評価を引く
- 自動応募書類のPDFと前の評価を Claude API に渡す
- 自動Claude API が、経歴の要点・前の評価の要点・確かめるべき点・要約に入れなかった記述の有無を JSON で返す
- 自動要約を要約のシートに書き、適性と関係のない記述があった候補者を採用チームに知らせる
- 自動翌朝7時台に、カレンダーをもう一度見て変更を反映し、面接官ごとに1通にまとめて送る
- 人面接官が1通を読み、気になる点だけ書類の該当ページを開いて面接に入る
各工程の詳しい説明を読む
- 採用チームが、面接の予定をカレンダーに作り、面接官を招待する
- 面接の前に、面接官が候補者台帳を開き、候補者の番号で行を探す
- 行のリンクから応募書類のPDFを開き、経歴を読む
- 前の段階の評価を読み、懸念と持ち越し事項を拾う
- 確かめる点と聞きたいことを、手元にメモする
- 面接に入る
(a)直前に探している。 面接官は会議と開発の合間に面接を持つので、2〜3を面接の5分前に始めることが珍しくありません。 台帳の行を探し、PDFを開き、評価を読むところまでで時間が尽き、5番目のメモは書かれないまま面接に入ります。
(b)持ち越し事項が届かない。 一次の面接官が「設計の経験の深さは二次で確かめてほしい」と書いても、二次の面接官がその欄まで読まなければ、確かめられないまま最終に進みます。 最終で「その点は誰も聞いていなかった」と分かることがあります。
(c)読み方が人によって違う。 職務経歴書を最初から読む面接官もいれば、直近の職歴だけを見る面接官もいます。同じ候補者でも、面接官によって見ている経歴が違います。
(d)聞いてはいけないことが目に入る。 応募書類に家族の構成や出身地が書かれていることがあります。厚生労働省の公正な採用選考のページでは、本籍・出生地、家族、住宅状況、生活環境・家庭環境に関することなど14事項を、応募書類に記載させる、面接でたずねるなどして把握することは就職差別につながるおそれがあるとしています。書類に書かれていれば、面接官はつい話題にしてしまいます。
- 【人】 採用チームが、今までどおり決まった名前で面接の予定をカレンダーに作る
- 【自動】 毎日18時台、Apps Script が翌日の面接の予定を共有のカレンダーから拾う
- 【自動】 予定の名前から候補者の番号と段階を取り、候補者台帳で書類と前の評価を引く
- 【自動】 応募書類のPDFと前の評価を Claude API に渡す
- 【自動】 Claude API が、経歴の要点・前の評価の要点・確かめるべき点・要約に入れなかった記述の有無を JSON で返す
- 【自動】 要約を要約のシートに書き、適性と関係のない記述があった候補者を採用チームに知らせる
- 【自動】 翌朝7時台に、カレンダーをもう一度見て変更を反映し、面接官ごとに1通にまとめて送る
- 【人】 面接官が1通を読み、気になる点だけ書類の該当ページを開いて面接に入る
7番目で朝にカレンダーを見直すのは、前の日の夕方から予定が変わるからです。 面接官の差し替え、時間の変更、候補者の辞退は、前の日の夜にも起きます。要約は夕方に作っておき、宛先と時間は朝の状態で決めます。
人の確認は、条件付きにします。 要約は面接の準備の材料で、合否を決めるものではありません。採用チームが確かめるのは、適性と関係のない記述があった候補者と、要約が作れなかった候補者だけです。 面接官は、要約と書類が違うと感じたら、書類のほうを正とします。
02今回想定するシステム構成
採用チームの共有のカレンダー(「【面接】C-0412 二次 バックエンド」) ▼【トリガー1】毎日18時台(時間主導型) Google Apps Script ├──▶ 翌日の面接の予定を拾い、候補者の番号と段階を取る ├──▶ 候補者台帳から、書類のPDFと前の段階の評価を引く ├──▶ Claude API(PDFの入力、構造化出力) │ 書類と評価 → 経歴の要点・評価の要点・確かめるべき点 └──▶ 要約のシートに書く/適性と関係のない記述を採用チームに知らせる ▼【トリガー2】毎日7時台(時間主導型) Google Apps Script ├──▶ 当日の予定を見直し(面接官・時間・辞退の変更を反映) └──▶ MailApp で面接官ごとに1通にまとめて送る ▼ 面接官が読んで面接に入る
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Google Apps Script | Power Automate、Make、Python |
| 生成AI | Claude API(PDFの入力と構造化出力) | OpenAI API、Azure OpenAI(Microsoft Foundry) |
| 保管 | Google スプレッドシート(候補者台帳、要約)とドライブ(応募書類のPDF) | - |
| 通知 | Gmail(MailApp) | Google Chat |
新しく足すのは、Apps Script と、要約のシートと、面接官の一覧のシートだけです。 カレンダーと候補者台帳と評価シートのフォームは、いまのものを使います。採用チームに頼むのは、予定の名前の決まりを守ることだけです。
Apps Script は、候補者台帳のスプレッドシートに付けるスクリプトとして書きます。 予定の取得には、カレンダーの getEventsForDay()(その日の予定をすべて取る)と、予定の getGuestList()(主催者を除く招待者を取る)を使います。予定の setTag() は予定に独自の情報を付けるためのもので、要約を作った予定に印を付けておけば、朝の見直しで「夕方以降に作られた予定」を見分けられます。
トリガーは2つとも時間主導型です。 公式のページでは、時刻は少しずれることがあり、9時に設定すると9時から10時のあいだで選ばれ、その時刻が保たれるとされています。インストール型のトリガーは作った人のアカウントで動き、メールもその人のアカウントから送られるので、採用チームの共有のアカウントで作ります。
AIの処理は Claude API で行います。 公式のページでは、PDFは document のブロックに base64 で渡せ、各ページを文字と画像の両方として処理するとされています。1回の要求は32MBまで、ページ数は600ページまで(コンテキストが100万トークン未満のときは100ページまで)で、パスワードや暗号化の無いPDFが対象です。JSON は output_config.format に type: "json_schema" とスキーマを渡して受け取ります。Anthropic のページでは、API などの商用の製品では、既定で入力と出力をモデルの学習に使わないとされています。
03どうやって実装するのか
処理の起点を決める
トリガーは2つです。 夕方のトリガーは timeBased()・everyDays(1)・atHour(18) で作り、翌日の面接の要約を作ります。朝のトリガーは atHour(7) で作り、当日の予定を見直して送ります。土日と会社の休日は、休日の一覧のシートを見て、スクリプトの最初で何もせずに終わります。
要約を夕方に作るのは、実行時間と失敗に備えるためです。 公式の割り当てでは、1回の実行は6分までです。1日8件の面接について、PDFを読ませて要約を作ると、1件に数十秒かかります。朝にまとめて作ると、6分に近づき、失敗したときに面接に間に合いません。 夕方に作っておけば、失敗しても採用チームが退勤前に気づけます。
夕方より後に入った面接は、朝のトリガーで拾います。 朝の見直しで、setTag() の印の無い予定を見つけたら、その場で要約を作ってから送ります。当日の朝に入れた面接や、当日の昼の面接の予定が午前中に入ったときは、採用チームがメニューから「この面接だけ送る」を実行します。
同じ候補者・同じ段階の要約は、作り直しません。 面接の日時が変わっただけなら、要約のシートの行をそのまま使います。前の段階の評価が後から追加されたときだけ、作り直します。 評価の更新日時を要約のシートに持たせ、台帳の評価の更新日時と比べます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 面接の予定 | 予定の名前(候補者の番号・段階・職種)、開始の時刻、招待者、会議のリンク | 採用チームの共有のカレンダー |
| 候補者台帳 | 候補者の番号、応募の職種、選考の状態(選考中・辞退・見送り)、書類のフォルダ | 候補者台帳のシート |
| 応募書類 | 履歴書と職務経歴書のPDF | ドライブの候補者のフォルダ |
| 前の段階の評価 | 段階、面接官の役職、総合の評価、良かった点、懸念、次の面接で確かめてほしい点 | 候補者台帳の評価のタブ |
| 職種の求める要件 | 職種ごとの必須と歓迎の要件 | 職種の要件のシート |
| 面接官の一覧 | 社員のメールアドレス、部署、送る・送らないの設定 | 面接官の一覧のシート |
質を決めるのは、前の段階の評価の「次の面接で確かめてほしい点」の欄です。 この欄が書かれていれば、要約の「確かめるべき点」は前の面接官の言葉から始まります。空欄が多いと、要約は書類の読み取りだけで確かめる点を作ることになり、前の面接官の意図がつながりません。 欄の説明に「1つは書いてください」と添えるだけで、つながり方は変わります。
職種の求める要件を渡すのは、経歴の要点の並べ方をそろえるためです。 要件に関係する経歴から並べるので、面接官によって見ている経歴が違う、という第3章の(c)が減ります。
評価の面接官の名前は渡しません。 「一次(開発部の管理職)」のように段階と役職だけを渡します。次の面接官が、前の面接官の人柄で評価を読み替えないようにするためです。
データの取得方法を決める
| 取るもの | どこから | どう取るか |
|---|---|---|
| 翌日の面接 | 共有のカレンダー | getEventsForDay(翌日) で取り、名前が「【面接】」で始まる予定に絞る |
| 面接官 | 予定の招待者 | getGuestList() で取り、面接官の一覧にあるアドレスだけを残す |
| 書類のPDF | 候補者のフォルダ | フォルダのファイルからPDFを選び、Blob を base64 にする |
| 評価・要件 | 各シート | getValues() でまとめて読む |
処理は、次の順で行います。
1. 翌日の「【面接】」で始まる予定を取り、名前から候補者の番号・段階・職種を取る
2. 台帳で選考の状態を見て、辞退・見送りなら要約を作らず採用チームに知らせる
3. 要約のシートに同じ候補者・段階の行があり、評価の更新が無ければ使い回す
4. 候補者のフォルダからPDFを取り、合計の大きさとページ数を確かめる
5. 前の段階の評価を、段階と役職を付けて並べる(名前は外す)
6. Claude API を呼び、JSON を受け取る
7. 根拠のページ番号がPDFのページ数の範囲にあるかを確かめる
8. 要約のシートに書き、予定に setTag() で印を付ける
9. 適性と関係のない記述の印があれば、採用チームにだけ知らせる
4番目で大きさを確かめるのは、PDFの制限のためです。 1回の要求は32MBまでなので、スキャンの画像が重い書類は、採用チームが圧縮して置き直すよう知らせ、要約は作らずにリンクだけで送ります。
AIへ渡す前に整形する
- 予定の名前を正規化する … 全角と半角、「二次」と「2次」の表記をそろえ、候補者の番号を取り出します
- 社外の招待者を外す … 招待者のうち、面接官の一覧に無いアドレス(候補者本人など)には送りません
- 評価から名前を外す … 段階と役職だけを残します
- 要件を職種で引く … 職種の要件のシートから、応募の職種の必須と歓迎の要件を取ります
- パスワード付きのPDFを除く … 開けないPDFは渡さず、採用チームに知らせます
2番目を省かないでください。 面接の予定には、オンラインの面接のために候補者本人を招待していることがあります。招待者の全員に送ると、候補者に自分の評価の要約が届きます。 送り先は、必ず面接官の一覧と突き合わせて決めます。
3番目で名前を外しても、役職は残します。 「一次(開発部の管理職)」と「一次(人事部)」では、同じ「懸念あり」でも見ている点が違うからです。役職は評価の読み方の手がかりになりますが、名前は手がかりではなく先入観になります。 面接官が前の面接官に直接聞きたいときは、採用チームに頼んでつないでもらう運用にします。
AIに処理させる
させるのは、応募書類と前の段階の評価を読み、面接官が面接の前に知っておくべきことを、3つの欄に要約することです。
| 欄 | させること | 例 |
|---|---|---|
| 経歴の要点 | 求める要件に関係する経歴を3〜5つ、根拠のページ付きで | 「決済のバックエンドを5年、うち2年はチームの技術の責任者」(p.2) |
| 前の評価の要点 | 段階ごとに、良かった点と懸念を1〜2文で | 一次:設計の説明は具体的。懸念は大規模の運用の経験 |
| 確かめるべき点 | 前の面接官の持ち越し事項を先に、書類で分からない点を後に | 「同時アクセスの多い環境の運用の経験の深さ(一次からの持ち越し)」 |
確かめるべき点は、出どころを必ず付けさせます。 前の面接官の持ち越し事項なら carried_over、書類で分からない点なら document_gap です。面接官は、前の面接官から頼まれた点を先に確かめられます。
| させないこと | 理由 |
|---|---|
| 合否の見込みや推薦 | 面接官が自分の面接で判断する |
| 書類に無い経歴の推測 | 面接官が事実と取り違える |
| 適性と関係のない事項の要約 | 面接で話題にしないため |
| 質問の文の作成 | 質問は面接官と採用担当が組み立てる |
| 前の評価の言い換えで評価を強める・弱める | 前の面接官の評価を変えない |
3行目が、この構成でいちばん守るべきことです。 書類に「実家の家業を継ぐ予定だったが」「家族の転勤で」と書かれていると、AIは経歴の流れとして要約に入れがちです。家族や出身地に関わる記述は要約に入れず、excluded_notice に「書類に家族に関する記述あり」とだけ返させます。 中身は写させません。
指示内容を固定する
あなたは会社の採用チームで、面接官が面接の前に読む要約を作る担当です。
合否の判断はしません。面接で何を聞くかも決めません。
【入力】
- 応募書類(履歴書・職務経歴書のPDF)
- 応募の職種と、その必須・歓迎の要件
- 今回の面接の段階
- 前の段階の評価(段階と面接官の役職、総合の評価、良かった点、懸念、
次の面接で確かめてほしい点)
【してほしいこと】
1. 経歴の要点:要件に関係する経歴を3〜5つ、各60字以内で。
根拠のページ番号を必ず付ける
2. 前の評価の要点:段階ごとに、良かった点と懸念を各1〜2文で
3. 確かめるべき点:前の評価の「次の面接で確かめてほしい点」を先に、
書類から分からない点を後に、合わせて5つまで。
出どころを carried_over か document_gap で示す
【厳守事項】
- 書類に書かれていない経歴、年数、役割を推測しないでください。
分からないことは「書類からは分からない」としてください。
- 次の事項に関わる記述は、要約のどの欄にも書かないでください。
本籍・出生地、家族、住宅状況、生活環境・家庭環境、宗教、
人生観・生活信条、思想、購読新聞・雑誌・愛読書、支持政党、
尊敬する人物、労働組合・社会運動、健康・病歴。
書類にこれらの記述があれば、excluded_notice に
「書類に〇〇に関する記述あり」とだけ書いてください。中身は写さないでください。
- 合否の見込み、推薦、質問の文を書かないでください。
- 前の評価を強めたり弱めたりしないでください。書かれた評価の範囲で要約してください。
【応募の職種と要件】{requirements}
【今回の段階】{stage}
【前の段階の評価】{evaluations}
事項を列挙しているのは、「差別につながる事項」と書くだけではAIが範囲を決められないからです。 厚生労働省のページの14事項から、書類に書かれうるものを並べ、健康・病歴を足しています。 列挙が無いと、AIは「家族の転勤」を経歴の流れとして必要な情報だと判断して要約に入れます。
「中身は写さない」も大事です。 何の記述があったかを詳しく書けば、それ自体が面接官に届く情報になります。採用チームへの知らせは種類だけにし、必要なら採用チームが書類を見ます。
出力形式を固定する
構造化出力で、次の形の JSON を受け取ります。
{
"candidate_no": "",
"stage": "",
"career_points": [
{ "text": "", "pages": [0] }
],
"evaluation_points": [
{ "stage": "", "role": "", "strength": "", "concern": "" }
],
"check_points": [
{ "text": "", "source": "carried_over | document_gap" }
],
"excluded_notice": [""]
}
スキーマでは source を enum で縛り、オブジェクトに additionalProperties: false を付けます。pages の番号がPDFのページ数の範囲にあるかは、受け取ったあとにスクリプトで確かめます。 範囲外の番号が付いた要点は、メールに載せる前に落とします。
理由の1つ目は、面接官ごとの1通に束ねやすいことです。 候補者ごとの JSON を、面接官ごとに開始の時刻の順で並べるだけで1通ができます。束ね方はスクリプトの側で決めるので、メールの体裁を後から変えても要約は作り直しません。
2つ目は、excluded_notice を別の宛先に分けられることです。 この欄は面接官へのメールには載せず、採用チームへの知らせにだけ使います。 自由文の要約の中に混ざっていると、分けられません。
面接官に届くメールは、次の形です。
【本日の面接 3件】10月13日(火)
■ 10:00〜11:00 C-0412 二次 バックエンドエンジニア [会議のリンク]
経歴の要点
・決済のバックエンドを5年、うち2年はチームの技術の責任者(p.2)
・社内の監視の仕組みの立ち上げを担当(p.3)
前の評価
・一次(開発部の管理職):設計の説明は具体的。懸念は大規模の運用の経験
確かめるべき点
・同時アクセスの多い環境の運用の経験の深さ[一次からの持ち越し]
・直近の1年の役割(書類からは分からない)
書類:[PDFのリンク] 評価シート:[フォームのリンク]
■ 14:00〜15:00 C-0398 一次 カスタマーサクセス …
※ 要約は準備の材料です。書類と違う点があれば書類を正としてください。 システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 共有のカレンダー | CalendarApp(読み取り、印の付与) | 翌日・当日の面接の予定、招待者、setTag() の印 |
| 候補者台帳・評価・要件 | SpreadsheetApp(読み取り) | 選考の状態、前の評価、職種の要件 |
| 応募書類 | DriveApp(読み取り) | PDFの Blob |
| Claude API | UrlFetchApp | 要約の JSON |
| 要約のシート | SpreadsheetApp(書き込み) | 候補者・段階ごとの要約と、作った日時 |
| Gmail | MailApp | 面接官ごとの1通、採用チームへの知らせ |
API キーはスクリプトのプロパティに置き、スクリプトの編集の権限は採用チームに絞ります。 公式の割り当てでは、URL Fetch の呼び出しは Google Workspace のアカウントで1日10万回、メールの宛先は1日1,500で、1日に十数通を送るこの構成では余裕があります。
候補者台帳と評価には書き込みません。 要約は要約のシートにだけ書きます。評価シートに要約を書き戻すと、次の段階の面接官が、AIの要約を前の面接官の評価として読んでしまいます。
人が確認する
- 採用チームが、夕方の知らせを見る … 適性と関係のない記述があった候補者、要約が作れなかった候補者、辞退・見送りの候補者の予定が残っているものを確かめます
- 書類の記述は、面接官に伝えない …
excluded_noticeの候補者は、面接官のメールにはそのまま要約を載せ、記述があったことは採用チームの中で扱います - 面接官は、要約と書類が違えば書類を正とする … 違いに気づいたら、採用チームに返信で知らせます
- 採用チームは、違いの知らせを要約のシートに記録する … 月に一度、どんな違いが多いかを見ます
目標は、160件をならして1件3分です。 面接官が1通を読むのに1件あたり2分、気になる点で書類の該当ページを開くのに1分です。要約が作れなかった面接は、今までどおり書類を開くので12分かかります。
例外に対処する
| 起きること | 対応 |
|---|---|
| 予定の名前に候補者の番号が無い | 要約を作らず、採用チームに予定の名前を直すよう知らせる |
| 台帳の状態が辞退・見送り | 要約を作らず、予定が残っていることを採用チームに知らせる |
| PDFが無い・パスワード付き・大きすぎる | 要約を作らず、面接官にはリンクだけを送る。採用チームに知らせる |
| 前の段階の評価がまだ入っていない | 評価の欄を「未入力」とし、前の面接官に入力を頼むよう採用チームに知らせる |
| 招待者に面接官の一覧に無いアドレス | そのアドレスには送らない |
| 朝の見直しで面接官が替わった | 新しい面接官に送り、外れた面接官には送らない |
| Claude API が応答しない・形が違う | 一度だけやり直し、だめならリンクだけで送る |
| 根拠のページ番号が範囲外 | その要点を落とす |
6行目の面接官の差し替えは、朝の見直しでしか拾えません。 夕方の時点の招待者で宛先を決めてしまうと、差し替えられた面接官に前の日の分が届き、新しい面接官には何も届きません。 宛先は必ず朝の招待者で決めます。
4行目は、前の日の夕方に気づければ間に合います。 一次の面接が当日の夕方にあり、翌朝に二次がある、という日程では、評価の入力が翌朝の送信に間に合いません。採用チームは夕方の知らせで「未入力」を見て、一次の面接官に入力を頼みます。
記録を残す
- 要約のシート:候補者、段階、要約の JSON、作った日時、使った評価の更新日時
- 送ったメールの日時、宛先、載せた候補者の番号
excluded_noticeが出た候補者と、採用チームが確かめた日時- 要約と書類の違いの知らせ
- AIの呼び出しの失敗の記録
要約のシートの保存の期間は、候補者台帳と同じ決まりにします。 選考が終わった候補者の要約は、台帳の削除の決まりに合わせて消します。要約だけが残り続けると、不採用の候補者の情報を必要以上に持つことになります。
04実装レベルの3段階
最小構成では、探す時間は減りません。 要約の質を確かめる段階です。 半自動化で1件12分が3分になり、この段階が本記事の想定です。 探して開く作業(①)は無くなり、読む作業(②)は1通を読む作業に、メモ(③)は確かめるべき点の欄で足りるようになります。 本格構成は、持ち越し事項の欄が毎回書かれるようになってから考えます。 欄が空欄ばかりの段階で全段階の一覧を作っても、つながりの無いことが見えるだけです。
05工数削減シミュレーション
導入後 160件 × 3分 ÷ 60 = 8 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 中途採用で月に100件を超える面接を行い、現場の社員が面接官を兼ねているIT・SaaSの会社や人材会社。面接の予定を Google カレンダーで管理し、応募書類のPDFと選考の評価を Google ドライブとスプレッドシートに置いているが、面接官が面接の直前に書類と前の評価を探して読んでいる場合。前の面接官の「次の面接で確かめてほしい点」が次の面接官に伝わっていない場合。Google Workspace を使っている場合。
- 面接が月に数件で、採用担当が面接官ごとに口頭で引き継げている場合。採用管理システムが面接官向けの事前の資料の配信まで済ませている場合。面接の予定や評価がカレンダーとスプレッドシートに無く、紙や個人の手帳で管理されている場合。なお、合否の判断と、面接で何を聞くかの最終的な決定は、この構成では代替できません。
07最小構成で試す方法
- 先月の二次面接から5件を選ぶ(一次の評価に持ち越し事項が書かれているもの)
- その5件の応募書類のPDFと、一次の評価(名前を外したもの)を用意する
- 手元の Claude の画面にPDFと評価を貼り、第7章の指示の要点(推測しない、事項を書かない、持ち越し事項を先に)を伝える
- 出てきた要約を、二次の面接官に読んでもらい、「面接の前にこれがあれば足りたか」を聞く
ここで見るのは、持ち越し事項が確かめるべき点の先頭に来ているかと、書類に無い経歴が混ざっていないかです。
| 出てきた内容 | 判断 |
|---|---|
| 持ち越し事項が先頭に来て、経歴の要点にページが付いている | Apps Script でカレンダーとつなぐ段階に進む |
| 書類に無い年数や役割が書かれた | 指示の書き方で直る。「書類からは分からない」を用意する |
| 前の評価の持ち越し事項が空欄ばかり | 評価シートの書き方が先。 AIの問題ではない |
3行目が出たら、評価シートの欄に説明を足します。 「次の面接官に確かめてほしい点を1つ以上(例:設計の経験の深さ、チームでの役割)」と書き添え、1か月待ってから試し直します。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 候補者本人に要約が届く | 送り先を面接官の一覧と突き合わせる |
| 家族や出身地の記述が要約に入る | 事項を列挙して禁じ、excluded_notice で種類だけ返させる |
| 書類に無い経歴が要約に混ざる | 「書類からは分からない」を用意し、ページの範囲を確かめる |
| 夕方以降の予定の変更が反映されない | 朝にカレンダーを見直し、宛先と時間は朝の状態で決める |
| 予定の名前の決まりが守られない | 番号が取れない予定は採用チームに知らせる |
| 前の評価が未入力のまま次の面接 | 夕方の知らせで「未入力」を出し、採用チームが頼む |
| 朝に要約を作って6分を超える | 夕方に作っておき、朝は束ねて送るだけにする |
| 要約が評価シートに書き戻される | 要約は要約のシートにだけ書く |
| 不採用の候補者の要約が残り続ける | 台帳の削除の決まりに合わせて消す |
上の2行が、この構成の信用を決めます。 候補者に評価の要約が届く事故も、聞いてはいけない事項が面接官の手元に届く事故も、一度起きれば採用の仕組みそのものへの信頼を失います。 どちらも、最初の版から入れてください。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 候補者の応募書類(氏名、連絡先、学歴、職歴)、前の段階の評価、面接の予定です。応募書類には、適性と関係のない事項が書かれていることがあります。
- 送り先を社内の面接官に限る … 招待者の全員ではなく、面接官の一覧にあるアドレスにだけ送ります
- 適性と関係のない事項を面接官に届けない … 厚生労働省のページの14事項に当たる記述は要約に入れず、採用チームにだけ種類を知らせます
- 商用の API で使う … Anthropic のページでは、API などの商用の製品では既定で入力と出力を学習に使わないとされています。個人の契約の画面に応募書類を貼らないことを決めておきます
- 要約を合否の材料にしない … 要約は準備の材料です。評価は面接官が自分の面接で行い、評価シートに書きます
- 要約の保存の期間を台帳とそろえる … 選考が終わった候補者の要約は、台帳の決まりに合わせて消します
- API キーの管理 … スクリプトのプロパティに置き、編集の権限を採用チームに絞ります
誤りが起きた場合のリスクは、候補者や関係のない人に評価の要約が届くことと、書類に無い経歴を面接官が事実と思い込むことの2つです。 前者は送り先の突き合わせで、後者はページの根拠と「書類からは分からない」で防ぎます。合否には一切触れさせない設計にしておけば、要約の誤りが選考の結果に直結することはありません。
10まず何から始めるか
1週目:予定の名前と評価シートを整える
採用チームで、面接の予定の名前の決まり(「【面接】候補者の番号 段階 職種」)を決めます。評価シートの「次の面接で確かめてほしい点」の欄に説明と例を足します。面接官の一覧のシートを作り、送り先をここで決めます。
2週目:5件で試す
先月の二次面接の5件で、書類と一次の評価を会社で契約した Claude の画面に貼り、要約を作らせます。書類に無い経歴が混ざっていないか、家族などの記述が要約に入っていないかを最優先で見ます。
3週目:二次の面接官に読んでもらう
5件の要約を、その面接を担当した二次の面接官に読んでもらいます。「面接の前にこれがあれば足りたか」「足りないものは何か」を聞き、欄の並べ方を直します。
4週目:カレンダーから要約のシートまでを作る
Apps Script で、翌日の予定の取得、台帳と評価の引き当て、Claude API の呼び出し、要約のシートへの書き込みまでを作ります。この時点ではメールを送らず、採用チームが要約のシートを読んで確かめます。
2か月目: 朝の見直しと面接官ごとのメールを足し、採用チームの面接官から始めます。3か月目以降: 全部の面接官に広げ、要約と書類の違いの知らせを月に一度見直します。面接官が直前に台帳を探さなくなり、持ち越し事項が次の面接官の1通の先頭に毎回載るようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| インストール型のトリガーが作った人のアカウントで動き、メールもその人から送られること。時間主導型のトリガーの時刻が9時なら9時から10時のあいだで選ばれ保たれること | Google Apps Script: Installable Triggers | 2026-10-12 |
everyDays() と atHour() で毎日の時刻を指定できること | Google Apps Script: Class ClockTriggerBuilder | 2026-10-12 |
| 1回の実行が6分まで。URL Fetch が Google Workspace で1日10万回、メールの宛先が1日1,500であること | Google Apps Script: Quotas for Google Services | 2026-10-12 |
getEventsForDay() がその日の予定をすべて取ること | Google Apps Script: Class Calendar | 2026-10-12 |
getGuestList() が主催者を除く招待者を取ること。setTag() が予定に独自の情報を付けるためのものであること | Google Apps Script: Class CalendarEvent | 2026-10-12 |
PDFを document のブロックに base64 で渡せること。各ページを文字と画像の両方として処理すること。1回の要求が32MBまで、ページ数が600(コンテキストが100万トークン未満では100)までで、パスワードや暗号化の無いPDFが対象であること | Claude API: PDF support | 2026-10-12 |
output_config.format に type: "json_schema" を指定すると JSON で返ること。オブジェクトに additionalProperties: false が必要で、enum が使えること | Claude API: Structured outputs | 2026-10-12 |
| API などの商用の製品では既定で入力と出力を学習に使わないこと | Anthropic Privacy Center: Is my data used for model training? | 2026-10-12 |
| 本籍・出生地、住宅状況、家族、生活環境・家庭環境、宗教、人生観・生活信条、思想、購読新聞・雑誌・愛読書、支持政党、尊敬する人物、労働組合・社会運動に関することなど14事項を、応募書類や面接で把握することが就職差別につながるおそれがあること | 厚生労働省: 公正な採用選考の基本 | 2026-10-12 |
面接で何を聞くか、何を聞かないかは、社内の採用の手引きと厚生労働省の公正な採用選考の資料に照らして、採用チームが決めてください。 本記事は上記の公式のページで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1274)についてのご相談はこちらから。
