Skip to content

第 6 章: タスクランナーと CI/CD

6.1 はじめに

前章では静的コード解析ツールとコードカバレッジを導入しました。テストの実行、静的解析、フォーマットチェック、カバレッジ計測と、様々なコマンドを使えるようになりましたが、毎回それぞれのコマンドを覚えて実行するのは面倒です。

この章では タスクランナー を使ってこれらのタスクをまとめて実行できるようにし、さらに CI/CD パイプラインを構築します。

6.2 Composer scripts によるタスク管理

Composer scripts とは

Composer scripts は composer.json に定義するタスクランナー機能です。定型的なコマンドをスクリプトとして登録し、composer <スクリプト名> で実行できます。

Ruby の Rake、Java の Gradle タスク、Node の npm scripts、Python の tox、Go の Makefile に相当します。

スクリプトの定義

composer.json に scripts セクションを追加します。

{
    "scripts": {
        "test": "vendor/bin/phpunit",
        "test:coverage": "vendor/bin/phpunit --coverage-text",
        "lint": "vendor/bin/phpcs",
        "lint:fix": "vendor/bin/phpcbf",
        "analyse": "vendor/bin/phpstan analyse",
        "check": [
            "@lint",
            "@analyse",
            "@test"
        ]
    }
}

主要スクリプトの解説

スクリプト 説明 実行コマンド
composer test PHPUnit テストを実行 vendor/bin/phpunit
composer test:coverage テスト + カバレッジ vendor/bin/phpunit --coverage-text
composer lint コーディング規約チェック vendor/bin/phpcs
composer lint:fix コーディング規約の自動修正 vendor/bin/phpcbf
composer analyse PHPStan 静的解析 vendor/bin/phpstan analyse
composer check 全品質チェックを一括実行 lint + analyse + test

タスクの実行

# テスト実行
$ composer test
> vendor/bin/phpunit
PHPUnit 10.5.x by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.x

..........                                                        10 / 10 (100%)

Time: 00:00.xxx, Memory: x.xx MB

OK (10 tests, 18 assertions)

# 全品質チェック
$ composer check
> vendor/bin/phpcs
> vendor/bin/phpstan analyse

 [OK] No errors

> vendor/bin/phpunit

OK (10 tests, 18 assertions)

check スクリプトは @lint@analyse@test を順に実行します。@ プレフィックスは他のスクリプトを参照する Composer の構文です。いずれかが失敗した時点で実行は中断されます。

6.3 Makefile による補助

Composer scripts をさらにラップして、開発チーム全体で統一的なインターフェースを提供するために Makefile を使うこともできます。

.PHONY: test lint analyse check coverage setup

test: ## テストを実行
    composer test

lint: ## コーディング規約チェック
    composer lint

lint-fix: ## コーディング規約を自動修正
    composer lint:fix

analyse: ## PHPStan 静的解析
    composer analyse

check: ## 全品質チェック(lint + analyse + test)
    composer check

coverage: ## テスト + カバレッジ
    composer test:coverage

setup: ## 初期セットアップ
    composer install
# ヘルプ表示
$ make help

# 全品質チェック
$ make check

6.4 CI/CD パイプライン

GitHub Actions とは

GitHub Actions は GitHub に組み込まれた CI/CD プラットフォームです。リポジトリへのプッシュやプルリクエスト作成をトリガーに、テストやデプロイを自動実行できます。

ワークフロー定義

.github/workflows/php.yml を作成します。

name: PHP CI

on:
  push:
    branches: [ main, develop ]
    paths:
      - 'apps/php/**'
  pull_request:
    branches: [ main ]
    paths:
      - 'apps/php/**'

jobs:
  test:
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: apps/php

    strategy:
      matrix:
        php-version: ['8.1', '8.2', '8.3', '8.4']

    steps:
      - uses: actions/checkout@v4

      - name: Setup PHP ${{ matrix.php-version }}
        uses: shivammathur/setup-php@v2
        with:
          php-version: ${{ matrix.php-version }}
          extensions: mbstring, xml
          coverage: xdebug

      - name: Install dependencies
        run: composer install --no-interaction --prefer-dist

      - name: Run coding standard check
        run: composer lint

      - name: Run static analysis
        run: composer analyse

      - name: Run tests
        run: composer test

      - name: Run tests with coverage
        if: matrix.php-version == '8.4'
        run: composer test:coverage

ワークフローの解説

uml diagram

マトリクスビルド

strategy.matrix により、PHP 8.1〜8.4 の各バージョンで並列にテストが実行されます。これにより、PHP のバージョン互換性を自動的に検証できます。

PHP バージョン 主な特徴
8.1 readonly プロパティ、enum、Fibers
8.2 readonly クラス、DNF 型
8.3 型付きクラス定数、json_validate()
8.4 プロパティフック、非対称可視性

CI パイプラインのステップ

ステップ 対応するローカルコマンド 目的
Install dependencies composer install 依存パッケージの導入
Coding standard check composer lint PSR-12 準拠の確認
Static analysis composer analyse 型エラーの検出
Run tests composer test 機能の正しさを検証
Coverage composer test:coverage テストカバレッジの計測

6.5 開発ワークフローのまとめ

三種の神器が揃ったことで、以下の開発ワークフローが確立されました。

uml diagram

日常の開発フロー

# 1. 開発開始
$ nix develop .#php
$ cd apps/php

# 2. TDD サイクル
#    Red → Green → Refactor

# 3. 品質チェック
$ composer check

# 4. コミット
$ git commit -m 'feat: 新機能を追加'

# 5. プッシュ → CI が自動実行
$ git push

6.6 まとめ

この章では以下を構築しました。

項目 ツール 設定ファイル
タスクランナー Composer scripts composer.json(scripts セクション)
補助タスクランナー Makefile Makefile
CI/CD GitHub Actions .github/workflows/php.yml

これでソフトウェア開発の三種の神器が揃いました。

神器 ツール
バージョン管理 Git + Conventional Commits
テスティング PHPUnit + TDD
自動化 Composer scripts + PHP_CodeSniffer + PHPStan + GitHub Actions

次章からは第 3 部「オブジェクト指向設計」に入り、FizzBuzz を題材にオブジェクト指向プログラミングの原則を段階的に学んでいきます。