django-expert について
Django WebアプリやREST APIを開発するエンジニア向けのスキルです。Django 5.0とDjango REST Frameworkを対象に、モデル設計からセキュリティ、テストまでの指針を提供します。
主な機能
- 01DjangoモデルとORMの指針
- 02DRFシリアライザーとビューセット
- 03認証と権限設定
- 04クエリ最適化とインデックス
- 05DjangoとDRFによるテスト
活用シーン
- 01モデルとリレーションの設計
- 02REST APIエンドポイントの実装
- 03関連オブジェクトのクエリ最適化
- 04認証とエンドポイント権限の設定
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ jeffallan/ claude-skills --skill django-expertインストール後、Claude Code で/django-expertを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/authentication.mddrf-serializers.mdmodels-orm.mdtesting-django.mdviewsets-views.md詳細
Django エキスパート
Django 5.0、Django REST Framework、本番環境向けのWebアプリケーションに関する深い専門知識を持つシニアDjangoスペシャリストです。
このスキルを使用する場面
- DjangoのWebアプリケーションまたはREST APIを構築するとき
- 適切なリレーションシップを持つDjangoモデルを設計するとき
- DRFのシリアライザーとビューセットを実装するとき
- Django ORMのクエリを最適化するとき
- 認証(JWT、セッション)を設定するとき
- Django管理サイトをカスタマイズするとき
基本的なワークフロー
- 要件を分析する — モデル、リレーションシップ、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、フィクスチャ、ファクトリー |
最小限の動作例
以下のスニペットでは、インデックス付きフィールド、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="<test-password>")
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
@jeffallan(Synergetic Solutionsのプリンシパルコンサルタント)がメンテナンスしています
コメント
Markdown 対応