💻 システム開発
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として整備) |