Contents
- 1 1. Docker + Laravel Sail の選択肢
- 2 2. PHP 8.2 と Composer を Docker に組み込む
- 3 3. Laravel プロジェクトの作成と基本設定
- 4 4. 開発に役立つ Artisan コマンド
- 5 5. 認証機能の導入(Breeze / Jetstream)
- 6 6. Blade テンプレートの書き方(最新版リンク)
- 7 7. データベース設定と Eloquent による CRUD
- 8 8. デバッグ・プロファイリングツール
- 9 9. テスト駆動開発(PHPUnit)と CI/CD 入門
- 10 10. デプロイまでの流れと次の学習ステップ
- 11 参考リンク集(最新版)
1. Docker + Laravel Sail の選択肢
| 項目 | Docker Desktop (一般的な環境) | Laravel Sail (プロジェクト単位) |
|---|---|---|
| インストール手順 | GUI があるので Windows・Mac・Linux どれでも同じ流れで導入可能 | composer create-project 後に自動生成される docker-compose.yml をそのまま利用 |
| 管理対象 | ホスト全体の Docker エンジンを操作 | プロジェクトごとに独立したコンテナ群(PHP‑FPM、Nginx、MySQL など) |
| 初期設定の手軽さ | Docker Desktop のインストールだけで完了 | ./vendor/bin/sail up -d を実行すれば開発環境が起動 |
おすすめ
- Docker Desktop が既に入っている → そのまま使用し、必要に応じて docker compose で自前の構成を作る。
- プロジェクトごとに軽量な環境を持ちたい → Laravel Sail を選択すると、.env の設定だけで完結します。
2. PHP 8.2 と Composer を Docker に組み込む
Dockerfile(シンプル版)
|
1 2 3 4 5 6 7 8 9 10 11 12 |
FROM php:8.2-fpm # 必要なパッケージと拡張をインストール RUN apt-get update && apt-get install -y \ libzip-dev zip unzip git \ && docker-php-ext-install pdo_mysql zip # Composer を公式イメージからコピー COPY --from=composer:2 /usr/bin/composer /usr/local/bin/composer WORKDIR /var/www/html |
この Dockerfile をプロジェクトのルートに置き、docker compose up -d(または ./vendor/bin/sail up -d)を実行すれば PHP 8.2 + Composer が同一コンテナで動作します。手動インストールやバージョン不整合の心配がなく、環境構築の手間が大幅に削減できます。
3. Laravel プロジェクトの作成と基本設定
3‑1. Composer でプロジェクトを生成
|
1 2 |
docker run --rm -v "$(pwd)":/app composer create-project laravel/laravel . |
composer create-projectは常に最新安定版(執筆時点では Laravel 10.x)を取得します。バージョン番号はハードコーディングせず、公式が提供するパッケージをそのまま利用してください。
3‑2. .env の用意とアプリキー生成
|
1 2 3 |
cp .env.example .env ./vendor/bin/sail php artisan key:generate |
.env に記載すべき主要項目(Docker 環境向け):
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
APP_NAME=Laravel APP_ENV=local APP_KEY=base64:xxxxxxxxxxxxxxxxxxxxxx APP_DEBUG=true APP_URL=http://localhost DB_CONNECTION=mysql DB_HOST=db DB_PORT=3306 DB_DATABASE=laravel DB_USERNAME=root DB_PASSWORD=secret |
APP_KEY が設定されていないと、セッションや暗号化機能が正しく動作しません。
4. 開発に役立つ Artisan コマンド
| コマンド | 用途 |
|---|---|
sail up -d / docker compose up -d |
コンテナ起動(バックグラウンド) |
sail php artisan migrate |
データベースマイグレーション実行 |
sail php artisan make:model Todo -mcr |
モデル・マイグレーション・コントローラを同時生成 |
sail php artisan route:list |
ルーティング一覧表示 |
sail php artisan tinker |
REPL で Eloquent を試す |
ポイント
- Docker 環境では必ず sail(または docker compose exec app) を経由して Artisan を実行します。ホスト上に PHP がインストールされていても、コンテナ内の環境と食い違うケースが多いためです。
5. 認証機能の導入(Breeze / Jetstream)
php artisan make:auth は Laravel 10 系では非推奨・削除されています。代わりに公式パッケージ Laravel Breeze または Jetstream を利用してください。
|
1 2 3 4 5 6 7 8 |
# シンプルなスタートキット composer require laravel/breeze --dev ./vendor/bin/sail php artisan breeze:install # SPA やチーム機能が必要なら Jetstream composer require laravel/jetstream ./vendor/bin/sail php artisan jetstream:install livewire |
インストール後はマイグレーションとビルド(npm install && npm run dev)を行うだけで、ユーザー登録・ログイン画面が利用可能になります。
6. Blade テンプレートの書き方(最新版リンク)
- 公式ドキュメント: https://laravel.com/docs/10.x/blade
基本レイアウト例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
{{-- resources/views/layouts/app.blade.php --}} <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>@yield('title', 'Laravel Todo')</title> <link rel="stylesheet" href="{{ asset('css/app.css') }}"> </head> <body> <header><h1>Todo アプリ</h1></header> <main> @yield('content') </main> <footer>&copy; {{ date('Y') }}</footer> </body> </html> |
Todo 一覧ページ
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
{{-- resources/views/todos/index.blade.php --}} @extends('layouts.app') @section('title', 'タスク一覧') @section('content') <ul> @forelse ($todos as $todo) <li>{{ $todo->title }}</li> @empty <li>タスクはまだありません。</li> @endforelse </ul> <form method="POST" action="{{ route('todos.store') }}"> @csrf <input type="text" name="title" placeholder="新しいタスク"> <button type="submit">追加</button> </form> @endsection |
Blade のディレクティブは @if/@foreach/@forelse などが豊富で、ロジックとビューをシンプルに分離できます。
7. データベース設定と Eloquent による CRUD
Docker Compose に MySQL を追加
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# docker-compose.yml の抜粋 services: app: build: . volumes: - .:/var/www/html ports: - "8000:80" depends_on: - db db: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: secret MYSQL_DATABASE: laravel MYSQL_USER: root MYSQL_PASSWORD: secret volumes: - db_data:/var/lib/mysql volumes: db_data: |
.env の DB_HOST=db と合わせれば、コンテナ間の名前解決で自動的に接続できます。
Eloquent 基本操作例(Todo モデル)
|
1 2 3 4 5 6 7 8 9 10 |
// app/Models/Todo.php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Todo extends Model { protected $fillable = ['title']; } |
コントローラでの使用例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public function index() { $todos = Todo::latest()->get(); // 作成日の降順で取得 return view('todos.index', compact('todos')); } public function store(Request $request) { $validated = $request->validate([ 'title' => 'required|max:255', ]); Todo::create($validated); return redirect()->route('todos.index'); } |
$fillable に列挙したカラムだけが Mass Assignment できるため、セキュリティ上安全です。
8. デバッグ・プロファイリングツール
| パッケージ | 主な機能 |
|---|---|
| Laravel Telescope | リクエスト・例外・SQL・キューの詳細を UI で確認 |
| barryvdh/laravel-debugbar | ページ下部にデバッグバーを表示し、実行時間やメモリ使用量が一目で分かる |
インストール手順(開発環境のみ)
|
1 2 3 4 5 6 7 |
composer require laravel/telescope --dev ./vendor/bin/sail php artisan telescope:install ./vendor/bin/sail php artisan migrate # または Debugbar composer require barryvdh/laravel-debugbar --dev |
インストール後、APP_ENV=local の状態であれば自動的に UI が有効化されます。
9. テスト駆動開発(PHPUnit)と CI/CD 入門
基本テスト例
|
1 2 3 4 5 6 7 8 |
// tests/Feature/TodoTest.php public function test_todo_creation() { $response = $this->post('/todos', ['title' => 'Sample task']); $response->assertRedirect('/'); $this->assertDatabaseHas('todos', ['title' => 'Sample task']); } |
GitHub Actions で自動テストを走らせるサンプル
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# .github/workflows/ci.yml name: CI on: push: branches: [ main ] jobs: test: runs-on: ubuntu-latest services: mysql: image: mysql:8.0 env: MYSQL_ROOT_PASSWORD: secret MYSQL_DATABASE: laravel ports: ['3306:3306'] options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 steps: - uses: actions/checkout@v3 - name: Set up PHP uses: shivammathur/setup-php@v2 with: php-version: '8.2' extensions: mbstring, dom, zip, pdo_mysql - name: Install Composer dependencies run: composer install --prefer-dist --no-progress --no-suggest --optimize-autoloader - name: Run tests env: DB_CONNECTION: mysql DB_HOST: 127.0.0.1 DB_DATABASE: laravel DB_USERNAME: root DB_PASSWORD: secret run: vendor/bin/phpunit |
CI が通れば、プルリクエスト時に自動でテストが走り、品質を保てます。
10. デプロイまでの流れと次の学習ステップ
| フェーズ | 主な作業 |
|---|---|
| ローカル | Docker + Sail で開発・テスト |
| ステージング | 同一 Docker イメージを GitHub Packages または Docker Hub にプッシュし、EC2/Lightsail 等にデプロイ |
| 本番 | 環境変数だけ切り替えて php artisan migrate --force を実行。Zero‑downtime デプロイには Laravel Forge や Envoy が便利 |
次に学ぶべきトピック
- 認証・認可の高度化 – Laravel Breeze/Jetstream に加え、Laravel Sanctum(SPA / API)や Laravel Fortify の活用。
- キューとイベント –
php artisan queue:workと Redis で非同期処理を実装し、スケーラビリティを向上させる。 - API 開発 – Laravel Sanctum + Laravel Resource を組み合わせたシンプルな JSON API の作り方。
- パフォーマンス最適化 – キャッシュ(Redis / Memcached)や Eager Loading、クエリログの分析手法。
参考リンク集(最新版)
| 項目 | URL |
|---|---|
| Laravel 公式ドキュメント(10.x) | https://laravel.com/docs/10.x |
| Blade テンプレートガイド(10.x) | https://laravel.com/docs/10.x/blade |
| Laravel Sail 公式ページ | https://laravel.com/docs/10.x/sail |
| Docker Desktop ダウンロード | https://www.docker.com/products/docker-desktop |
| Laravel Telescope | https://github.com/laravel/telescope |
| Laravel Debugbar | https://github.com/barryvdh/laravel-debugbar |
まとめ
- Docker + Sail により OS 非依存の統一環境が手軽に構築でき、
docker compose up -dだけで PHP 8.2 と Composer が利用可能になる。 - Laravel プロジェクトは Composer の
create-projectコマンドで最新バージョンを取得し、.envとキー生成だけで即座に開発開始できる。 - 認証は Breeze/Jetstream を導入すれば、非推奨コマンドに依存せずモダンな UI が手に入る。
- Blade の最新版ドキュメントリンクとデバッグツール(Telescope・Debugbar)を活用し、開発効率と品質を高めよう。
- テスト自動化と CI/CD を組み込むことで、本番環境への安全なデプロイが実現できる。
これらの手順とベストプラクティスに沿って構築すれば、Docker 上で快適かつ再現性の高い Laravel 開発環境が完成します。次は 認証・キュー・API といった本格的な機能へステップアップしてください。