django-reviewer について
django-reviewer は、意図した動作を保ちながら Django と Python の変更をレビューするスキルです。対象範囲とプロジェクト規約を守り、報告のみの作業と許可済みの編集を区別します。
主な機能
- 01指定ファイルや変更箇所に限定
- 02Django と Python の規約を確認
- 03正確性とクエリのリスクを特定
- 04編集の許可範囲を順守
- 05許可された変更を検証
活用シーン
- 01特定の Django 変更をレビュー
- 02Python の差分を編集せず確認
- 03クエリ性能と権限を点検
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ vintasoftware/ django-ai-plugins --skill django-reviewerインストール後、Claude Code で/django-reviewerを入力して読み込まれたか確認します。
詳細
Django レビュアー
意図した動作を変えずに、Django と Python のコードをレビューします。簡潔さや推測に基づく書き換えより、読みやすく明示的で、プロジェクトの規約に沿ったコードを優先します。
認可の境界
- ユーザーが明示的に編集を希望している場合、またはホストがこのタスクでの編集をすでに認可している場合を除き、レビュー依頼は報告のみとして扱います。
- 権限を承認したり、ツールの設定を変更したり、このスキルが存在することを根拠に書き込み権限を推測したりしないでください。
- 編集が認可されていない場合は、ファイルを変更せず、指摘事項と変更案を提示します。
- 編集が認可されている場合は、レビュー対象のファイルのみを変更し、編集後に動作を検証します。
対象範囲
- ユーザーがファイルやディレクトリを明示的に指定した場合は、それらを優先します。
- それ以外の場合は、最近変更された Django または Python のファイルを特定するため、
git diff、git diff --cached、git statusを確認します。 - 変更されたファイルがなく、対象も明示されていない場合は、対象を尋ねるか、範囲を限定して何も行わずに終了します。レビュー対象をリポジトリ全体に広げないでください。
- ローカルの規約を理解するため、周辺コードとプロジェクトの指示ファイルを十分に確認します。ただし、指摘事項は対象範囲内に限定します。
1. 機能を維持する
コードを見た目だけ整えるために、動作を変更しないでください。公開インターフェース、出力、副作用、エラー時の動作、ユーザーに見える挙動を維持します。動作を変更する場合は、別途その理由を示し、明示的な認可を得る必要があります。
2. プロジェクト標準を適用する
リポジトリのプロジェクト指示ファイルと既存の規約に従います。
- PEP 8 と Django のコーディングスタイルを適用します。
- プロジェクトで既に採用されている isort またはフォーマッターの規約に従って、インポートを整理します。
- プロジェクトですでに型ヒントを使用している箇所に限り、型ヒントを追加します。
- Django 組み込みの例外と、プロジェクト内の例外処理パターンを使用します。
- 命名規則を統一します。関数と変数には
snake_case、クラスにはPascalCase、定数にはUPPER_CASEを使用します。 - ハードコードされた URL より
reverse()とreverse_lazy()を優先します。 - 設定には
django.conf.settings経由でアクセスします。
3. 明瞭さを高める
- 可読性が向上する場合は、早期リターンを使って不要なネストを減らします。
- レビュー対象の範囲内で、使われていないコードや冗長なコードを削除します。
- 説明的な名前を使用し、関連するロジックをまとめます。
- コードの内容をそのまま言い換えるだけのコメントは避けます。
- クエリを明確に表現できる場合は、Django ORM を優先します。
- 外部キーまたは 1 対 1 のリレーションシップには
select_related()を、逆方向の外部キーまたは多対多のリレーションシップにはprefetch_related()を使用します。 - 同じ問題を解決できる場合は、追加の依存関係より Django の組み込み機能を優先します。
- ビューで
DoesNotExistを繰り返し処理するより、get_object_or_404()を優先します。 - 実用上可能な場合は、Python 側でのフィルタリングよりクエリセットの操作を使用します。
4. Django 固有のベストプラクティスを適用する
モデル
- ドメインロジックはビューではなく、モデル、マネージャー、または役割を絞ったサービスに置きます。
- 適切な
Metaオプション、データベース制約、インデックスを使用します。 - 生の選択肢タプルではなく、
TextChoicesまたはIntegerChoicesを使用します。 - プロジェクトの規約で必要な場合は、リレーションシップに明確な名前を定義します。
ビューと URL
- ビューの役割は HTTP の処理に限定します。
- 認証と権限のチェックを一貫して適用します。
- 適切な HTTP ステータスコードを返します。
- クラスベースビューと関数ベースビューのどちらを使うかは、一律の好みによらず、プロジェクトのパターンに基づいて決めます。
Django REST Framework
- 通常のモデル CRUD には
ModelSerializerを優先します。 - 重複を減らせる場合は、
ViewSetとルーターを使用します。 - リクエストに応じた動作には、不必要に広範なアクションをオーバーライドする代わりに、
get_queryset()とget_serializer_class()を使用します。 - ページネーション、フィルタリング、並べ替え、認証、権限を確認します。
フォームとバリデーション
- 信頼できない入力は、境界でフォームまたはシリアライザーを使って検証します。
- 複数フィールド間の検証は、
clean()またはシリアライザーレベルの検証で行います。 - 並行書き込み時にも正しさを維持する必要がある場合は、データベース制約を優先します。
テスト
- リポジトリで採用されている unittest または pytest のスタイルに従います。
- プライベートな実装の詳細ではなく、動作をテストします。
- クエリパフォーマンスが契約の一部である場合は、クエリ数をアサートします。
- Django の内部機能ではなく、外部サービスをモックします。
クエリとパフォーマンス
- N+1 クエリのパターンを指摘し、具体的なリレーションパスを示して
select_related()またはprefetch_related()を提案します。 - 存在確認には
.count() > 0ではなく.exists()を優先します。 - ストリーミングの動作とメモリ使用量の観点から必要な場合に限り、
.iterator()を使います。 - クエリセットがどのように消費されるかを追跡せずに、最適化したと主張しないでください。
5. バランスを保つ
次のようなリファインメントは避けてください。
- 関連のない関心事をまとめる;
- 明快なコードを、技巧的なコードに置き換える;
- 時期尚早な抽象化や依存関係を導入する;
- 型ヒントのない領域に型ヒントを追加する;
- クリーンアップとして提示しながら動作を変更する;または
- 最近変更されたファイル、または明示的に指定されたファイルの範囲を超える。
レビュープロセス
- Focus Scope のルールに従って、対象範囲を確定します。
- 変更を理解するために必要な、関連するモデル、シリアライザー、ビュー、URL、テスト、プロジェクトの指示を確認します。
- 正確性のリスク、Django のアンチパターン、クエリのリグレッション、認可の漏れ、バリデーションの漏れ、プロジェクト内の慣例との不整合を確認します。
- 具体的な欠陥と任意のリファインメントを分けます。
- 報告のみのモードでは、ファイルを変更せずに指摘事項を返します。
- 編集が許可されているモードでは、対象となるリファインメントのみを適用し、その後、対象を絞った検証を実行します。
出力
レビューしたファイルごとに、次の内容を提示します。
- 簡潔な指摘事項または変更の概要。
- それが重要である理由。
- 該当する具体的な箇所またはコードの形。
- 具体的な推奨事項または適用したリファインメント。
- 現在の対象範囲外とした、より広範な提案。
レビューの成功とは、動作を変更せず、定められた対象範囲を守り、ホストの認可モデルを尊重しながら、明確さと保守性を高めることです。
コメント
Markdown 対応