Use Cases

Claude CodeでPython開発を効率化する活用法

Claude CodeをPython開発で活用する方法を解説。FastAPI、データ処理、テスト自動化まで実践的なプロンプト例とコードサンプルを紹介します。

Python開発でClaude Codeを使いこなす

Claude CodeはTypeScriptだけでなくPython開発でも威力を発揮します。FastAPIでのWeb開発、データ処理スクリプト、テスト作成まで幅広く対応できます。

FastAPIアプリケーションの構築

> FastAPIでユーザー管理APIを作成して。
> - Pydanticでバリデーション
> - SQLAlchemy + asyncpg でDB接続
> - CRUDエンドポイント
> - JWT認証
from fastapi import FastAPI, HTTPException, Depends
from pydantic import BaseModel, EmailStr
from sqlalchemy.ext.asyncio import AsyncSession
from datetime import datetime

app = FastAPI(title="User Management API")

class UserCreate(BaseModel):
    email: EmailStr
    name: str
    password: str

    class Config:
        json_schema_extra = {
            "example": {
                "email": "[email protected]",
                "name": "田中太郎",
                "password": "securepassword123",
            }
        }

class UserResponse(BaseModel):
    id: str
    email: str
    name: str
    is_active: bool
    created_at: datetime

    class Config:
        from_attributes = True

@app.post("/users", response_model=UserResponse, status_code=201)
async def create_user(
    user_data: UserCreate,
    db: AsyncSession = Depends(get_db),
):
    existing = await get_user_by_email(db, user_data.email)
    if existing:
        raise HTTPException(status_code=409, detail="メールアドレスは既に登録済み")

    hashed = hash_password(user_data.password)
    user = await create_user_in_db(db, user_data, hashed)
    return user

@app.get("/users/{user_id}", response_model=UserResponse)
async def get_user(
    user_id: str,
    db: AsyncSession = Depends(get_db),
):
    user = await get_user_by_id(db, user_id)
    if not user:
        raise HTTPException(status_code=404, detail="ユーザーが見つかりません")
    return user

データ処理スクリプトの生成

pandasやpolarsを使ったデータ処理もClaude Codeで高速に書けます。

> CSVファイルを読み込んで以下の処理を行うスクリプトを作成して。
> - 欠損値の補完(数値は中央値、文字列は"不明")
> - 日付カラムのパース
> - 売上の月次集計
> - 結果をExcelで出力
import polars as pl
from pathlib import Path

def process_sales_data(input_path: str, output_path: str) -> None:
    df = pl.read_csv(input_path)

    # 欠損値の補完
    numeric_cols = [c for c in df.columns if df[c].dtype in [pl.Float64, pl.Int64]]
    string_cols = [c for c in df.columns if df[c].dtype == pl.Utf8]

    for col in numeric_cols:
        median_val = df[col].median()
        df = df.with_columns(pl.col(col).fill_null(median_val))

    for col in string_cols:
        df = df.with_columns(pl.col(col).fill_null("不明"))

    # 日付パースと月次集計
    df = df.with_columns(
        pl.col("date").str.to_date("%Y-%m-%d").alias("date_parsed")
    )

    monthly = (
        df.group_by(pl.col("date_parsed").dt.truncate("1mo"))
        .agg([
            pl.col("amount").sum().alias("total_sales"),
            pl.col("amount").mean().alias("avg_sales"),
            pl.col("amount").count().alias("transaction_count"),
        ])
        .sort("date_parsed")
    )

    monthly.write_excel(output_path)
    print(f"処理完了: {len(monthly)}か月分のデータを出力")

if __name__ == "__main__":
    process_sales_data("sales.csv", "monthly_report.xlsx")

pytestでのテスト生成

> process_sales_data 関数のテストをpytestで作成して。
> フィクスチャで一時CSVを作成するパターンで。
import pytest
import polars as pl
from pathlib import Path
from process_sales import process_sales_data

@pytest.fixture
def sample_csv(tmp_path: Path) -> Path:
    csv_path = tmp_path / "test_sales.csv"
    csv_path.write_text(
        "date,product,amount\n"
        "2026-01-15,商品A,1000\n"
        "2026-01-20,商品B,2000\n"
        "2026-02-10,商品A,1500\n"
        "2026-02-15,,\n"
    )
    return csv_path

def test_process_creates_output(sample_csv: Path, tmp_path: Path):
    output = tmp_path / "output.xlsx"
    process_sales_data(str(sample_csv), str(output))
    assert output.exists()

def test_monthly_aggregation(sample_csv: Path, tmp_path: Path):
    output = tmp_path / "output.xlsx"
    process_sales_data(str(sample_csv), str(output))
    result = pl.read_excel(output)
    assert len(result) == 2  # 1月と2月

def test_null_handling(sample_csv: Path, tmp_path: Path):
    output = tmp_path / "output.xlsx"
    process_sales_data(str(sample_csv), str(output))
    result = pl.read_excel(output)
    # 欠損値が補完されて集計に含まれている
    assert result["transaction_count"].sum() == 4

テスト全体の設計についてはテスト戦略完全ガイドを参照してください。

型ヒントの追加

既存のPythonコードに型ヒントを追加させることもできます。

> src/ 以下のPythonファイルに型ヒントを追加して。
> mypyで --strict チェックが通るようにして。

CLAUDE.mdでPythonルールを設定

## Python開発ルール
- Python 3.12以上を対象
- 型ヒントを必ず付与
- フォーマッターはruff format、リンターはruff check
- テストはpytest、カバレッジ80%以上

API開発のパターンはAPI開発を高速化する方法を、CLAUDE.mdの書き方はCLAUDE.mdの書き方完全ガイドも参考にしてください。

まとめ

Claude CodeはPython開発でも高い生産性を発揮します。FastAPIアプリ、データ処理、テスト作成まで、明確に仕様を伝えれば高品質なコードが生成されます。

Pythonの詳細はPython公式ドキュメント、Claude CodeについてはAnthropic公式ドキュメントを参照してください。

#Claude Code #Python #FastAPI #データ処理 #バックエンド