採用業務、手作業だらけじゃないですか?
ミドリ(surprised): タツヤさん、うちの人事部の人が「採用シーズンになると毎日残業」って嘆いてたんですけど、何がそんなに大変なんですか?
タツヤ(smiling): 採用業務って、意外と「考える仕事」より「事務作業」のほうが圧倒的に多いんだよ。具体的に何をやってるか見てみよう。
| 業務 | 内容 | 所要時間(1件あたり) |
|---|---|---|
| 応募受付 | メール確認、情報をスプレッドシートに転記 | 5〜10分 |
| 受領確認メール | 応募者に「受け取りました」メールを送信 | 3〜5分 |
| 面接日程調整 | 候補日を面接官に確認→応募者に提案→調整 | 15〜30分 |
| 評価シート作成 | 面接ごとに評価フォームを準備 | 5〜10分 |
| 合否通知 | 結果をメールで通知 | 5〜10分 |
| 入社書類準備 | 各種書類のテンプレートを個別に作成 | 20〜30分 |
ミドリ: 1人の応募者に対して、これ全部やるんですか? 月30人応募が来たら……。
タツヤ: 単純計算で月20〜30時間は事務作業だけで消える。しかもミスが許されない。宛名間違えたら大惨事だからね。
ミドリ: それ全部GASで自動化できるんですか?
タツヤ: ほぼ全部できる。しかもGoogle Workspaceの中で完結するから、追加コストゼロ。順番に見ていこう。
ステップ1:応募管理スプレッドシートを作る
ミドリ: まず何から始めればいいですか?
タツヤ: 応募者情報を一元管理するスプレッドシートを作る。これが全自動化の起点になる。
タツヤ: シートの構成はこう。
| 列 | 内容 | 例 |
|---|---|---|
| A | 応募ID | APP-2026-001 |
| B | 応募日 | 2026-03-15 |
| C | 氏名 | 山田太郎 |
| D | メールアドレス | [email protected] |
| E | 応募ポジション | フロントエンドエンジニア |
| F | ステータス | 書類選考中 / 面接調整中 / 面接済み / 内定 / 不採用 |
| G | 面接日時 | 2026-03-20 14:00 |
| H | 面接官 | 佐藤一郎 |
| I | 評価スコア | 4.2 / 5.0 |
| J | 備考 | ポートフォリオ確認済み |
ミドリ: Google Formsから応募を受け付ければ、自動でシートに入りますよね?
タツヤ(nodding): その通り。さらにGASのトリガーを使えば、新しい行が追加された瞬間に自動処理が走る。
ステップ2:自動返信メールの設定
ミドリ: 応募が来たら最初に何を自動化しますか?
タツヤ(nodding): まず受領確認メール。応募者は「ちゃんと届いたかな」って不安なんだよ。即レスが基本。
function onFormSubmit(e) {
const response = e.namedValues;
const name = response['氏名'][0];
const email = response['メールアドレス'][0];
const position = response['応募ポジション'][0];
// 応募IDを生成
const sheet = SpreadsheetApp.getActiveSheet();
const row = sheet.getLastRow();
const appId = `APP-${new Date().getFullYear()}-${String(row).padStart(3, '0')}`;
sheet.getRange(row, 1).setValue(appId);
sheet.getRange(row, 6).setValue('書類選考中');
// 受領確認メールを送信
const subject = `【応募受付完了】${position}へのご応募ありがとうございます`;
const body = `${name} 様\n\n`
+ `この度は${position}ポジションにご応募いただき、\n`
+ `誠にありがとうございます。\n\n`
+ `応募ID: ${appId}\n\n`
+ `書類選考の結果は、5営業日以内にご連絡いたします。\n\n`
+ `株式会社○○ 採用担当`;
GmailApp.sendEmail(email, subject, body);
}
ミドリ: フォーム送信と同時にメールが飛ぶんですね。応募者からしたら「対応が早い会社だな」って好印象ですよね。
タツヤ: 採用ブランディングの観点でも大事。レスポンスの速さは企業イメージに直結する。
ステップ3:面接日程の自動調整
ミドリ: 一番面倒な日程調整はどう自動化するんですか?
タツヤ: Google Calendarとの連携がカギ。面接官のカレンダーから空き時間を自動取得して、候補日を応募者にメール送信する。
function suggestInterviewSlots(interviewerEmail, daysAhead = 7) {
const calendar = CalendarApp.getCalendarById(interviewerEmail);
const now = new Date();
const endDate = new Date(now.getTime() + daysAhead * 24 * 60 * 60 * 1000);
// 営業時間内(10:00-18:00)の空き枠を取得
const slots = [];
const current = new Date(now);
current.setHours(10, 0, 0, 0);
if (current < now) current.setDate(current.getDate() + 1);
while (current < endDate) {
if (current.getDay() !== 0 && current.getDay() !== 6) { // 平日のみ
for (let hour = 10; hour <= 16; hour++) {
const slotStart = new Date(current);
slotStart.setHours(hour, 0, 0, 0);
const slotEnd = new Date(slotStart.getTime() + 60 * 60 * 1000);
const events = calendar.getEvents(slotStart, slotEnd);
if (events.length === 0) {
slots.push({
date: Utilities.formatDate(slotStart, 'Asia/Tokyo', 'yyyy/MM/dd'),
time: Utilities.formatDate(slotStart, 'Asia/Tokyo', 'HH:mm'),
datetime: slotStart
});
}
}
}
current.setDate(current.getDate() + 1);
}
return slots.slice(0, 5); // 最大5候補
}
ミドリ: 面接官のカレンダーを見て空いてるところを自動で拾うんですか!
タツヤ: そう。この候補をメールで送って、応募者が選んだら自動でカレンダーに予定を入れる。往復のメールラリーが不要になる。
ミドリ: あの「○日の△時はいかがですか?」「すみません、その日は……」のやり取りがなくなるんですね。
タツヤ: 日程調整だけで1件15〜30分かかってたのが、ほぼゼロになる。月30件なら月10時間以上の削減。
ステップ4:面接評価シートの自動生成
ミドリ: 面接の評価シートも自動で作れるんですか?
タツヤ: Google Docsのテンプレートから自動生成する。面接が確定した時点で、応募者情報を埋め込んだ評価シートが面接官に共有される。
function createEvaluationSheet(applicantData) {
const templateId = 'テンプレートのドキュメントID';
const template = DriveApp.getFileById(templateId);
const folder = DriveApp.getFolderById('評価シート保存先フォルダID');
// テンプレートをコピー
const docName = `面接評価_${applicantData.name}_${applicantData.position}`;
const copy = template.makeCopy(docName, folder);
const doc = DocumentApp.openById(copy.getId());
const body = doc.getBody();
// プレースホルダーを置換
body.replaceText('{{応募者名}}', applicantData.name);
body.replaceText('{{応募ポジション}}', applicantData.position);
body.replaceText('{{面接日時}}', applicantData.interviewDate);
body.replaceText('{{面接官}}', applicantData.interviewer);
doc.saveAndClose();
// 面接官に共有
copy.addEditor(applicantData.interviewerEmail);
return copy.getUrl();
}
ミドリ: 評価項目のテンプレートを1回作れば、あとは自動で量産されるわけですね。
タツヤ: テンプレートには「技術力(5段階)」「コミュニケーション力(5段階)」「カルチャーフィット(5段階)」みたいな評価軸を入れておく。面接官は評価を記入するだけ。記入が完了したら、スコアが自動で管理スプレッドシートに反映される。
ステップ5:合否通知の自動送信
ミドリ: 合否の連絡も自動化できますか?
タツヤ: できる。管理シートのステータスを「内定」や「不採用」に変更したら、自動でメールが送られる仕組みを作る。
function onStatusChange(e) {
const sheet = e.source.getActiveSheet();
const range = e.range;
// ステータス列(F列)の変更を監視
if (range.getColumn() !== 6) return;
const row = range.getRow();
const status = range.getValue();
const name = sheet.getRange(row, 3).getValue();
const email = sheet.getRange(row, 4).getValue();
const position = sheet.getRange(row, 5).getValue();
if (status === '内定') {
sendOfferEmail(name, email, position);
} else if (status === '不採用') {
sendRejectionEmail(name, email, position);
}
}
ミドリ: ステータスをプルダウンで変えるだけでメールが飛ぶんですね。
タツヤ(thinking): ただし注意点がある。不採用通知は送信前に確認ステップを入れること。操作ミスで誤送信したら取り返しがつかない。
ミドリ: それは怖い。確認ダイアログを出すとか?
タツヤ: そう。Browser.msgBox() で確認を挟むか、「送信予約」状態にして翌営業日の朝に一括送信する仕組みにするのが安全。
ステップ6:入社手続きの自動化
ミドリ: 内定が決まった後の手続きも自動化できますか?
タツヤ: 入社手続きのワークフローも組める。ステータスが「内定承諾」に変わったら、以下が自動実行される。
- 入社書類テンプレートの生成 — 雇用契約書、秘密保持契約書、各種届出書のテンプレートをGoogle Docsで自動生成
- 社内通知 — 受入部署の管理者にSlackまたはメールで通知
- タスクリストの作成 — 「PCの手配」「アカウント作成」「座席の準備」などのチェックリストをスプレッドシートに自動生成
- ウェルカムメールの送信 — 入社日・持ち物・初日のスケジュールを案内
ミドリ: 入社手続きの漏れがなくなりますね。新入社員が初日に「PC届いてません」とかならずに済む。
タツヤ: それは実際によくあるトラブル。チェックリストの自動化だけでも導入する価値がある。
個人情報の取り扱い:プライバシー対策
ミドリ: 応募者の個人情報をスプレッドシートで管理して大丈夫なんですか?
タツヤ: いい指摘。個人情報保護は最優先事項。以下の対策を必ず入れること。
| 対策 | 実装方法 |
|---|---|
| アクセス制限 | スプレッドシートの共有設定を採用チームのみに限定 |
| 閲覧ログ | GASでシートの閲覧・編集ログを記録 |
| データ保持期限 | 不採用者のデータは選考終了後6ヶ月で自動削除 |
| データ暗号化 | 機微情報(住所・電話番号)は別シートに分離管理 |
| 同意管理 | 応募フォームにプライバシーポリシーへの同意チェックを設置 |
タツヤ: 特にデータの自動削除は重要。GASの時限トリガーで「選考終了から6ヶ月経過した行を自動削除」するスクリプトを組んでおく。
function deleteExpiredData() {
const sheet = SpreadsheetApp.getActiveSpreadsheet()
.getSheetByName('応募者管理');
const data = sheet.getDataRange().getValues();
const sixMonthsAgo = new Date();
sixMonthsAgo.setMonth(sixMonthsAgo.getMonth() - 6);
// 下の行から削除(行番号がずれないように)
for (let i = data.length - 1; i >= 1; i--) {
const status = data[i][5]; // ステータス列
const updatedAt = new Date(data[i][1]); // 応募日列
if ((status === '不採用' || status === '辞退') && updatedAt < sixMonthsAgo) {
sheet.deleteRow(i + 1);
}
}
}
ミドリ: 法令遵守も自動化できるのは心強いですね。
導入効果の試算
ミドリ: 全部導入すると、どれくらい効果がありますか?
タツヤ: 月30名の応募がある企業で試算してみよう。
| 業務 | 導入前(月間) | 導入後(月間) | 削減時間 |
|---|---|---|---|
| 応募受付・転記 | 5時間 | 0時間(完全自動) | 5時間 |
| 受領確認メール | 2.5時間 | 0時間(完全自動) | 2.5時間 |
| 面接日程調整 | 10時間 | 1時間(例外対応のみ) | 9時間 |
| 評価シート作成 | 3時間 | 0時間(完全自動) | 3時間 |
| 合否通知 | 2.5時間 | 0.5時間(確認のみ) | 2時間 |
| 入社書類準備 | 3時間 | 0.5時間(確認のみ) | 2.5時間 |
| 合計 | 26時間 | 2時間 | 24時間 |
ミドリ: 月24時間の削減! まるまる3営業日分じゃないですか。
タツヤ: しかも削減されるのは「単純作業」の時間。その分、採用担当者は「候補者との面談」「採用戦略の立案」「エンゲージメント向上」といった本来の仕事に集中できるようになる。
ミドリ: ミスも減りますよね。宛名間違いとか、連絡漏れとか。
タツヤ(confused): 実際、手作業でのヒューマンエラーは月2〜3件発生してるのが一般的。自動化すればそれがゼロになる。採用における企業の信頼性にも直結する話だよ。
まとめ:採用DXの第一歩はGASから
ミドリ: 今日の話をまとめるとどうなりますか?
タツヤ: GASを使えば、採用業務の事務作業の90%以上を自動化できる。しかもGoogle Workspace内で完結するから、新しいツールの導入コストも学習コストもゼロ。
ミドリ(smiling): 「採用管理システム(ATS)を導入するほどの規模じゃないけど、手作業は限界」っていう会社にぴったりですね。
タツヤ: まさにそう。月額数万円のATSを契約する前に、GASで同等のことができないか検討する価値は十分ある。特に年間採用50名以下の企業なら、GASで十分だよ。
ミドリ: まずはどこから始めればいいですか?
タツヤ: 3ステップで進めよう。
- 応募フォーム + 管理スプレッドシート + 自動返信メール — これだけで即日効果が出る
- 面接日程の自動調整 — カレンダー連携を追加。最大の時間削減ポイント
- 評価シート・合否通知・入社手続き — 段階的に自動化の範囲を広げる
次のアクション
採用業務の自動化を始めましょう。
- 現在の採用フローを書き出して、手作業で行っている業務をリストアップする
- Google Formsで応募フォームを作成し、スプレッドシートへの自動連携を設定する
- GASによる採用業務自動化の設計・構築サポートは、Shimanto AI SolutionsのGAS自動化コンサルティングへ