review について
プロジェクト規約に沿ってバグを優先的に探し、安全で明白な問題だけを自動修正するコードレビュー用スキルです。指摘を深刻度別に分類し、実質的な修正は確認を待ちます。
主な機能
- 01差分をバッチ単位でレビュー
- 02プロジェクト固有の規約を確認
- 03バグ・修正・提案を分類
- 04安全で明白な問題を自動修正
- 05実質的な修正は承認を待機
活用シーン
- 01ステージ済みまたは未コミットの変更をレビュー
- 02ロジックエラーや競合状態を検出
- 03AGENTS.mdに沿って変更を確認
- 04修正前にレビュー指摘を整理
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ elie222/ inbox-zero --skill reviewインストール後、Claude Code で/reviewを入力して読み込まれたか確認します。
詳細
review
職人の目でコードレビューします。明らかな問題は自動修正し、本当のバグを見つけます。
プロジェクトの規約は @AGENTS.md を参照してください。そのパターンをレビュー基準として適用します。
重要なルール
- 安全で明らかな問題は自動修正する - 当然の修正について許可を求めない
- バグを探す - まずロジックエラー、エッジケース、競合状態を確認する
- 確認を待つ - BUG/FIX は、ユーザーが「go」と言うまで実行しない
- 簡潔にする - 各項目は1行で、選択肢は最後に記載する
- クリック可能なリンクを使う -
path/to/file.ts:123形式のみ
カテゴリ
| カテゴリ | 内容 | 対応 |
|---|---|---|
| [BUG] | ロジックエラー、セキュリティ、データ損失、競合状態 | 報告 → 待機 |
| [FIX] | 型の不足、エラーハンドリングの不足、テストの不足、不要なコード | 報告 → 待機 |
| [AUTO] | 未使用のインポート、デッドコード、console.log、誤字 | すぐに修正 |
| [CONSIDER] | リファクタリング、スタイルに関する意見、あると便利な改善 | 指摘のみ |
AUTO の基準(すべて満たすこと)
- 動作を壊すリスクがゼロ
- 修正が5秒未満でできる
- 判断が不要
AUTO の例:
- 未使用のインポート/変数
- 行末の空白
- console.log(意図的なものを除く)
- デッドコード/到達不能コード
- コメント/文字列の明らかな誤字
AUTO ではないもの(確認が必要):
- 「未使用」の関数を削除する(別の場所で使われている可能性がある)
- 型の変更(動作が変わる可能性がある)
- ロジックの変更全般
- AI 生成の不要なコードの削除(意図的な可能性がある)
プロジェクト固有の確認項目
レビュー時は必ず次の点を確認してください。
もっとシンプルにできるか?
- 不要な抽象化はありませんか?コードを減らして実現できますか?
- 一度しか使わない処理のためにヘルパー/ユーティリティを作っていませんか?
- エラーハンドリング、フィーチャーフラグ、後方互換性のためのシムが過剰ではありませんか?
- 不要なラッパーコンポーネントや HOC はありませんか?
コードを削除できるか?
- デッドコード、未使用のエクスポート、コメントアウトされたブロックはありませんか?
- 再エクスポートやバレルファイルはありませんか(バレルファイルは使いません)?
_varsへの改名や// removedコメントのような後方互換性のためのハックはありませんか?- エクスポートされた型/インターフェースが同じファイル内でしか使われていませんか?
先走った抽象化を避けつつ、DRY にできているか?
- 関数全体や大きなブロックの明らかなコピー&ペーストはありませんか? → リファクタリングする
- ただし、似た行が2~3行ある程度なら問題ありません。早まって抽象化しないでください
- 誤った抽象化は、重複よりも悪いものです
適切な構成になっているか?
- ページ固有のコンポーネントは、そのページの隣に配置する(ネストした
components/サブフォルダーには置かない。ルートディレクトリーではそうしません) - 汎用/再利用可能なコンポーネントは
apps/web/components/に配置する - API ルート:1つのルートにつき1つのリソースとし、複数のデータをまとめたエンドポイントにしない
- 更新処理には POST ルートではなく、サーバーアクションを使う
- バリデーションスキーマは個別の
.validation.tsファイルに配置する - ヘルパー関数はファイルの先頭ではなく末尾に配置する
- すべてのインポートはファイルの先頭に置く。ファイル途中で動的にインポートしない
- バレルファイルは作らない(フォルダー内のすべてを再エクスポートする index.ts)
プロジェクトのパターンに従っているか?(@AGENTS.md を参照)
- GET ルートは
withAuthまたはwithEmailAccountでラップされているか? - レスポンス型は
Awaited<ReturnType<typeof fn>>としてエクスポートされているか? - クライアント側のデータ取得には SWR を使っているか?
- ローディング/エラー状態には
LoadingContentを使っているか? - フォーム送信には
next-safe-action/hooksのuseActionを使っているか? - 重複するインターフェースではなく、
z.infer<typeof schema>を使った Zod スキーマになっているか? - コードから意図が読み取れるか?コメントは「何を」ではなく「なぜ」を説明しているか?
- PII フィールドには
logger.trace()を使っているか? - テストの変更は
.claude/skills/testing/SKILL.mdに従っているか? - テストで
@/utils/loggerをモックしていないか? - 下書き生成プロンプト、検索、ルーティング、または後処理を変更した場合、分析用の
apps/web/utils/ai/reply/draft-attribution.tsのDRAFT_PIPELINE_VERSIONを更新したか?
学びの確認
- この変更から学んだことで、
AGENTS.mdまたはこのレビューファイルに記録すべきことはありますか? - 繰り返し見られるパターンで、文書化すべきものはありますか?
心構え
継承テスト: 前の作者を恨みたくなりませんか?午前2時でも理解できますか?
誇りテスト: 自分の名前をこのコードに添えられますか?
ワークフロー
ステップ 0:範囲を特定してファイルをグループ化する
自動検出:会話内の変更 → ステージ済み → 現在の差分
git diff --cached --name-only # or HEAD
領域/依存関係ごとにファイルをグループ化:
Batch 1: apps/web/app/api/agent/* (3 files)
Batch 2: apps/web/app/(app)/[emailAccountId]/agent/* (related components)
Batch 3: apps/web/utils/actions/* (2 files)
出力: Found X files in Y batches
──────────
ステップ 1:レビュー計画を作成する(TODO)
ファイルの内容を読む前に、TODO リストを作成します。
- [ ] Batch 1: API routes (skills, allowed-actions)
- [ ] Batch 2: agent page components (agent-page, chat, tools)
- [ ] Batch 3: server actions (agent.ts, agent.validation.ts)
バッチの進捗管理には todo_write を使用します。
──────────
ステップ 2:各バッチを処理する
各バッチについて:
- バッチ内のファイルのみ差分を読み取ります(
git diff --cached -- path/to/files) - 問題をレビューして分類します
- [AUTO] 項目をすぐに自動修正します
- [BUG]/[FIX]/[CONSIDER] 項目を記録します
- TODO でバッチを完了済みにします
問題の形式:
1. **[BUG]** Race condition in concurrent saves — `src/db.ts:45`
2. **[FIX]** Missing error boundary — `src/App.tsx:12`
3. **[CONSIDER]** Extract to custom hook — `src/Form.tsx:34`
各バッチの処理後:
Batch 1 done: AUTO: 2 fixed | BUG: 1 | FIX: 2
──────────
ステップ 3:概要と選択肢を提示する(すべてのバッチの処理後)
Total: BUG: X | FIX: X | CONSIDER: X (auto-fixed: Y)
Issues:
1. [BUG] ... — `path:line`
2. [FIX] ... — `path:line`
What to fix?
- a) BUG + FIX [recommended]
- b) BUG only
- c) All including CONSIDER
- d) Custom (e.g., "1,3")
I'll assume a) if you don't specify.
Learnings:
- Any patterns worth adding to AGENTS.md?
- Any new review checks to add to this file?
ここで停止し、選択を待ちます。
──────────
ステップ 4:修正を実行する
同じグループ分けに従って、バッチごとに修正を処理します。
- 選択された修正内容で TODO リストを更新します
- 各バッチについて:
- 関連ファイルを読み取ります
- 修正を適用します
- 完了済みにします
- 該当する場合はリンターを実行します
重大度ガイド
BUG(ロジック/セキュリティ):
- ビジネスロジックの誤り、条件の誤り
- 競合状態、データ損失
- セキュリティ:インジェクション、XSS、シークレットの露出
- 認証ミドルウェアが欠落した API ルート
- Null/undefined が処理されていない
- 破損につながるエッジケース
FIX(品質):
- 型安全性の不足、安全でない型キャスト
- エラーハンドリングの不足
- テストカバレッジの不足
- AI の粗雑なコード(WHAT コメント、不要な try/catch、
as any) - バリデーションの不足
- 分離すべき API ルートの統合
- サーバーアクションではなく、変更に POST ルートを使用
- バレルファイル/再エクスポートのパターン
CONSIDER(意見):
- リファクタリングの機会
- 「別の方法で実装したい」
- パフォーマンスの微細な最適化
- スタイルの好み
Git コマンド
# Staged
git diff --cached
git diff --cached --name-only
# All uncommitted
git diff HEAD
git diff HEAD --name-only
エラーハンドリング
| エラー | 対応 |
|---|---|
| 変更なし | 「git status を確認するか、ファイルを指定してください」 |
| ファイルが見つからない | 利用可能なファイルを一覧表示し、指定を依頼します |
| バイナリファイル | スキップし、概要でその旨を伝えます |
| 大きなファイル(>10k) | 「特定のセクションをレビューしますか?」 |
コメント
Markdown 対応