Laravel×CircleCIで自動テストする

CI/CD

こんにちは!

先日LaravelのプロジェクトでCircleCIを使って自動テストを組み込むということを業務で行ったので、今日は備忘録としてまとめていきたいと思います。

本記事を読めば、CircleCIを使ったLaravelの自動テスト方法がわかるようになると思います。

読者
読者

「Laravelプロジェクトで自動テストを行う手順を知りたい」

「CircleCIを使った自動テストの書き方を知りたい」

このようにお考えの方には参考になるのではと思います。

それでは、早速みていきましょう!

前提

以下の事項は前提として進めてます。

  • CircleCIのアカウントは作成済みであること
  • Laravelのテストコードは記述済みであること

Laravelプロジェクトを自動テストする

CircleCIで自動テストを行うためには、以下の手順を踏むことになります。

  1. CircleCIでプロジェクトのリポジトリを登録する
  2. .circleci/config.ymlを作成する
  3. 対象リポジトリに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」というメッセージが出るようになってます。

また、詳細画面に入るとログなども確認することができます。

失敗した場合などはログを確認してリトライしてみましょう。

コメント

タイトルとURLをコピーしました