GitHub Actions で UnitTest を自動化しよう
目次
こんにちは!
システム開発部の松木です。
前回の GItHub Actions の記事に引き続き、今回も GitHub Actions ネタです。
今回は「PHP の UnitTest を、GitHub Actions に任せて自動化しよう!」という内容です。
注意点
こちらの記事では、Docker で Laravel の環境構築を行っていることを前提に記事を進めていきます。
| |- 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」に記載しております。
name: UnitTest on: push: jobs: unitTest: runs-on: ubuntu-latest steps: - name: Check out code uses: actions/[email protected] - 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