Appearance
バックエンドAPI (app/api) 手動操作テストケース定義書
最終更新: 2026-08-18 対象: API (Cloudflare Workers / Hono / Prisma 共通サーバーAPI)
APIサーバーへの直接アクセス、OpenAPIドキュメントの動作、CORSポリシー、およびセキュリティ監査ログの整合性に関する詳細なテスト手順と期待結果を定義します。
1. OpenAPI & ドキュメント表示 (Documentation)
API-DOC-01: 開発環境での Swagger UI 描画
- 操作手順:
- ローカルでAPIサーバーを起動する (
npm run dev)。 - ブラウザを起動し、
http://localhost:8787/ui(および/v1/ui)を開く。 - ブラウザの開発者ツール(F12)の「Console」タブを開く。
- ローカルでAPIサーバーを起動する (
- 期待される結果:
- Swagger UI 画面がレイアウト崩れなく表示され、各エンドポイントの一覧(GET/POST等)が表示されること。
- コンソール上に「Content-Security-Policy」起因のスクリプト実行拒否やスタイルシート読み込みエラーが表示されないこと。
API-DOC-02: OpenAPI JSON スキーマの取得
- 操作手順:
- ブラウザまたはAPIクライアント(Postman/curl等)から
http://localhost:8787/doc(および/v1/doc)へGETリクエストを送信する。
- ブラウザまたはAPIクライアント(Postman/curl等)から
- 期待される結果:
- レスポンスヘッダーの
Content-Typeがapplication/jsonであること。 - 返却されたJSON内に
"openapi": "3.0.0"および各ルーティングパス、定義したスキーマ名(FacilityDocumentやNotice等)が正しく含まれていること。
- レスポンスヘッダーの
2. セキュリティ & CORSポリシー (Security)
API-SEC-01: オリジン拒否によるCORS検証
- 操作手順:
- cURL やブラウザ拡張機能等を用いて、リクエストヘッダーに
Origin: http://malicious-website.comを付与し、APIサーバー(例:http://localhost:8787/v1/auth/login)へ OPTIONS または POST リクエストを送信する。
- cURL やブラウザ拡張機能等を用いて、リクエストヘッダーに
- 期待される結果:
- レスポンスヘッダーに
Access-Control-Allow-Originが含まれない、または許可された特定のオリジンのみが含まれ、http://malicious-website.comのアクセスが許可されないこと。
- レスポンスヘッダーに
API-SEC-02: APIアクセスキー/トークンのバリデーション
- 操作手順:
- 有効期限切れの JWT トークン、またはデタラメな署名トークンを
Authorization: Bearer [Invalid_Token]ヘッダーに設定して認証が必要なエンドポイント(例:GET /v1/children)へリクエストを送信する。
- 有効期限切れの JWT トークン、またはデタラメな署名トークンを
- 期待される結果:
- HTTP ステータスコード
401 Unauthorizedが返却されること。 - レスポンスボディにエラー原因を示すオブジェクト(例:
{"error": "Unauthorized"})が含まれていること。
- HTTP ステータスコード
3. 監査ログと改ざん防止 (Audit Logs)
API-AUD-01: 操作履歴のハッシュチェーン検証
- 操作手順:
- 管理者アプリまたは指導員アプリから監査ログ対象の操作(例: 児童情報のCSVインポート、または打刻時間の手動修正)を実行する。
- データベースの
AuditLogテーブルから直近のレコードを2件以上取得する(例: レコードN と レコードN+1)。 - 各レコードの
previous_hashおよびcurrent_hashを確認する。
- 期待される結果:
- レコードN+1 の
previous_hashの値が、レコードN のcurrent_hashの値と完全に一致していること。 - いずれかの値を意図的に書き換えた場合、
app/api/scripts/verify-audit-log-chain.tsがok: falseを返し、current-hash-mismatchまたはprevious-hash-mismatchを報告すること。
- レコードN+1 の
注意:
writeAuditLogは通常ExecutionContext.waitUntilでバックグラウンド書き込みされます。高同時実行時は同一施設のprevious_hashが直列化されない可能性があるため、検証ツールで定期検査し、必要に応じて書き込み直列化を追加してください。
4. ローカル実行ログ (Local Execution Logs)
API-LOG-01: ローカル実行ログファイル出力の動作検証
- 操作手順:
- ローカル開発環境で API サーバーを起動する (
npm run dev)。 - ブラウザまたはAPIクライアントから、任意のエンドポイント(例:
GET /health)およびエラーを誘発する無効なリクエスト(例: 存在しないエンドポイントへのアクセスGET /v1/invalid-route)を送信する。 app/api/local-api-execution.logファイルが生成されていることを確認する。- ファイルを開き、記録されたログの内容を確認する。
- ローカル開発環境で API サーバーを起動する (
- 期待される結果:
local-api-execution.logファイルが自動生成されること。- ログがJSON形式で1行ずつ出力され、各行に
timestamp,method,path,status,responseTimeMsのキーが含まれていること。 - 正常なリクエストでは
error: null、エラー(ステータスコードが400以上、またはサーバーエラー)が発生したリクエストではerrorフィールドにエラー詳細やHTTPステータスの情報が記録されていること。