ベストプラクティス
レビューガイダンスの書き方
レビューへの指示と AGENTS.md は、新しいチームメイトが従えるような短く具体的なルールとして書くと最も効果的です。どちらに書くかは、ルールの置き場所を参照してください。
実際のレビューから始める
何かを書く前に、HeyDeer にいくつかのプルリクエストをレビューさせてください。繰り返し発生する見逃しや不要なコメントに対してルールを追加し、一度に追加するのは数個にとどめ、次のレビューを読んで効果を確認します。
短く具体的なルールを書く
- ルールを「優先事項」「対象外」「規約」など、いくつかの見出しの下にまとめます。
- 箇条書き 1 つにつきルールを 1 つ書き、対象となるパス、関数、ライブラリを明記します。
- 理由が明らかでない場合は、理由を添えます。
- 除外は範囲を絞ります。「スクリプトにはコメントしない」ではなく「scripts/one-off/ のファイルにはコメントしない」と書きます。前者は本当の問題まで隠してしまいます。
- コードベースから、誤ったコードと正しいコードを数行ずつ示します。
- 12,000 文字の上限よりかなり短くすることを目指してください。指示が長くなってきたら、規約は AGENTS.md に、必須の要件はリポジトリのチェックに移します。
含めるべきでないもの
| 含めないもの | 理由 | 代わりの方法 |
|---|---|---|
| インデントやインポート順などのフォーマットのルール | フォーマッターやリンターなら、これらを正確に強制できます。 | それらのツールを CI で実行します。 |
| 「もっと徹底的に」「何も見逃さないで」 | HeyDeer が具体的に行動できる内容がありません。 | 重要なリスクを明記するか、詳細の深さや、より広いフィードバックの範囲を使います。 |
| 「あなたはシニアセキュリティエンジニアです」のようなペルソナの設定 | 役割を与えても、何を探すべきかは伝わりません。 | その人が適用するであろうルールを書きます。 |
| 「…の場合はマージをブロック」「小さな PR は承認」 | 指示はレビューの内容を方向付けるものであり、HeyDeer が GitHub で行う操作を決めるものではありません。 | ブランチルールと組み合わせた「問題が見つかった場合はチェックを失敗にする」と、自動承認を使います。 |
| 「テストを実行して」「先にプロジェクトをビルドして」 | HeyDeer はコードを読みます。コード、テスト、ビルドを実行することはありません。 | HeyDeer が読んで検証できることを依頼します。 |
| 「社内 Wiki の基準に従う」のようなリンク | HeyDeer は Web リンクを開けません。 | 重要なルールをコピーするか、ドキュメントをリポジトリに置くか、MCP サーバーを接続します。 |
| 「指摘事項は日本語で書いて」 | 言語は設定項目で、要約や見出しにも適用されます。 | レビューの言語を設定します。 |
書き換え前と書き換え後
書き換え前:
You are a world-class senior engineer. Be extremely thorough and
never miss a bug. Follow our standards at
https://wiki.example.com/engineering/standards. Use 2-space
indentation. Write all comments in Japanese. Run the tests before
you review, and block the PR if anything is wrong.書き換え後:
## Priorities
- Code under src/payments/ is high risk. Every call to chargeCard()
passes an idempotency key derived from the order ID, so a retried
request cannot charge twice.
- Retries use retry() from src/lib/retry.ts, which adds backoff.
Replace hand-written retry loops with it.
## Leave alone
- Files under scripts/one-off/. They run once by hand and are deleted.
- Formatting. The formatter enforces it in CI.
## Conventions
- Return client errors through AppError with a stable code.
Incorrect:
```ts
return Response.json({ error: err.message }, { status: 500 });
```
Correct:
```ts
throw new AppError('INVOICE_NOT_FOUND', 404);
```書き換え後は、ペルソナと Wiki のリンクを具体的なルールに置き換えています。それ以外の内容は、上の表の置き場所に移します。