業務自動化

美容サロンの再来率UP!GASで施術履歴管理と次回予約リマインドを自動化する方法

美容 の業務自動化レシピ
業種美容
ツールGoogle Apps Script (GAS)
難易度★★☆ 中
設定時間約 90 分

美容サロンの施術履歴と次回予約を、Googleスプレッドシートで一元管理します。GASで予約前の通知を自動化し、記録漏れや来店忘れを減らす仕組みを、約90分で作る方法を紹介します。

読了時間:約12分

📌 この記事のポイント

編集長の見解: 高価な予約管理システムを導入する前に、GASとLINE WORKSで小さく試す方法があります。まず施術履歴と次回予約を同じ表で管理し、通知の送信結果を自店のデータで確認しましょう。無料で始められる場合でも、個人情報の管理と公式仕様の確認は必要です。


🎯 施術履歴と次回予約を管理する理由

美容サロンでは、初回来店後の顧客に再来店してもらう仕組みが重要です。

再来店率の数字は自店の確認を優先

美容業界では、新規顧客の再来店率が40%程度という経験則が語られることがあります。ただし、この数値は特定の一次情報源に基づくものではありません。地域、メニュー、価格帯、来店目的で結果は変わります。

そのため、記事内の数値は自店の実績を判断する基準ではなく、確認を始めるきっかけとして扱います。まずは直近3か月の新規顧客数と再来店数を集計しましょう。

再来店が1回増えると、新規顧客を広告で獲得する場合とは異なる改善効果が見込めます。実際の効果額は、客単価や来店頻度によって異なります。

手作業で起きやすい問題

紙や記憶に頼った管理には、次のような問題があります。

管理方法起きやすい問題経営への影響
紙のカルテ記入漏れ、紛失、検索に時間がかかるカウンセリングの質が下がり、顧客を待たせる
記憶頼み担当者しか情報を把握していない引き継ぎが難しくなる
表計算ソフトの個別管理更新が分散し、重複入力が起きる情報の鮮度が下がる

特に注意したいのが、次回予約の通知漏れです。予約が1〜3か月先になると、顧客もスタッフも予定を確認しにくくなります。

リマインド送信で期待できること

予約前の通知には、次の効果が期待されます。ただし、これらは一般的なマーケティング知見であり、特定の調査事例を示すものではありません。効果を断定せず、自店の送信数やキャンセル数で検証してください。

通知は顧客との関係を補助する手段です。次は、導入に必要なものを確認します。


🔧 準備するものと費用

この仕組みは、次の3つで始められます。LINE WORKSのBot APIなどはプラン条件が変わる可能性があるため、契約前に公式情報を確認してください。

必要なもの費用の目安用途
Googleアカウント無料スプレッドシートとGASの実行環境
LINE WORKSアカウント無料プランあり顧客への通知送信
パソコンと通信環境既存環境を利用初期設定と運用

Googleアカウント

GASを使うにはGoogleアカウントが必要です。GmailやGoogleドライブを利用している場合は、そのアカウントを使えます。

スタッフ間で共有する場合は、アカウントの共有ではなく、必要なメンバーに権限を付与してください。顧客情報を扱うため、公開設定には注意が必要です。

LINE WORKSアカウント

LINE WORKSは、業務向けの連絡サービスです。料金や利用人数はプランによって異なります。最新の料金と機能は、LINE WORKS公式サイトで確認してください。

小規模サロンでは、次のような始め方が考えられます。

無料プランでBot APIが利用できるかは、契約プランや最新仕様によって異なる場合があります。導入前に、必ずLINE WORKSの公式ドキュメントで確認してください。

スプレッドシートの設計

次の3シートを1つのスプレッドシートに作成します。

顧客情報シート

列例説明
顧客IDC001顧客を識別する番号
顧客名田中 美咲顧客名
電話番号090-1234-5678連絡先
LINE WORKS IDtanaka.misaki通知先ID
初回来店日2026/04/01初回来店日
累計来店回数3来店回数

施術履歴シート

列例説明
顧客IDC001顧客情報と紐づけるID
施術日2026/05/15施術日
施術内容カット・カラー施術の種類
使用薬剤A社カラー 7N薬剤やカラー
施術者佐藤担当スタッフ
次回予約日2026/07/15次回予約日
メモハイライト希望要望や特記事項

予約管理シート

列例説明
予約IDR001予約を識別する番号
顧客IDC001顧客情報と紐づけるID
予約日2026/07/15予約日
予約時間10:00予約時間
施術内容カット・カラー予約内容
リマインド送信済みFALSE送信済みかどうか
ステータス確定確定、キャンセル、完了など

個人情報は必要な範囲だけ登録し、共有権限を絞ります。準備ができたら、次は処理を実装します。


