こんにちは!
先日LaravelのプロジェクトでCircleCIを使って自動テストを組み込むということを業務で行ったので、今日は備忘録としてまとめていきたいと思います。
本記事を読めば、CircleCIを使ったLaravelの自動テスト方法がわかるようになると思います。
「Laravelプロジェクトで自動テストを行う手順を知りたい」
「CircleCIを使った自動テストの書き方を知りたい」
このようにお考えの方には参考になるのではと思います。
それでは、早速みていきましょう!
前提
以下の事項は前提として進めてます。
- CircleCIのアカウントは作成済みであること
- Laravelのテストコードは記述済みであること
Laravelプロジェクトを自動テストする
CircleCIで自動テストを行うためには、以下の手順を踏むことになります。
- CircleCIでプロジェクトのリポジトリを登録する
- .circleci/config.ymlを作成する
- 対象リポジトリにpushする
これで自動的にテストを走らせることができます。
それぞれ見ていきましょう。
CircleCIでプロジェクトのリポジトリを登録する
まず最初にCircleCIにログインして、「Projects」に入ります。
すると、「Create Project」というボタンがあるので、これを押します。
リポジトリを選択できる画面に遷移するので、自分のソースコードが置いてあるリポジトリを選択します。
最後に、プロジェクト名を決めてリポジトリを選択し、「Create Project」を押します。
これでCircleCIに監視するプロジェクトを登録できました。
.circleci/config.ymlファイルを作成する
次に、プロジェクトのルートディレクトリに「.circleci/config.yml」ファイルを作成します。
このファイルで具体的にCircleCIの実行環境でどういったことを行うかを記述していきます。
今回は、自動テストのみを行っていきます。
version: 2.1
jobs:
build:
docker:
- image: cimg/php:8.1.28-node
environment:
DB_HOST: 127.0.0.1
- image: circleci/mysql:8.0
working_directory: ~/laravelgram
environment:
DB_CONNECTION: circleci_testing
MYSQL_ALLOW_EMPTY_PASSWORD: true
MYSQL_ROOT_PASSWORD: ""
LARAVEL_BYPASS_ENV_CHECK: 1
steps:
- checkout
- run:
name: install dockerize
command: wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz && sudo tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz && rm dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz
environment:
DOCKERIZE_VERSION: v0.3.0
- run:
name: Wait for db
command: dockerize -wait tcp://localhost:3306 -timeout 1m
- run:
name: Update apt-get
command: |
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E88979FB9B30ACF2
sudo apt-get update --allow-releaseinfo-change
- restore_cache:
keys:
- v1-dependencies-{{ checksum "composer.json" }}
- v1-dependencies-
- run:
name: Install PHP libraries
command: composer install
- save_cache:
paths:
- vendor
key: v1-dependencies-{{ checksum "composer.json" }}
- run:
name: NPM install
command: |
npm ci
npm run build
- run:
name: Run PHPUnit
command: |
php artisan migrate --env=testing --force
php artisan test
今回はDockerの実行環境でテストを実施する流れで作ってみました。
順番に説明していきます。
まず、以下の一文。
version: 2.1
これはCircleCIのバージョンを指定していて、2024/4/19現在ではバージョン2.1が最新のはずです。バージョンが違うと、できることが結構違ってきます。基本的に最新バージョンにしておくと良いかと思います。
続いて、以下の文。
jobs:
build:
...
ここでは、ジョブを定義しています。ジョブというのは、1単位の処理のことです。例えば、ビルドやテストやデプロイはそれぞれ別のジョブで定義されます。ここでは、「build」という名前のジョブを走らせています。
docker:
- image: cimg/php:8.1.28-node
environment:
DB_HOST: 127.0.0.1
- image: circleci/mysql:8.0
working_directory: ~/laravelgram
environment:
DB_CONNECTION: circleci_testing
MYSQL_ALLOW_EMPTY_PASSWORD: true
MYSQL_ROOT_PASSWORD: ""
LARAVEL_BYPASS_ENV_CHECK: 1
こちらはExecutorといって、ジョブの中の実行環境を定義しています。今回はDocker実行環境にしていますが、他にもLinux VM、MacOS、WindowsOS、Armなどがあります。そして、environmentで実行環境内の環境変数を定義しています。
steps:
...
最後に、stepsで具体的なコマンドの実行などを行います。stepsは上から順番に処理されていきます。基本的にはUbuntuにMySQLをインストールしてテストコードを実行しているだけです。最初にある「checkout」の部分はCircleCI特有の書き方で、対象リポジトリにあるソースコードを取ってきてCircleCI実行環境にダウンロードしています。Gitでいうgit pullコマンドみたいなものですね。
動作確認する
ここまで書けたら、実際にコードをリポジトリにpushして確認してみましょう。
pushしたら、CircleCI管理画面の「Dashboard」に行くと、処理が走っているかどうかを確認できます。
成功すると、以下のように「Success」というメッセージが出るようになってます。
また、詳細画面に入るとログなども確認することができます。
失敗した場合などはログを確認してリトライしてみましょう。
コメント