エグゼクティブサマリ
結論: 既存スタック(Next.js + Supabase + Vercel)で MVP は 2〜3 週間、フル機能は 2〜3 ヶ月で内製化可能。hacomono 全機能は不要で、予約マホウ相当 + 必要最小(hacomono の 3〜4 割の機能で 9 割の業務をカバー)が現実的。
月額コスト試算 = 約 ¥7,000〜10,000(hacomono ¥35k+ / 予約マホウ ¥6.5k+ より安価かつ データ完全自社所有)。
推奨アプローチ: Phase 1 = MVP(予約 + LINE 通知 + CSV インポート)/ Phase 2 = カルテ + 回数券 + リマインダー/ Phase 3 = 決済 + セグメント配信。
並行運用: Phase 1 中は hacomono 解約せず、新規顧客のみ新システムへ。Phase 2 完了で hacomono 解約へ。
1予約マホウの機能マップ
1-1. 機能カテゴリ別(クローン対象)
| カテゴリ | 主要機能 |
| 予約 | LINE/WEB 24h 予約 / 指名 / キャンセル待ち / 隙間ナシ予約 / 当日予約制御 / 営業時間外 ON-OFF |
| 管理 | メニュー(料金・所要時間)/ シフト / 複数店舗 / 顧客 CSV / カルテ(来店履歴・写真・アレルギー) |
| 決済 | カード事前決済(5.5%)/ 月謝自動課金 / 回数券残数自動 / 失敗時 LINE 通知 |
| 集客 | セグメント配信(最終来店日 × 日数 / 誕生日月 / 当日空き)/ リマインド / 1対1 LINE / 問診票 |
| 会員 | LINE デジタル会員証 / ランク別ポイント(0.5〜7%)/ 多店舗共通ポイント / 失効通知 |
1-2. 価格プラン(参考)
| プラン | 月額 | 予約上限 |
| 朝霧(無料デモ) | ¥0 | 100 |
| 朝焼け | ¥1,820 | 200 |
| 夕焼け | ¥4,300 | 500 |
| 月光 | ¥8,700 | 1,000 |
| 星光 | ¥12,400 | 2,000 |
| 極光 | ¥24,800 | 5,000 |
必須/推奨オプション: LINE 連携 ¥2,200/月、カルテ ¥3,300/月、デジタル会員証 ¥5,500/月、セグメント配信 ¥5,500/月 → 実運用は 月 ¥6,500〜¥18,000。
2hacomono 現状把握
2-1. 機能と価格
| 項目 | 金額 |
| 初期費用 | ¥150,000 |
| 基本(1,000 名まで / 店舗) | ¥35,000/月 |
| クレジット決済 | ¥5,000/月 |
| 口座振替 | ¥5,000/月 |
| スクール管理 | ¥10,000/月 |
| データ経営パック | ¥8,000/月 |
| QR 入退館 | ¥14,000〜27,500/月 |
| 決済手数料 | 2.59〜3.3% |
複合導入で 月 ¥50,000+ 通り。1 店舗 1,000 名超で追加課金。
2-2. 不満・移行理由になりやすいポイント
| 課題 | 内容 |
| 高額オプション | 基本 + 決済 + スクールで月 ¥50k 突破 |
| 初期設定難度 | 機能豊富 → 外部支援必須レベルの複雑さ |
| カスタマイズ性 | 業界ニーズと合わず作り直しになった機能あり(スクール v1→v2) |
| データ出力制限 | 売上 CSV が月単位のみ → 半期分は複数回作業 |
| モバイルアプリなし | 顧客はブラウザログイン必須 |
| データ外部 hosting | AWS 東京リージョン。法対応 OK だが自社内には移せない |
移行時の最大の壁: クレジットカード情報・口座振替情報は 再登録必須(hacomono → 新システムへの直接移管不可)。既存会員に LINE で「移行のお願い + 新システム初回ログイン URL」を一斉送信し、本人にカード再登録してもらう導線が必要。
3内製化アーキテクチャ
3-1. 推奨スタック(既存資産流用)
[ LINE 公式アカウント ]
|- Messaging API (webhook 受信 / push 送信)
|- LIFF アプリ (予約フォーム / 確認 / カルテ閲覧)
|- リッチメニュー (予約 / 履歴 / キャンセル / 問い合わせ)
|
v
[ Next.js 15 (Vercel) ]
|- /api/line/webhook 署名検証 + イベント処理
|- /app/booking LIFF 内予約 UI
|- /app/admin スタッフ管理画面 (MFA)
|- /api/cron/reminder Vercel Cron 前日 09:00 リマインド
|- /api/stripe/webhook 決済イベント受信
|
v
[ Supabase (PostgreSQL + Auth + Storage) ]
|- users LINE User ID (pgcrypto 暗号化)
|- bookings 日時 / メニュー / スタッフ / 状態
|- schedules 営業時間 / 休業日 / シフト
|- services メニュー / 料金 / 所要時間
|- tickets 回数券 / 残回数 / 有効期限
|- patient_records カルテ (医療系は GL6.0)
|- audit_logs 全変更履歴
|- Storage 写真 / 同意書 PDF
3-2. データ所有・セキュリティの差別化
| 観点 | hacomono | 予約マホウ | 内製版 |
| データ所在 | hacomono 社 AWS | yoyaku-mahou 社 AWS | 自社 Supabase |
| 個人情報保護法 | 第三者提供(業務委託) | 同左 | 自社管理・第三者提供なし |
| GL6.0(医療) | 明記なし | P マークのみ | 自社で対応設計 |
| カード情報 | hacomono 経由 | 同左 | Stripe 直接 / 番号非保存 |
| LINE User ID | プラットフォーム経由 | 同左 | pgcrypto + RLS |
| 監査ログ | 外部出力不可 | 同左 | 自社 BI で分析可 |
| 退会時データ削除 | 方針依存 | 同左 | DELETE で完結 |
4実装フェーズ計画
Phase 1 — MVP(並行運用開始)
2〜3 週間
hacomono を解約せずに「LINE で予約が取れる新導線」を立ち上げる。新規顧客だけ新システムに流す。
- Supabase プロジェクト作成(Pro = ¥3,300/月)
- users / bookings / schedules / services テーブル + RLS
- LINE Developers でチャネル作成(Messaging API + LIFF)
- Webhook 署名検証エンドポイント実装
- LIFF 予約フォーム(メニュー → 日時 → 確定)
- 予約完了時の Flex Message 通知
- スタッフ管理画面(MFA / 予約一覧 / 確定・キャンセル)
- 顧客 CSV 一括インポート(hacomono CSV → 新)
- Vercel デプロイ + CSP / Security Headers
- Playwright E2E でモバイル予約フロー録画
Phase 2 — 業務移行(hacomono 解約準備)
4〜6 週間
- 前日 09:00 リマインド(Vercel Cron)
- キャンセル待ちロジック(空き発生時に自動通知)
- カルテ機能(来店履歴 / 写真 / アレルギー / 申し送り)
- 回数券残回数管理 + LINE への残数表示
- スタッフ指名 + 指名料計算
- 営業時間外予約 ON-OFF / 当日予約制御
- hacomono 機能パリティ確認表で必須機能の充足を検証
Phase 3 — 集客・販促(差別化)
4〜6 週間
- Stripe Checkout 連携(事前決済 / 月謝定期課金)
- セグメント配信(最終来店日 × 日数 / 誕生日月)
- LINE デジタル会員証(LIFF + バーコード)
- ポイント機能(ランク別付与率)
- 1 対 1 LINE チャット(管理画面でスタッフ応答)
- 問診票・同意書(既存 e-sign プロジェクトを流用)
- アンケート機能
5LINE 連携のセキュリティ要件
CRITICAL — Webhook 署名検証は JSON.parse 前の生 body で実行
この検証を怠ると、攻撃者が偽のメッセージを送って予約を改ざんしたり個人情報を抽出できる。
| 要件 | 実装 |
| Webhook 署名検証 | validateSignature(rawBody, channelSecret, signature) を JSON.parse 前 |
| User ID 暗号化 | pgcrypto で AES-256、復号は RLS 内 auth.uid() = user_id のみ |
| 通信暗号化 | HTTPS 必須、LIFF Endpoint は https のみ |
| PII 最小化 | 氏名 + 電話番号のみ。住所は訪問サービスのみ |
| Channel Secret 管理 | Vercel 環境変数 / .env.local / git 追跡禁止 |
| RLS | ユーザーは自分の予約のみ。スタッフは role='staff' で全件可 |
| 監査ログ | 予約作成 / キャンセル / カルテ更新時に audit_logs INSERT |
| Supabase Auth | 管理画面は MFA(TOTP)必須 |
主要コード骨格
// app/api/line/webhook/route.ts
import { validateSignature } from '@line/bot-sdk';
export async function POST(req: Request) {
const rawBody = await req.text(); // ★ JSON.parse 前
const signature = req.headers.get('x-line-signature') ?? '';
if (!validateSignature(
rawBody,
process.env.LINE_CHANNEL_SECRET!,
signature
)) {
return new Response('Unauthorized', { status: 403 });
}
const { events } = JSON.parse(rawBody);
for (const ev of events) {
if (ev.type === 'message') await handleMessage(ev);
if (ev.type === 'postback') await handlePostback(ev);
}
return new Response('OK');
}
6平田さんに事前確認したい 7 項目
| # | 質問 | 影響範囲 |
| 1 | 業種・対象顧客(医療 / 介護 / 一般) | GL6.0 対応の要否 |
| 2 | 店舗・スタッフ規模 | RLS 設計、シフト管理 |
| 3 | 既存 hacomono の使用機能(月謝 / 回数券 / 入退館 / POS) | Phase 2 のスコープ |
| 4 | 決済方式(現地払い / カード / 月謝 / 全部) | Stripe 設計、PCI-DSS 範囲 |
| 5 | 既存会員数(100 / 500 / 1,000+ 名) | Supabase プラン、CSV 工数 |
| 6 | LINE 公式アカウントの取得状況・プラン | Push 通数試算 |
| 7 | hacomono の契約期限・違約金条件 | 並行運用期間 |
次のアクション:
- 上記 7 項目を回答 → Phase 1 のスコープ確定
/init-project で ~/work/saas/yoyaku-internal/ を作成(カテゴリは商用 SaaS)
- Phase 1 着手前に
/plan で詳細実装プランを作成 → CEO/Eng レビュー
- Phase 1 完了で hacomono 並行運用テスト
- Phase 2 完了で hacomono 解約準備(CSV 移行 + カード再登録キャンペーン)
7既存資産の流用候補
| 既存プロジェクト | 流用できる部分 |
| saas/endai-system | Next.js + Supabase + RLS パターン、Vercel Cron、CSP/Headers |
| saas/e-sign | 同意書・問診票の電子署名フロー(Phase 3) |
| pwa-internal/bento_order_web | Firestore Rules の発想(Supabase RLS に置換) |
| saas/visitcare | 訪問サービスの予約 + 患者管理パターン |
| utils/csvUsers.ts | CSV 一括インポート(hacomono からの会員移行) |
ゼロから書くより 30〜50% の時間短縮 が見込める。
8主要参考リンク