Masayan tech blog.

  1. ブログ記事一覧>
  2. Docker環境でLaravelプロジェクトのテスト用DBを作成する

Docker環境でLaravelプロジェクトのテスト用DBを作成する

公開日

環境

  • windows10
  • DockerDesktop for Win 3.5.x
  • Laravel 8.x
  • PHP 8.x
  • VsCode
  • gitbash 2.32.0.1

テスト用のDBを作成することで何がうれしいのか

  • DBが一つしかないとテスト後にデータがすべて吹っ飛んでしまう(Laravelでデータベースのテストを行う際、RefreshDatabaseでテスト後に不要データをクリアする前提)

設定手順

大きくは以下の手順です。

  1. docker-compose.ymlにテスト用のdbコンテナを記述
  2. .env.testingを作成

docker-compose.ymlにテスト用のdbコンテナを記述

※該当箇所のみ抜粋

テスト用のDBサービスとついでにphpmyadminも作成

  db-dl-test:
    image: mysql:latest
    container_name: db-dl-test
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: db_stocker_test
      TZ: "Asia/Tokyo"
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    volumes:
      - ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
    ports:
      - 3501:3306

  phpmyadmin-dl-test:
    image: phpmyadmin/phpmyadmin
    container_name: phpmyadmin-dl-test
    environment:
      - PMA_ARBITRARY=1
      - PMA_HOST=db-dl-test
      - PMA_USER=root
      - PMA_PASSWORD=root
    links:
      - db-dl-test
    ports:
      - 8581:80
    volumes:
      - /sessions

.env.testingを作成

cp .env.example .env.testing

.env.testingにデータベースの接続情報を追記

APP_ENV=testing

DB_CONNECTION=mysql
DB_HOST=db-dl-test // docker-compose.ymlのサービス名
DB_PORT=3306
DB_DATABASE=db_stocker_test // docker-compose.ymlのMYSQL_DATABASE
DB_USERNAME=
DB_PASSWORD=

アプリケーションkeyを生成

php artisan key:generate --env=testing

設定自体は以上です。テスト実行後にテスト用のDBのデータのみ消えていれば成功です

テスト用のDBに対してマイグレーション等を行う方法

artisanコマンドの末尾に --env=testingを付けるだけでOK

php artisan migrate --env=testing
php artisan db:see --env=testing

まとめ

いかがでしたでしょうか。本記事では、Docker環境でLaravelプロジェクトのテスト用DBを作成する方法について紹介しています。本番用のデータを永続化させるためにはテスト用のDBの作成は必須になるかと思いますので、ぜひ参考にしてみてください。