コンテナ化されたCI/CD環境の実装
Mobile-DetectはDocker Composeを活用して分離されたCI/CD環境を構築します。docker-compose.ci.ymlに定義されたサービス群が、依存関係を考慮した品質保証フローを形成します。
# 環境定義(docker-compose.ci.yml抜粋)
stages:
dependency-install:
container_name: md-dependencies
build:
dockerfile: ./ci/Dockerfile.base
volumes:
- ./lib:/app/lib
- ./vendor:/app/vendor
test-execution:
image: php:8.4-cli
depends_on:
dependency-install:
condition: service_healthy
command: >
./vendor/bin/phpunit
--coverage-xml reports/coverage
--log-junit reports/test-results.xml
tests/unit/
品質検査ステップの設計
1. 依存関係の初期化
dependency-installサービスはci/Dockerfile.baseを基に環境を構築し、vendorディレクトリに依存パッケージをインストールします。これによりテスト環境の再現性を確保し、開発環境固有の問題を防止します。
2. 多層品質検査
コード変更は以下の検査ステップを通過する必要があります:
- 単体テスト:PHPUnitでテストカバレッジを測定(最低85%要件)
- コーディング規約:PHP_CodeSnifferによるPSR-12準拠チェック
- 静的解析:PHPStan level 4で潜在的エラー検出
- パフォーマンステスト:PHPBenchでデバイス検出処理のベンチマーク実行
3. モデルファイルの生成
全検査ステップが成功した場合に限り、json-generatorサービスがci/export_rules.phpを実行し、device_rules.jsonを出力します。このファイルがデプロイ対象の主要成果物となります。
パイプラインの実行フロー
以下のコマンドで完全なCIフローを実行します:
docker compose -f docker-compose.ci.yml up --abort-on-container-exit json-generator
実行順序は:依存関係構築 → 単体テスト → 規約チェック → 静的解析 → パフォーマンステスト → JSON生成。いずれかのステップでエラーが発生すると即時中止され、不完全な成果物の流出を防止します。
環境設計の特徴
コンテナ化による環境一貫性の確保、多段階の品質検査による問題早期検出、手動操作の排除によるエラー低減を実現しています。さらにセキュリティスキャンの追加や、nightlyテストジョブの実装により、品質保証体制を強化可能です。