mcpField
P
python-development-python-scaffold

python-development-python-scaffold

github.com/sickn33開発48.7k366 回インストール今日更新
リポジトリ

python-development-python-scaffold について

API、Web アプリ、ライブラリ、CLI ツール、汎用アプリ向けに、Python プロジェクトの構成案を作るスキルです。最新のツール、型注釈、テスト、設定、ドキュメントを扱い、既存ファイルの保持と個別設定の検証も促します。

主な機能

  1. 01FastAPI と Django の構成作成
  2. 02ライブラリと CLI の構成定義
  3. 03uv によるプロジェクト初期化
  4. 04テストと開発設定の用意

活用シーン

  1. 01新しい FastAPI サービスの開始
  2. 02Django アプリの構成設計
  3. 03型注釈付き Python ライブラリの作成
  4. 04Python CLI プロジェクトの設定

インストール

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

$npx skills add https://github.com/sickn33/agentic-awesome-skills --skill python-development-python-scaffold

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

詳細

Python プロジェクトのスキャフォールディング

本番環境に対応した Python アプリケーションのスキャフォールディングを専門とする、Python プロジェクトアーキテクチャのエキスパートです。最新のツール(uv、FastAPI、Django)、型ヒント、テスト環境、設定を備えた完全なプロジェクト構成を、現在のベストプラクティスに従って生成します。

このスキルを使用する場面

  • Python プロジェクトのスキャフォールディングに関するタスクやワークフローに取り組む場合
  • Python プロジェクトのスキャフォールディングに関するガイダンス、ベストプラクティス、チェックリストが必要な場合

このスキルを使用しない場面

  • タスクが Python プロジェクトのスキャフォールディングと無関係な場合
  • この範囲外の別の分野やツールが必要な場合

コンテキスト

ユーザーは、適切な構成、依存関係管理、テスト、ツールを備え、一貫性と型安全性のあるアプリケーションを作成する、自動化された Python プロジェクトのスキャフォールディングを必要としています。最新の Python パターンとスケーラブルなアーキテクチャに重点を置いてください。

要件

$ARGUMENTS

手順

1. プロジェクトの種類を分析する

ユーザーの要件からプロジェクトの種類を判断します。

  • FastAPI:REST API、マイクロサービス、非同期アプリケーション
  • Django:フルスタックの Web アプリケーション、管理パネル、ORM を多用するプロジェクト
  • Library:再利用可能なパッケージ、ユーティリティ、ツール
  • CLI:コマンドラインツール、自動化スクリプト
  • Generic:標準的な Python アプリケーション
2. uv でプロジェクトを初期化する
# Create new project with uv
uv init <project-name>
cd <project-name>

# Initialize git repository
git init
echo ".venv/" >> .gitignore
echo "*.pyc" >> .gitignore
echo "__pycache__/" >> .gitignore
echo ".pytest_cache/" >> .gitignore
echo ".ruff_cache/" >> .gitignore

# Create virtual environment
uv venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate
3. FastAPI プロジェクト構成を生成する
fastapi-project/
├── pyproject.toml
├── README.md
├── .gitignore
├── .env.example
├── src/
│   └── project_name/
│       ├── __init__.py
│       ├── main.py
│       ├── config.py
│       ├── api/
│       │   ├── __init__.py
│       │   ├── deps.py
│       │   ├── v1/
│       │   │   ├── __init__.py
│       │   │   ├── endpoints/
│       │   │   │   ├── __init__.py
│       │   │   │   ├── users.py
│       │   │   │   └── health.py
│       │   │   └── router.py
│       ├── core/
│       │   ├── __init__.py
│       │   ├── security.py
│       │   └── database.py
│       ├── models/
│       │   ├── __init__.py
│       │   └── user.py
│       ├── schemas/
│       │   ├── __init__.py
│       │   └── user.py
│       └── services/
│           ├── __init__.py
│           └── user_service.py
└── tests/
    ├── __init__.py
    ├── conftest.py
    └── api/
        ├── __init__.py
        └── test_users.py

pyproject.toml:

[project]
name = "project-name"
version = "0.1.0"
description = "FastAPI project description"
requires-python = ">=3.11"
dependencies = [
    "fastapi>=0.110.0",
    "uvicorn[standard]>=0.27.0",
    "pydantic>=2.6.0",
    "pydantic-settings>=2.1.0",
    "sqlalchemy>=2.0.0",
    "alembic>=1.13.0",
]

[project.optional-dependencies]
dev = [
    "pytest>=8.0.0",
    "pytest-asyncio>=0.23.0",
    "httpx>=0.26.0",
    "ruff>=0.2.0",
]

[tool.ruff]
line-length = 100
target-version = "py311"

[tool.ruff.lint]
select = ["E", "F", "I", "N", "W", "UP"]

[tool.pytest.ini_options]
testpaths = ["tests"]
asyncio_mode = "auto"

src/project_name/main.py:

from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware

from .api.v1.router import api_router
from .config import settings

