📗

Laravel + Vue 3 Docker 開発環境構築手順

に公開

■ はじめに

Social Databank Advent Calendar 2025 の 18 日目です。

こんにちは。エンジニアの西崎です。

今回は laravel・vue3 の開発環境を作る手順を記事にまとめていきたいと思います。


1. ディレクトリ作成

ディレクトリ構成

laravel-vue-app/
├─ backend/          # PHP(Laravelなど)
│   ├─ Dockerfile
│   └─ ...
├─ frontend/         # Vue3 + TS
│   ├─ Dockerfile
│   ├─ package.json
│   └─ ...
├─ docker-compose.yml
└─ .env

空のプロジェクトディレクトリを作成

mkdir laravel-vue-app

cd laravel-vue-app

mkdir backend frontend
touch docker-compose.yml

2. Backend: Laravel プロジェクト作成

cd backend

docker run --rm -v $(pwd):/app -w /app composer:2.7 create-project laravel/laravel:^12.0 .

3. Frontend: Vue 3 プロジェクト作成

cd ../frontend

npm create vue@latest .

対話形式でいくつか質問されるので以下を参考に設定する

質問 推奨
Package name frontend
Select features TypeScript, Router, Pinia, Vitest, ESLint, Prettier
Experimental features None
Skip example code Yes

作成後、必要に応じて追加

npm install axios zod vee-validate

4. backend/Dockerfile を作成(PHP 8.4)

backend/Dockerfile
FROM php:8.4-fpm

RUN apt-get update && apt-get install -y \
    git unzip libpng-dev libonig-dev libxml2-dev zip curl \
 && docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd

COPY --from=composer:2.7 /usr/bin/composer /usr/bin/composer

WORKDIR /var/www/html

RUN useradd -m www && chown -R www:www /var/www/html
USER www

EXPOSE 8000

5. frontend/Dockerfile を作成(Vue3 + TS + Vite)

frontend/Dockerfile
FROM node:20-alpine

WORKDIR /app

COPY package*.json ./
RUN npm install

COPY . .

EXPOSE 5173

6. docker-compose.yml を作成

laravel-vue-app/docker-compose.yml
services:
  app:
    build: ./backend
    container_name: php-app
    volumes:
      - ./backend:/var/www/html
    ports:
      - "8000:8000"
    environment:
      DB_HOST: db
      DB_DATABASE: laravel-vue-app
      DB_USERNAME: root
      DB_PASSWORD: password
    depends_on:
      - db
    working_dir: /var/www/html
    command: php artisan serve --host=0.0.0.0 --port=8000

  db:
    image: mysql:8.0
    container_name: mysql-db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: laravel-vue-app
      TZ: Asia/Tokyo
    volumes:
      - db_data:/var/lib/mysql
    ports:
      - "3306:3306"

  frontend:
    build:
      context: ./frontend
      dockerfile: Dockerfile
    container_name: vue-frontend
    ports:
      - "5173:5173"
    volumes:
      - ./frontend:/app
      - /app/node_modules
    working_dir: /app
    command: npm run dev -- --host
    environment:
      - CHOKIDAR_USEPOLLING=true

volumes:
  db_data:

7. Docker 起動

cd laravel-vue-app

docker compose build
docker compose up -d

8. 動作確認

Laravel: http://localhost:8000 → Welcome ページ
Vue: http://localhost:5173 → Hello World

9. Laravel API と Vue の連携

Laravel 側

DB の設定

backend/.env
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel-vue-app
DB_USERNAME=root
DB_PASSWORD=password

API ルートを作成

cd laravel-vue-app

docker compose exec app bash
php artisan install:api
backend/routes/api.php
use Illuminate\Support\Facades\Route;

Route::get('/hello', function () {
    return ['message' => 'Hello from Laravel API!'];
});

確認

http://localhost:8000/api/hello をブラウザで叩いて、
"message": "Hello from Laravel API!" が帰ってくれば OK!

Vue 側

axios 通信を確認

frontend/src/App.vue
<script setup lang="ts">
  import axios from 'axios';
  import { ref, onMounted } from 'vue';

  const message = ref('Loading...');

  onMounted(async () => {
    const res = await axios.get('http://localhost:8000/api/hello');
    message.value = res.data.message;
  });
</script>

<template>
  <h1>{{ message }}</h1>
</template>

再読み込みして Hello from Laravel API! と出れば、
バックエンドとフロントエンドの接続成功!

10. DB の確認

cd laravel-vue-app

docker compose exec db bash

> mysql -u root -ppassword laravel-vue-app

> show tables

+------------------------+
| Tables_in_app          |
+------------------------+
| cache                  |
| cache_locks            |
| failed_jobs            |
| job_batches            |
| jobs                   |
| migrations             |
| password_reset_tokens  |
| personal_access_tokens |
| sessions               |
| users                  |
+------------------------+

11. 開発環境の起動と停止

# 起動
docker compose up -d

# 停止
docker compose down

12. その他設定

MySQL Workbench の接続設定

項目 入力する値 備考
Connection Name 任意の名前 例:laravel-vue-app
Hostname 127.0.0.1 または localhost
Port 3306 docker-compose.yml に設定している値
services.db.ports
Username root docker-compose.yml に設定している値
services.db.environment.MYSQL_ROOT_PASSWORD
Password password Store in Keychain を押す

まとめ

この記事では、Laravel + Vue 3 の開発環境をDocker を使ってローカルに構築する手順を解説しました。

  • Docker / docker-compose による環境構築
  • Laravel と Vue 3 の役割分離
  • ローカルでの動作確認方法

を一通り押さえることで、誰でも同じ環境を再現できる状態になっているはずです。

環境構築でつまずいたときは、docker-compose.yml.env の設定を改めて確認すると原因を切り分けやすくなります。

あとはこの環境をベースに、

  • API 実装(Laravel)
  • フロントエンド開発(Vue 3)
  • 認証や外部 API 連携

など、実際の開発を進めてみてください。

ソーシャルデータバンク テックブログ

Discussion