美容室のスタッフ勤怠・指名予約データをGASで自動集計し、月次レポートをSlackに自動通知する方法
美容室の月次評価を、Google スプレッドシートと GAS(Google Apps Script)で集計し、Slack に通知する方法を紹介します。売上だけでなく、指名率・リピート率・勤怠を確認できるため、店長の集計作業を減らし、面談で話すべき内容を整理できます。
- 売上だけでなく、指名率・リピート率・勤怠を評価材料にする
- GAS で予約・売上・勤怠データを月次集計する
- Slack への通知で、月初のレポート共有を簡略化する
- 評価基準を定量・定性・成長の 3 本柱で整理する
- AI は評価の下書きに限り、最終判断は人が行う
編集長の見解: 美容室の評価は、売上だけでは判断できません。指名、再来店、勤怠、接客、育成を分けて確認すると、店長の印象だけに頼らない面談を進めやすくなります。まずは無料で使える Google スプレッドシートと GAS で、集計の土台を作るのが現実的です。
美容室のスタッフ評価が難しい理由
美容室の評価は、単純な売上順位だけでは決めにくいものです。技術、接客、集客、後輩育成など、役割がスタッフごとに異なるからです。
技術力・接客力・集客力を分けて見る
美容師には、施術の技術だけでなく、お客様との会話や再来店につなげる提案も求められます。技術が高くても新規の指名が少ない人や、接客が丁寧でも平均単価が伸びない人がいます。
売上だけを評価すると、アシスタント業務や店全体への貢献が見えにくくなります。シャンプー、カラー補助、開店準備、後輩指導も、店舗運営を支える重要な仕事です。
売上に表れにくい貢献を記録する
新人スタッフの売上が少なくても、貢献がないとは限りません。施術補助によって、スタイリストが多くのお客様を担当できる場合があるためです。
中堅スタッフも、売上だけでなく次回予約や店販の提案で貢献することがあります。見えにくい仕事を記録すると、面談で具体的に話せます。
店長の印象だけで決めるリスク
「あのスタッフは感じがよい」「前回は頑張っていた」という印象は、評価材料の一つです。ただし、それだけで評価を決めると、後から基準が分かりにくくなります。
評価項目と計算方法を先に決めると、スタッフが次の目標を立てやすくなります。最初から複雑にせず、指名率と勤怠など、確認しやすい項目から始めましょう。
編集部メモ: 最初からすべてを数値化する必要はありません。売上、指名、リピート、勤怠、接客のうち、まず 2 項目をそろえるだけでも、面談の根拠を作れます。
次は、評価項目を 3 本柱に分け、集計しやすい形に整えます。
評価制度を 3 本柱で設計する
評価項目は、定量的指標、定性的指標、キャリア成長の 3 本柱に分けると整理しやすくなります。最初は柱 1 だけ導入し、運用が安定してから項目を増やします。
柱 1: 定量的指標
予約システムや売上表から取得できる数字です。計算方法を先に決めておきます。
- 指名率: 指名予約数 ÷ 全予約数
- リピート率: 対象期間に再来店したお客様数 ÷ 前回利用者数
- 客単価: 担当売上 ÷ 担当客数
- 労働生産性: 売上 ÷ 労働時間
たとえば、月間売上が ¥2,500,000、スタッフが 4 名なら、単純平均は 1 人あたり ¥625,000 です。実際の評価では、勤務時間や管理業務も加味してください。
柱 2: 定性的指標
数字だけでは判断しにくい技術、接客、チーム貢献を確認します。5 段階のチェック表にすると、店長の感覚だけに偏りにくくなります。
- 技術力: 社内テスト、研修課題、施術記録
- 接客: アンケート、接客チェック、苦情対応
- チーム貢献: 後輩指導、清掃、開店準備、会議への参加
複数の評価者がいる場合は、店長と担当者の平均を使う方法もあります。評価者を増やしすぎると負担になるため、まずは店長と副店長など 2 名程度で試します。
柱 3: キャリア成長
短期売上に表れにくい学習や育成を記録します。本人が目標を決め、達成状況を月次または半年単位で振り返ります。
- 目標達成: 技術試験、指名数、店販提案など
- スキル習得: 研修受講、練習会、社内テスト
- 後輩育成: 指導時間、フィードバック回数、担当範囲
| 柱 | 指標例 | データの記録先 | 導入時期 | 編集部の評価 |
|---|---|---|---|---|
| 定量的指標 | 売上、指名率、リピート率、勤怠 | 予約表、売上表、勤怠表 | 最初 | まず導入 |
| 定性的指標 | 技術、接客、チーム貢献 | チェック表、フォーム | 3〜6 か月後 | 運用しやすい |
| キャリア成長 | 目標、研修、後輩育成 | 面談記録、研修履歴 | 半年〜1 年後 | 長期向け |
導入のヒント: 最初の 1 か月は、売上・指名率・勤怠の 3 項目だけに絞ります。運用できたら、接客や育成の記録を加えると、入力作業が増えすぎません。
評価項目が決まったら、次は面談準備やコメント作成を効率化します。
AI を評価業務の下書きに使う
毎月の評価では、数値の確認に加えてコメント作成や面談準備も必要です。AI を下書き作成に使えば、店長は内容の確認と本人との対話に時間を使えます。
評価コメントの下書きを作る
GAS で集計した売上、指名率、リピート率、勤怠を、ChatGPT などに入力します。個人名や顧客名は削除し、必要最小限の情報だけを使ってください。
あなたは美容室の店長です。以下の情報をもとに、スタッフへの評価コメントの下書きを 200 字で作成してください。
- スタッフ ID: A-001
- 売上: ¥850,000(前月比 +8%)
- 指名率: 72%(店舗平均 65%)
- リピート率: 68%(店舗平均 60%)
- 勤怠: 出勤 22 日、遅刻 0 回、欠勤 0 回
- 今月の目標: カラー新技法の習得、達成
条件:
1. 数字に基づく事実を先に書く
2. 達成した点を 1 つ示す
3. 次月の改善提案を 1 つ示す
4. 断定的な人格評価や、事実にない内容を入れない
AI の出力は、文章のたたき台です。店長が元データと照合し、表現を調整してから使います。
面談の準備を短縮する
面談記録をスプレッドシートに保存しておくと、前回の内容を振り返りやすくなります。AI に渡す場合は、本人の同意や社内ルールを確認し、個人を特定できる情報を減らしてください。
AI には、次のような整理を依頼できます。
- 前回面談の要点を 3 行でまとめる
- 目標の達成状況を整理する
- 次回面談で確認する質問を 3 つ出す
フィードバック文を整える
フィードバックは、「事実」「評価」「次の期待」の順にすると伝わりやすくなります。AI に構成を整えさせても、最終的な伝え方は店長が判断します。
注意: AI に人事評価を決定させないでください。出力には誤りや偏った表現が含まれる可能性があります。最終判断は店長またはオーナーが行い、本人への説明も人が担当します。
次は、月次データを集計し、Slack に通知する手順を確認します。
GAS で月次レポートを作る
ここでは、Google スプレッドシート、GAS、Slack を使った基本構成を説明します。設定時間は、データの準備を含めて約 120 分です。
ステップ 1: スプレッドシートを作る(20 分)
次の 3 シートを作成します。
| シート名 | 役割 | 主な列 |
|---|---|---|
raw_reservations | 予約・売上の元データ | 予約日、スタッフ ID、指名フラグ、売上、客単価 |
raw_attendance | 勤怠の元データ | 日付、スタッフ ID、出勤、退勤、遅刻、欠勤 |
monthly_report | 月次集計結果 | スタッフ ID、売上、指名率、リピート率、勤怠評価 |
1 行目を見出しにし、2 行目以降へデータを入力します。氏名を使う場合は、アクセス権限を限定してください。
ステップ 2: 集計スクリプトを作る(40 分)
スプレッドシートに紐づく Apps Script を開き、次のコードを貼り付けます。サンプルは売上と指名率の集計です。リピート率と勤怠評価は、店舗の定義に合わせて追加します。
function aggregateMonthlyReport() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const reservationsSheet = ss.getSheetByName('raw_reservations');
const reportSheet = ss.getSheetByName('monthly_report');
if (!reservationsSheet || !reportSheet) {
throw new Error('必要なシートが見つかりません。');
}
const reservations =
reservationsSheet.getDataRange().getValues();
const staffStats = {};
for (let i = 1; i < reservations.length; i += 1) {
const [date, staffId, isDesignated, sales] = reservations[i];
if (!staffId) {
continue;
}
if (!staffStats[staffId]) {
staffStats[staffId] = {
sales: 0,
designated: 0,
total: 0
};
}
staffStats[staffId].sales += Number(sales) || 0;
staffStats[staffId].total += 1;
if (isDesignated === 'TRUE' || isDesignated === true) {
staffStats[staffId].designated += 1;
}
}
const output = [
['スタッフ ID', '売上', '指名率', 'リピート率', '勤怠評価']
];
Object.keys(staffStats).forEach((staffId) => {
const stats = staffStats[staffId];
const designatedRate = stats.total > 0
? `${(stats.designated / stats.total * 100).toFixed(1)}%`
: '0.0%';
output.push([
staffId,
stats.sales,
designatedRate,
'未集計',
'未集計'
]);
});
reportSheet.clearContents();
reportSheet
.getRange(1, 1, output.length, output[0].length)
.setValues(output);
}
このコードは、予約データの空行を無視し、指名率が 0 件でもエラーにならないようにしています。実際の運用では、対象月の判定やリピートの定義も追加してください。
ステップ 3: Slack 通知を設定する(20 分)
Slack の Incoming Webhook を用意し、GAS のスクリプトプロパティに保存します。Webhook URL はソースコードに直接書きません。
function notifySlack() {
const webhookUrl =
PropertiesService.getScriptProperties()
.getProperty('SLACK_WEBHOOK_URL');
if (!webhookUrl) {
throw new Error('SLACK_WEBHOOK_URL が設定されていません。');
}
const ss = SpreadsheetApp.getActiveSpreadsheet();
const reportSheet = ss.getSheetByName('monthly_report');
const report = reportSheet.getDataRange().getValues();
let message = ':bar_chart: *今月の月次レポート*\\n\\n';
for (let i = 1; i < report.length; i += 1) {
const [staffId, sales, designatedRate, repeatRate, attendance] =
report[i];
message += `• *${staffId}*: 売上 ¥${Number(sales).toLocaleString()} / 指名率 ${designatedRate} / 勤怠 ${attendance}\\n`;
}
UrlFetchApp.fetch(webhookUrl, {
method: 'post',
contentType: 'application/json',
payload: JSON.stringify({ text: message })
});
}
全スタッフの評価情報を一つのチャンネルへ送ると、他スタッフの情報まで見える可能性があります。個人情報保護の観点から、管理者限定チャンネルや個別通知を検討してください。
ステップ 4: トリガーを設定する(10 分)
GAS のトリガー画面で、次の設定を行います。
- 関数:
aggregateMonthlyReport - イベント: 時間主導型
- 種類: 月ベースのタイマー
- 日: 1 日
- 時刻: 9:00〜10:00
集計後に通知するには、集計と通知を順番に呼び出す関数を作る方法が分かりやすいです。
function runMonthlyReport() {
aggregateMonthlyReport();
notifySlack();
}
トリガーの関数を runMonthlyReport に変更し、初回は手動で実行して権限を承認します。
ステップ 5: 動作確認と運用ルールを決める(30 分)
最後に、テストデータで一連の動作を確認します。
- 空行や欠損値を含むデータで集計する
- 指名率 0 件のスタッフでもエラーにならないか確認する
- Slack に届く内容と閲覧範囲を確認する
- 数値の定義と評価への反映方法を文書化する
- 本人へ説明する評価項目とタイミングを決める
失敗パターン: 欠損値や空行を想定しないコードは、月途中の実行で止まることがあります。実データを入れる前に、空欄、数値以外の文字、スタッフ ID の誤りを含むテストを行ってください。
費用の目安: Google スプレッドシートと GAS は、既存の Google アカウントで使える範囲なら追加費用なしで始められます。Slack も無料プランがありますが、履歴保存や管理機能はプランによって異なります。利用前に各サービスの料金と機能を確認してください。
次は、個人情報と評価制度を安全に運用するための注意点です。
法律・運用面で注意すること
勤怠や評価のデータは、スタッフの働き方に関わる情報です。閲覧範囲、保存期間、評価への使い方を事前に決めておきます。
顧客情報とアクセス権限を管理する
予約データに顧客名や来店履歴が含まれる場合、評価集計に不要な情報は取り込まないでください。スプレッドシートは店長やオーナーなど、必要な人に限定して共有します。
Slack 通知には、顧客名や詳細な施術履歴を載せない運用が安全です。スタッフ別の評価を送る場合も、閲覧者を限定してください。
評価基準を先に説明する
評価項目、計算方法、面談時期を、就業規則や評価規程などに整理します。制度を変更するときは、スタッフへの説明と必要な手続きを行ってください。
労務上の判断が関わる場合は、社会保険労務士などに相談すると、店舗の状況に合った運用を検討しやすくなります。
AI の出力をそのまま使わない
AI が作った評価コメントには、誤った事実や不適切な表現が含まれる可能性があります。元データと照合し、店長が修正してから本人へ伝えてください。
法的注意: 個人情報の扱いや評価制度の変更には、店舗の契約や就業規則が関わります。個別の判断は、社会保険労務士や弁護士などの専門家へ確認してください。
次は、売上と人件費を組み合わせた、実際の評価シナリオを見ていきます。
人件費と売上を組み合わせた評価シナリオ
売上だけでなく、人件費と労働時間を合わせて見ると、店舗運営の状況を把握しやすくなります。ただし、この数字だけでスタッフの価値を決めないことが重要です。
試算の前提
- スタッフ 4 名(店長 1 名、スタイリスト 3 名)
- 月間売上: ¥2,500,000
- 人件費: 月 ¥1,100,000
- 営業時間: 10:00〜20:00、月 22 日
- 1 日あたりの総労働時間: 約 32 時間
計算例
- 1 人あたり売上: ¥2,500,000 ÷ 4 名 = ¥625,000
- 1 時間あたり売上: ¥2,500,000 ÷ 704 時間 = 約 ¥3,551
- 人件費率: ¥1,100,000 ÷ ¥2,500,000 = 44%
1 日あたりの総労働時間は、4 名が 1 日 8 時間働く前提で 32 時間です。月 22 日なら、月間総労働時間は 704 時間になります。勤務実態や休憩時間によって変わるため、実データで置き換えてください。
| スタッフ | 売上 | 労働時間 | 1 時間あたり売上 | 人件費(推定) | 人件費率 | 編集部の見方 |
|---|---|---|---|---|---|---|
| A(店長) | ¥900,000 | 176 時間 | 約 ¥5,114 | ¥320,000 | 36% | 管理業務も含めて確認 |
| B(中堅) | ¥750,000 | 168 時間 | 約 ¥4,464 | ¥280,000 | 37% | 主力として確認 |
| C(若手) | ¥550,000 | 176 時間 | 約 ¥3,125 | ¥240,000 | 44% | 育成状況も確認 |
| D(新人) | ¥300,000 | 168 時間 | 約 ¥1,786 | ¥220,000 | 73% | 成長目標と併せて確認 |
編集部メモ: 新人の人件費率が高くても、直ちに「貢献が低い」とは判断できません。研修、接客、補助業務、今後の成長を合わせて確認し、半年後の目標を本人と話し合いましょう。
評価会議で話す内容
- 店長: 管理、教育、採用への貢献を別項目で確認する
- 中堅スタッフ: 指名率とリピート率の維持状況を確認する
- 若手スタッフ: 客単価や店販提案など、次の目標を決める
- 新人スタッフ: 研修、勤怠、補助業務、習得状況を確認する
労働生産性は店舗運営を見るための材料です。スタッフの評価には、勤怠、成長、チームへの貢献も加えてください。
次は、導入前に確認したい質問へ回答します。
よくある質問
Q1. 予約システムが CSV 出力に対応していない場合は?
まずはサービス提供企業へ、CSV 出力やデータ連携の可否を確認します。対応していなければ、Google フォームで必要な項目を入力する方法もあります。API 連携を使う場合は、仕様と利用料金を確認してから設計してください。
Q2. 勤怠データはどのように取得しますか?
紙の出勤簿を使っている場合は、Google フォームで出勤、退勤、遅刻、欠勤を入力する方法が低コストです。勤怠管理サービスを使っている場合は、出力した CSV を raw_attendance シートへ取り込みます。
Q3. Slack の Webhook URL はどこで取得しますか?
Slack のアプリ設定から Incoming Webhooks を有効にして取得します。ワークスペースによっては管理者の承認が必要です。URL は秘密情報のため、GAS のスクリプトプロパティに保存し、コードへ直接書かないでください。
Q4. 評価会議の頻度はどのくらいが適切ですか?
月 1 回の短い振り返りと、年 2 回の本評価を組み合わせる方法があります。月次では数値を確認し、半年ごとに接客、育成、キャリア目標を話し合うと運用しやすくなります。
Q5. スタッフに評価データをどこまで公開しますか?
本人の評価データは、評価項目と根拠を含めて説明できる状態にします。他スタッフのデータは閲覧させないでください。Slack では全体チャンネルを避け、管理者限定または個別通知を検討します。
Q6. AI による評価コメント作成には、どのサービスを使えばよいですか?
ChatGPT や Claude など、文章作成に使えるサービスがあります。料金や入力データの扱いはサービスごとに異なります。個人情報を入力しないこと、店舗のルールに合うことを確認して選んでください。
Q7. 導入後に運用が止まった場合は?
最初から全スタッフ分を自動化せず、1〜2 名で 1 か月試します。集計結果、入力負担、面談での使いやすさを確認してから対象を広げると、修正しやすくなります。
運用のヒント: 月 1 回、「入力に時間がかかりすぎないか」「評価項目が重複していないか」「スタッフが根拠を理解できるか」を確認してください。制度は、現場の声を反映しながら調整します。
次は、明日から始めるための手順をまとめます。
まとめ
美容室のスタッフ評価は、売上だけでなく、指名、リピート、勤怠、接客、成長を分けて見ると、面談の根拠を整理しやすくなります。GAS と Google スプレッドシートを使えば、既存の Google アカウントで集計の仕組みを試せます。
明日から始める 3 ステップ
- シートを作る: 元データ 2 枚と月次レポート 1 枚を用意する
- 集計を試す: テストデータで売上と指名率を確認する
- 通知を試す: Slack の閲覧範囲を決め、テスト通知を送る
評価制度を段階的に整える
- 最初: 売上、指名率、勤怠を記録する
- 3〜6 か月後: 接客、技術、チーム貢献をチェック表にする
- 半年〜1 年後: 目標、研修、後輩育成を面談に加える
AI は下書きに限定する
AI に評価コメントの文章構成を作らせると、店長の準備を助けられます。ただし、元データとの照合、表現の確認、本人への説明は人が行ってください。
運用前に確認すること
- 個人情報: 不要な顧客情報を取り込まず、閲覧者を限定する
- 評価基準: 計算方法と面談時期を文書化する
- サービス費用: Google、Slack、予約・勤怠サービスの料金を確認する
- 専門家確認: 労務や個人情報の判断が必要なら専門家へ相談する
編集長からのメッセージ: 最初から完璧な評価制度を作る必要はありません。まずは 1 か月分の売上、指名率、勤怠を集計し、面談で使えるかを確かめてください。店長の作業時間とスタッフの納得感を見ながら、少しずつ項目を増やしていきましょう。
Mira / AI経営ラボ 編集長