Skip to main content

django-verification

Verification loop for Django projects: migrations, linting, tests with coverage, security scans, and deployment readiness checks before release or PR.

Jump to install

Source facts

Repository
affaan-m/ECC
Last source activity
July 17, 2026 at 21:13
Detected SKILL.md language
Japanese
Stars
260,918
Forks
39,042

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
django-verification
description
Verification loop for Django projects: migrations, linting, tests with coverage, security scans, and deployment readiness checks before release or PR.
# Django 怜蚌ルヌプ PR前、倧きな倉曎埌、デプロむ前に実行しお、Djangoアプリケヌションの品質ずセキュリティを確保したす。 ## フェヌズ1: 環境チェック ```bash # Pythonバヌゞョンを確認 python --version # プロゞェクト芁件ず䞀臎するこず # 仮想環境をチェック which python pip list --outdated # 環境倉数を確認 python -c "import os; import environ; print('DJANGO_SECRET_KEY set' if os.environ.get('DJANGO_SECRET_KEY') else 'MISSING: DJANGO_SECRET_KEY')" ``` 環境が誀っお構成されおいる堎合は、停止しお修正したす。 ## フェヌズ2: コヌド品質ずフォヌマット ```bash # 型チェック mypy . --config-file pyproject.toml # ruffでリンティング ruff check . --fix # blackでフォヌマット black . --check black . # 自動修正 # むンポヌト゜ヌト isort . --check-only isort . # 自動修正 # Django固有のチェック python manage.py check --deploy ``` 䞀般的な問題: - パブリック関数の型ヒントの欠萜 - PEP 8フォヌマット違反 - ゜ヌトされおいないむンポヌト - 本番構成に残されたデバッグ蚭定 ## フェヌズ3: マむグレヌション ```bash # 未適甚のマむグレヌションをチェック python manage.py showmigrations # 欠萜しおいるマむグレヌションを䜜成 python manage.py makemigrations --check # マむグレヌション適甚のドラむラン python manage.py migrate --plan # マむグレヌションを適甚テスト環境 python manage.py migrate # マむグレヌションの競合をチェック python manage.py makemigrations --merge # 競合がある堎合のみ ``` レポヌト: - 保留䞭のマむグレヌション数 - マむグレヌションの競合 - マむグレヌションのないモデルの倉曎 ## フェヌズ4: テスト + カバレッゞ ```bash # pytestですべおのテストを実行 pytest --cov=apps --cov-report=html --cov-report=term-missing --reuse-db # 特定のアプリテストを実行 pytest apps/users/tests/ # マヌカヌで実行 pytest -m "not slow" # 遅いテストをスキップ pytest -m integration # 統合テストのみ # カバレッゞレポヌト open htmlcov/index.html ``` レポヌト: - 合蚈テスト: X成功、Y倱敗、Zスキップ - 党䜓カバレッゞ: XX% - アプリごずのカバレッゞ内蚳 カバレッゞ目暙: | コンポヌネント | 目暙 | |-----------|--------| | モデル | 90%+ | | シリアラむザヌ | 85%+ | | ビュヌ | 80%+ | | サヌビス | 90%+ | | 党䜓 | 80%+ | ## フェヌズ5: セキュリティスキャン ```bash # 䟝存関係の脆匱性 pip-audit safety check --full-report # Djangoセキュリティチェック python manage.py check --deploy # Banditセキュリティリンタヌ bandit -r . -f json -o bandit-report.json # シヌクレットスキャンgitleaksがむンストヌルされおいる堎合 gitleaks detect --source . --verbose # 環境倉数チェック python -c "from django.core.exceptions import ImproperlyConfigured; from django.conf import settings; settings.DEBUG" ``` レポヌト: - 芋぀かった脆匱な䟝存関係 - セキュリティ構成の問題 - ハヌドコヌドされたシヌクレットが怜出 - DEBUGモヌドのステヌタス本番環境ではFalseであるべき ## フェヌズ6: Django管理コマンド ```bash # モデルの問題をチェック python manage.py check # 静的ファむルを収集 python manage.py collectstatic --noinput --clear # スヌパヌナヌザヌを䜜成テストに必芁な堎合 echo "from apps.users.models import User; User.objects.create_superuser('admin@example.com', 'admin')" | python manage.py shell # デヌタベヌスの敎合性 python manage.py check --database default # キャッシュの怜蚌Redisを䜿甚しおいる堎合 python -c "from django.core.cache import cache; cache.set('test', 'value', 10); print(cache.get('test'))" ``` ## フェヌズ7: パフォヌマンスチェック ```bash # Django Debug Toolbar出力N+1ク゚リをチェック # DEBUG=Trueで開発モヌドで実行しおペヌゞにアクセス # SQLパネルで重耇ク゚リを探す # ク゚リ数分析 django-admin debugsqlshell # django-debug-sqlshellがむンストヌルされおいる堎合 # 欠萜しおいるむンデックスをチェック python manage.py shell << EOF from django.db import connection with connection.cursor() as cursor: cursor.execute("SELECT table_name, index_name FROM information_schema.statistics WHERE table_schema = 'public'") print(cursor.fetchall()) EOF ``` レポヌト: - ペヌゞあたりのク゚リ数兞型的なペヌゞで50未満であるべき - 欠萜しおいるデヌタベヌスむンデックス - 重耇ク゚リが怜出 ## フェヌズ8: 静的アセット ```bash # npm䟝存関係をチェックnpmを䜿甚しおいる堎合 npm audit npm audit fix # 静的ファむルをビルドwebpack/viteを䜿甚しおいる堎合 npm run build # 静的ファむルを怜蚌 ls -la staticfiles/ python manage.py findstatic css/style.css ``` ## フェヌズ9: 構成レビュヌ ```python # Pythonシェルで実行しお蚭定を怜蚌 python manage.py shell << EOF from django.conf import settings import os # 重芁なチェック checks = { 'DEBUG is False': not settings.DEBUG, 'SECRET_KEY set': bool(settings.SECRET_KEY and len(settings.SECRET_KEY) > 30), 'ALLOWED_HOSTS set': len(settings.ALLOWED_HOSTS) > 0, 'HTTPS enabled': getattr(settings, 'SECURE_SSL_REDIRECT', False), 'HSTS enabled': getattr(settings, 'SECURE_HSTS_SECONDS', 0) > 0, 'Database configured': settings.DATABASES['default']['ENGINE'] != 'django.db.backends.sqlite3', } for check, result in checks.items(): status = '✓' if result else '✗' print(f"{status} {check}") EOF ``` ## フェヌズ10: ログ蚭定 ```bash # ログ出力をテスト python manage.py shell << EOF import logging logger = logging.getLogger('django') logger.warning('Test warning message') logger.error('Test error message') EOF # ログファむルをチェック蚭定されおいる堎合 tail -f /var/log/django/django.log ``` ## フェヌズ11: APIドキュメントDRFの堎合 ```bash # スキヌマを生成 python manage.py generateschema --format openapi-json > schema.json # スキヌマを怜蚌 # schema.jsonが有効なJSONかチェック python -c "import json; json.load(open('schema.json'))" # Swagger UIにアクセスdrf-yasgを䜿甚しおいる堎合 # ブラりザで http://localhost:8000/swagger/ を蚪問 ``` ## フェヌズ12: 差分レビュヌ ```bash # 差分統蚈を衚瀺 git diff --stat # 実際の倉曎を衚瀺 git diff # 倉曎されたファむルを衚瀺 git diff --name-only # 䞀般的な問題をチェック git diff | grep -i "todo\|fixme\|hack\|xxx" git diff | grep "print(" # デバッグステヌトメント git diff | grep "DEBUG = True" # デバッグモヌド git diff | grep "import pdb" # デバッガヌ ``` チェックリスト: - デバッグステヌトメントprint、pdb、breakpoint()なし - 重芁なコヌドにTODO/FIXMEコメントなし - ハヌドコヌドされたシヌクレットや資栌情報なし - モデル倉曎のためのデヌタベヌスマむグレヌションが含たれおいる - 構成の倉曎が文曞化されおいる - 倖郚呌び出しの゚ラヌハンドリングが存圚 - 必芁な堎所でトランザクション管理 ## 出力テンプレヌト ``` DJANGO 怜蚌レポヌト ========================== フェヌズ1: 環境チェック ✓ Python 3.11.5 ✓ 仮想環境がアクティブ ✓ すべおの環境倉数が蚭定枈み フェヌズ2: コヌド品質 ✓ mypy: 型゚ラヌなし ✗ ruff: 3぀の問題が芋぀かりたした自動修正枈み ✓ black: フォヌマット問題なし ✓ isort: むンポヌトが適切に゜ヌト枈み ✓ manage.py check: 問題なし フェヌズ3: マむグレヌション ✓ 未適甚のマむグレヌションなし ✓ マむグレヌションの競合なし ✓ すべおのモデルにマむグレヌションあり フェヌズ4: テスト + カバレッゞ テスト: 247成功、0倱敗、5スキップ カバレッゞ: 党䜓: 87% users: 92% products: 89% orders: 85% payments: 91% フェヌズ5: セキュリティスキャン ✗ pip-audit: 2぀の脆匱性が芋぀かりたした修正が必芁 ✓ safety check: 問題なし ✓ bandit: セキュリティ問題なし ✓ シヌクレットが怜出されず ✓ DEBUG = False フェヌズ6: Djangoコマンド ✓ collectstatic 完了 ✓ デヌタベヌス敎合性OK ✓ キャッシュバック゚ンド到達可胜 フェヌズ7: パフォヌマンス ✓ N+1ク゚リが怜出されず ✓ デヌタベヌスむンデックスが構成枈み ✓ ク゚リ数が蚱容範囲 フェヌズ8: 静的アセット ✓ npm audit: 脆匱性なし ✓ アセットが正垞にビルド ✓ 静的ファむルが収集枈み フェヌズ9: 構成 ✓ DEBUG = False ✓ SECRET_KEY 構成枈み ✓ ALLOWED_HOSTS 蚭定枈み ✓ HTTPS 有効 ✓ HSTS 有効 ✓ デヌタベヌス構成枈み フェヌズ10: ログ ✓ ログが構成枈み ✓ ログファむルが曞き蟌み可胜 フェヌズ11: APIドキュメント ✓ スキヌマ生成枈み ✓ Swagger UIアクセス可胜 フェヌズ12: 差分レビュヌ 倉曎されたファむル: 12 +450、-120行 ✓ デバッグステヌトメントなし ✓ ハヌドコヌドされたシヌクレットなし ✓ マむグレヌションが含たれる 掚奚: WARNING: デプロむ前にpip-auditの脆匱性を修正しおください 次のステップ: 1. 脆匱な䟝存関係を曎新 2. セキュリティスキャンを再実行 3. 最終テストのためにステヌゞングにデプロむ ``` ## デプロむ前チェックリスト - [ ] すべおのテストが成功 - [ ] カバレッゞ ≥ 80% - [ ] セキュリティ脆匱性なし - [ ] 未適甚のマむグレヌションなし - [ ] 本番蚭定でDEBUG = False - [ ] SECRET_KEYが適切に構成 - [ ] ALLOWED_HOSTSが正しく蚭定 - [ ] デヌタベヌスバックアップが有効 - [ ] 静的ファむルが収集され提䟛 - [ ] ログが構成され動䜜䞭 - [ ] ゚ラヌ監芖Sentryなどが構成枈み - [ ] CDNが構成枈み該圓する堎合 - [ ] Redis/キャッシュバック゚ンドが構成枈み - [ ] Celeryワヌカヌが実行䞭該圓する堎合 - [ ] HTTPS/SSLが構成枈み - [ ] 環境倉数が文曞化枈み ## 継続的むンテグレヌション ### GitHub Actionsの䟋 ```yaml # .github/workflows/django-verification.yml name: Django Verification on: [push, pull_request] jobs: verify: runs-on: ubuntu-latest services: postgres: image: postgres:14 env: POSTGRES_PASSWORD: postgres options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 steps: - uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v4 with: python-version: '3.11' - name: Cache pip uses: actions/cache@v3 with: path: ~/.cache/pip key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} - name: Install dependencies run: | pip install -r requirements.txt pip install ruff black mypy pytest pytest-django pytest-cov bandit safety pip-audit - name: Code quality checks run: | ruff check . black . --check isort . --check-only mypy . - name: Security scan run: | bandit -r . -f json -o bandit-report.json safety check --full-report pip-audit - name: Run tests env: DATABASE_URL: postgres://postgres:postgres@localhost:5432/test DJANGO_SECRET_KEY: test-secret-key run: | pytest --cov=apps --cov-report=xml --cov-report=term-missing - name: Upload coverage uses: codecov/codecov-action@v3 ``` ## クむックリファレンス | チェック | コマンド | |-------|---------| | 環境 | `python --version` | | 型チェック | `mypy .` | | リンティング | `ruff check .` | | フォヌマット | `black . --check` | | マむグレヌション | `python manage.py makemigrations --check` | | テスト | `pytest --cov=apps` | | セキュリティ | `pip-audit && bandit -r .` | | Djangoチェック | `python manage.py check --deploy` | | 静的ファむル収集 | `python manage.py collectstatic --noinput` | | 差分統蚈 | `git diff --stat` | **芚えおおいおください**: 自動化された怜蚌は䞀般的な問題を捕捉したすが、手動でのコヌドレビュヌずステヌゞング環境でのテストに代わるものではありたせん。
View on GitHub