
【学習メモ】AIチャットアプリのコードレビュー観点と改善プロセス
はじめに
チャット履歴永続化機能のPR(20ファイル以上の変更)をレビューした際のプロセスを振り返ります。大きなPRを効率的にレビューし、本当に重要な問題だけを抽出するための手法です。
レビューの観点(4つの並列レビュー)
-
バグスキャン — ロジックエラー、Race Condition、型安全性
-
Git履歴レビュー — コミット間の整合性、行動変更の意図確認
-
既存PRコメント確認 — 過去のレビュー指摘が反映されているか
-
コメントガイダンス準拠 — コード内コメントの指示が守られているか
信頼度スコアリング
各レビューで発見された問題に0〜100の信頼度スコアをつけ、80%以上のものだけをPRコメントに投稿しました。これにより「念のため」の低品質な指摘を排除し、本当に修正すべき問題に集中できます。
実際のスコアリング結果
| Issue | 信頼度 | 採用 |
|---|---|---|
| Typo: haruto_promt → haruto_prompt | 95% | ✅ |
| Race Condition: セッションID上書き | 90% | ✅ |
| isSessionLoading 未使用 | 90% | ✅ |
| Path Traversal リスク | 85% | ✅ |
| useQuery enabled未設定 | 85% | ✅ |
| キャラ未発見サイレント失敗 | 85% | ✅ |
| Timezone問題 | 70% | ❌ |
| トランザクション未使用 | 70% | ❌ |
| Hydrationミスマッチ | 65% | ❌ |
修正の優先順位
採用した6件を以下の優先度で修正しました:
-
セキュリティ(Path Traversal)— path.basename()で正規化
-
データ整合性(Race Condition)— sessionIdをローカル変数にコピー
-
UX(isSessionLoading)— 入力フォームをdisabled制御
-
堅牢性(キャラ未発見フォールバック、enabled)
-
コード品質(Typo修正)
追加のリファクタリング
レビュー指摘の修正後、ベストプラクティスの観点でさらに改善しました:
-
useEffect + useState → useQuery に置換(TanStack Query導入)
-
zustand storeからサーバーデータ(characters配列)を削除し、queryのdataを直接使用
-
let排除(Map lookup、nullish coalescingで代替)
-
重複コード削減(appendMessageヘルパー、content.trim()の一元化)
-
catch(error: any) → instanceof APIError の型安全なエラーハンドリング
まとめ
-
大きなPRは複数観点で並列レビューすると漏れを減らせる
-
信頼度スコアリング(80%以上のみ採用)でノイズを排除
-
修正はセキュリティ → データ整合性 → UX → コード品質の順で優先
-
レビュー指摘の修正後に、ベストプラクティス視点のリファクタリングも行うと品質が上がる
最新記事
- 【設定・環境構築】OpenNext でNext.js SSGサイトをCloudflare Workersにデプロイする完全ガイド
2026/3/19
- 【実装】Notion calloutブロックをNext.jsでカラフルなUIコンポーネントとして表示する
2026/3/19
- 【トラブルシューティング】Cloudflare Pages → Workers 移行で遭遇したEdge Runtime問題集
2026/3/19
- 【実践】Next.js 13→16メジャーアップグレードの全記録 — 破壊的変更と対応策
2026/3/19
- 【自動化】Gemini Imagen APIでブログのeyecatch画像を自動生成してR2にアップロードする
2026/3/19
- 【実装】Notion APIでブログシステムを構築する(Next.js 13 App Router × SDK v5)
2026/3/19
- 【移行ガイド】microCMSからNotion APIへブログCMSを完全移行する
2026/3/19
- 【トラブルシューティング】本番デプロイで遭遇した問題と解決策まとめ
2026/3/15
- 【環境構築】Next.js × Cloudflare Workers の本番環境を一から構築する
2026/3/15
- 【設定・環境構築】Neon → Prisma Postgres 移行とローカル開発環境の構築
2026/2/26


