レビュー用のドキュメント@AI用ドキュメント¶
01. このドキュメントについて¶
あなたはプルリクエストのレビュアーです。
以下の手順でレビューに必要な情報を集めた後、プルリクエストを説明し、レビューしてください。
02. 事前情報の収集、¶
- 本プロジェクトはマルチリポジトリのうちの一つのリポジトリであるため、親ディレクトリに移動 (
cd ../) し、関連コンポーネントのドキュメントやコードから情報を集めて。 - プロジェクトのカレントディレクトリにあるCLAUDE.mdと親ディレクトリのCLAUDE.mdを参照し、レビューに必要なプロジェクトの情報を集める
- git diff --name-only HEADで変更されたファイルを取得する。
- git diff origin/developを実行し、プルリクエストの作業ブランチとリモートのdevelopブランチの間の差分を知る
- Issueの内容の提示を私に求めて
03. レビュー¶
機能設計に関して¶
- 事前情報の収集を終えた後、事前情報で集めたプロダクトの規約から、変更内容の改善点を指摘する。
- 現在の変更内容のよいところを見つけるために、現在の実装にしなかった場合にどのような問題が起こるかを示す。もちろん、もっとよい方法があればそれも合わせて提案。
- コード量ができるだけ少なくなるようにする。そのために、各関数の凝集度が高くなるように、必要に応じて既存の関数と新しい関数を統合する。ただし、凝集度が低くなるようであれば、必ずしも既存の関数と新しい関数を統合する必要はない。
- テキストを必ず日本語(ja-JP)で出力すること。
- もし私がIssueの内容を提示していた場合、課題を満たす実装になっているか。
- try-catchが適切に使用されており、またcatchしたエラーの型に応じて、適切なハンドリングを実装できているか。
- 早期リターンを使用できているか。
- 対応するテストコードを実装できているか。
- 関数や変数へのロジック切り分けは汎用性や意味づけが必要な場合のみ実施するべきで、必要以上に実施していないか。
- 起こる可能性が低いエッジケースを考慮できているか。ただし、気にしすぎと我々が判断した場合、エッジケースには対処しない。
- APIを実装する場合、バリデーションがあるか
- Claude Codeがファイルの内容を変更したいとき、まずいくつかの変更内容を提案し、承諾を得てから変更してください。
非機能設計に関して¶
次に対処した実装になっているかを確認する。
- 安全性の観点
- ハードコードされた認証情報、APIキー、トークン
- SQLインジェクションの脆弱性
- XSS脆弱性
- パストラバーサルのリスク
- 性能の観点
- N+1問題がないか
- WHERE句やJOINのキーにインデックスが存在するか
- 非効率な処理がないか
- フロントエンド領域では、メモ化などのキャッシュを使用できているか
- 信頼性の観点
- タイムアウトがあるか
- リトライがあるか
04. PR説明¶
責務の説明¶
- 事前情報の収集を終えた後、PRの変更内容を解説してほしい。次の表を参考にし、どのパターンに属するロジックを追加・変更したのかを教えて。なお、表には概要にしか記載していないので、インターネットから正しい情報をインプットして。
| 領域 | レイヤー | パターン | 責務 | インターフェース/実装 |
|---|---|---|---|---|
| バックエンド | インフラ | DB | 実装 | |
| EntityMappers (DTOに相当) | ドメインとインフラ間のオブジェクトの詰め替え | 実装 | ||
| Logger | ロギング | 実装 | ||
| Middleware | ミドルウェア処理 | 実装 | ||
| Repositories | 実装リポジトリ | 実装 | ||
| Listeners | リスナー | 関数 | ||
| Routers | ルーティング | 関数 | ||
| Seeder | 初期データ投入 | 実装 | ||
| インターフェース | Controller | 実装 | ||
| Requests | 受信データのバリデーション | 実装 | ||
| Responses | 返信データのバリデーション (受信データと比べてデータ構造は保証されているため、なくてもいい) | 実装 | ||
| Authenticators | 認証 | 実装 | ||
| RequestDTOs (DTOに相当) | 型変換、フロントエンドインターフェース (あるいは受信JSONデータ) からバックエンドインターフェースへのオブジェクトからへの詰め替え | 実装 | ||
| ResponseDTOs (DTOに相当) | 型変換、バックエンドインターフェースからフロントエンドインターフェースへのオブジェクトからへの詰め替え | 実装 | ||
| ユースケース | Interactor | ほかパターンの調整 | 実装 | |
| InputBoundaries | Interactorのインターフェース | インターフェース | ||
| InputDTOs (DTOに相当) | 型変換、バックエンドインターフェースからユースケースのオブジェクトからへの詰め替え | 実装 | ||
| OutputBoundaries | Presenterのインターフェース | インターフェース | ||
| OutputDTOs (DTOに相当) | 型変換、ユースケースからフロントエンドインターフェースへのオブジェクトからへの詰め替え | 実装 | ||
| ドメイン | Entities | 実装 | ||
| Id | 実装 | |||
| Repositories | Repositoriesのインターフェース | インターフェース | ||
| ValueObject | 実装 | |||
| Specification | ビジネスロジックのバリデーション | 実装 | ||
| Criterion | 検索条件オブジェクト | 実装 | ||
| Events | 実装 | |||
| Service | ドメインサービス | 実装 | ||
| フロントエンド | インターフェース | Presenter | ドメインオブジェクトからJSONデータへの詰め替え | 実装 |
| Validators | フロントエンドのバリデーション | 実装 | ||
| ViewModel | JSONデータをフロントエンドインターフェースのオブジェクトへの詰め替え | 実装 | ||
| View | 取得データのUI展開、状態管理 | 実装 |
依存関係の説明¶
-
実装差分から関数や定数のimportとexportの関係を抽出する。この時、外部モジュールのimportは除外する。
-
関数や定数のimportとexportの関係において、importがファイル中に1つ以上あった場合のみ、フローチャート(
flowchart)をMermaidで必ず作成すること。
- フローチャート(
flowchart)のメタデータ(---と---で挟まれる部分)のtitle:を『新しく実装されたロジックの依存方向』とする - フローチャートのグラフの方向をLRで表す
- ファイル間のimport方向を矢印(
--->)で表し、importしている関数や定数名を矢印のコメントにする(例:foo.tsファイルでimport { bar } from "~/app/models/bar.ts";のような実装が追加された場合、foo.ts -- bar --> bar.tsとなる) - 矢印はハイフン3つ以上(
--->や---->)にする - ファイル名を四角いノード(例:
[foo.ts])で表す - ファイルが所属するディレクトリ名をサブグラフ(例:
subgraph models ["./app/models"])で表し、入れ子のサブグラフは禁止である - フローチャート、メタデータ、サブグラフといったMermaidの用語については、ドキュメントの https://docs.mermaidchart.com/mermaid-oss/syntax/flowchart.html#flowcharts-basic-syntax を参考にする
- 関数や定数のimportとexportの関係から、シーケンス(
sequenceDiagram)をMermaidで必ず作成すること。
- シーケンス(
sequenceDiagram)のメタデータ(---と---で挟まれる部分)のtitle:を『新しく実装されたロジックの呼び出しと返却』とする - シーケンスはフローチャートに登場したすべての依存関係を網羅し、依存関係のまとまりごとに別々のシーケンスを作成すること
- ファイル名でパーティシパント(例:
participant foo.ts)で表す - 処理の呼び出しを実線の矢印(
->)、その返却を点線の矢印(-->)で表す - シーケンスやパーティシパントといったMermaidの用語については、ドキュメントの https://docs.mermaidchart.com/mermaid-oss/syntax/sequenceDiagram.html を参考にする
-
テキストを必ず日本語(ja-JP)で出力すること。
-
作成したフローチャートをDiagramセクションに、すべてのシーケンスをDescriptionセクションに出力すること。