Newer
Older
client_dwatch / docs / handoff / PRレビュー手順_20261001.md

PR #6 を分けてレビューする手順(レビュー: daichi)

作成: 2026-10-01。PR: https://github.com/DFARobotics/d-watch/pull/6 。決定: D-154。 数字の出所: git diff --numstat origin/main origin/develop(main=1f214cc / develop=a7b4614)。構造由来。

★コードは Claude Code / Cursor が書き、★daichi がレビューして main にマージする★(2026-10-01 ユーザー指示「コードレビューは自分がします」)。


0. 先に片づけること

# 内容 状態
0-1 ステージングDBの実パスワード(URLエンコード形)がコメントの例に入っていた5箇所を、ダミー p%40ss に差し替える(.env.example:12 / lib/db/prisma.ts:30 / docs/code-map.md:2006,2522 / docs/handoff/セッション引き継ぎ_20260916.md:212) ★済(D-154)★
0-2 ★履歴には残る★(2026-09-16〜10-01 の4コミット: 992a456 / d792067 / 2bf83cd / d23e203)。★TeamWorks にパスワードの変更を頼むか★ ★daichi 判断待ち★。履歴の書き換え(force push)は下の区切りのコミット番号が全部変わるので勧めない
0-3 (任意).github/workflows/ci.yml の prisma generate 追加(15行)だけを先に main へ入れる 未。入れないと Part 3・4 の CI のビルドが赤になる(09-09〜09-17 の CI に生成の手順が無かったため。Part 5 の ebb0872 で直った)

1. 分け方(積み上げ PR・7本)

★develop は一直線の履歴(マージコミット0件)なので、途中のコミットに枝を立てるだけで切れる★。

Part 枝の先端 期間 件数 本番コード / テスト(追加行) docs(追加行) 中身 向き先
1 9cd4b08 08-30〜09-03 29 6.8k / 2.3k 18.8k 開発用サンプルデータ上の画面(ダッシュボード・事前チェック・D-Secログ/アラート)、schema の db pull(D-047〜D-065) main
2 b2ec6ee 09-03〜09-08 73 5.2k / 3.1k 12.1k レポート、月跨ぎ週(TeamWorks方式)、JSON設定ストア、マスタ3画面(D-066〜D-084) Part 1
3 327682e 09-08〜09-11 76 5.0k / 2.9k 12.7k ★実DBへの配線★、ローカルDBのシード、★認証(cookie)と IP 制限★、エラー種別の生値表示(D-085〜D-108) Part 2
4a 7db4a57 09-11 55 4b と計 7.4k / 10.5k 4b と計 23.1k 連続日数、事前チェックの読み方、DATETIME の扱い、エリア別完了率、ページ送り Part 3
4b af11453 09-13〜09-15 59 (同上) (同上) ★生SQL禁止の lint、CSV インジェクション対策★、検索の正規化、SQL への絞り込み(D-109〜D-134) Part 4a
5 7fdd822 09-15〜09-17 109 7.3k / 6.3k 25.5k 要レスキュー、分類の絞り込み、判定境界を「以上」に、総清掃面積、CI 修正(D-135〜D-150) Part 4b
6 develop 先端 09-30〜10-01 22+α 2.0k / 2.9k 5.9k ★データ取得元の切替★(サマリ3粒度・clean_task_reports 一本化・完了率=clean_ratio 単純平均)、言語切替のずれ修正、0-1(D-151〜D-154) Part 5
  • どの切れ目も「直後に修正コミットが続く箇所」を避けている(直後から新しいテーマが始まる)
  • ★各切れ目でビルド・テストが通るかは未確認★。PR を作れば CI が確かめる(ci.yml の pull_request: に枝の絞り込みが無いので、main 以外に向いた PR でも走る)
  • 追加 +158k 行の内訳: ★docs 61%★ / テスト 17% / ★本番コード 19%(約3万行)★ / 生成物・データ 3%

マージの手順

  1. Part 1 から順に1本ずつレビュー → マージ
  2. ★マージ方法は「Create a merge commit」★。★Squash / Rebase を使うと次の Part の差分がずれる★
  3. マージ後に枝を削除すると、GitHub が次の Part の向き先を自動で main に付け替える
  4. 全部入ったら PR #6 を閉じる
  5. ★GitHub では PR の作成者(DFA-takeuchi)が自分の PR を「Approve」できない★。レビュー結果は PR へのコメントで残し、そのままマージする (main にブランチ保護が入っているかは未確認。管理者権限が要る。保護で承認必須になっていたらマージできないので、そのときは DGJAPAN さんに設定を見てもらう)

