オーナー(運営)用手順書
makes-momo EAP · スマホ・PC のブラウザからいつでも閲覧可

最終更新: 2026-05-06
いつでも見る(ブックマーク推奨)
次の URL をブラウザのお気に入りに入れてください(デプロイ後ずっと同じ場所です)。
https://makes-momo-eap.vercel.app/docs/owner-runbook-ja.html
オフラインや別ドメインのときは、リポジトリの docs/owner-runbook-ja.html をダブルクリックしても開けます。

対象: このリポジトリを管理する Owner。プログラムを毎日書かない前提です。
詳細の正: docs/supabase-migration-procedure-ja.mdPROJECT_RULES.md.env.example全体の地図: docs/DOCUMENT-INDEX-ja.md

編集用テキスト版(Git 用): docs/owner-runbook-ja.md

1. この手順書の使い方

いつ読む場所
どれを読めばよいか迷うdocs/DOCUMENT-INDEX-ja.md
初回セットアップ§2 → §3 → §4(§4.1〜4.5 にテーブル詳細・デプロイ)
平日・運用§5(月次以外は基本なし)
月初(月次報告)§6
不具合・問い合わせ§7
デモ・商談§8
実企業が入っているとき(不安を減らす)§10

2. 全体像(30秒)

  1. 従業員がスマホで eap.html などを開き、記録・予約などを送る。
  2. 送信は Vercel 上の API(例: /api/eap/submit)に届き、Supabase(データベース)に保存されるのが基本。
  3. Google スプレッドシートは移行中の二重書き・運用メモ用。予約枠マスタは Supabase の visit_slots に寄せられるEAP_RESERVATION_CONFIG_SOURCEdocs/reservation-supabase-ja.md)。健康系の生データは既定ではシートに送らない。
  4. 月次の数字は Supabase の集計テーブル+API でまとめて確認できる(§6)。
  5. 自律神経(pulse)は指測定(PPG)に加え、任意で主観スケールを記録できます(インカメラ・表情解析なし)。conditions.aux_jsonauxJson)に JSON 保存。

3. 初回:Vercel に必ず入れる環境変数

Vercel のプロジェクト → Settings → Environment Variables で設定。本番(Production)に入れるのが原則。