app = FastAPI(
    title=settings.PROJECT_NAME,
    version=settings.VERSION,
    openapi_url=f"{settings.API_V1_PREFIX}/openapi.json",
)

app.add_middleware(
    CORSMiddleware,
    allow_origins=settings.ALLOWED_ORIGINS,
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

app.include_router(api_router, prefix=settings.API_V1_PREFIX)

@app.get("/health")
async def health_check() -> dict[str, str]:
    return {"status": "healthy"}
4. Django プロジェクト構成を生成する
# Install Django with uv
uv add django django-environ django-debug-toolbar

# Create Django project
django-admin startproject config .
python manage.py startapp core

Django 用の pyproject.toml:

[project]
name = "django-project"
version = "0.1.0"
requires-python = ">=3.11"
dependencies = [
    "django>=5.0.0",
    "django-environ>=0.11.0",
    "psycopg[binary]>=3.1.0",
    "gunicorn>=21.2.0",
]

[project.optional-dependencies]
dev = [
    "django-debug-toolbar>=4.3.0",
    "pytest-django>=4.8.0",
    "ruff>=0.2.0",
]
5. Python ライブラリ構成を生成する
library-name/
├── pyproject.toml
├── README.md
├── LICENSE
├── src/
│   └── library_name/
│       ├── __init__.py
│       ├── py.typed
│       └── core.py
└── tests/
    ├── __init__.py
    └── test_core.py

ライブラリ用の pyproject.toml:

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[project]
name = "library-name"
version = "0.1.0"
description = "Library description"
readme = "README.md"
requires-python = ">=3.11"
license = {text = "MIT"}
authors = [
    {name = "Your Name", email = "[email protected]"}
]
classifiers = [
    "Programming Language :: Python :: 3",
    "License :: OSI Approved :: MIT License",
]
dependencies = []

[project.optional-dependencies]
dev = ["pytest>=8.0.0", "ruff>=0.2.0", "mypy>=1.8.0"]

[tool.hatch.build.targets.wheel]
packages = ["src/library_name"]
6. CLI ツール構成を生成する
# pyproject.toml
[project.scripts]
cli-name = "project_name.cli:main"

[project]
dependencies = [
    "typer>=0.9.0",
    "rich>=13.7.0",
]

src/project_name/cli.py:

import typer
from rich.console import Console

app = typer.Typer()
console = Console()

@app.command()
def hello(name: str = typer.Option(..., "--name", "-n", help="Your name")):
    """Greet someone"""
    console.print(f"[bold green]Hello {name}![/bold green]")

def main():
    app()
7. 開発ツールを設定する

.env.example:

# Application
PROJECT_NAME="Project Name"
VERSION="0.1.0"
DEBUG=True

# API
API_V1_PREFIX="/api/v1"
ALLOWED_ORIGINS=["http://localhost:3000"]

# Database
DATABASE_URL="postgresql://user:pass@localhost:5432/dbname"

# Security
SECRET_KEY="your-secret-key-here"

Makefile:

.PHONY: install dev test lint format clean

install:
	uv sync --extra dev

dev:
	uv run uvicorn project_name.main:app --app-dir src --reload

test:
	uv run pytest -v

lint:
	uv run ruff check .

format:
	uv run ruff format .

clean:
	find . -type d -name __pycache__ -exec rm -rf {} +
	find . -type f -name "*.pyc" -delete
	rm -rf .pytest_cache .ruff_cache

出力形式

  1. プロジェクト構成:必要なすべてのファイルを含む完全なディレクトリツリー
  2. 設定:依存関係とツール設定を含む pyproject.toml
  3. エントリーポイント:メインのアプリケーションファイル(main.py、cli.py など)
  4. テスト:pytest の設定を含むテスト構成
  5. ドキュメント:セットアップ手順と使用方法を記載した README
  6. 開発ツール:Makefile、.env.example、.gitignore

最新のツール、型安全性、包括的なテスト環境を備え、レビューしやすい出発点となる Python プロジェクトの作成を重視してください。

制限事項

  • 上記の範囲に明確に該当するタスクに限り、このスキルを使用してください。
  • 出力を、環境固有の検証、テスト、専門家によるレビューの代替として扱わないでください。
  • 必要な入力、権限、安全性の境界、成功基準が不足している場合は、作業を中断して確認を求めてください。

プロジェクト名とライセンスはユーザーと相談して決め、既存のファイルを保持してください。プレースホルダーを含む例や、アプリケーションモジュールを省略した例は、完全なアプリケーションではありません。.env/.env.local と実際のシークレットファイルを .gitignore に追加し、.env.example には架空の値のみを記載してください。また、選択したバックエンドで src/ レイアウトのパッケージ検出が機能することを確認してください。互換性を確認した依存関係をロックし、実際に実行したチェックのみを報告してください。--extra dev は、ここで示したオプションの dev extra を使うレイアウトに適用されるもので、すべてのプロジェクトの依存関係グループに適用されるわけではありません。

コメント