2. 何を読むか

読む(約3万行のうち、特にここ)

# 観点 場所 見るところ
1 認証・IP制限(Part 3) proxy.ts / lib/proxy/authenticate.ts:59-94 / lib/auth/client-ip.ts:36-78 / lib/auth/token.ts:22-41 / lib/auth/cookie.ts:29-32 XFF は末尾側(parts[length - hops])を見ているか。★cookie の値は共有トークンそのもの・ログイン試行回数の制限なし★ — 社内利用でこれでよいか
2 ★IP制限の既定値★ lib/config/allowed-ips.ts:24-35 / docs/deploy.md:117-121 ★許可IPが空だと全部通す(ALLOW_ALL_WHEN_EMPTY = true)★。本番に出す前に許可リストを入れるか、既定を拒否に倒すか
3 DB書き込み app/ lib/ ★Prisma の update/create/delete と生SQLは1件も無い★(読み取りのみ)。生SQLは eslint.config.mjs で禁止。書き込む PATCH 3本はローカルの JSON(lib/settings/json-store.ts:86-127)
4 ステージングを消さない仕組み scripts/seed-local-db.ts:85-91,844-856 / lib/db/local-guard.ts:10-31 localhost の dwatch_local 以外を拒否するか
5 判定ロジック lib/judge/grade.ts:29-35 / kpi.ts / rescue.ts / escalation.ts / lib/config/index.ts 境界(90.0◎ / 70.0○ / 10.0△ / 9.9×)、丸める前の値で判定、閾値は設定から読む
6 時刻 lib/format/date.ts / lib/db/date-range.ts:55-64 DBの値に9時間を足していないか(CLAUDE.md §3)
7 契約フラグ lib/format/contract.ts:26-41 文字で比べ、数値にしていないか(§4.6)
8 環境変数の既定値 lib/db/use-fixtures.ts:17 / .env.production.example / scripts/check-env.ts ★USE_FIXTURES は未設定だとサンプルデータで動く★。本番では false を明示
9 ログ instrumentation.ts:39-80 / lib/logger/redact.ts 接続文字列やトークンがログに出ないか
10 データ層の本体(Part 6 で作り直し) lib/db/index.ts / report-mapping.ts / clean-log-mapping.ts / consecutive-source.ts / clean-area-source.ts 量も仕様上の危険も最も多い。★Part 3〜5 の版は流し読みにし、Part 6 で読む★
11 ルールの変更 CLAUDE.md の差分(+274行) ルールそのもの

流し読みでよい

  • docs/handoff/ の全部(指示書・TeamWorks 照会・PDF 生成スクリプト)、docs/decisions.md、docs/code-map.md
  • lib/fixtures/ とそのテスト、package-lock.json
  • prisma/schema.prisma(db pull の生成物。手で書いた行が無いかだけ)、d-watch-api.yaml(型との整合だけ)

後で置き換わるコード(その Part では流し読みでよい)

書かれた Part 置き換えた Part 何が
1 1 prisma/schema.prisma の手書き(fac1a54)→ db pull(d20be80)
1 3 エラー種別の enum と型(67e7014 で撤去。D-077/088)
1 5 lib/judge/grade.ts の境界(eb1cebc。D-139)
2 2 期間ヘルパー(234987e → 同日の 8a00ed0。D-071)
3 4a 事前チェックの読み方(D-113)
3〜5 6 lib/db/ のマッピング5ファイルと lib/judge/kpi.ts / rescue.ts。面積比の完了率と clean_error 判定は廃止

3. この後の作業

★時期: 第10回の回答後に、指示書AR と4カラム UPDATE の実装が終わってから★(ユーザー判断 2026-10-01。それまでに develop に積んだ分も Part 6 以降に含める)。その時点で区切りを数え直す。 0-3 の CI 修正の先行 PR も同じ時期に行う。

  1. 0-1 をコミットして develop に push(D-154)
  2. Part 1〜6 の枝(review/part-1 〜 review/part-6)を立てて push し、PR を7本作る。各 PR の説明に、中身・読むところ・置き換わる箇所を書く
  3. PR #6 に7本へのリンクをコメントする