GitHub Actionsで自動テスト

テストにお悩みの方へ

😢開発リソースが足りない...
😢リリース直前だけどテストの余裕がない
😢開発コストを抑えたい

上記のようなお悩みに対して、テスト代行サービスを運営しています。まずは無料お問い合わせください。

目次

はじめに

プルリクエストを出すたびに手動でテストを実行するのは面倒ですよね。GitHub Actionsを使えば、コードをプッシュするだけで自動的にテストが実行されます。

今回は、Laravelプロジェクトでのテスト自動化設定を解説します。

前提条件

この記事は以下の環境・知識を前提としています。

必要な環境

項目 バージョン 備考
PHP 8.1以上 記事では8.3を使用
Laravel 9.x / 10.x / 11.x PHPUnit同梱
Git 最新版推奨 GitHub連携に必要
GitHub リポジトリ作成済み

前提知識

  • Git/GitHub:基本的なコミット、プッシュ、プルリクエストの操作
  • Laravel:プロジェクトの基本構成を理解している
  • Docker:コンテナの概念を理解している(詳しくなくてもOK)

PHPUnitについて

LaravelにはPHPUnitが標準で組み込まれています。以下のコマンドでテストを実行できます。

# Laravel Sailの場合
./vendor/bin/sail artisan test

# 通常のLaravelの場合
php artisan test
# または
./vendor/bin/phpunit

テストファイルは tests/ ディレクトリに配置します。

tests/
├── Feature/      # 機能テスト(HTTPリクエスト、DB連携など)
├── Unit/         # ユニットテスト(単体の関数・クラス)
└── TestCase.php  # 基底クラス

テストがまだない場合は、まず簡単なテストを作成しましょう。

php artisan make:test ExampleTest

Dockerについて

GitHub Actionsでは、MySQLなどのサービスをDockerコンテナとして起動します。ローカル環境でDockerを使っていなくても、GitHub Actions上では自動的にコンテナが立ち上がるため、特別な設定は不要です。

