Quarkus Verification Loop
PR、メジャー変更後、および本番前に実行します。
When to Activate
- Quarkusサービスのプルリクエスト開始前
- メジャーリファクタリングまたは依存関係アップグレード後
- ステージング本番環境前のプリデプロイメント検証
- フル ビルド → リント → テスト → セキュリティスキャン → ネイティブコンパイルパイプライン実行
- テストカバレッジが閾値を満たす(80%以上)ことを検証
- ネイティブイメージ互換性テスト
Phase 1: Build
ビルド失敗時は停止してコンパイルエラーを修正します。
Phase 2: Static Analysis
Checkstyle, PMD, SpotBugs (Maven)
SonarQube (if configured)
Common Issues to Address
- 未使用のインポートまたは変数
- 複雑なメソッド(高い環状複雑度)
- 潜在的なnullポインター逆参照
- SpotBugsでフラグが立つセキュリティ問題
Phase 3: Tests + Coverage
Test Categories
Unit Tests
モック化された依存関係でサービスロジックテスト:
Integration Tests
実データベース(Testcontainers)でテスト:
API Tests
REST Assured でRESTエンドポイントテスト:
Coverage Report
詳細なカバレッジに対してtarget/site/jacoco/index.htmlを確認:
- 全行カバレッジ(目標:80%以上)
- ブランチカバレッジ(目標:70%以上)
- カバレッジされていない重要パスを特定
Phase 4: Security Scanning
Dependency Vulnerabilities (Maven)
CVEについて target/dependency-check-report.html を確認。
Quarkus Security Audit
OWASP ZAP (API Security Testing)
Common Security Checks
- 全シークレットが環境変数(コード内ではない)
- 全エンドポイントの入力検証
- 認証/認可設定済み
- CORS適切に設定
- セキュリティヘッダー設定
- BCryptでパスワードハッシュ化
- SQLインジェクション保護(パラメータ化クエリ)
- 公開エンドポイントのレート制限
Phase 5: Native Compilation
GraalVM ネイティブイメージ互換性テスト:
Native Image Troubleshooting
一般的な問題:
- Reflection: 動的クラスのリフレクション設定追加
- Resources:
quarkus.native.resources.includesでリソース含める - JNI: ネイティブライブラリ使用時JNIクラス登録
リフレクション設定例:
Phase 6: Performance Testing
Load Testing with K6
実行:
Metrics to Monitor
- レスポンスタイム(p50、p95、p99)
- スループット(リクエスト/秒)
- エラー率
- メモリ使用量
- CPU使用量
Phase 7: Health Checks
期待されるレスポンス:
Phase 8: Container Image Build
Container Security Scan
Phase 9: Configuration Validation
Environment-Specific Checks
- データベースURLが環境ごとに設定
- シークレットが外部化(Vault、環境変数)
- ロギングレベルが適切
- CORS origins が正しく設定
- レート制限を設定
- モニタリング/トレーシング有効化
Phase 10: Documentation Review
- OpenAPI/Swaggerドキュメント最新(
/q/swagger-ui) - READMEにセットアップ説明有り
- APIの変更が文書化
- 互換性破壊の変更にマイグレーションガイド
- 設定プロパティが文書化
OpenAPI spec生成:
Verification Checklist
Code Quality
- ビルドが警告なしで成功
- 静的分析がクリーン(高/中レベル問題なし)
- コードがチーム規則に従う
- PRにコメント・TODOなし
Testing
- 全テスト成功
- コードカバレッジ ≥ 80%
- 実データベースでの統合テスト
- セキュリティテスト成功
- パフォーマンスが許容範囲内
Security
- 依存関係の脆弱性なし
- 認証/認可テスト済み
- 入力検証が完全
- シークレットがソースコードに無い
- セキュリティヘッダー設定済み
Deployment
- ネイティブコンパイル成功
- コンテナイメージビルド成功
- ヘルスチェック正しく動作
- ターゲット環境の設定が有効
Native Image
- ネイティブ実行ファイルビルド成功
- ネイティブテスト成功
- 起動時間 < 100ms
- メモリフットプリント許容範囲
Automated Verification Script
CI/CD Integration
GitHub Actions Example
Best Practices
- 全PRの前に検証ループ実行
- CI/CDパイプラインで自動化
- 問題は即座に修正、債務を溜めない
- カバレッジを80%以上に保つ
- 依存関係を定期的にアップデート
- 定期的にネイティブコンパイルテスト
- パフォーマンストレンドを監視
- 互換性破壊の変更を文書化
- セキュリティスキャン結果をレビュー
- 環境ごとに設定を検証


