mcpField
P
python-development

python-development

github.com/laurigates開発59189 回インストール1 日前に更新
リポジトリ

python-development について

python-developmentは、開発者やライブラリー作者向けに、Python 3.10以降のコードを書くための言語知識と実践方法を提供します。型ヒント、非同期処理、デバッグ、プロファイリング、Pythonらしい設計を扱い、プロジェクト作成やテストなどは専用スキルに案内します。

主な機能

  1. 01Python 3.10以降の言語機能
  2. 02型ヒントとデコレーター
  3. 03async/awaitとasyncio
  4. 04デバッグとプロファイリング
  5. 05Pythonらしい設計の実践

活用シーン

  1. 01ライブラリーコードへの型ヒント追加
  2. 02非同期タスクフローの設計
  3. 03コードのデバッグとプロファイリング

インストール

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

$npx skills add https://github.com/laurigates/claude-plugins --skill python-development

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

同梱ファイルREFERENCE.md

詳細

Python 開発

Python 言語の基本概念、イディオム、ベストプラクティスです。

このスキルを使う場面

次の場合はこのスキルを使います…次の場合は代わりに専門の関連スキルを使います…
イディオムに沿った Python 3.10 以降のコードを書く場合(match 文、構造的パターンマッチング、PEP 604 のユニオン型)単一のスクリプトや一度限りのコマンドを実行する場合 — uv-run を使います
ライブラリコードに型ヒント、デコレーター、コンテキストマネージャーを追加する場合プロジェクトを初期化する場合、または依存関係を追加する場合 — uv-project-management を使います
async/await のフローを設計する場合、または Python らしいパターンにリファクタリングする場合pytest のテストを書く場合、または実行する場合 — python-testing を使います

主な専門分野

  • Python 言語:最新の Python 3.10 以降の機能とイディオム
  • ベストプラクティス:Python らしいコード、デザインパターン、SOLID 原則
  • デバッグ:対話型デバッグとプロファイリングの手法
  • パフォーマンス:最適化戦略とプロファイリング
  • 非同期プログラミング:async/await パターンと asyncio

最新の Python 機能(3.10 以降)

型ヒント
# Modern syntax (Python 3.10+)
def process_items(
    items: list[str],                    # Not List[str]
    mapping: dict[str, int],             # Not Dict[str, int]
    optional: str | None = None,         # Not Optional[str]
) -> tuple[bool, str]:                   # Not Tuple[bool, str]
    """Process items with modern type hints."""
    return True, "success"

# Type aliases
type UserId = int
type UserDict = dict[str, str | int]

def get_user(user_id: UserId) -> UserDict:
    return {"id": user_id, "name": "Alice"}
パターンマッチング(3.10 以降)
def handle_command(command: dict) -> str:
    match command:
        case {"action": "create", "item": item}:
            return f"Creating {item}"
        case {"action": "delete", "item": item}:
            return f"Deleting {item}"
        case {"action": "list"}:
            return "Listing items"
        case _:
            return "Unknown command"
構造的パターンマッチング
def process_response(response):
    match response:
        case {"status": 200, "data": data}:
            return process_success(data)
        case {"status": 404}:
            raise NotFoundError()
        case {"status": code} if code >= 500:
            raise ServerError(code)

Python のイディオム

コンテキストマネージャー
# File handling
with open("file.txt") as f:
    content = f.read()

# Custom context manager
from contextlib import contextmanager

@contextmanager
def database_connection():
    conn = create_connection()
    try:
        yield conn
    finally:
        conn.close()

with database_connection() as conn:
    conn.execute("SELECT * FROM users")
リスト内包表記
# List comprehension
squares = [x**2 for x in range(10)]

# Dict comprehension
word_lengths = {word: len(word) for word in ["hello", "world"]}

# Set comprehension
unique_lengths = {len(word) for word in ["hello", "world", "hi"]}

# Generator expression
sum_of_squares = sum(x**2 for x in range(1000000))  # Memory efficient
イテレーターとジェネレーター
def fibonacci():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b

# Use generator
fib = fibonacci()
first_ten = [next(fib) for _ in range(10)]

# Generator expression
even_squares = (x**2 for x in range(10) if x % 2 == 0)

デバッグ

対話型デバッグ
import pdb

