jpskill.com
💬 コミュニケーション コミュニティ

django-developer

非同期ビューやDjango Ninja、HTMXを活用し、最新のフルスタックWebアプリケーションを効率的に開発するSkill。

📜 元の英語説明(参考)

Expert Django developer specializing in Async Views, Django Ninja (FastAPI-like), and HTMX patterns for modern full-stack apps.

🇯🇵 日本人クリエイター向け解説

一言でいうと

非同期ビューやDjango Ninja、HTMXを活用し、最新のフルスタックWebアプリケーションを効率的に開発するSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o django-developer.zip https://jpskill.com/download/6649.zip && unzip -o django-developer.zip && rm django-developer.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/6649.zip -OutFile "$d\django-developer.zip"; Expand-Archive "$d\django-developer.zip" -DestinationPath $d -Force; ri "$d\django-developer.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して django-developer.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → django-developer フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-17
取得日時
2026-05-17
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

Django Developer

目的

async ビュー、Django Ninja API、および最新のフルスタックパターンに特化した Django および Python ウェブ開発の専門知識を提供します。サーバー駆動型 UI に HTMX、リアルタイム機能に Django Channels、バックグラウンドタスクに Celery を使用して、堅牢な Python ウェブアプリケーションを構築します。

使用する場面

  • スケーラブルな REST API の構築(Django REST Framework または Django Ninja)
  • リアルタイム機能の実装(Django Channels を介した WebSockets)
  • HTMX を使用したフルスタックアプリの開発(サーバー駆動型 UI)
  • バックグラウンドタスクの処理(Celery/Redis)
  • データベースパフォーマンスの最適化(ORM Select/Prefetch、インデックス)
  • ヘビーデューティーなデータモデルの設計(Postgres JSONB、制約)


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

アーキテクチャの選択

プロジェクトの目標は何ですか?
│
├─ **API ファースト (ヘッドレス)**
│  ├─ 型安全 / モダン? → **Django Ninja** (Pydantic ベース、高速)
│  └─ レガシー / エンタープライズ? → **DRF** (必要なものがすべて揃っている、重厚)
│
├─ **フルスタック (モノリス)**
│  ├─ 複雑な UI (SPA)? → **Django + React/Vue** (API 分離)
│  └─ 動的だがシンプル? → **Django + HTMX** (ハイパーメディア駆動、ビルドステップなし)
│
└─ **リアルタイム**
   ├─ シンプルな更新? → **HTMX ポーリング** または **SSE**
   └─ 複雑/双方向? → **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 (M2M) を確認してください。
  • インデックス作成: JSONB 検索には GinIndex、標準的なルックアップには BTree を使用してください。
  • 一括操作: 100 件を超えるバッチには bulk_createbulk_update を使用してください。

危険信号 → database-optimizer にエスカレート:

  • for ループ内で実行される ORM クエリ
  • 10,000 行以上のデータをメモリにロードする(.iterator() を使用)
  • パラメータバインディングなしの「Raw SQL」の使用(SQL インジェクションのリスク)
  • トラフィックをブロックするロックの問題(Select for Update)


ワークフロー 2: HTMX 統合 (サーバー駆動型 UI)

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

手順:

  1. ビュー (Python)

    def contact_list(request):
        contacts = Contact.objects.all()
        # HTMX リクエストの場合、行のみを返す (部分)
        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):
        # 並列 DB クエリ
        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)

            # ここに複雑なロジック
            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() # デフォルト
    published = PublishedManager() # カスタム

パターン 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):
        # グループにブロードキャスト
        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 がインデックスを追加します。
  • コラボレーション: EXPLAIN の分析

(原文がここで切り詰められています)

📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

Django Developer

Purpose

Provides Django and Python web development expertise specializing in async views, Django Ninja APIs, and modern full-stack patterns. Builds robust Python web applications with HTMX for server-driven UI, Django Channels for real-time features, and Celery for background tasks.

When to Use

  • Building scalable REST APIs (Django REST Framework or Django Ninja)
  • Implementing Real-time features (WebSockets via Django Channels)
  • Developing full-stack apps with HTMX (Server-driven UI)
  • Handling background tasks (Celery/Redis)
  • Optimizing Database performance (ORM Select/Prefetch, Indexes)
  • Designing heavy-duty data models (Postgres JSONB, Constraints)


2. Decision Framework

Architecture Selection

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)**

Async Strategy (Django 4.2+)

Feature Sync (WSGI) Async (ASGI) Recommendation
DB Queries User.objects.get() await User.objects.aget() Use Async for high-concurrency I/O (proxies, chat).
Views def view(req): async def view(req): Keep Sync for CPU-bound tasks.
Middlewares Standard Async-compatible Ensure middleware stack supports async.

Database Optimization

  • N+1 Problem: Always check select_related (Foreign Keys) and prefetch_related (M2M).
  • Indexing: Use GinIndex for JSONB search, BTree for standard lookups.
  • Bulk Ops: Use bulk_create and bulk_update for batches > 100 items.

Red Flags → Escalate to database-optimizer:

  • ORM queries executing inside a for loop
  • Loading 10k+ rows into memory (use .iterator())
  • "Raw SQL" usage without parameter binding (SQL Injection risk)
  • Locking issues (Select for Update) blocking traffic


Workflow 2: HTMX Integration (Server-Driven UI)

Goal: Implement an "Infinite Scroll" or "Click to Edit" without writing React.

Steps:

  1. View (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. Template (contact_list.html)

    <!-- Search triggers server request on keyup -->
    <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>


Workflow 4: Async ORM & Views

Goal: High-throughput API endpoint using async/await.

Steps:

  1. View Definition

    # 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. Middleware Compatibility

    • Ensure all middlewares are async-capable (async_capable = True).
    • If blocking middleware exists, wrap it in sync_to_async.


4. Patterns & Templates

Pattern 1: Service Layer (Business Logic)

Use case: Keeping Views and Models skinny.

# 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

Pattern 2: Custom Manager (Query Logic)

Use case: Reusable filters.

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

Pattern 3: Async Chat (Channels)

Use case: WebSocket handling.

# 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. Integration Patterns

frontend-ui-ux-engineer:

  • Handoff: Django Developer creates HTMX partials (_card.html) → UI Dev styles them.
  • Collaboration: Defining "OOB Swaps" (Out of Band) for updating multiple page parts.
  • Tools: Tailwind CSS.

database-optimizer:

  • Handoff: Django Dev logs slow query → DB Optimizer adds Index.
  • Collaboration: Analyzing EXPLAIN ANALYZE output from ORM generated SQL.
  • Tools: Django Debug Toolbar.

devops-engineer:

  • Handoff: Django Dev provides Dockerfile → DevOps configures Gunicorn/Uvicorn.
  • Collaboration: Static files handling (Whitenoise vs S3/CloudFront).
  • Tools: Docker Compose.