⚙️ GASで自動化する仕組み

ここでは、次の2つを実装します。

  1. 施術履歴をスプレッドシートに記録する
  2. 予約日が近い顧客を抽出して通知する

スプレッドシートとGASの準備

Googleスプレッドシートに「顧客情報」「施術履歴」「予約管理」の3シートを作成します。

次に、スプレッドシートの「拡張機能」から「Apps Script」を開きます。初回実行時は、Googleアカウントの権限確認が表示されます。

施術履歴を記録するコード

function recordTreatment(customerId, treatmentDate, treatmentContent, productsUsed, staffName, nextAppointmentDate, memo) {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const historySheet = ss.getSheetByName('施術履歴');

  const newRow = historySheet.getLastRow() + 1;

  historySheet.getRange(newRow, 1, 1, 7).setValues([[
    customerId,
    treatmentDate,
    treatmentContent,
    productsUsed,
    staffName,
    nextAppointmentDate,
    memo
  ]]);

  updateCustomerVisitCount(customerId);
}

この関数は、施術後に手動で呼び出すか、フォームなどの入力処理から呼び出します。updateCustomerVisitCount は別途実装が必要です。

予約日の近い顧客を抽出するコード

function extractUpcomingAppointments() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const appointmentSheet = ss.getSheetByName('予約管理');
  const customerSheet = ss.getSheetByName('顧客情報');

  const appointmentData = appointmentSheet.getDataRange().getValues();
  const customerData = customerSheet.getDataRange().getValues();

  const customerMap = {};

  for (let i = 1; i < customerData.length; i++) {
    const customerId = customerData[i][0];

    customerMap[customerId] = {
      name: customerData[i][1],
      lineWorksId: customerData[i][3]
    };
  }

  const today = new Date();
  today.setHours(0, 0, 0, 0);

  const reminderTargets = [];

  for (let i = 1; i < appointmentData.length; i++) {
    const appointmentId = appointmentData[i][0];
    const customerId = appointmentData[i][1];
    const appointmentDate = new Date(appointmentData[i][2]);
    const reminderSent = appointmentData[i][5];
    const status = appointmentData[i][6];

    if (!reminderSent && status === '確定') {
      const daysUntilAppointment = Math.ceil(
        (appointmentDate - today) / (1000 * 60 * 60 * 24)
      );

      if (daysUntilAppointment === 7 || daysUntilAppointment === 1) {
        const customer = customerMap[customerId];

        if (customer) {
          reminderTargets.push({
            appointmentId,
            customerName: customer.name,
            lineWorksId: customer.lineWorksId,
            appointmentDate,
            daysUntil: daysUntilAppointment
          });
        }
      }
    }
  }

  return reminderTargets;
}

この例では、予約日の7日前または1日前の予約を抽出します。7日前と1日前の両方で送信する場合は、送信済みフラグを1つではなく、送信日ごとに管理してください。

トリガーを設定する

GASのトリガー機能を使うと、処理を定期実行できます。

設定項目設定値
実行する関数sendReminders
実行する時間午前9時〜10時
頻度日次タイマー
通知エラー発生時のみ

GASの時間主導トリガーは、指定した時間帯の中で実行されます。毎朝9時ちょうどの実行を保証するものではありません。

仕組みができたら、次はLINE WORKSへの送信設定です。


💬 LINE WORKSへ通知を送る

Bot APIの設定

LINE WORKSでBot APIを使う場合は、管理画面でBotを作成し、必要な認証情報を発行します。画面名や認証方式は変更される可能性があるため、公式ドキュメントを確認してください。

一般的には、次の情報を使います。

認証情報はコードに直接書かず、GASのスクリプトプロパティに保存します。共有シートや公開リポジトリには記載しないでください。

メッセージ送信コード

エンドポイントや認証方式は、LINE WORKS公式APIドキュメントの最新仕様に合わせてください。

function sendLineWorksMessage(lineWorksId, message) {
  const accessToken = PropertiesService
    .getScriptProperties()
    .getProperty('LINE_WORKS_ACCESS_TOKEN');

  const botId = PropertiesService
    .getScriptProperties()
    .getProperty('LINE_WORKS_BOT_ID');

  const url =
    'https://www.worksapis.com/v1.0/bots/' +
    botId +
    '/users/' +
    lineWorksId +
    '/messages';

  const payload = {
    content: {
      type: 'text',
      text: message
    }
  };

  const options = {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer ' + accessToken
    },
    payload: JSON.stringify(payload),
    muteHttpExceptions: true
  };

  const response = UrlFetchApp.fetch(url, options);
  const responseCode = response.getResponseCode();

  if (responseCode < 200 || responseCode >= 300) {
    logError('LINE WORKS送信エラー', response.getContentText());
    return false;
  }

  return true;
}

