API Test + DevOps Portfolio
最終更新: 2026年06月07日
外部API連携における堅牢性と品質保証を追求し、APIテストとDevOps技術を統合したポートフォリオです。
SSRFやPII漏洩、不安定なリトライといった連携特有のアンチパターンを排除し、1,300件超の自動テストを品質ゲートとして構築・運用しています。

作成背景
前職では、他メンバーが実装した機能をステージング環境で手動操作し、結合・システム・業務シナリオ観点で確認していました。
その中で、実行手順の属人化、確認漏れ、リリース前の再実行コストといった課題を経験しました。
このリポジトリでは、その課題を API / 結合層の品質保証に絞って設計しています。
外部API連携で起こりやすい SSRF、PII漏洩、不安定なリトライ、Rate Limit 対応漏れなどを題材に、pytest による自動テスト、GitHub Actions の品質ゲート、Docker による再現可能な実行環境として実装しました。
目的は、手動確認に依存しやすい品質保証を、再現可能・継続実行可能・レビュー可能な仕組みに置き換えることです。
Demo
3つのGIFで主要機能を視覚的に確認できます(合計35秒)
概要
1,360件のテストスイート: Unit(1,316) / Integration(35, うちExternal 5件含む) / Performance(7, 週次のみ) / Smoke(2)
カバレッジ: 96.15%(unit+integration条件): 継続的な品質向上
CI実行テスト: 1,358件(unit+integration条件, external・performance・smoke除外)
- 内訳: Unit 1,316件 + Integration 30件(35件のうちexternal 5件を除外)
CI/CD自動化: GitHub Actions による多段階パイプライン
セキュリティ: CI/CD品質ゲート(pytest + ruff + mypy + Trivy)
GitHub API統合: 実務的なAPI統合スキルを証明(Rate Limit管理、ETag活用、非同期処理)
技術スタック
| カテゴリ | 技術 |
|---|
言語 | Python 3.14 |
HTTP Client | httpx(同期/非同期対応) |
設定管理 | Pydantic Settings(型安全) |
テスト | pytest + pytest-cov + pytest-asyncio |
リンター | ruff(高速、Rust製) |
型チェック | mypy(strict mode) |
パッケージ管理 | uv(高速、Rust製) |
CI/CD | GitHub Actions(多段階パイプライン) |
エラー監視 | Sentry SDK + MCP統合 |
ログ | structlog(構造化ログ) |
アーキテクチャ
システム構成図
graph TB
subgraph "APIクライアント設計"
SC[SyncAPIClient<br/>同期クライアント]
SC --> JP[SyncJSONPlaceholderClient]
AC[AsyncAPIClient<br/>非同期クライアント]
AC --> AJP[AsyncJSONPlaceholderClient]
AGC[AsyncGitHubClient<br/>GitHub API統合]
end
subgraph "設定管理"
PS[Pydantic Settings] --> ENV[.env]
end
subgraph "品質保証"
UT[Unit Tests] --> IT[Integration Tests]
IT --> SEC[Security Tests]
SEC --> PERF[Performance Tests]
end
運用・デプロイフロー
flowchart TD
A["<h4>Code Change</h4><u>Pull Request / Push</u>
<br/>"]
A --> B["<h4>Quality & Security Checks</h4><u>lint / type check / tests / security scan</u>
<br/>"]
A --> C["<h4>Compose Test</h4><u>pytest + coverage</u>
<br/>"]
C --> D["<h4>Coverage Pages</h4><u>GitHub Pages</u>
<br/>"]
C --> E["<h4>Container Healthcheck</h4><u>runtime container validation</u>
<br/>"]