.claude/skills/python-lambda/SKILL.md
Python 3.13 + Pydantic v2 による Lambda 関数の実装パターン集。handler.py の構造、Pydantic モデル定義、pytest テストの書き方を含む。Lambda 関数を新規実装・修正・テストするときに自動適用する。
npx skillsauth add rikunisikawa/health-logger python-lambdaInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
health-logger の Lambda 関数を Pydantic v2 で型安全に実装し、 pytest で品質を保証するためのパターン集。
import json
import re
import boto3
from models import HealthRecord # Pydantic モデルは分離
# boto3 クライアントはモジュールレベルで初期化
firehose = boto3.client("firehose")
def handler(event: dict, context) -> dict:
# 1. 認証情報取得
user_id = event.get("requestContext", {}) \
.get("authorizer", {}) \
.get("jwt", {}) \
.get("claims", {}) \
.get("sub")
if not user_id:
return _json(401, {"error": "Unauthorized"})
# 2. UUID 検証(SQL インジェクション防止)
if not re.fullmatch(r"[0-9a-f-]{36}", user_id):
return _json(400, {"error": "Invalid user_id"})
# 3. ボディパース + Pydantic バリデーション
try:
body = json.loads(event.get("body") or "{}")
record = HealthRecord(**body, user_id=user_id)
except Exception as e:
return _json(422, {"error": str(e)})
# 4. ビジネスロジック
# ...
return _json(200, {"message": "OK"})
def _json(status: int, body: dict) -> dict:
return {
"statusCode": status,
"headers": {"Content-Type": "application/json"},
"body": json.dumps(body, ensure_ascii=False),
}
from pydantic import BaseModel, field_validator
from datetime import datetime, timezone
class HealthRecord(BaseModel):
user_id: str
fatigue: int
mood: int
motivation: int
flags: int = 0
@field_validator("fatigue", "mood", "motivation")
@classmethod
def validate_score(cls, v: int) -> int:
if not 0 <= v <= 10:
raise ValueError("Score must be 0-10")
return v
@field_validator("flags")
@classmethod
def validate_flags(cls, v: int) -> int:
if not 0 <= v <= 63:
raise ValueError("Flags must be 0-63")
return v
import pytest
from unittest.mock import patch, MagicMock
BASE_EVENT = {
"requestContext": {"authorizer": {"jwt": {"claims": {"sub": "a" * 8 + "-" + "b" * 4 + "-" + "c" * 4 + "-" + "d" * 4 + "-" + "e" * 12}}}},
"body": json.dumps({"fatigue": 5, "mood": 7, "motivation": 6, "flags": 0}),
}
@patch("handler.firehose")
def test_success(mock_fh):
mock_fh.put_record.return_value = {}
res = handler(BASE_EVENT, None)
assert res["statusCode"] == 200
@patch("handler.firehose")
def test_invalid_score(mock_fh):
event = {**BASE_EVENT, "body": json.dumps({"fatigue": 11, "mood": 5, "motivation": 5})}
res = handler(event, None)
assert res["statusCode"] == 422
def test_no_auth():
res = handler({"requestContext": {}, "body": "{}"}, None)
assert res["statusCode"] == 401
@validator → @field_validator, @classmethod 必須)models.py に型定義を分離(handler.py に書かない)handler.py: ハンドラー関数のみ(クライアント初期化・ヘルパー含む)models.py: Pydantic モデルのみtest_handler.py: pytest テストrequirements.txt: 最小限の依存関係documentation
実装変更を検知し、対応するドキュメントの更新が必要な箇所を特定する PM スキル。変更ファイルと既存ドキュメントを照合し、更新候補と更新案を提示する。PR 作成時や documentation エージェントがドキュメントを更新するときに自動参照される。
development
React 18 + TypeScript strict + Amplify Auth v6 のフロントエンド実装パターン集。コンポーネント・カスタムフック・API クライアント・オフラインキューの実装を含む。frontend/ ディレクトリを変更するときに自動適用する。
testing
Terraform による AWS インフラ定義のパターン集。モジュール構造・variables.tf・outputs.tf の設計、terraform plan/validate の実行、IAM ポリシー定義など、Terraform コードを書く・修正するときに自動適用する。
data-ai
大きな Issue をサブタスクに分解し、子 Issue として作成する PM スキル。要件を実装単位(S/M/L)に分割し、依存関係を整理する。pm-agent がエピックを分割するときや実装着手前の分解フェーズで自動参照される。