💻 システム開発

Runbook

最終更新 2026年05月04日 / 31_システム開発部/SCALE_CRM/Runbook.md

SCALE CRM 障害対応 Runbook

本番障害時、まずこのページを読む。
慌ててコード触る前に、判断フローと復旧手順を確認すること。


30秒で全体像

観点 一言
核心 SCALE CRM の障害判断 / 復旧 / エスカレーション全集約
使う人 大串 / Claude / 開発担当者
緊急時連絡 大串 → SCALE Slack #system-alerts

構成早見

場所
フロントエンド Cloudflare Pages scale-lead プロジェクト
本番ドメイン https://crm.scale-group.co.jp/
データベース Cloudflare D1 scale-lead-prod
API Pages Functions /api/*
AI Proxy scale-ai-proxy.y-ogushi.workers.dev
ローカル /Users/oogushiyuuki/株式会社SCALE/scale-lead/
バックアップ tar.gz: ~/Library/CloudStorage/.../AI/scale-lead-backups/
D1 Time-Travel: 24h 内任意時点

障害判断フロー

graph TD
    A[障害報告] --> B{crm.scale-group.co.jp 開ける?}
    B -->|No HTTP 5xx| C[Cloudflare Pages 障害]
    B -->|Yes| D{ログイン可能?}
    D -->|No| E[認証/JS エラー]
    D -->|Yes| F{案件データ見える?}
    F -->|No 空| G[D1 / API 障害]
    F -->|Yes| H{操作で500エラー?}
    H -->|Yes| I[D1 書き込みエラー]
    H -->|No| J[個別機能不具合]

復旧パターン別手順

Pattern A: 全体ダウン(HTTP 5xx)

症状: https://crm.scale-group.co.jp/ が開けない

# 1. 直近デプロイURL で生存確認
curl -I https://scale-lead.pages.dev/
# → 200ならカスタムドメイン障害(Cloudflare Pages カスタムドメイン設定確認)
# → 5xxならPagesプロジェクト障害

# 2. Cloudflare Status 確認
open https://www.cloudflarestatus.com/

# 3. ロールバック: 直前デプロイへ戻す
cd /Users/oogushiyuuki/株式会社SCALE/scale-lead
unset CLOUDFLARE_API_TOKEN
npx wrangler pages deployment list --project-name=scale-lead
# → 1つ前のデプロイURLを確認
# Cloudflare Dashboard → Pages → scale-lead → Deployments → 安定版を rollback

Pattern B: D1 / API 障害

症状: ログインできるが案件データが0件 or PUT/DELETE で500

# 1. D1 ヘルスチェック
curl -s https://crm.scale-group.co.jp/api/health
# → ok:false なら D1 接続不能

# 2. D1 直接クエリ
cd /Users/oogushiyuuki/株式会社SCALE/scale-lead
unset CLOUDFLARE_API_TOKEN
npx wrangler d1 execute scale-lead-prod --remote --command="SELECT COUNT(*) FROM app_data"

# 3. テーブル構造確認
npx wrangler d1 execute scale-lead-prod --remote --command="SELECT name FROM sqlite_master WHERE type='table'"

# 4. データ復元(D1 Time-Travel)
# 24時間以内の任意時点に復元できる
npx wrangler d1 time-travel restore scale-lead-prod --timestamp=<ISO8601>
# 例: 1時間前に戻す
npx wrangler d1 time-travel restore scale-lead-prod --timestamp=$(date -u -v-1H '+%Y-%m-%dT%H:%M:%SZ')

Pattern C: 個別機能エラー

症状: 特定操作だけで JS エラー

# 1. ブラウザ Console でエラー確認
# F12 → Console → 赤字を読む

# 2. D1 error_log を確認
npx wrangler d1 execute scale-lead-prod --remote \
  --command="SELECT occurred_at,user,message,url FROM error_log ORDER BY occurred_at DESC LIMIT 20"

# 3. 該当機能を直前の動作版に戻す
# scale-lead-backups/ から該当の tar.gz を展開
cd /tmp && tar -xzf ~/Library/CloudStorage/.../scale-lead-backups/<日付>-<状態>.tar.gz
diff /tmp/<file>.js /Users/oogushiyuuki/株式会社SCALE/scale-lead/<file>.js

Pattern D: データ消失

症状: 案件 or 架電履歴が消えた

# 1. snapshots テーブルから直近スナップショット取得
npx wrangler d1 execute scale-lead-prod --remote \
  --command="SELECT id,taken_at,reason FROM snapshots ORDER BY taken_at DESC LIMIT 10"

# 2. UI から復元
# https://crm.scale-group.co.jp/ → 設定 → 💾 復元 → スナップショット選択

# 3. それでも駄目なら D1 Time-Travel
npx wrangler d1 time-travel restore scale-lead-prod --timestamp=<消える前のISO>

# 4. ローカルバックアップから手動復元
ls -la ~/Library/CloudStorage/.../scale-lead-backups/
# 該当 tar.gz から localStorage ダンプ抽出

Pattern E: AI機能エラー(AI共創 / 自動入力)

症状: AI共創モードが「考え中…」のまま固まる

# 1. AI Proxy ヘルスチェック
curl -s -X POST https://scale-ai-proxy.y-ogushi.workers.dev \
  -H "Origin: https://crm.scale-group.co.jp" \
  -H "Content-Type: application/json" \
  -d '{"model":"claude-opus-4-6","max_tokens":50,"system":"Be concise","messages":[{"role":"user","content":[{"type":"text","text":"OK"}]}]}'
# → HTTP 200 + content "OK" が返ればProxy正常

# 2. CORS ALLOWED_ORIGINS 確認
cat "/Users/oogushiyuuki/Library/CloudStorage/GoogleDrive-y-ogushi@scale-group.co.jp/マイドライブ/AI/株式会社SCALE/scale-ai-proxy/src/index.js"
# 必要なドメインが入っているか

# 3. Anthropic API 障害
open https://status.anthropic.com/

ロールバック手順(コード変更が悪化)

直前デプロイへ瞬時ロールバック

# Cloudflare Dashboard → Pages → scale-lead → Deployments
# 安定版の deployment ID をメモ
# 「Rollback to this deployment」クリック
# → 数秒で本番に反映

git から特定コミットに戻す

cd /Users/oogushiyuuki/株式会社SCALE/scale-lead
git log --oneline | head -10
git checkout <安定コミットhash> -- core.js service.js kickoff.js pages.js calllist.js ai.js
bash deploy.sh

tar.gz バックアップから復元

ls -lt ~/Library/CloudStorage/.../scale-lead-backups/ | head -5
# 安定版を選んで展開
cd /tmp && tar -xzf ~/Library/CloudStorage/.../scale-lead-backups/<日付>.tar.gz
# 個別ファイルを比較・差分のみコピー

エスカレーション

障害レベル 連絡先 対応
L1: 全体ダウン 大串 → Slack #system-alerts 即時ロールバック
L2: 部分機能不全 Claude 司令 → 大串 検証→修正→デプロイ
L3: 個別UI不具合 各PMが Slack で報告 通常リリースサイクル

障害発生時のチェックリスト

□ いつ起きた?(タイムスタンプ)
□ 誰が気づいた?
□ 何の操作で起きた?再現手順は?
□ ブラウザ Console のエラーメッセージは?
□ /api/health は応答する?
□ D1 にデータ残ってる?
□ 影響範囲は?(全員 / 一部)
□ 直前のデプロイは?(30分以内ならまずロールバック検討)
□ 復旧後の根本原因分析メモを作成

関連ノート


更新履歴

日付 内容
2026-05-01 初版作成(D1 移行に伴い包括的なRunbookとして整備)