docs/owner-runbook-ja.html をダブルクリックしても開けます。
編集用テキスト版(Git 用): docs/owner-runbook-ja.md
| いつ | 読む場所 |
|---|---|
| どれを読めばよいか迷う | docs/DOCUMENT-INDEX-ja.md |
| 初回セットアップ | §2 → §3 → §4(§4.1〜4.5 にテーブル詳細・デプロイ) |
| 平日・運用 | §5(月次以外は基本なし) |
| 月初(月次報告) | §6 |
| 不具合・問い合わせ | §7 |
| デモ・商談 | §8 |
| 実企業が入っているとき(不安を減らす) | §10 |
eap.html などを開き、記録・予約などを送る。/api/eap/submit)に届き、Supabase(データベース)に保存されるのが基本。visit_slots に寄せられる(EAP_RESERVATION_CONFIG_SOURCE と docs/reservation-supabase-ja.md)。健康系の生データは既定ではシートに送らない。conditions.aux_json(auxJson)に JSON 保存。Vercel のプロジェクト → Settings → Environment Variables で設定。本番(Production)に入れるのが原則。
| 変数名 | 役割 |
|---|---|
SUPABASE_URL | Supabase プロジェクトの URL |
SUPABASE_SERVICE_ROLE_KEY | サーバー専用キー(絶対に公開しない・フロントに載せない) |
GAS_WEBAPP_URL | GAS 連携がある場合(/exec まで。予約枠が Supabase でも dual_write・フォールバックで使うことがある) |
EAP_RESERVATION_CONFIG_SOURCE | supabase … 予約枠 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 にコミットしない。
docs/sql/ の手順に沿って実行(新規は 01_create_tables.sql、既存 DB 追補は 03_privacy_aggregates_migration.sql など)。docs/sql/05_conditions_aux_json.sql を実行。新規は 01_create_tables.sql に含まれます。refresh_eap_monthly_summaries が存在することを確認(詳細は移行手順書 §6.0 付近)。docs/sql/06_reservations_anonymous_id.sql で reservations.anonymous_id を追加。docs/sql/04_demo_tenant.sql を実行し、demo.html の説明どおりテナントを用意。docs/sql/07_visit_slots.sql で visit_slots を作成。tenants の visit_plan / display_name / employee_count_ref とデータを整合。正本は docs/reservation-supabase-ja.md。docs/sql/08_schema_comments_ja.sql を実行(主要テーブル)。巡回枠は 07 に含まれる。docs/sql/09_session_notes.sql を実行(匿名 ID ベースの面談要点。全文・音声は保存しない運用)。Google のシートに相当するのは、Supabase では public スキーマのテーブルです(画面は Table Editor)。
| 運用上の呼び方 | テーブル名 | 予約まわりで何をするか |
|---|---|---|
| 企業マスタ | tenants | external_key(URL の tenant と一致)、会社表示名・訪問プラン・従業員数参照 |
巡回枠(旧 03_巡回枠) | visit_slots | 1 行=1 訪問日の受付ウィンドウ。/api/eap/reservation-config(Supabase 経路)が読む |
| 予約一覧に相当 | reservations | 送信された予約(匿名は anonymous_id・希望日時など) |
SUPABASE_SERVICE_ROLE_KEY で RLS をバイパスします。匿名セッションの Table Editor だけでは visit_slots が見えないことがあります。運営が確認するときは SQL Editor またはダッシュボード権限に留意してください。列の日本語の意味は DB の COMMENT ON(07_visit_slots.sql・08_schema_comments_ja.sql)と、下表・reservation_slots_admin.md を対応表として使えます。
visit_slots の列一覧(旧シートとの対応)| DB 列名 | 旧 03_巡回枠 の目安 | 説明(運用) |
|---|---|---|
id | (自動) | 主キー(UUID) |
tenant_id | ※UUID で tenants.id を指す | 企業コード文字列そのものではない |
slot_row_key | slotRowKey | テナント内で一意の行キー |
office_external_id | officeId(空なら全社共通) | 空文字 '' で共通枠 |
visit_date | visitDate | yyyy-MM-dd。当日より前は API で無視され得る |
window_start / window_end | windowStart / windowEnd | HH:mm |
slot_step_min | slotStepMin | 開始時刻の刻み(分・既定 15) |
consult_slot_min | consultSlotMin | 相談 1 枠の長さ(分・既定 50) |
consult_slots_offered | consultSlotsOffered | 相談枠上限。NULL で自動算出 |
hr_slot_min | hrSlotMin | 人事枠の長さ(分・既定 30) |
hr_slots_offered | hrSlotsOffered | 人事枠上限。NULL / 0 で無しになり得る |
active | active | false で無効 |
memo | メモ | 運用メモ |
created_at / updated_at | — | 自動タイムスタンプ |
tenants のうち予約 API が参照する列| 列名 | 説明 |
|---|---|
id | テナント UUID(他テーブルの tenant_id はこれを指す) |
external_key | URL の tenant / tenantId と一致させる文字列 |
display_name | 予約画面の会社表示名 |
visit_plan | none / monthly_1 / monthly_2 等 |
employee_count_ref | 相談枠数の自動算出に使う従業員数の参考値 |
reservations(確認するときの列)| 列名 | 説明 |
|---|---|
tenant_id | tenants.id |
anonymous_id | 匿名 ID(06_reservations_anonymous_id.sql) |
prefer1〜prefer3 | 希望日時(占有判定でパース) |
appointment_kind | 例: anonymous_band |
office_external_id | 事業所コード(任意) |
データ最小化・dual_write の列の意味は privacy-data-minimization-ja.md。
前提: GitHub と Vercel が連携済みで、main の push でデプロイが走ること。
01_create_tables.sql、追補は 03・05・06 等、予約枠は 07_visit_slots.sql、日本語 COMMENT は 08_schema_comments_ja.sqltenants に external_key 等。visit_slots の tenant_id はその tenants.id。visit_date は当日以降・active=trueSUPABASE_URL・SUPABASE_SERVICE_ROLE_KEY。DB 固定なら EAP_RESERVATION_CONFIG_SOURCE=supabase(または未設定で Supabase 優先)。GAS 併用なら GAS_WEBAPP_URLmain に pushGET /api/eap/reservation-config?tenantId=… とブラウザの yoyaku_employee.html詳細は docs/reservation-supabase-ja.md。
細かいテーブル設計・RLS は docs/supabase-migration-procedure-ja.md で追う。
main への push で自動デプロイ。visit_slots と tenants を更新すると予約画面が変わる。シートだけ変えても反映されないのでデータ源を取り違えないこと(Sheet の辞書は reservation_slots_admin.md)。EAP_RESERVATION_CONFIG_SOURCE=gas のときは、従来どおりスプレッドシートの企業マスタ・巡回枠が予約に効く。formType=pulse に auxJson → conditions.aux_json(jsonb)。docs/sql/05_conditions_aux_json.sql 未適用だと送信エラー(§7)。code.gs の脈拍記録に補助JSON列。正本の説明は docs/privacy-data-minimization-ja.md を開いてください(予約シートの列の意味・匿名通知メール・IC カード・事業所非開示・§3)。ここでは運用上の要点だけ。
anonymous_id 列あり(既存 DB は docs/sql/06_reservations_anonymous_id.sql)。目的: 企業別の月次サマリーを、Table Editor を毎回開かずに 1 画面で見る。
SUPABASE_* と EAP_CRON_SECRET(または EAP_MONTHLY_REPORT_SECRET)が入っている。https://(あなたの本番ドメイン)/api/eap/monthly-report?format=html&secret=(シークレット)既定は 日本時間の「前月」。別月なら
&year=2026&month=4。速く見るだけなら &refresh=0。/api/eap/cron-aggregate-monthly が叩かれる(vercel.json)。secret= を付けた URL は 共有・スクリーンショットに注意。| 現象 | 確認すること |
|---|---|
| 記録・睡眠などが保存されない | Vercel の SUPABASE_URL / SUPABASE_SERVICE_ROLE_KEY、EAP_SUBMIT_MODE、Supabase のテーブル・RLS |
| 予約の日時が出ない | EAP_RESERVATION_CONFIG_SOURCE と SUPABASE_*。Supabase 運用なら visit_slots の行・当日以降・active、07_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 の「困ったとき」と技術手引きを併用。
demo.html … 説明用リンク集。04_demo_tenant.sql を実行すること(README の「デモ」節)。| ファイル | 内容 |
|---|---|
| このページ(HTML) | 手順書・いつでも閲覧(本番 URL をブックマーク) |
docs/DOCUMENT-INDEX-ja.md | 全ドキュメントの索引(画面・SQL・API) |
docs/beginner-guide-ja.html | 企業・従業員向けのやさしい説明(印刷可) |
docs/supabase-migration-procedure-ja.md | DB・移行・月次 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 一括 |
「試験運用」と名前が付いていても、実企業に入っているデータは本番と同じ重みです。確認したらチェック(印刷して使っても可)。
EAP_DUAL_WRITE_HEALTH_TO_SHEET を付けるなら理由と説明責任を決めてから。SUPABASE_SERVICE_ROLE_KEY を チャットやメールで送っていない。保管場所を決めている。main)を把握し、よくわからない変更はマージしないルールがある。owner-runbook-ja.md の §10 を結論に合わせて書き換えてください。