【大阪 / 横浜 / 徳島】インフラ / サーバーサイドエンジニア募集中!

【大阪 / 横浜 / 徳島】インフラ / サーバーサイドエンジニア募集中!

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【WordPress 専用】クラウドサーバー『ウェブスピード』

【WordPress 専用】クラウドサーバー『ウェブスピード』

GitHub Actions で UnitTest を自動化しよう

こんにちは!

システム開発部の松木です。

前回の GItHub Actions の記事に引き続き、今回も GitHub Actions ネタです。

今回は「PHP の UnitTest を、GitHub Actions に任せて自動化しよう!」という内容です。

注意点

こちらの記事では、Docker で Laravel の環境構築を行っていることを前提に記事を進めていきます。

1
2
3
4
5
6
7
8
9
10
11
12
13
|
|- docker
|   |- mysql
|   |  |- Dockerfile
|   |  |- my.cnf
|   |
|   |- php
|     |- Dockerfile
|      |- php.ini
|
|- docker-compose.yml
|
|- src

GitHub Actions って何?

こちらに関しては、以前の記事で簡単に説明していますので、そちらをご覧ください。

GitHub Actions で Larastan を自動化!

環境

Docker: 23.0.1

Laravel: 10.x

PHP: 8.2

MySQL: 8.0

コード内容

今回使用するコードは下記となります。

下記コードは「/.github/workflows/unitTest.yml」に記載しております。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
name: UnitTest
on:
  push:
 
jobs:
  unitTest:
    runs-on: ubuntu-latest
 
    steps:
    - name: Check out code
      uses: actions/checkout@3.6.0
 
    - name: Set up Docker Compose
      run: docker compose up -d
      working-directory: ${{ github.workspace }}  # リポジトリのルートディレクトリを指定
 
    - name: composer install
      run: docker compose exec -i -t php-fpm composer install
 
    - name: thirty seconds sleep
      run: sleep 30
 
    - name: Run PHPUnit
      run: docker compose exec -i -t php-fpm vendor/bin/phpunit

上記のコードを元に、UnitTest が自動で回るようになっている仕組みを分割して説明していきます。

前回の Larastan の記事で説明していたことも、こちらの記事で再度お伝えします。

name:

GitHub Actions に登録するワークフローの名前を記載する項目です。

こちらを記載することで、GitHub の Actions の画面内で表示されるようになります。

ここでは「UnitTest」という名前を登録しています。

もし登録しなかった場合はファイルの相対パスが登録されます。

今回の場合では「./.github/workflows/UnitTest.yml」という名前で登録されることになります。

on:

ワークフローをどの動作を引き金に実行するかを決定できます。

こちらを「トリガー」と呼びます。

今回使用するコードでは「GitHub にプッシュを行う」をトリガーにし、UnitTest を実行するようにしております。

こちらプッシュのタイミングだけでなく、プルリクエストの作成をトリガーにしたり、指定したブランチがプッシュされたときのみといった形で、細かくトリガーを決めることができます。

jobs:

ワークフロー内で動かす処理を書いていく項目になります。

例えば UnitTest を動かすために、Docker の起動や composer のインストールといった実行コマンドが必要になります。

そういった動作を記載していく項目となっております。

unitTest:

job の作成と job の名前です。

job の中でnameキーを使用すれば、GitHub の UI に表示される名前を設定できますが、設定を行わなかった時は、job の名前に置き換わります。

runs-on:

仮想マシンの種類を定義します。

仮想マシンの設定には
・GitHub ホステッドランナー
・GitHub ホステッドランナーより大きいランナー
・セルフホステッドランナー
の3つを選択することができます。

こちら今回使用するのは、1番目の GitHub ホステッドランナー(以下ランナー)を使用します。

ランナーの中にもいくつか種類が存在し、Linux・Windows・macOS の3つから選択できます。

基本的には Linux を使用する形で問題ないと思いますが、それぞれの環境に合わせて選択してください。

今回は最新の Ubuntu を仮想マシンとして利用しています。

uses:

実行するアクションを指定します。

ここで使用しているアクションは「actions/checkout」というモジュールです。

役割としては、リポジトリのコードを使用するために使います。

run: (1つ目)

ここではdocker compose up -dのコマンドを実行しています。

今回dockerによる環境構築が前提となる為、ここで docker の起動を行います。

working-directory:

こちらは作業を行うディレクトリを指定します。

今回${{ github.workspace }}という記述を行っていますが、

これはデフォルトの作業ディレクトリから絶対パスを取得することができます。

取得したパスで docker を起動しています。

run: (2つ目)

2つ目の run では composer のインストールを行っております。

コマンドがdocker compose exec -i -t php composer installを実行しており、

コマンド途中に php と記載してありますが、ここはご自身のphpコンテナの名前を入れるようにお願いします。

上記コマンドを記述することで、php のコンテナ内で composer install の実行を行うようにしております。

run: (3つ目)

3つ目の run では sleepコマンドを行っております。

コマンドではsleep 30を実行しており、

docker compose up後に mysql がまだ完全に起動していないことがある為、

その状況では UnitTest を正常に実行できないので、30秒処理を遅らせています。

run: (4つ目)

最後4つ目の run で UnitTest を行っております。

2つ目の run と同様に php のコンテナ内で UnitTest実行コマンドを記述しております。

こちらのコマンドdocker compose exec -i -t php vendor/bin/phpunitでも php の部分はご自身のphpコンテナの名前を入れるようにお願いします。

ここでようやく UnitTest を実行することができました。

まとめ

いかがでしたでしょうか。

GitHub Actions で色んなことが自動化できるので、

実装までは大変ですが、実装後は作業効率をどんどん上げていきましょう!

ありがとうございました。

最後に

私が所属するシステム開発部のサービスサイト「SEKARAKU Lab(セカラク ラボ)」を開設しました。
ビヨンドは、サーバーの設計・構築から運用までをワンストップでお任せいただけますので、サーバーサイド開発でお困りの方はお気軽にお問い合わせください。

● SEKARAKU Lab:https://sekarakulab.beyondjapan.com

この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
4
読み込み中...
4 票, 平均: 1.00 / 14
677
X facebook はてなブックマーク pocket
【2026.6.30 Amazon Linux 2 サポート終了】Amazon Linux サーバー移行ソリューション

【2026.6.30 Amazon Linux 2 サポート終了】Amazon Linux サーバー移行ソリューション

この記事をかいた人

About the author

松木

ポーカーとラグビーが好きです。
MARVELは「ハルク」が好き

座右の銘は集中力×時間+運