ただし、概念として以下を理解しておくとスムーズです。

  • コンテナ:独立した実行環境(仮想マシンより軽量)
  • イメージ:コンテナの元となるテンプレート(例:mysql:8.0
  • サービス:バックグラウンドで動作するコンテナ

GitHub Actionsとは

GitHubが提供するCI/CDサービスです。リポジトリに .github/workflows/ ディレクトリを作成し、YAMLファイルを配置するだけで利用できます。

主なメリット:

  • 無料枠が充実(パブリックリポジトリは無制限)
  • GitHubとのシームレスな連携
  • 豊富なアクションが公開されている

料金について:

  • パブリックリポジトリ:無料
  • プライベートリポジトリ:月2,000分まで無料(Freeプラン)

ワークフローファイルの全体像

name: Tests

on:
  push:
    branches:
      - main
      - develop
  pull_request:
    types:
      - opened
      - synchronize
      - reopened

jobs:
  tests:
    runs-on: ubuntu-latest

    services:
      mysql:
        image: mysql:8.0
        env:
          MYSQL_ROOT_PASSWORD: password
          MYSQL_DATABASE: testing
        ports:
          - 3306:3306
        options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3

    steps:
      - uses: actions/checkout@v3

      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: '8.3'
          extensions: mbstring, dom, fileinfo, mysql, pdo_mysql
          coverage: none

      - name: Copy .env
        run: cp .env.example .env

      - name: Install Composer Dependencies
        run: composer install --no-interaction --prefer-dist --optimize-autoloader

      - name: Generate Application Key
        run: php artisan key:generate

      - name: Set Testing Environment
        run: |
          echo "DB_CONNECTION=mysql" >> .env
          echo "DB_HOST=127.0.0.1" >> .env
          echo "DB_PORT=3306" >> .env
          echo "DB_DATABASE=testing" >> .env
          echo "DB_USERNAME=root" >> .env
          echo "DB_PASSWORD=password" >> .env

      - name: Run Database Migrations
        run: php artisan migrate --force

      - name: Execute Tests
        run: php artisan test

各セクションの解説

1. トリガー設定(on)

on:
  push:
    branches:
      - main
      - develop
  pull_request:
    types:
      - opened
      - synchronize
      - reopened

実行タイミング:

  • main または develop ブランチへのプッシュ時
  • PRの作成・更新・再オープン時

2. MySQLサービス

services:
  mysql:
    image: mysql:8.0
    env:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: testing
    ports:
      - 3306:3306
    options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3

GitHub Actionsでは、ジョブと並行してDockerコンテナを起動できます。optionsのヘルスチェックで、MySQLが完全に起動してからテストが始まります。

ポイント:

  • image: mysql:8.0:MySQL 8.0のDockerイメージを使用
  • MYSQL_DATABASE: testing:テスト用DBを自動作成
  • --health-cmd:MySQLの起動完了を確認してから次のステップへ

3. PHP環境のセットアップ

- name: Setup PHP
  uses: shivammathur/setup-php@v2
  with:
    php-version: '8.3'
    extensions: mbstring, dom, fileinfo, mysql, pdo_mysql
    coverage: none

shivammathur/setup-phpは定番のアクションです。必要なPHP拡張を簡単にインストールできます。

拡張機能の説明:

  • mbstring:マルチバイト文字列処理
  • dom:XML/HTML操作
  • pdo_mysql:MySQLへのPDO接続

4. 依存関係のインストール

- name: Install Composer Dependencies
  run: composer install --no-interaction --prefer-dist --optimize-autoloader

オプションの説明:

  • --no-interaction:対話的な質問をスキップ
  • --prefer-dist:配布用パッケージを優先(高速)
  • --optimize-autoloader:オートローダーを最適化

5. 環境変数の設定

- name: Set Testing Environment
  run: |
    echo "DB_CONNECTION=mysql" >> .env
    echo "DB_HOST=127.0.0.1" >> .env
    ...

.env.exampleをコピー後、テスト用のDB接続情報を追記しています。

導入手順

Step 1: ディレクトリ作成

mkdir -p .github/workflows

Step 2: ワークフローファイル作成

touch .github/workflows/tests.yml

Step 3: 内容をコピー

上記のYAMLファイルの内容をコピーして保存します。

Step 4: コミット&プッシュ

git add .github/workflows/tests.yml
git commit -m "Add GitHub Actions test workflow"
git push

これだけで、次回のプッシュから自動テストが動きます。

PRでの表示

テストが完了すると、プルリクエスト画面にチェックマークが表示されます。

  • ✅ 緑:テスト成功
  • ❌ 赤:テスト失敗

失敗時は「Details」からログを確認できます。

トラブルシューティング

テストが失敗する場合

  1. ローカルでテストが通るか確認
    php artisan test
  2. 環境変数の確認
    .env.exampleに必要な変数が定義されているか確認
  3. マイグレーションエラー
    ローカルと本番でDBスキーマに差分がないか確認

MySQLに接続できない場合

  • DB_HOST127.0.0.1になっているか確認
  • ヘルスチェックのオプションが正しいか確認

まとめ

GitHub Actionsを使えば、約70行のYAMLファイルでテスト自動化が実現できます。

得られる効果:

  • テスト忘れの防止
  • PRレビュー前の品質担保
  • チーム全体のコード品質向上

まだ導入していないプロジェクトがあれば、ぜひ試してみてください。

参考リンク

ソフトウェアテスト代行サービスのご紹介

当社では10万円から始められるソフトウェアテスト代行サービスを提供しています。

テスト専門部隊による品質保証で、開発チームは本来の開発業務に集中できます。
品質向上と納期遵守の両立をサポートし、顧客からの信頼獲得に貢献します。

お問い合わせ

サービスに関するお問い合わせ、ご不明な点がございましたら、以下のお問い合わせフォームをご利用ください。お客様からのご質問に対し、担当者が責任を持ってお答えいたします。

よかったらシェアしてね!
目次
閉じる