Mobile-DetectのGitHub ActionsによるCI/CDパイプライン構築

コンテナ化された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テストジョブの実装により、品質保証体制を強化可能です。

タグ: GitHub Actions Docker Compose PHPUnit PHPStan Mobile-Detect

6月11日 17:48 投稿