e2e-test — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited e2e-test (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
APIエンドポイントの特定からテストケース設計、テストコード実装、テスト実行までを一貫して支援するスキル。各エンドポイントに対して正常系・異常系の両方をカバーするE2Eテストを作成する。
本スキルは以下の方針に基づいてE2Eテストを作成する:
[Step 1: プロジェクト構成の把握]
→ [Step 2: エンドポイントの特定]
→ [Step 3: テストケースの設計]
→ [Step 4: ユーザーにテストケース設計を確認]
→ [Step 5: 作業ブランチの作成]
→ [Step 6: テストコードの実装]
→ [Step 7: テストの実行と品質確認]
→ [Step 8: ユーザーにテストコードを確認]
→ [Step 9: 修正・追加対応]
→ [Step 10: リモートプッシュとPR作成]プロジェクトの言語、Webフレームワーク、テストフレームワーク、既存のテスト構成を把握する。
# ビルドファイル・設定ファイルからの推定
ls package.json tsconfig.json go.mod go.sum Cargo.toml pom.xml build.gradle build.gradle.kts settings.gradle.kts build.sbt project/build.properties Gemfile requirements.txt pyproject.toml setup.py composer.json pubspec.yaml Makefile 2>/dev/nullWebフレームワークの特定:
| 言語 | Webフレームワーク例 | 確認方法 |
|---|---|---|
| Go | Echo, Gin, Chi, net/http | go.mod の依存、ルーター定義ファイル |
| Java/Kotlin | Spring Boot, Micronaut, Quarkus | build.gradle / pom.xml の依存 |
| Scala | Scalatra, Play, Akka HTTP, http4s | build.sbt の libraryDependencies |
| TypeScript/JavaScript | Express, Fastify, NestJS, Hono, Next.js | package.json の dependencies |
| Python | FastAPI, Django, Flask, Starlette | pyproject.toml / requirements.txt |
| Rust | Actix-web, Axum, Rocket | Cargo.toml の dependencies |
| Ruby | Rails, Sinatra, Hanami | Gemfile |
| PHP | Laravel, Symfony, Slim | composer.json |
E2Eテストでは、テストフレームワークに加えてHTTPテストクライアントの確認が重要:
| 言語 | テストフレームワーク | HTTPテストクライアント |
|---|---|---|
| Go | testing, testify | net/http/httptest, Echo の test.NewRequest |
| Java/Kotlin | JUnit 5 | MockMvc, WebTestClient, RestAssured, TestRestTemplate |
| Scala | ScalaTest | Scalatra の ScalatraSuite, EmbeddedJetty, sttp client |
| TypeScript/JavaScript | Jest, Vitest, Mocha | supertest, axios + テストサーバー |
| Python | pytest | TestClient(FastAPI/Starlette), Django の Client, requests |
| Rust | tokio::test | actix_web::test, axum::test |
| Ruby | RSpec, Minitest | rack-test, Rails の ActionDispatch::IntegrationTest |
| PHP | PHPUnit | Laravel の TestCase, Symfony の WebTestCase |
# E2Eテスト・統合テスト関連ファイルの検索
find . -type f \( -name "*e2e*" -o -name "*integration*" -o -name "*api_test*" -o -name "*endpoint*test*" -o -name "*handler*test*" -o -name "*controller*test*" -o -name "*route*test*" \) \
-not -path '*/node_modules/*' \
-not -path '*/.git/*' \
-not -path '*/vendor/*' \
| head -20既存E2Eテストのスタイル(命名規則、ディレクトリ配置、テストサーバーの起動方法、ヘルパーの使い方等)を確認し、プロジェクトの慣習に合わせる。
データベースを使用するプロジェクトの場合、以下を確認する:
application-test.yml, .env.test 等)# テスト用設定ファイルの検索
find . -name "*test*" -type f \( -name "*.yml" -o -name "*.yaml" -o -name "*.json" -o -name "*.env" -o -name "*.conf" -o -name "*.properties" \) | grep -v node_modules | grep -v vendor | head -10
# Docker Compose でテスト用DBが定義されているか確認
find . -name "docker-compose*" -type f | head -5テスト用DBが未構成の場合はユーザーに確認し、セットアップ方法を提案する。
API仕様書が存在する場合は参照する:
# OpenAPI / Swagger 仕様ファイルの検索
find . -type f \( -name "openapi*" -o -name "swagger*" -o -name "api-spec*" \) \( -name "*.yml" -o -name "*.yaml" -o -name "*.json" \) | head -5プロジェクト内のすべてのAPIエンドポイントを特定する。
言語・フレームワーク別のルーティング抽出コマンド(Go/Echo・Gin・Chi、Spring Boot、Scalatra、Express・Fastify・NestJS、FastAPI・Django・Flask、Rails、Laravel)は references/commands.md の「ルーティング定義の検索」に収録。対象プロジェクトで使われているフレームワークの節を実行する。
検出したエンドポイントを以下の形式で一覧化する:
| # | HTTPメソッド | パス | ハンドラー/コントローラー | 認証要否 | DB使用 | 既存テスト |
|---|------------|------|------------------------|---------|--------|----------|
| 1 | GET | /api/users | UserController.List | 要 | 有 | 無 |
| 2 | POST | /api/users | UserController.Create | 要 | 有 | 無 |
| 3 | GET | /api/users/:id | UserController.Get | 要 | 有 | 無 |
| 4 | PUT | /api/users/:id | UserController.Update | 要 | 有 | 無 |
| 5 | DELETE | /api/users/:id | UserController.Delete | 要 | 有 | 無 |
| 6 | POST | /api/auth/login | AuthController.Login | 不要 | 有 | 無 |
| 7 | GET | /health | HealthController.Check | 不要 | 無 | 無 |各エンドポイントのハンドラーを読み込み、以下を分析する:
各エンドポイントに対するテストケースを設計する。各エンドポイントに少なくとも1つのテストケースを設計する。
各エンドポイントについて以下の観点でテストケースを洗い出す:
#### 正常系(Happy Path)
#### 異常系(Error Path)
#### CRUDシナリオ
リソースのCRUDを持つエンドポイント群では、一連の操作を通じたシナリオも検討する:
以下の形式でテストケース一覧を作成する:
## テスト対象エンドポイント: POST /api/users
### ハンドラー: UserController.Create
| # | カテゴリ | テストケース名 | リクエスト | 期待ステータス | 期待レスポンス | テスト方法 |
|---|---------|--------------|-----------|--------------|--------------|----------|
| 1 | 正常系 | ユーザーを作成できる | Body: {"name":"John","email":"[email protected]"} | 201 | 作成されたUserが返る | DB |
| 2 | 異常系 | nameが空の場合400エラー | Body: {"name":"","email":"[email protected]"} | 400 | バリデーションエラー | モック |
| 3 | 異常系 | emailが重複する場合409エラー | Body: {"name":"John","email":"[email protected]"} | 409 | 重複エラー | DB |
| 4 | 異常系 | 認証なしで401エラー | Header: Authorization なし | 401 | 認証エラー | モック |
| 5 | 異常系 | リクエストボディが不正JSON | Body: "invalid json" | 400 | パースエラー | モック |
## テスト対象エンドポイント: GET /api/users/:id
### ハンドラー: UserController.Get
| # | カテゴリ | テストケース名 | リクエスト | 期待ステータス | 期待レスポンス | テスト方法 |
|---|---------|--------------|-----------|--------------|--------------|----------|
| 1 | 正常系 | IDでユーザーを取得できる | Path: id=1 | 200 | Userが返る | DB |
| 2 | 異常系 | 存在しないIDで404エラー | Path: id=99999 | 404 | Not Found | DB |
| 3 | 異常系 | 不正なID形式で400エラー | Path: id=abc | 400 | バリデーションエラー | モック |必ずユーザーにテストケース設計を提示し、承認を得てからコード実装に進む。 確認なしに実装を開始してはならない。
以下の形式でユーザーに確認する:
上記のテストケース設計について確認をお願いします。
1. テスト対象エンドポイントに漏れはありませんか?
2. テストケースの追加・削除はありますか?
3. テスト方法(モック/DB)の変更はありますか?
4. その他、修正点はありますか?
問題なければ実装に進みます。ユーザーからのフィードバックがあれば、テストケース設計を修正して再度確認する。
テストケース設計が承認されたら、作業ブランチを作成する。
# 最新の状態を取得
git fetch origin
# 作業ブランチを作成
git checkout -b test/add-e2e-tests-<target>-<date><target>: テスト対象の概要(例: user-api, auth-endpoints)<date>: YYYYMMDD 形式(例: test/add-e2e-tests-user-api-20260321)プロジェクトの慣習に従ってテストファイルを配置する。E2Eテストは通常、ユニットテストとは別のディレクトリに配置する:
| 言語 | E2Eテストファイル配置例 |
|---|---|
| Go | e2e/, test/e2e/, または *_test.go(ビルドタグで分離) |
| Java/Kotlin | src/test/java/ 配下に e2e/ または integration/ パッケージ |
| Scala | src/test/scala/ 配下に e2e/ パッケージ、または src/it/scala/ |
| TypeScript/JavaScript | test/e2e/, __tests__/e2e/, または *.e2e.test.ts |
| Python | tests/e2e/, tests/integration/ |
| Ruby | spec/requests/, spec/integration/ |
| PHP | tests/Feature/ |
既存のE2Eテストがある場合は、そのディレクトリ構成に合わせる。
E2Eテストでは、テスト用のアプリケーションインスタンスを起動してHTTPリクエストを送信する。言語・フレームワーク別の具体的なコード例(Go/Echo・Gin、Java/Kotlin/Spring Boot、Scala/Scalatra、TypeScript/Express、Python/FastAPI)は references/test-servers.md にまとめてあるので、対象プロジェクトの該当セクションのみを参照する。
テストサーバーを組み立てる際の共通ポイント:
spring.datasource.url、TEST_DATABASE_URL など)。@BeforeEach / beforeEach などでテーブルの初期化を行うか、トランザクションロールバックを活用する。E2Eテストで使用するテスト用DBは通常のDBとは分離する。
#### テスト用DB設定の原則
myapp_test)認証が必要なエンドポイントのテストでは以下 3 点をワンセットで書く:
references/test-servers.md の「認証ヘルパー例」を参照)DB以外の外部依存(外部APIコール、メール送信等)にはモックを使用する。E2Eテストでモックを使う場合は、本番と同じルーティング・DI 構成を保ったまま、DI の差し替えポイントだけをモックに切り替えるのが原則(スタブにしすぎると E2E の価値が薄れる)。Go での具体的なコード例は references/test-servers.md の「外部APIモック例」を参照する。
E2Eテストではレスポンスを包括的に検証する:
言語別のテスト実行コマンドは references/commands.md の「テスト実行コマンド」を参照する。
テストが失敗した場合:
テストが全てパスしたら、ユーザーにテストコードの確認を依頼する。
以下の情報を提示する:
テストコードの実装が完了しました。確認をお願いします。
### 作成したテストファイル
- <ファイルパス1>
- <ファイルパス2>
### テスト実行結果
- 全 XX テスト: XX パス / XX 失敗
### エンドポイントカバレッジ
| エンドポイント | テストケース数 | 正常系 | 異常系 |
|--------------|--------------|--------|--------|
| POST /api/users | 5 | 1 | 4 |
| GET /api/users/:id | 3 | 1 | 2 |
| ... | ... | ... | ... |
### 確認事項
1. テストの内容に問題はありますか?
2. 追加が必要なテストケースはありますか?
3. テストコードのスタイルや命名に修正が必要ですか?
問題なければ、ブランチをリモートにプッシュしてPRを作成します。ユーザーからのフィードバックに基づき:
このステップはユーザーが承認するまで繰り返す。
ユーザーの承認が得られたら、作業ブランチをリモートにプッシュしてPRを作成する。
git add <test-files>
git commit -m "$(cat <<'EOF'
test: <テスト対象>のE2Eテストを追加
- 対象エンドポイント: XX件
- 正常系テスト: XX件
- 異常系テスト: XX件
- DB統合テスト: XX件
- モックテスト: XX件
Co-Authored-By: Claude Opus 4.7 <[email protected]>
EOF
)"# リモートにプッシュ
git push -u origin <branch-name>
# PR作成
gh pr create --title "test: <テスト対象>のE2Eテストを追加" --body "$(cat <<'EOF'
## Summary
- <テスト対象>の全エンドポイントに対するE2Eテストを追加
- 各エンドポイントに正常系・異常系のテストケースを網羅
- DBアクセス部分はテスト用DBを使用した実DBテスト
- 外部API等の依存はモックを使用
## Endpoints covered
| エンドポイント | テスト数 |
|--------------|---------|
| POST /api/users | XX |
| GET /api/users/:id | XX |
| ... | ... |
## Test plan
- [ ] 全テストがCIでパスすること
- [ ] テスト用DB設定が正しいこと
- [ ] 全エンドポイントにテストが存在すること
🤖 Generated with [Claude Code](https://claude.com/claude-code)
EOF
)"PR作成後、PRのURLをユーザーに報告する。
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.