LINE CRM 引き継ぎ資料

作成日: 2026-03-26 | プロジェクト: C:\Users\kawag\work\line-crm

1. プロジェクト概要

目的: L-step(月額21,780円〜)/ Utage(月額17,600円〜)の代替として、LINE公式アカウントのCRM/マーケティングオートメーションを自前で無料運用する。

対象: 医療・訪問リハビリ施設(患者・ご家族へのステップ配信・休み連絡・受診リマインド)

57
ソースファイル数
21
APIルート
9
管理画面ページ
12
DBテーブル

2. 技術スタック

レイヤー技術バージョン / 備考
フロントエンドNext.js (App Router)16.2.1
UIコンポーネントshadcn/ui + Tailwind CSSv4
DBSupabase (PostgreSQL)@supabase/supabase-js + @supabase/ssr
LINE連携LINE Messaging API@line/bot-sdk
グラフrechartsv3.8
ホスティングVercelHobbyプラン
スタッフ通知Slack WebhookLINE Notify終了のため
定期実行外部Cron + Vercel CronHobby=1日1回制限

3. ディレクトリ構造

line-crm/
├── app/
│   ├── api/
│   │   ├── webhook/line/route.ts      # LINE Webhook(署名検証+イベント処理)
│   │   ├── cron/step-delivery/route.ts # ステップ配信Cron
│   │   ├── friends/                    # 友だちCRUD (5ルート)
│   │   ├── tags/route.ts              # タグCRUD
│   │   ├── scenarios/                  # シナリオCRUD (5ルート)
│   │   ├── broadcasts/                 # 一斉配信CRUD+送信 (4ルート)
│   │   ├── auto-replies/route.ts      # 自動応答CRUD
│   │   ├── rich-menus/route.ts        # リッチメニューCRUD
│   │   ├── absences/                   # 休み連絡 (3ルート)
│   │   └── analytics/route.ts         # 分析データ
│   └── dashboard/                      # 管理画面 (9ページ)
├── lib/
│   ├── supabase/ (client.ts, server.ts)
│   ├── line/ (client.ts, webhook.ts, messages.ts, event-handlers.ts)
│   ├── scheduler.ts                    # ステップ配信エンジン
│   ├── slack.ts                        # Slack通知
│   └── types.ts                        # 全型定義
├── components/ (sidebar.tsx + shadcn/ui)
├── supabase/migrations/001_initial.sql
└── vercel.json                         # Cron設定

4. Phase別実装内容

Phase内容状態
1プロジェクト初期化(スキーマ・型定義・SDK・レイアウト)完了
2LINE Webhook(follow/unfollow/message/postback・休み連絡フロー)完了
3ステップ配信スケジューラ + Cronエンドポイント完了
4友だち管理画面 + API(一覧・詳細・タグ・CSV)完了
5シナリオ管理画面(トリガー・ステップ編集)完了
6一斉配信(セグメント絞込・即時/予約送信)完了
7分析ダッシュボード(recharts 4種グラフ)完了
8自動応答 + リッチメニュー管理完了
9休み連絡(管理画面・確認操作・ダッシュボード連携)完了

5. DBスキーマ(12テーブル)

テーブル用途主要カラム
friends友だち管理line_user_id, display_name, status, custom_fields
tagsタグname, color
friend_tags友だち×タグ(多対多)friend_id, tag_id
scenariosシナリオtrigger_type, trigger_value, is_active
scenario_stepsステップstep_order, delay_hours, message_type, message_content
friend_scenariosシナリオ進捗current_step, next_send_at, status
broadcasts一斉配信message_content, segment_filter, status, recipient_count
auto_replies自動応答keyword, match_type, response_type, priority
rich_menusリッチメニューline_rich_menu_id, tag_conditions
message_logs送信ログfriend_id, message_type, status
absence_notifications休み連絡absence_date, reason, status, confirmed_by
conversation_states会話状態state, context, expires_at(10分TTL)

※ tracking_urls, url_clicks テーブルも定義済み(未使用)

6. デプロイ手順

1
Supabase: プロジェクト作成 → SQL Editorで supabase/migrations/001_initial.sql を実行
2
LINE Developers: Messaging APIチャネル作成 → チャネルシークレット・アクセストークン取得
3
Slack: Incoming Webhook URLを取得(スタッフ通知用)
4
環境変数: env.local.example.env.local にリネームし全値を設定
5
Vercel: vercel deploy → 環境変数をVercelダッシュボードにも設定
6
LINE Webhook: https://your-app.vercel.app/api/webhook/line を設定、応答メッセージをOFFに
7
外部Cron: cron-job.org等で5分間隔 GET /api/cron/step-delivery + Authorization: Bearer {CRON_SECRET}

環境変数一覧

NEXT_PUBLIC_SUPABASE_URL=https://xxx.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=xxx
SUPABASE_SERVICE_ROLE_KEY=xxx
LINE_CHANNEL_SECRET=xxx
LINE_CHANNEL_ACCESS_TOKEN=xxx
CRON_SECRET=xxx
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/xxx/xxx/xxx
NEXT_PUBLIC_APP_URL=https://your-app.vercel.app

7. 設計上の判断・制約

Edge Runtime → Node.js Runtime

当初WebhookをEdge Runtimeで実装予定だったが、@line/bot-sdkがNode.jsのstreamモジュールに依存するためNode.js Runtimeに変更。署名検証はWeb Crypto APIで実装済み(Edge互換)のため、将来SDKを外せばEdge化可能。

Vercel Hobbyプラン制限

Cron Jobsは1日1回が上限。ステップ配信の5分間隔には外部Cronサービス(cron-job.org等、無料枠あり)が必要。Proプラン(月$20)にすれば vercel.jsonschedule*/5 * * * * に変更するだけで対応可。

LINE Notify → Slack Webhook

LINE Notifyは2025年3月末でサービス終了。スタッフ通知はSlack Incoming Webhookに変更。lib/slack.ts で実装。

8. 注意事項・未実装項目

セキュリティ(デプロイ前に要対応)
未実装・改善候補

9. コミット履歴

コミット内容
1b679e7docs: 全Phase完了マーク更新
2f2c869feat: Phase 9 - 休み連絡管理画面 + ダッシュボードライブデータ
0eb81dafeat: Phase 8 - 自動応答 + リッチメニュー管理
927ccb0feat: Phase 7 - 分析ダッシュボード
4b8e410feat: Phase 6 - 一斉配信API + 画面
153facdfeat: Phase 5 - シナリオ管理API + 画面
1592920feat: Phase 4 - 友だち管理画面 + API
d1134e6feat: Phase 3 - ステップ配信スケジューラ + Cron
79b2954feat: Phase 2 - LINE Webhook + イベントハンドラー + Slack通知
bae2ba2feat: Phase 1 - LINE CRM プロジェクト初期化

10. 推奨次ステップ(優先順)

  1. Supabase Auth + RLS設定 — デプロイ前の必須セキュリティ対応
  2. デプロイ + LINE Webhook接続テスト — 友だち追加→DB登録の動作確認
  3. 外部Cron設定 — ステップ配信の5分間隔実行
  4. 最初のシナリオ作成 — 退院後フォローアップ等の実運用シナリオ
  5. E2Eテスト作成 — Playwright で主要フローをカバー

LINE CRM Handoff Document — Generated 2026-03-26