変数名役割
SUPABASE_URLSupabase プロジェクトの URL
SUPABASE_SERVICE_ROLE_KEYサーバー専用キー(絶対に公開しない・フロントに載せない
GAS_WEBAPP_URLGAS 連携がある場合(/exec まで。予約枠が Supabase でも dual_write・フォールバックで使うことがある)
EAP_RESERVATION_CONFIG_SOURCEsupabase … 予約枠 GET を DB 固定。gas … GAS プロキシ固定。未設定SUPABASE_* があれば Supabase
EAP_SUBMIT_MODE例: supabase_only / dual_write / gas_only(未設定は supabase_only 扱い)
EAP_ALLOW_ANON_HEALTHLIKE(任意)1 のときのみ健康系(health/pulse/sleep)を未認証で受け付ける。既定は認証必須
EAP_CRON_SECRET月次集計 Cron の Bearer 用。強いランダム文字列
EAP_MONTHLY_REPORT_SECRET(任意)月次レポート URL 用。未設定なら EAP_CRON_SECRET と同じ値で代用可
GEMINI_API_KEYチャット(/api/gemini)を使う場合のみ
GEMINI_MODEL(任意)未設定時は gemini-1.5-flash(GA想定)
GEMINI_VISION_MODEL(任意)食事画像タスク用(未設定時は GEMINI_MODEL と同じ)
GEMINI_ALLOW_PREVIEW(任意)1 のときのみ *-preview を許可(既定は preview 禁止)
ALLOWED_ORIGIN推奨。/api/gemini の CORS allowlist(完全一致・カンマ区切り)

.env.example にコメント付きで並んでいます。値は Git にコミットしない

4. 初回:Supabase でやること(要点)

  1. SQL: docs/sql/ の手順に沿って実行(新規は 01_create_tables.sql、既存 DB 追補は 03_privacy_aggregates_migration.sql など)。
  2. pulse の補助 JSON(aux_json): 既存 DB では docs/sql/05_conditions_aux_json.sql を実行。新規は 01_create_tables.sql に含まれます。
  3. 月次集計を使うなら: refresh_eap_monthly_summaries が存在することを確認(詳細は移行手順書 §6.0 付近)。
  4. 匿名予約列(既存 DB): docs/sql/06_reservations_anonymous_id.sqlreservations.anonymous_id を追加。
  5. デモ URL: docs/sql/04_demo_tenant.sql を実行し、demo.html の説明どおりテナントを用意。
  6. 予約枠を Supabase で読む: docs/sql/07_visit_slots.sqlvisit_slots を作成。tenantsvisit_plan / display_name / employee_count_ref とデータを整合。正本は docs/reservation-supabase-ja.md
  7. 日本語 COMMENT(列の意味): docs/sql/08_schema_comments_ja.sql を実行(主要テーブル)。巡回枠は 07 に含まれる。
  8. 面談メモ(要点のみ): docs/sql/09_session_notes.sql を実行(匿名 ID ベースの面談要点。全文・音声は保存しない運用)。

4.1 Supabase のテーブル早見(Table Editor の「表」)

Google のシートに相当するのは、Supabase では public スキーマのテーブルです(画面は Table Editor)。

運用上の呼び方テーブル名予約まわりで何をするか
企業マスタtenantsexternal_key(URL の tenant と一致)、会社表示名・訪問プラン・従業員数参照
巡回枠(旧 03_巡回枠visit_slots1 行=1 訪問日の受付ウィンドウ/api/eap/reservation-config(Supabase 経路)が読む
予約一覧に相当reservations送信された予約(匿名は anonymous_id・希望日時など)
見え方の注意: API は SUPABASE_SERVICE_ROLE_KEY で RLS をバイパスします。匿名セッションの Table Editor だけでは visit_slots が見えないことがあります。運営が確認するときは SQL Editor またはダッシュボード権限に留意してください。

列の日本語の意味は DB の COMMENT ON07_visit_slots.sql08_schema_comments_ja.sql)と、下表・reservation_slots_admin.md を対応表として使えます。

4.2 visit_slots の列一覧(旧シートとの対応)

DB 列名03_巡回枠 の目安説明(運用)
id(自動)主キー(UUID)
tenant_id※UUID で tenants.id を指す企業コード文字列そのものではない
slot_row_keyslotRowKeyテナント内で一意の行キー
office_external_idofficeId(空なら全社共通)空文字 '' で共通枠
visit_datevisitDateyyyy-MM-dd。当日より前は API で無視され得る
window_start / window_endwindowStart / windowEndHH:mm
slot_step_minslotStepMin開始時刻の刻み(分・既定 15)
consult_slot_minconsultSlotMin相談 1 枠の長さ(分・既定 50)
consult_slots_offeredconsultSlotsOffered相談枠上限。NULL で自動算出
hr_slot_minhrSlotMin人事枠の長さ(分・既定 30)
hr_slots_offeredhrSlotsOffered人事枠上限。NULL / 0 で無しになり得る
activeactivefalse で無効
memoメモ運用メモ
created_at / updated_at自動タイムスタンプ

4.3 tenants のうち予約 API が参照する列

列名説明
idテナント UUID(他テーブルの tenant_id はこれを指す)
external_keyURL の tenant / tenantId と一致させる文字列
display_name予約画面の会社表示名
visit_plannone / monthly_1 / monthly_2
employee_count_ref相談枠数の自動算出に使う従業員数の参考値

4.4 匿名予約と reservations(確認するときの列)

列名説明
tenant_idtenants.id
anonymous_id匿名 ID(06_reservations_anonymous_id.sql
prefer1prefer3希望日時(占有判定でパース)
appointment_kind例: anonymous_band
office_external_id事業所コード(任意)

データ最小化・dual_write の列の意味は privacy-data-minimization-ja.md

4.5 実装〜本番デプロイまで(チェックリスト)

前提: GitHub と Vercel が連携済みで、main の push でデプロイが走ること。

  1. Supabase(SQL Editor) … 新規は 01_create_tables.sql、追補は 030506 等、予約枠は 07_visit_slots.sql、日本語 COMMENT は 08_schema_comments_ja.sql
  2. データtenantsexternal_key 等。visit_slotstenant_id はその tenants.idvisit_date当日以降active=true
  3. Vercel(Production)SUPABASE_URLSUPABASE_SERVICE_ROLE_KEY。DB 固定なら EAP_RESERVATION_CONFIG_SOURCE=supabase(または未設定で Supabase 優先)。GAS 併用なら GAS_WEBAPP_URL
  4. 再デプロイ … 環境変数変更後は Redeploy または空コミットで main に push
  5. 確認GET /api/eap/reservation-config?tenantId=… とブラウザの yoyaku_employee.html

詳細は docs/reservation-supabase-ja.md


細かいテーブル設計・RLS は docs/supabase-migration-procedure-ja.md で追う。

5. 平常時のチェック(多くは「何もしない」)

5.1 pulse(自律神経+任意の主観)

5.2 データ最小化・予約(dual_write)・IC カード

正本の説明docs/privacy-data-minimization-ja.md を開いてください(予約シートの列の意味・匿名通知メール・IC カード・事業所非開示・§3)。ここでは運用上の要点だけ。

6. 月初:月次報告(あなた用・最短)

目的: 企業別の月次サマリーを、Table Editor を毎回開かずに 1 画面で見る。

  1. 前提: Vercel に SUPABASE_*EAP_CRON_SECRET(または EAP_MONTHLY_REPORT_SECRET)が入っている。
  2. ブックマークする URL(例)
    https://(あなたの本番ドメイン)/api/eap/monthly-report?format=html&secret=(シークレット)
    既定は 日本時間の「前月」。別月なら &year=2026&month=4。速く見るだけなら &refresh=0
  3. 自動集計: Vercel の Cron で毎月 /api/eap/cron-aggregate-monthly が叩かれる(vercel.json)。
注意: secret= を付けた URL は 共有・スクリーンショットに注意

7. 困ったとき(一次切り分け)

現象確認すること
記録・睡眠などが保存されないVercel の SUPABASE_URL / SUPABASE_SERVICE_ROLE_KEYEAP_SUBMIT_MODE、Supabase のテーブル・RLS
予約の日時が出ないEAP_RESERVATION_CONFIG_SOURCESUPABASE_*。Supabase 運用なら visit_slots の行・当日以降・active07_visit_slots.sql 適用済みか。GAS 運用ならシート・GAS_WEBAPP_URL
チャットだけ死んでいるGEMINI_API_KEY、利用枠・課金
月次レポートが 401/503シークレット、環境変数が Production に入っているか
月次レポートが 502(refresh 失敗)refresh_eap_monthly_summaries、SQL 追補
脈拍だけ送信エラーaux_json 列なし05_conditions_aux_json.sql 未実行)。Vercel ログで column エラー確認

詳細は docs/beginner-guide-ja.html の「困ったとき」と技術手引きを併用。

8. デモ・営業

9. 関連ファイル(ブックマーク用)

ファイル内容
このページ(HTML)手順書・いつでも閲覧(本番 URL をブックマーク)
docs/DOCUMENT-INDEX-ja.md全ドキュメントの索引(画面・SQL・API)
docs/beginner-guide-ja.html企業・従業員向けのやさしい説明(印刷可)
docs/supabase-migration-procedure-ja.mdDB・移行・月次 API の技術手順
.env.example環境変数の一覧
PROJECT_RULES.mdリポジトリ運用ルール
docs/privacy-data-minimization-ja.mdデータ最小化・匿名 ID・IC カード・予約シート列の正本
docs/reservation-supabase-ja.md予約枠を Supabase で読む手順・環境変数・トラブルシュート
docs/sql/07_visit_slots.sql巡回枠 visit_slots と COMMENT
docs/sql/08_schema_comments_ja.sql主要テーブル列の日本語 COMMENT 一括

10. 実企業導入:データ・契約・インフラを「本番扱い」する(不安チェックリスト)

「試験運用」と名前が付いていても、実企業に入っているデータは本番と同じ重みです。確認したらチェック(印刷して使っても可)。

データまわり(混線・漏えいを防ぐ)

契約・説明まわり

インフラまわり

もしものとき

心がけ: 不安は「全部把握する」より この §10 を月1で数分見るほうが続きます。弁護士相談後は owner-runbook-ja.md の §10 を結論に合わせて書き換えてください。

改訂: 手順が変わったら owner-runbook-ja.md・この HTML・beginner-guide-ja.htmlDOCUMENT-INDEX-ja.mdprivacy-data-minimization-ja.md.html を揃えて更新してください。