🤖
Laravel + Docker + GitHub Actions でCI環境を構築する手順
📍 Laravel + Docker + GitHub Actions でCI環境を構築する手順
本記事では、LaravelプロジェクトをDockerで構築し、GitHub Actionsを使ってCI環境を整える手順を書きます。
コードをGitHubにpushして、プルリクを作成すると自動でテストが実行される仕組みを作ります。
✅ 前提条件
- Docker / Docker Compose がインストール済み
- GitHub アカウントとリポジトリが用意されている
- Laravelプロジェクトの作成から始める
🏠 Step 1: Laravel + Docker 環境を構築
📁 ディレクトリ構成
laravel-ci-sample/
├── Dockerfile
├── docker-compose.yml
└── .env
📄 docker-compose.yml
version: '3.8'
services:
app:
build:
context: .
dockerfile: Dockerfile
container_name: laravel_app
ports:
- "8000:80"
volumes:
- .:/var/www/html
depends_on:
- db
db:
image: mysql:8.0
container_name: laravel_db
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: laravel
MYSQL_USER: laravel
MYSQL_PASSWORD: laravel
📄 Dockerfile
FROM php:8.2-apache
RUN apt-get update && apt-get install -y \
libzip-dev zip unzip git curl \
&& docker-php-ext-install pdo_mysql zip
ENV APACHE_DOCUMENT_ROOT /var/www/html/public
RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf
WORKDIR /var/www/html
RUN curl -sS https://getcomposer.org/installer | php \
&& mv composer.phar /usr/local/bin/composer
⚙️ Step 2: Laravelプロジェクトのセットアップ
docker-compose up -d --build
docker-compose exec app bash
# Laravelプロジェクトを作成
composer create-project --prefer-dist laravel/laravel .
# 環境構築
cp .env.example .env
php artisan key:generate
.env
の DB_HOST
は db
に変更(docker-compose上のサービス名)。
🦪 Step 3: テストが動作するか確認
php artisan migrate
php artisan test
→ tests/Feature/ExampleTest.php
がパスすればOK!
☁️ Step 4: GitHubにpushする
git init
git add .
git commit -m "initial commit"
git remote add origin https://github.com/ユーザー名/リポジトリ名.git
git push -u origin main
🤖 Step 5: GitHub Actions のCI設定を追加
.github/workflows/ci.yml
📁 name: Laravel CI
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
laravel-tests:
runs-on: ubuntu-latest
services:
db:
image: mysql:8.0
ports:
- 3306:3306
env:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: laravel_testing
MYSQL_USER: laravel
MYSQL_PASSWORD: laravel
options: >-
--health-cmd="mysqladmin ping -h localhost"
--health-interval=30s
--health-timeout=5s
--health-retries=3
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up PHP
uses: shivammathur/setup-php@v2
with:
php-version: 8.2
extensions: pdo_mysql
- name: Install dependencies
run: composer install --prefer-dist --no-progress --no-suggest --no-interaction
- name: Copy .env.github to .env
run: cp .env.github .env
- name: Generate application key
run: php artisan key:generate
- name: Debug environment
run: php artisan config:clear
- name: Run migrations
run: php artisan migrate --force
- name: Run tests
run: php artisan test
.env.github
(CI用)と phpunit.xml
の準備
📄 Step 6:
.env.github
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_testing
DB_USERNAME=laravel
DB_PASSWORD=laravel
phpunit.xml
への追記(環境変数)
<php>
<env name="APP_ENV" value="testing"/>
<env name="DB_CONNECTION" value="mysql"/>
<env name="DB_HOST" value="127.0.0.1"/>
<env name="DB_PORT" value="3306"/>
<env name="DB_DATABASE" value="laravel_testing"/>
<env name="DB_USERNAME" value="laravel"/>
<env name="DB_PASSWORD" value="laravel"/>
</php>
🤖 Step 7: Userモデルを使ったAPIとテストの追加
ここでは、Userモデルを使ったAPIエンドポイントを作成し、Factoryでテストデータを生成して、GitHub Actions上で動作確認する方法を紹介します。
📄 ルーティングを追加(routes/api.php)
use App\Models\User;
Route::get('/users', function () {
return User::all();
});
🔧 Userモデルのテストファイルを作成
php artisan make:test Api/UserApiTest
📄 Factoryを使ったテストコードを書く
tests/Feature/Api/UserApiTest.php
<?php
namespace Tests\Feature\Api;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
use App\Models\User;
class UserApiTest extends TestCase
{
use RefreshDatabase;
public function test_users_endpoint_returns_users(): void
{
// テスト用のユーザーを3件作成
User::factory()->count(3)->create();
$response = $this->getJson('/api/users');
$response->assertStatus(200)
->assertJsonCount(3); // JSON配列の件数をチェック
}
}
✅ 完成!CIの動作確認
- GitHub上でPRを作成
- 自動的に「Run tests」ジョブが起動
- テストにパスすれば OK
Discussion