mcpField
D
django-developer

django-developer

github.com/404kidwiz開発98 回インストール
リポジトリ

django-developer について

DjangoでPythonウェブアプリを開発する人向けのスキルです。API、非同期ビュー、HTMXのUI、リアルタイム機能、バックグラウンドタスクを扱い、設計選択やORM最適化、実装パターンも示します。

主な機能

  1. 01Django NinjaとDRFのAPI指針
  2. 02非同期ビューとORMパターン
  3. 03HTMXのサーバー駆動UI
  4. 04Django ChannelsのWebSocket
  5. 05Celeryのバックグラウンドタスク
  6. 06ORMとデータベースの最適化

活用シーン

  1. 01REST APIの構築
  2. 02WebSocket機能の追加
  3. 03HTMXによるフルスタックアプリの作成
  4. 04バックグラウンドジョブの処理

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/404kidwiz/claude-supercode-skills --skill django-developer

インストール後、Claude Code で/django-developerを入力して読み込まれたか確認します。

詳細

Django 開発者

目的

非同期ビュー、Django Ninja API、最新のフルスタックパターンを専門とする、Django および Python のウェブ開発に関する専門知識を提供します。サーバー主導の UI を実現する HTMX、リアルタイム機能を実現する Django Channels、バックグラウンドタスクを実現する Celery を活用し、堅牢な Python ウェブアプリケーションを構築します。

使用する場面

  • スケーラブルな REST API の構築(Django REST Framework または Django Ninja)
  • リアルタイム機能の実装(Django Channels 経由の WebSocket)
  • HTMX を使ったフルスタックアプリの開発(サーバー主導の UI)
  • バックグラウンドタスクの処理(Celery/Redis)
  • データベースパフォーマンスの最適化(ORM の Select/Prefetch、インデックス)
  • 大規模なデータモデルの設計(Postgres JSONB、制約)


2. 意思決定フレームワーク

アーキテクチャの選択
What is the project goal?
│
├─ **API First (Headless)**
│  ├─ Type-safe / Modern? → **Django Ninja** (Pydantic-based, fast)
│  └─ Legacy / Enterprise? → **DRF** (Batteries included, heavy)
│
├─ **Full Stack (Monolith)**
│  ├─ Complex UI (SPA)? → **Django + React/Vue** (API separation)
│  └─ Dynamic but Simple? → **Django + HTMX** (Hypermedia-driven, no build step)
│
└─ **Real-Time**
   ├─ Simple updates? → **HTMX Polling** or **SSE**
   └─ Complex/Bi-directional? → **Django Channels (WebSockets)**
非同期処理の方針(Django 4.2 以降)
機能同期(WSGI)非同期(ASGI)推奨事項
DB クエリUser.objects.get()await User.objects.aget()高い並行性が求められる I/O(プロキシ、チャット)には非同期を使用します。
ビューdef view(req):async def view(req):CPU 負荷の高いタスクには同期処理を使用します。
ミドルウェア標準非同期対応ミドルウェアスタックが非同期処理をサポートしていることを確認します。
データベースの最適化
  • N+1 問題: select_related(外部キー)と prefetch_related(多対多)を必ず確認します。
  • インデックス作成: JSONB 検索には GinIndex、標準的な検索には BTree を使用します。
  • 一括操作: 100 件を超えるバッチには bulk_create と bulk_update を使用します。

危険な兆候 → database-optimizer にエスカレーションしてください:

  • for ループ内で ORM クエリが実行されている
  • 1 万行を超えるデータをメモリに読み込んでいる(.iterator() を使用します)
  • パラメータバインディングなしで「Raw SQL」を使用している(SQL インジェクションのリスク)
  • ロックの問題(Select for Update)によりトラフィックが滞っている


ワークフロー 2:HTMX の統合(サーバー主導の UI)

目標: React を書かずに「無限スクロール」または「クリックして編集」を実装します。

手順:

  1. ビュー(Python)

    def contact_list(request):
        contacts = Contact.objects.all()
        # If HTMX request, return only the rows (partial)
        if request.htmx:
            template = "partials/contact_rows.html"
        else:
            template = "contact_list.html"
        
        return render(request, template, {"contacts": contacts})
    
  2. テンプレート(contact_list.html)

    
    <input type="text" 
           name="search" 
           hx-get="/contacts" 
           hx-trigger="keyup changed delay:500ms" 
           hx-target="#contact-rows">
    
    <table>
      <tbody id="contact-rows">
        {% include "partials/contact_rows.html" %}
      </tbody>
    </table>
    


ワークフロー 4:非同期 ORM とビュー

目標: async/await を使用した高スループットの API エンドポイント。

手順:

  1. ビューの定義

    # views.py
    from asgiref.sync import sync_to_async
    
    async def dashboard_stats(request):
        # Parallel DB queries
        user_count_task = User.objects.acount()
        order_count_task = Order.objects.acount()
        
        user_count, order_count = await asyncio.gather(
            user_count_task, 
            order_count_task
        )
    
        return JsonResponse({"users": user_count, "orders": order_count})
    
  2. ミドルウェアの互換性

    • すべてのミドルウェアが非同期に対応していること(async_capable = True)を確認します。
    • ブロッキングするミドルウェアがある場合は、sync_to_async でラップします。


4. パターンとテンプレート

パターン 1:サービスレイヤー(ビジネスロジック)

用途: ビューとモデルをスリムに保ちます。

# services.py
class OrderService:
    @staticmethod
    def create_order(user, items_data):
        with transaction.atomic():
            order = Order.objects.create(user=user)
            for item in items_data:
                OrderItem.objects.create(order=order, **item)
            
            # Complex logic here
            PaymentGateway.charge(order)
            return order
パターン 2:カスタムマネージャー(クエリロジック)

用途: 再利用可能なフィルター。

class PublishedManager(models.Manager):
    def get_queryset(self):
        return super().get_queryset().filter(status='PUBLISHED', pub_date__lte=timezone.now())

class Article(models.Model):
    # ...
    objects = models.Manager() # Default
    published = PublishedManager() # Custom
パターン 3:非同期チャット(Channels)

用途: WebSocket の処理。

# consumers.py
class ChatConsumer(AsyncWebsocketConsumer):
    async def connect(self):
        self.room_name = "lobby"
        await self.channel_layer.group_add(self.room_name, self.channel_name)
        await self.accept()

    async def disconnect(self, close_code):
        await self.channel_layer.group_discard(self.room_name, self.channel_name)

    async def receive(self, text_data):
        # Broadcast to group
        await self.channel_layer.group_send(
            self.room_name,
            {"type": "chat_message", "message": text_data}
        )


6. 統合パターン

frontend-ui-ux-engineer:
  • 引き継ぎ: Django Developer が HTMX のパーシャル(_card.html)を作成し、UI Dev がスタイルを設定します。
  • 連携: 複数のページ領域を更新する「OOB スワップ」(Out of Band)を定義します。
  • ツール: Tailwind CSS。
database-optimizer:
  • 引き継ぎ: Django Dev が遅いクエリを記録し、DB Optimizer がインデックスを追加します。
  • 連携: ORM が生成した SQL の EXPLAIN ANALYZE の出力を分析します。
  • ツール: Django Debug Toolbar。
devops-engineer:
  • 引き継ぎ: Django Dev が Dockerfile を提供し、DevOps が Gunicorn/Uvicorn を設定します。
  • 連携: 静的ファイルの処理(Whitenoise と S3/CloudFront の比較)。
  • ツール: Docker Compose。

コメント