def problematic_function():
    value = calculate()
    pdb.set_trace()  # Debugger breakpoint
    return process(value)
# Debug on error
python -m pdb script.py

# pytest with debugger
uv run pytest --pdb                     # Drop into pdb on failure
uv run pytest --pdb --pdbcls=IPython.terminal.debugger:TerminalPdb
パフォーマンスのプロファイリング
# CPU profiling
uv run python -m cProfile -s cumtime script.py | head -20

# Line-by-line profiling (temporary dependency)
uv run --with line-profiler kernprof -l -v script.py

# Memory profiling (temporary dependency)
uv run --with memory-profiler python -m memory_profiler script.py

# Real-time profiling (ephemeral tool)
uvx py-spy top -- python script.py

# Quick profiling with scalene
uv run --with scalene python -m scalene script.py
組み込みのデバッグツール
# Trace execution
import sys

def trace_calls(frame, event, arg):
    if event == 'call':
        print(f"Calling {frame.f_code.co_name}")
    return trace_calls

sys.settrace(trace_calls)

# Memory tracking
import tracemalloc

tracemalloc.start()
# ... code to profile
snapshot = tracemalloc.take_snapshot()
top_stats = snapshot.statistics('lineno')
for stat in top_stats[:10]:
    print(stat)

非同期プログラミング

async/await の基本
import asyncio

async def fetch_data(url: str) -> dict:
    async with httpx.AsyncClient() as client:
        response = await client.get(url)
        return response.json()

async def main():
    result = await fetch_data("https://api.example.com")
    print(result)

asyncio.run(main())
並行タスク
async def process_multiple():
    # Run concurrently
    results = await asyncio.gather(
        fetch_data("url1"),
        fetch_data("url2"),
        fetch_data("url3"),
    )
    return results

# With timeout
async def with_timeout():
    try:
        result = await asyncio.wait_for(fetch_data("url"), timeout=5.0)
    except asyncio.TimeoutError:
        print("Request timed out")

デザインパターン

依存性注入
from typing import Protocol

class Database(Protocol):
    def query(self, sql: str) -> list: ...

def get_users(db: Database) -> list:
    return db.query("SELECT * FROM users")
ファクトリーパターン
def create_handler(handler_type: str):
    match handler_type:
        case "json":
            return JSONHandler()
        case "xml":
            return XMLHandler()
        case _:
            raise ValueError(f"Unknown handler: {handler_type}")
デコレーターパターン
from functools import wraps
import time

def timer(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        end = time.time()
        print(f"{func.__name__} took {end - start:.2f}s")
        return result
    return wrapper

@timer
def slow_function():
    time.sleep(1)

ベストプラクティス

SOLID 原則

単一責任:

# Bad: Class does too much
class User:
    def save(self): pass
    def send_email(self): pass
    def generate_report(self): pass

# Good: Separate concerns
class User:
    def save(self): pass

class EmailService:
    def send_email(self, user): pass

class ReportGenerator:
    def generate(self, user): pass
フェイルファスト
def process_data(data: dict) -> str:
    # Validate early
    if not data:
        raise ValueError("Data cannot be empty")
    if "required_field" not in data:
        raise KeyError("Missing required field")

    # Process with confidence
    return data["required_field"].upper()
関数型アプローチ
# Prefer immutable transformations
def process_items(items: list[int]) -> list[int]:
    return [item * 2 for item in items]  # New list

# Over mutations
def process_items_bad(items: list[int]) -> None:
    for i in range(len(items)):
        items[i] *= 2  # Mutates input

プロジェクト構成(src レイアウト)

my-project/
├── pyproject.toml
├── README.md
├── src/
│   └── my_project/
│       ├── __init__.py
│       ├── core.py
│       ├── utils.py
│       └── models.py
└── tests/
    ├── conftest.py
    ├── test_core.py
    └── test_utils.py

関連項目

  • uv-run - スクリプトの実行、一時的な依存関係、PEP 723
  • uv-project-management - プロジェクトのセットアップと依存関係の管理
  • uv-tool-management - CLI ツールのグローバルインストール
  • python-testing - pytest によるテスト
  • python-code-quality - ruff/ty によるリンティングと型チェック
  • python-packaging - パッケージのビルドと公開
  • uv-python-versions - Python インタープリターの管理

参考資料

コメント