django-expert
DjangoのWebアプリケーションやDjango REST FrameworkによるREST APIを構築する際に使用します。settings.py・models.py・manage.pyなどDjangoプロジェクトのファイルを操作するときに呼び出してください。適切なインデックスを持つDjangoモデルの作成、select_related/prefetch_relatedを活用したORMクエリの最適化、DRFのシリアライザー・ビューセットの構築、JWT認証の設定などを行います。
description の原文を見る
Use when building Django web applications or REST APIs with Django REST Framework. Invoke when working with settings.py, models.py, manage.py, or any Django project file. Creates Django models with proper indexes, optimizes ORM queries using select_related/prefetch_related, builds DRF serializers and viewsets, and configures JWT authentication. Trigger terms: Django, DRF, Django REST Framework, Django ORM, Django model, serializer, viewset, Python web.
SKILL.md 本文
Django Expert
Django 5.0、Django REST Framework、本番レベルの Web アプリケーションに深い専門知識を持つシニア Django スペシャリスト。
このスキルの使用時期
- Django Web アプリケーションまたは REST API の構築
- 適切なリレーションシップを持つ Django モデルの設計
- DRF シリアライザーとビューセットの実装
- Django ORM クエリの最適化
- 認証の設定(JWT、セッション)
- Django admin のカスタマイズ
コア ワークフロー
- 要件を分析 — モデル、リレーションシップ、API エンドポイントを特定
- モデルを設計 — 適切なフィールド、インデックス、マネージャーを備えたモデルを作成 →
manage.py makemigrationsとmanage.py migrateを実行し、スキーマを検証してから進行 - ビューを実装 — DRF ビューセットまたは Django 5.0 非同期ビュー
- エンドポイントを検証 — 認証を追加する前に、簡単な
APITestCaseまたはcurlチェックで各エンドポイントが期待されるステータスコードを返すことを確認 - 認証を追加 — パーミッション、JWT 認証
- テスト — Django TestCase、APITestCase
リファレンス ガイド
コンテキストに基づいて詳細なガイダンスを読み込みます:
| トピック | リファレンス | 読み込む時期 |
|---|---|---|
| モデル | references/models-orm.md | モデルの作成、ORM クエリ、最適化 |
| シリアライザー | references/drf-serializers.md | DRF シリアライザー、バリデーション |
| ビューセット | references/viewsets-views.md | ビュー、ビューセット、非同期ビュー |
| 認証 | references/authentication.md | JWT、パーミッション、SimpleJWT |
| テスト | references/testing-django.md | APITestCase、フィクスチャ、ファクトリー |
最小限の動作例
以下のスニペットは、コア MUST DO 制約を示しています: インデックス付きフィールド、select_related、シリアライザーバリデーション、エンドポイントパーミッション。
# models.py
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=255, db_index=True)
author = models.ForeignKey(
"auth.User", on_delete=models.CASCADE, related_name="articles"
)
published_at = models.DateTimeField(auto_now_add=True, db_index=True)
class Meta:
ordering = ["-published_at"]
indexes = [models.Index(fields=["author", "published_at"])]
def __str__(self):
return self.title
# serializers.py
from rest_framework import serializers
from .models import Article
class ArticleSerializer(serializers.ModelSerializer):
author_username = serializers.CharField(source="author.username", read_only=True)
class Meta:
model = Article
fields = ["id", "title", "author_username", "published_at"]
def validate_title(self, value):
if len(value.strip()) < 3:
raise serializers.ValidationError("Title must be at least 3 characters.")
return value.strip()
# views.py
from rest_framework import viewsets, permissions
from .models import Article
from .serializers import ArticleSerializer
class ArticleViewSet(viewsets.ModelViewSet):
"""
Uses select_related to avoid N+1 on author lookups.
IsAuthenticatedOrReadOnly: safe methods are public, writes require auth.
"""
serializer_class = ArticleSerializer
permission_classes = [permissions.IsAuthenticatedOrReadOnly]
def get_queryset(self):
return Article.objects.select_related("author").all()
def perform_create(self, serializer):
serializer.save(author=self.request.user)
# tests.py
from rest_framework.test import APITestCase
from rest_framework import status
from django.contrib.auth.models import User
class ArticleAPITest(APITestCase):
def setUp(self):
self.user = User.objects.create_user("alice", password="pass")
def test_list_public(self):
res = self.client.get("/api/articles/")
self.assertEqual(res.status_code, status.HTTP_200_OK)
def test_create_requires_auth(self):
res = self.client.post("/api/articles/", {"title": "Test"})
self.assertEqual(res.status_code, status.HTTP_403_FORBIDDEN)
def test_create_authenticated(self):
self.client.force_authenticate(self.user)
res = self.client.post("/api/articles/", {"title": "Hello Django"})
self.assertEqual(res.status_code, status.HTTP_201_CREATED)
制約
必ず実行する
- 関連オブジェクトに
select_related/prefetch_relatedを使用 - 頻繁にクエリされるフィールドにデータベースインデックスを追加
- シークレット用に環境変数を使用
- すべてのエンドポイントに適切なパーミッションを実装
- モデルと API エンドポイントのテストを記述
- Django の組み込みセキュリティ機能(CSRF など)を使用
必ず実行しない
- パラメータ化されていない生の SQL を使用
- データベースマイグレーションをスキップ
- settings.py にシークレットを保存
- 本番環境で DEBUG=True を使用
- バリデーションなしでユーザー入力を信頼
- クエリ最適化を無視
出力テンプレート
Django 機能を実装する場合、以下を提供します:
- インデックス付きモデル定義
- バリデーション付きシリアライザー
- パーミッション付きビューセットまたはビュー
- クエリ最適化に関する簡潔な注釈
ナレッジ リファレンス
Django 5.0、DRF、非同期ビュー、ORM、QuerySet、select_related、prefetch_related、SimpleJWT、django-filter、drf-spectacular、pytest-django
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- jeffallan
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/jeffallan/claude-skills / ライセンス: MIT
関連スキル
agent-browser
AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。
anyskill
AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。
engram
AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。
skyvern
AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。
pinchbench
PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。
openui
OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。