| name | code-review-execution |
| description | 作成手順「code-review-execution」(self-evolving-agent から自動同期): コードレビュー実行手順(EM 視点) |
コードレビュー実行手順(EM 視点)
用途: PR レビューを実際に実施するとき。
優先順位の決定は pr-triage、コメント 1 件の書き方は Lesson H を参照。
この手順はその「間」を埋める実行フロー(読む順番・EM 観点・判断基準・教える義務)を定義する。
既存資産との補完関係(読む前に確認)
| 既存資産 | カバーする関心 | この手順が追加するもの |
|---|
pr-triage | どの PR をいつ・誰がレビューするか(優先順位決定) | — |
| Lesson H | コメント 1 件の書き方(What + Why + How、重大度ラベル) | — |
android-self-review スキル | AI による規約・定型パターンの一次チェック | — |
| この手順 | — | PR を開いてから Approve/Request Changes するまでの実行フロー全体 |
Step 0: レビュー前に「PR の意図」を 1 文で掴む(2 分以内)
コードを読む前に必ず行う。先にコードを読むと実装詳細に引き込まれ、設計レベルの問題を見落とす。
確認する順番:
- PR 説明文(何を・なぜ変えるか)
- リンクされた Issue・チケット(背景と要件)
- ファイル変更サマリー(どの範囲・何ファイルが変わるか)
「この PR が達成しようとしていること」を 1 文で言えなければ、コードを読み始めてはいけない。
PR 説明が不十分なら最初のコメントは「変更の目的と背景を教えてください」にする(実装を読む前に)。
Step 1: EM のレビュー観点(IC レビューと意識的に差別化する)
EM がレビューで見る優先順位は個人実装者(IC)と異なる。
| 観点 | EM が問う内容 | IC との差 |
|---|
| チームパターンへの影響 | この変更は既存の設計パターンを壊すか・学習コストを上げるか | EM はチーム全体への波及を見る |
| アーキテクチャ守備 | レイヤー依存方向が守られているか(:ui → :domain → :data、逆依存禁止) | EM は構造。IC は実装 |
| 成長機会の有無 | このコードはチームメンバーの良いお手本になるか | EM はレビューを学習素材にする |
| 再発リスク | 同クラスのバグが他の PR・他のファイルにも潜んでいないか | 一件指摘より根本対処を考える |
EM が自分でレビューしない(委任する)判断基準(pr-triage と連動): アーキテクチャ構造・チームパターンに影響しない実装詳細はシニアに委任し、Andy はスポットチェック(1〜2 点の確認)のみ。
Step 2: 4 層で読む(読む順番を固定する)
読む順番を固定することで「見落とし」と「時間超過」の両方を防ぐ。
Layer 1: テスト(最初に読む理由: 仕様書として使えるから)
Layer 2: 公開 API / インターフェース
Layer 3: 実装ロジック
Layer 4: Android 固有チェック(高頻出リスト)
| リスク | 確認ポイント |
|---|
| メインスレッドブロッキング | IO・ネットワーク操作が Dispatchers.IO か |
| Coroutine スコープ逸脱 | GlobalScope の不使用 / viewModelScope が適切か |
SimpleDateFormat 共有 | スレッドセーフな DateTimeFormatter か ThreadLocal に変更済みか |
Locale / TimeZone 暗黙依存 | フォーマット処理に Locale.JAPAN + ZoneId を明示しているか |
@Composable 副作用漏れ | 副作用が LaunchedEffect / SideEffect 内にあるか / remember の依存キーが正しいか |
| モジュール依存方向 | :ui → :domain → :data の一方向か(逆依存は ⛔ blocker) |
Step 3: 判断基準(Approve / Request Changes / Comment only)
| 判断 | 条件 |
|---|
| Approve(承認) | ⛔ blocker がゼロ。🔴 major が 1 件以下かつ「次 PR での修正」を作者と合意済み |
| Request Changes | ⛔ blocker が 1 件以上。または 🔴 major が複数あり設計方向の修正が必要 |
| Comment only(保留) | 設計の大きな変更が必要で口頭議論の方が速い。コメントに「15 分 sync しましょう」と追記 |
「理想ではないが許容する」の明示的な扱い: 🟡 minor / 💬 nit は Approve しながらコメントを残し、「通す判断をした理由」を 1 行添える(例: 「🟡 minor: 動作影響なし。次スプリントのリファクタ候補として残します」)。黙って Approve しない。
Step 4: 教えるコメントを 1 件以上入れる(EM 固有の責務)
IC がレビュー通過を目標とするのに対し、EM はコメントをチームの学習素材として残すことを目標とする。
教えるコメントの 3 条件:
- 設計パターン・言語仕様・チームルール等の原則を説明している
- 「今回だけでなく次回も使えるルール」になっている
- コード例(理想形)が付いている
Android EM レビューでよく現れる「教え場面」のトリガー:
| トリガー | 教えるべき原則 |
|---|
SimpleDateFormat の共有 | GapWorker による競合・DateTimeFormatter の immutable 性 |
api / implementation の使い分け | モジュール公開 API の基準(依存グラフへの影響) |
Dispatchers.Main でのブロッキング処理 | Coroutine Dispatcher の使い分け・キャンセル協調 |
@Composable 内の副作用直書き | LaunchedEffect / SideEffect の使い分け |
| モジュール依存方向違反 | レイヤードアーキテクチャの依存ルールと理由 |
最低 1 件は「このコメントを読んだ人が次に似たコードを書くとき良くなる」コメントを意図的に入れる。
Step 5: レビュー後の追跡
| 状況 | アクション |
|---|
| Request Changes を送った | 作者が修正 push したら能動的に確認(通知待ちでなく追跡) |
| 口頭 sync を提案した | 当日中に 15 分スロットを確保。2 営業日返信がなければ Slack DM |
| 教えるコメントが横断的な問題を示している | Issue を起票し「他 PR にも同様パターンがあれば同時修正を推奨」と #team-android で共有 |
| 重大な設計問題を発見した | 1on1 アジェンダに追加(PR コメントで責める形にしない) |
Step 6: 出力前の品質チェック(30 秒)
取り込み経緯: 2026-06-27 の auto-kaizen セッションで「コードレビューは eval(eval-code-review.md)・Lesson H(コメント書式)・pr-triage(優先順位)が揃うのに実行フロー procedure だけがゼロ」と自己診断。About Andy に「コードレビューのボトルネック対策」が継続課題として記録されていることが観察可能な選定根拠。android-self-review スキル(AI 一次チェック)との役割分担を明確にする価値もある。