継続的インテグレーション

これまで、ローカルマシン上のコマンドラインからテストを実行する方法のみを説明してきました。しかし、お好みのCIプラットフォームからテストを実行することもできます。pestphp/pestはComposerの開発依存関係に含まれているため、CIプラットフォームのデプロイパイプライン内でvendor/bin/pest --ciコマンドを簡単に実行できます。

GitHub Actionsでの例

アプリケーションがCIプラットフォームとしてGitHub Actionsを使用している場合、Pestを設定して、誰かがGitHubリポジトリにコミットをプッシュしたときにアプリケーションが自動的にテストされるようにするための次のガイドラインが役立ちます。

まず、your-project/.github/workflowsディレクトリ内にtests.ymlファイルを作成します。ファイルの内容は次のとおりです。

1name: Tests
2 
3on: ['push', 'pull_request']
4 
5jobs:
6 ci:
7 runs-on: ubuntu-latest
8 
9 steps:
10 - name: Checkout
11 uses: actions/checkout@v3
12 
13 - name: Setup PHP
14 uses: shivammathur/setup-php@v2
15 with:
16 php-version: 8.2
17 tools: composer:v2
18 coverage: xdebug
19 
20 - name: Install Dependencies
21 run: composer install --no-interaction --prefer-dist --optimize-autoloader
22 
23 - name: Tests
24 run: ./vendor/bin/pest --ci

当然のことながら、上記のスクリプトは要件に合わせてカスタマイズできます。たとえば、テストでデータベースが必要な場合は、データベースを設定する必要がある場合があります。

tests.ymlファイルを作成したら、tests.ymlファイルをコミットしてプッシュし、GitHub Actionsでテストを実行できるようにします。このコミットを行うと、新しいプルリクエストとコミットすべてでテストスイートが実行されることに注意してください。

GitLab CI/CDパイプラインでの例

アプリケーションがCIプラットフォームとしてGitLab CI/CDパイプラインを使用している場合、Pestを設定して、誰かがGitLabリポジトリにコミットをプッシュしたときにアプリケーションが自動的にテストされるようにするための次のガイドラインが役立ちます。

まず、.gitlab-ci.ymlファイルに次の構成を追加します。ファイルの内容は次のとおりです。

1stages:
2 - build
3 - test
4 
5build:vendors:
6 stage: build
7 only:
8 refs:
9 - merge_requests
10 - push
11 cache:
12 key:
13 files:
14 - composer.lock
15 policy: pull-push
16 image: composer:2
17 script:
18 - composer install --no-interaction --prefer-dist --optimize-autoloader
19 
20tests:
21 stage: test
22 only:
23 refs:
24 - merge_requests
25 - push
26 cache:
27 key:
28 files:
29 - composer.lock
30 policy: pull
31 image: php:8.2
32 script:
33 - ./vendor/bin/pest --ci

当然のことながら、上記のスクリプトは要件に合わせてカスタマイズできます。たとえば、テストでデータベースが必要な場合は、データベースを設定する必要がある場合があります。

.gitlab-ci.ymlファイルを作成したら、.gitlab-ci.ymlファイルをコミットしてプッシュし、Gitlab CI/CDパイプラインでテストを実行できるようにします。このコミットを行うと、新しいマージリクエストとコミットすべてでテストスイートが実行されることに注意してください。

Bitbucketパイプラインでの例

アプリケーションがCIプラットフォームとしてBitbucket CI/CDパイプラインを使用している場合、Pestを設定して、誰かがBitbucketリポジトリにコミットをプッシュしたときにアプリケーションが自動的にテストされるようにするための次のガイドラインが役立ちます。

まず、bitbucket-pipelines.ymlファイルに次の構成を追加します。ファイルの内容は次のとおりです。

1image: composer:2
2 
3pipelines:
4 default:
5 - parallel:
6 - step:
7 name: Test
8 script:
9 - composer install --no-interaction --prefer-dist --optimize-autoloader
10 - ./vendor/bin/pest
11 caches:
12 - composer

当然のことながら、上記のスクリプトは要件に合わせてカスタマイズできます。たとえば、テストでデータベースが必要な場合は、データベースを設定する必要がある場合があります。

bitbucket-pipelines.ymlファイルを作成したら、bitbucket-pipelines.ymlファイルをコミットしてプッシュし、Bitbucketパイプラインでテストを実行できるようにします。このコミットを行うと、新しいプルリクエストとコミットすべてでテストスイートが実行されることに注意してください。

Chipper CIでの例

アプリケーションがCIプラットフォームとしてChipper CIを使用している場合、Pestを設定して、誰かがGitリポジトリにコミットをプッシュしたときにアプリケーションが自動的にテストされるようにするための次のガイドラインが役立ちます。

まず、.chipperci.ymlファイルに次の構成を追加します。ファイルの内容は次のとおりです。

1version: 1
2 
3environment:
4 php: 8.2
5 node: 16
6 
7# Optional services
8services:
9# - mysql: 8
10# - redis:
11 
12# Build all commits
13on:
14 push:
15 branches: .*
16 
17pipeline:
18 - name: Setup
19 cmd: |
20 cp -v .env.example .env
21 composer install --no-interaction --prefer-dist --optimize-autoloader
22 php artisan key:generate
23 
24 - name: Compile Assets
25 cmd: |
26 npm ci --no-audit
27 npm run build
28 
29 - name: Test
30 cmd: pest

Chipper CIは、ComposerとNPMのキャッシュを処理するだけでなく、PATHにvendor/binを自動的に追加するため、テスト実行時にpest --ciコマンドを簡単に実行できます。

当然のことながら、上記のスクリプトは要件に合わせてカスタマイズできます。たとえば、テストでデータベースが必要な場合は、データベースサービスを定義する必要がある場合があります。

.chipperci.ymlファイルを作成したら、.chipperci.ymlファイルをコミットしてプッシュし、Chipper CIでテストを実行できるようにします。このコミットを行うと、新しいコミットすべてでテストスイートが実行されることに注意してください。


コードベースの安定性を確保するためのプロジェクトの継続的インテグレーションの設定は素晴らしい出来です。次に、Pestのテスト設定機能を探求して、Pestの概念をより深く掘り下げてみましょう: Pestの設定 →