125 lines
5.4 KiB
Markdown
125 lines
5.4 KiB
Markdown
# レビュースタンス
|
||
|
||
全レビュアーが共有する判断基準と行動原則を定義する。
|
||
|
||
## 原則
|
||
|
||
| 原則 | 基準 |
|
||
|------|------|
|
||
| 即座修正 | 軽微でも「次のタスク」にしない。今修正できる問題は今修正させる |
|
||
| 曖昧さ排除 | 「もう少し整理して」等の曖昧な指摘は禁止。ファイル・行・修正案を具体的に示す |
|
||
| ファクトチェック | 推測ではなく実コードを確認してから指摘する |
|
||
| 実践的修正案 | 理想論ではなく実装可能な対策を提示する |
|
||
| ボーイスカウト | 変更したファイルに問題があれば、タスクスコープ内で改善させる |
|
||
|
||
## スコープ判定
|
||
|
||
| 状況 | 判定 | 対応 |
|
||
|------|------|------|
|
||
| 今回の変更で導入された問題 | ブロッキング | REJECT |
|
||
| 変更ファイル内の既存問題 | ブロッキング | REJECT(ボーイスカウトルール) |
|
||
| 変更モジュール内の構造的問題 | ブロッキング | スコープ内なら REJECT |
|
||
| 変更外ファイルの問題 | 非ブロッキング | 記録のみ(参考情報) |
|
||
| タスクスコープを大きく逸脱するリファクタリング | 非ブロッキング | 提案として記載 |
|
||
|
||
## 判定基準
|
||
|
||
### REJECT(差し戻し)
|
||
|
||
以下のいずれかに該当する場合、例外なく REJECT する。
|
||
|
||
- テストがない新しい振る舞い
|
||
- バグ修正にリグレッションテストがない
|
||
- `any` 型の使用
|
||
- フォールバック値の乱用(`?? 'unknown'`)
|
||
- 説明コメント(What/How のコメント)
|
||
- 未使用コード(「念のため」のコード)
|
||
- オブジェクト/配列の直接変更
|
||
- エラーの握りつぶし(空の catch)
|
||
- TODO コメント(Issue化されていないもの)
|
||
- 3箇所以上の重複コード(DRY違反)
|
||
- 同じことをするメソッドの増殖(構成の違いで吸収すべき)
|
||
- 特定実装の汎用層への漏洩(汎用層に特定実装のインポート・分岐がある)
|
||
- 関連フィールドのクロスバリデーション欠如(意味的に結合した設定値の不変条件が未検証)
|
||
|
||
### Warning(警告)
|
||
|
||
ブロッキングではないが改善を推奨する。
|
||
|
||
- エッジケース・境界値のテスト不足
|
||
- テストが実装の詳細に依存
|
||
- 関数/ファイルが複雑すぎる
|
||
- 命名が不明確
|
||
- TODO/FIXME の放置(Issue番号付きは許容)
|
||
- 理由なしの `@ts-ignore`、`eslint-disable`
|
||
|
||
### APPROVE(承認)
|
||
|
||
全ての REJECT 基準をクリアし、品質基準を満たしている場合に承認する。「条件付き承認」はしない。問題があれば差し戻す。
|
||
|
||
## ファクトチェック
|
||
|
||
指摘する前に必ず事実を確認する。
|
||
|
||
| やるべきこと | やってはいけないこと |
|
||
|-------------|-------------------|
|
||
| ファイルを開いて実コードを確認 | 「修正済みのはず」と思い込む |
|
||
| grep で呼び出し元・使用箇所を検索 | 記憶に基づいて指摘する |
|
||
| 型定義・スキーマを突合 | 推測でデッドコードと判断する |
|
||
| 生成ファイル(レポート等)とソースを区別 | 生成ファイルをソースコードとしてレビュー |
|
||
|
||
## 具体的な指摘の書き方
|
||
|
||
全ての指摘には以下を含める。
|
||
|
||
- **どのファイルの何行目か**
|
||
- **何が問題か**
|
||
- **どう修正すべきか**
|
||
|
||
```
|
||
❌ 「構造を見直してください」
|
||
❌ 「もう少し整理してください」
|
||
❌ 「リファクタリングが必要です」
|
||
|
||
✅ 「src/auth/service.ts:45 — validateUser() が3箇所で重複。
|
||
共通関数に抽出してください」
|
||
```
|
||
|
||
## ボーイスカウトルール
|
||
|
||
来たときよりも美しく。
|
||
|
||
### 対象
|
||
|
||
- 変更したファイル内の既存の問題(未使用コード、不適切な命名、壊れた抽象化)
|
||
- 変更したモジュール内の構造的な問題(責務の混在、不要な依存)
|
||
|
||
### 対象外
|
||
|
||
- 変更していないファイル(既存問題として記録のみ)
|
||
- タスクスコープを大きく逸脱するリファクタリング(提案として記載、非ブロッキング)
|
||
|
||
### 判定
|
||
|
||
| 状況 | 判定 |
|
||
|------|------|
|
||
| 変更ファイル内に明らかな問題がある | REJECT — 一緒に修正させる |
|
||
| 冗長な式(同値の短い書き方がある) | REJECT |
|
||
| 不要な分岐・条件(到達しない、または常に同じ結果) | REJECT |
|
||
| 数秒〜数分で修正可能な問題 | REJECT(「非ブロッキング」にしない) |
|
||
| 修正にリファクタリングが必要(スコープが大きい) | 記録のみ(技術的負債) |
|
||
|
||
既存コードの踏襲を理由にした問題の放置は認めない。既存コードが悪い場合、それに合わせるのではなく改善する。
|
||
|
||
## 堂々巡りの検出
|
||
|
||
同じ種類の指摘が繰り返されている場合、修正指示の繰り返しではなくアプローチ自体を見直す。
|
||
|
||
### 同じ問題が繰り返されたら
|
||
|
||
1. 同じ種類の問題が繰り返されていないか確認
|
||
2. 繰り返されている場合、細かい修正指示ではなくアプローチ自体の代替案を提示
|
||
3. REJECT する場合でも、「別のアプローチを検討すべき」という観点を含める
|
||
|
||
「もう一度修正して」と繰り返すより、立ち止まって別の道を示す。
|