通知文の例

顧客名や予約日時を差し込んで通知します。

function sendReminders() {
  const reminderTargets = extractUpcomingAppointments();

  for (const target of reminderTargets) {
    const appointmentDate = Utilities.formatDate(
      target.appointmentDate,
      'Asia/Tokyo',
      'yyyy/MM/dd'
    );

    const daysLabel = target.daysUntil === 7 ? '1週間後' : '明日';

    const message =
      'こんにちは、' + target.customerName + '様。\n\n' +
      '次回ご予約の' + daysLabel + '前になりましたので、ご案内します。\n\n' +
      '予約日: ' + appointmentDate + '\n' +
      'ご予約内容: 予約管理シートの内容をご確認ください。\n\n' +
      '変更やキャンセルがある場合は、サロンまでご連絡ください。';

    const success = sendLineWorksMessage(
      target.lineWorksId,
      message
    );

    if (success) {
      markReminderSent(target.appointmentId);
    }
  }
}

通知文は、顧客が返信や変更連絡をしやすい内容にします。実際の送信前に、テスト用アカウントで表示を確認してください。

送信失敗時のログ

function logError(errorType, errorMessage) {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const logSheet = ss.getSheetByName('エラーログ');

  const newRow = logSheet.getLastRow() + 1;

  logSheet.getRange(newRow, 1, 1, 3).setValues([[
    new Date(),
    errorType,
    errorMessage
  ]]);
}

エラーの発生日時、種類、内容を記録すると、原因を調べやすくなります。

function sendErrorAlert(errorType, errorMessage) {
  const recipient = Session.getActiveUser().getEmail();
  const subject = '【美容サロン自動化】エラー発生: ' + errorType;
  const body =
    '以下のエラーが発生しました。\n\n' +
    errorMessage;

  MailApp.sendEmail(recipient, subject, body);
}

送信処理の実装後は、テストと運用ルールを整えます。


📅 導入から定着までの運用フロー

中小規模のサロンでは、代表者1名と少数の顧客で始めると、問題を見つけやすくなります。

💡 導入のポイント: 最初から全機能を作り込まず、予約通知だけを小さく試します。送信結果と顧客からの反応を確認してから、施術履歴の項目を増やしましょう。

導入初週のセットアップ手順
Day 1: スプレッドシートを作成

顧客情報、施術履歴、予約管理の3シートを作成します。まずは少数の顧客データで始めます。

Day 2: GASを設定

コードを追加し、スクリプトプロパティにLINE WORKSの認証情報を登録します。

Day 3: テスト送信

テスト用の予約を登録し、通知の宛先、日時、文面を確認します。

Day 4: トリガーを設定

日次トリガーを設定します。最初の1週間は、実行履歴を毎日確認します。

Day 5〜7: スタッフへ共有

施術後の入力手順と、入力内容の確認方法をスタッフに共有します。

スタッフが守る入力ルール

自動化の効果は、元データの正確さに左右されます。次のルールを決めてください。

  1. 施術後に記録する: その日のうちに施術内容を入力します
  2. 予約日を登録する: 次回予約が決まった時点で予約管理シートに入力します
  3. IDを確認する: LINE WORKS IDの入力ミスを防ぎます

施術履歴は単なる記録ではありません。前回の施術内容を確認できれば、次回のカウンセリングで具体的な提案ができます。

月次で効果を確認する

導入後は、次の成果指標を毎月確認します。

指標計算方法見直し方
再来店率再来店した顧客数 ÷ 新規顧客数通知時期や接客内容を確認
次回予約率次回予約を設定した顧客数 ÷ 施術完了顧客数予約提案の方法を見直す
無断キャンセル率無断キャンセル数 ÷ 総予約数通知文と送信時期を確認
通知成功率成功数 ÷ 送信試行数IDとAPI設定を確認

通知によるキャンセル率低下や満足度向上は、一般的な知見として期待されるものです。自店での効果を断定せず、導入前後の数字を比較してください。

改善サイクルを回すことで、サロンに合う通知のタイミングが見つかります。次は、運用で起きやすい失敗を確認します。


⚠️ 失敗しやすい3つのパターン

パターン1: API仕様変更で送信が止まる

LINE WORKSのAPIは、認証方式やエンドポイントが変更される可能性があります。

原因: 公式情報を確認せず、古いコードを使い続けることです。

回避策:

  1. LINE WORKSの開発者向け情報を定期的に確認する
  2. エラーログを確認する
  3. 送信失敗時のメール通知を設定する

パターン2: 顧客情報の入力漏れ

予約管理シートに入力漏れがあると、通知対象から外れる場合があります。

