django について
モデル、ビュー、ルーティング、フォーム、管理画面、テストを扱う Django 開発者向けのスキルです。プロジェクト構成、ORM、リクエスト処理、テストの実践方法を案内します。
主な機能
- 01Django アプリ構成の指針
- 02モデルと ORM クエリの実践
- 03ビューと URL の処理パターン
- 04認証とクエリ最適化
- 05pytest-django のテスト指針
活用シーン
- 01ドメイン概念ごとのアプリ整理
- 02CRUD ビューの構築とルーティング
- 03N+1 データベースクエリの削減
- 04データベースを使うビューのテスト
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ microsoft/ debugpy --skill djangoインストール後、Claude Code で/djangoを入力して読み込まれたか確認します。
詳細
スキル:Django
モデル、ビュー、テンプレート、テストを含む、Django を使った Web 開発のベストプラクティスです。
使用するタイミング
Django プロジェクトで作業する際にこのスキルを適用してください。対象はモデル、ビュー、URL ルーティング、テンプレート、フォーム、管理画面、管理コマンドです。
プロジェクト構成
- Django の標準的なアプリ構成に従います:
models.py、views.py、urls.py、admin.py、tests.py、forms.py。 - 各アプリは単一のドメイン概念に集中させ、関連のないモデルを含む「何でも入りアプリ」は避けます。
- 環境ごとの設定には
settings/base.py、settings/dev.py、settings/prod.pyを使用します。
モデル
- 管理画面での表示やデバッグ時の可読性を高めるため、モデルには必ず
__str__を定義します。 Meta.orderingは控えめに使用します。すべてのクエリにORDER BYが追加されるためです。クエリセットで明示的に.order_by()を指定してください。filter()/order_by()に使用するフィールドには、データベースインデックス(db_index=True、Meta.indexes)を使用します。- 制約付きフィールドには、単なる文字列より
choices(またはTextChoices/IntegerChoices)を指定したCharFieldを優先します。 - 複雑なクエリには
F()式とQ()オブジェクトを使用して、競合状態を避け、可読性を高めます。
ビュー
- CRUD にはクラスベースビュー(CBV)を優先し、単発のロジックには関数ベースビューを優先します。
- 必ず
querysetを明示的に設定するか、get_queryset()をオーバーライドします。変更可能なクラスレベルの状態に依存してはいけません。 - N+1 クエリの問題を避けるため、
select_related()とprefetch_related()を使用します。 LOGIN_URLを設定し、@login_required/LoginRequiredMixinを一貫して使用します。
テスト
- データベースにアクセスするには、
@pytest.mark.django_dbとpytest-djangoを使用します。 - 明示的なトランザクション制御が必要な場合に限り
TestCaseまたはTransactionTestCaseを優先し、それ以外の場合は pytest のフィクスチャを使用します。 - サーバーを起動せずにビューをテストするには、
RequestFactoryまたはClientを使用します。 - テストでモデルを手動で構築する代わりに、
baker.make()(model-bakery)またはファクトリーを使用します。
注意点
sync_to_asyncでラップせずに、非同期ビューでブロッキング I/O を実行してはいけません。- 循環インポートを避けるため、
settings.pyやurls.pyのモジュールレベルでモデルをインポートしないでください。 - シークレットを
settings.pyに保存してはいけません。環境変数を使用します。 - ORM でクエリを本当に表現できない場合を除き、生の SQL は避けます。
コメント
Markdown 対応