# 作成した成果物に対して厳格なセルフレビューを実施します 作成したばかりの成果物を見直して、良い点と問題点を洗い出してください。 **重要**: 「この程度なら良いだろう」という甘えは一切許しません。厳格に自己反省を繰り返しながらセルフレビューを実施してください。 $ARGUMENTS ## 実施手順 ### 1. レビュー対象の特定 **AskUserQuestionツール**でレビューモードを質問: - question: 「どのモードでレビューしますか?」 - header: 「レビューモード」 - デフォルト: 変更差分モード 選択肢: - 「変更差分モード(デフォルト)」: `git diff`と`git diff --staged`で変更されたファイルを対象 - 「ファイル指定モード」: 引数で指定されたファイルパスを対象 **変更差分モードの場合**: 1. `git diff --name-only`と`git diff --staged --name-only`で変更ファイルを取得 2. 変更されたファイルをすべて対象とする **ファイル指定モードの場合**: 1. 引数で指定されたファイルパスを対象とする 2. 引数がない場合は、**AskUserQuestionツール**でファイルを選択させる(最大4つ) ### 2. レビューの実施 #### 良い点の洗い出し 客観的に優れている点を具体的に列挙: - 設計・アーキテクチャ(単一責任、適切な抽象化、既存パターンとの整合性) - 実装品質(可読性、命名、関数型スタイル、エラーハンドリング) - 型安全性(`any`型の不使用、適切な型定義) - テスト(主要ケースのカバー) - ドキュメント(必要なコメント) #### 問題点の洗い出し(厳格に) 些細な問題も見逃さず指摘: **重大な問題(即座に修正が必要)**: - `any`型の使用(絶対禁止) - 場当たり的な対応(「一時的」「とりあえず」「一旦」「ひとまず」「可能性」という表現) - 過剰な抽象化(不要なインターフェースや抽象クラス) - 循環依存、密結合な設計 **改善が望ましい点**: - 重複コード(既存実装の未確認) - 既存ライブラリの未活用 - 命令型の配列操作(`array.push()`など、map/filterで書けないか) - 不必要な`interface`の使用(基本的に`type`を使用) - barrel import/export - マジックナンバー/文字列 **軽微な改善点**: - 命名規約、コメント、パフォーマンス、セキュリティなど **問題の優先度判断基準**: - **重大**: システムの安定性・保守性に直接影響、技術的負債となる(any型、場当たり的対応、設計上の欠陥) - **改善**: コード品質に影響、将来的に問題となる可能性(重複、未活用、非効率な実装) - **軽微**: 一貫性・可読性に影響、すぐに問題とはならない(命名、コメント) ### 3. レビュー結果の報告 ```markdown ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 📋 セルフレビュー結果 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 対象: {ファイルパス} 総合評価: {✅ 高品質 / ⚠️ 改善の余地あり / ❌ 重大な問題あり} ## 良い点 ✅ - {具体的な良い点} ## 問題点 ⚠️❌ ### 重大({件数}件) 1. **{カテゴリ}**: {説明}(場所: {パス}:{行}) ### 改善({件数}件) 1. **{カテゴリ}**: {説明}(場所: {パス}:{行}) ### 軽微({件数}件) 1. **{カテゴリ}**: {説明}(場所: {パス}:{行}) ## 自己反省 🔥 {場当たり的な対応があれば50文字以上で反省} ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ``` ### 4. 各問題について個別のAskUserQuestionを作成してまとめて質問 見つかった問題について、**各問題ごとに個別のAskUserQuestion**を用意し、**1つのメッセージでまとめて質問**してください。 **AskUserQuestionツールの制約**: 1回のツール呼び出しで最大4問まで **手順**: 1. 見つかった全問題(重大 → 改善 → 軽微の順)をリストアップ 2. 各問題について、具体的な修正方法の対応方針案を考える 3. 問題を最大4問ずつのグループに分割 4. 各グループについて、1つのメッセージでAskUserQuestionツールを実行 **各質問の形式**: - question: 「{問題の説明}(場所: {パス}:{行})この問題にどう対応しますか?」 - header: 「{問題カテゴリ}」(例: "any型使用", "重複コード") - multiSelect: false **選択肢の作り方**: 各選択肢の`label`に具体的な対応方針案を書く。必ず「対応しない」選択肢も含める。 例(any型使用の問題の場合): - label: "型推論を使用して置き換える" description: "any型を削除し、TypeScriptの型推論に任せる" - label: "明示的な型定義を追加する" description: "適切な型を定義してany型を置き換える" - label: "unknown型に置き換えて型ガードを追加" description: "any型をunknown型に変更し、型ガードで安全性を確保" - label: "対応しない" description: "この問題は許容範囲として対応しない" 例(重複コードの問題の場合): - label: "共通関数として抽出する" description: "重複部分をユーティリティ関数として抽出" - label: "高階関数でパターンを抽象化する" description: "共通パターンを高階関数として実装" - label: "対応しない" description: "この程度の重複は許容範囲として対応しない" **重要**: - labelは必ず具体的な修正方法にすること - 複数の対応方針案を提示し、ユーザーに選ばせる ### 5. Todoタスクの作成 ユーザーが対応方針を選択したら、**TodoWriteツール**で修正タスクを作成: - content: 「{選択された対応方針}」(例: 「型推論を使用してany型を置き換える」) - activeForm: 「{選択された対応方針}中」(例: 「型推論を使用してany型を置き換え中」) - status: "pending" - 優先度順(重大 → 改善 → 軽微)に並べる ## 重要な注意事項 - **絶対に甘えを許さない**: 「この程度なら良いだろう」は禁止 - **場当たり的な対応の検出**: 「一時的」「とりあえず」「一旦」「ひとまず」「可能性」が見つかったら50文字以上の自己反省文を記述