原因: 施術後や予約確定時の入力が、担当者の記憶に依存することです。

回避策:

  1. 入力を施術フローの必須手順にする
  2. 未入力の予約を確認するチェック処理を作る
  3. 毎週、予約管理シートを確認する

パターン3: GASの実行時間制限を超える

GASには1回の実行時間に制限があります。Googleアカウントの種類やGoogle Workspaceの契約によって上限が異なります。無料の個人アカウントでは、一般に1回あたり6分が目安です。最新の上限は、Google公式ドキュメントで確認してください。

原因: 顧客数や予約件数が増え、1回の処理量が大きくなることです。

回避策:

  1. 対象を分割して処理する
  2. 古いデータをアーカイブする
  3. データをまとめて取得し、読み書きの回数を減らす

⚠️ 注意: 実行時間の上限は、無料の個人アカウントとGoogle Workspaceで異なる場合があります。大規模な処理が必要になったら、公式仕様を確認して構成を見直してください。

APIと実行時間の制限を把握しておけば、運用停止のリスクを抑えられます。


❓ よくある質問

Q1: LINE WORKSの無料プランで使える範囲は?

LINE WORKSの料金と機能は、プランによって異なります。Bot APIの利用可否や上限も変わる可能性があるため、導入前に公式サイトと公式ドキュメントで最新情報を確認してください。

最初は代表者1名と少数の顧客でテストし、運用できることを確認してからスタッフを追加します。

Q2: 施術履歴の項目はどう設計する?

最低限、次の項目を用意します。

項目理由
顧客ID顧客情報との紐づけに必要
施術日来店頻度の確認に使う
施術内容顧客の好みを把握する
使用薬剤トラブル時の確認に使う
施術者引き継ぎや担当確認に使う
次回予約日通知処理に必要
メモ要望や注意点を残す

最初は項目を絞り、入力が定着してから増やします。

Q3: 予約システムと併用できる?

予約システムからCSVを出力できる場合は、スプレッドシートに取り込んで処理できます。CSVの自動取り込みには制限があるため、完全自動化には予約システム側のAPI連携が必要な場合があります。

Q4: セキュリティ面で注意することは?

次の対策を行ってください。

  1. 共有権限を絞る: 必要なスタッフだけにアクセス権を付与します
  2. 認証情報を分離する: APIトークンはスクリプトプロパティに保存します
  3. バックアップする: 定期的にデータを複製します
  4. 利用目的を確認する: 顧客への説明やプライバシー方針を確認します

Q5: 通知の頻度はどう設定する?

次の2段階が一例です。

時期内容目的
予約日の7日前予約内容の確認変更連絡の機会を作る
予約日の1日前翌日の来店確認来店忘れを防ぐ

この設定でキャンセル率が下がるとは限りません。顧客の反応と自店の数字を見ながら調整してください。

Q6: GASが動かなくなったら?

次の順に確認します。

  1. エラーログ: 記録されたエラー内容を確認します
  2. 実行履歴: GASエディタで失敗箇所を確認します
  3. API仕様: LINE WORKSの公式情報を確認します
  4. 認証情報: トークンの期限や設定を確認します

解決しない場合は、Google Apps ScriptやLINE WORKSの公式サポート情報を確認してください。


📚 参考情報・出典

参考情報URL内容
Google Apps Script公式ドキュメントhttps://developers.google.com/apps-scriptGASの構文、トリガー、API
LINE WORKS公式サイトhttps://line.worksmobile.com/jp/Bot API、料金、最新仕様
Google Apps Scriptの割り当てと上限https://developers.google.com/apps-script/guides/services/quotas実行時間などの制限
Googleスプレッドシートヘルプhttps://support.google.com/docs/シートの操作と共有設定

再来店率やリマインドの効果について、この記事では特定の調査結果として数字を提示していません。一般的な経験則やマーケティング知見として紹介し、導入後は自店のデータで確認してください。


まとめ:美容サロンが今日から始める予約通知

この記事では、GASとLINE WORKSを使い、施術履歴と次回予約を管理する方法を紹介しました。

  1. 施術履歴と予約情報を一元管理する
  2. 予約日の7日前と1日前に通知する
  3. APIの利用条件と実行時間の上限を確認する
  4. 導入前後の再来店率やキャンセル率を自店で比較する
  5. まず代表者1名と少数の顧客で試す

編集長の最終見解: この仕組みは、顧客との関係づくりを補助する小さな業務改善です。効果を断定せず、まずは1か月間、通知数や変更連絡、再来店状況を記録してください。結果を見ながら、通知文や運用方法を自店に合わせて調整しましょう。

次のステップとして、以下の記事も参考にしてください。


Mira / AI経営ラボ 編集長