Laravel Sailで始めるDocker開発環境構築ハンズオン

概要

Laravel Sail は、Docker 上で Laravel の開発環境を手軽に立ち上げる公式ツールです。PHP・MySQL・Redis などをローカルに直接インストールせず、./vendor/bin/sail up 一発で開発に必要なミドルウェアが揃います。本記事では、まっさらな状態から Sail で開発環境を構築し、マイグレーション・テスト実行・コンテナ内でのコマンド実行までをハンズオン形式でたどります。

Sail とは何か

Sail は、プロジェクト直下の docker-compose.yml と ./vendor/bin/sail という薄い CLI で構成されます。sail コマンドは実質的に docker compose exec のエイリアス集です。

# これは
./vendor/bin/sail artisan migrate

# ほぼこれと同義
docker compose exec laravel.test php artisan migrate

Sail を使っても Docker の知識は無駄にならず、むしろ学習の足がかりになります。

動作環境

  • Docker Desktop(または Docker Engine + docker compose)
  • Laravel 13 系
  • PHP 8.5(Laravel 13 系 Sail のデフォルトイメージ。8.4 / 8.3 へ切替も可)
  • MySQL 8.0(本家は 9.7 LTS 等が出ていますが、Sail が生成する docker-compose.yml の既定は 8.0 です)

手順1: 新規プロジェクトを Sail 付きで作成する

ローカルに PHP が無くても、Docker さえあればプロジェクトを作成できます。

curl -s "https://laravel.build/example-app" | bash

生成するサービスを絞りたい場合は with クエリを付けます。

curl -s "https://laravel.build/example-app?with=mysql,redis" | bash

手順2: 既存プロジェクトに Sail を追加する

composer require laravel/sail --dev
php artisan sail:install

sail:install では使用サービスを対話的に選択でき、選んだ内容に応じて docker-compose.yml が生成されます。

手順3: 環境変数を確認する

Sail が生成する .env では、DB 接続のホスト名がコンテナ名(サービス名)になっている点がポイントです。

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=sail
DB_PASSWORD=password

DB_HOST を localhost に書き換えると接続できなくなるので注意してください。アプリコンテナから見た DB コンテナのホスト名は、Docker ネットワーク上のサービス名だからです。

手順4: コンテナを起動する

./vendor/bin/sail up -d

毎回フルパスを打つのは面倒なので、エイリアスを設定しておくと快適です。

alias sail='sh $([ -f sail ] && echo sail || echo vendor/bin/sail)'

ポートを変えたい場合は .env の APP_PORT を設定します。

APP_PORT=8080

手順5: マイグレーションと動作確認

sail artisan migrate

せっかくなので、ルートとマイグレーションを足して動作を確かめます。

sail artisan make:model Task -m
// database/migrations/xxxx_create_tasks_table.php
public function up(): void
{
    Schema::create('tasks', function (Blueprint $table) {
        $table->id();
        $table->string('title');
        $table->boolean('done')->default(false);
        $table->timestamps();
    });
}
sail artisan migrate
// routes/web.php
use App\Models\Task;
use Illuminate\Support\Facades\Route;

Route::get('/tasks', function () {
    return Task::all();
});

http://localhost/tasks にアクセスして空配列 [] が返れば、DB 接続まで含めて成功です。

よく使うコマンド

sail ps                 # コンテナの状態確認
sail shell              # コンテナ内のシェルに入る
sail mysql              # MySQL クライアントに入る
sail composer install   # Composer
sail npm run dev        # npm
sail artisan test       # テスト実行

注意点

  • DB_HOST はサービス名: 127.0.0.1 ではなくコンテナ名(mysql)を指定します。
  • ポート競合: ローカルで MySQL (3306) や Web サーバ (80) が動いていると起動に失敗します。APP_PORT / FORWARD_DB_PORT を調整します。
  • sail down -v に注意: -v を付けるとボリュームごと削除され DB データが消えます。残したいときは付けないこと。
  • ファイル権限 (Linux): ホストとコンテナの UID がずれると権限エラーが出ることがあります。WWWUSER / WWWGROUP を合わせると解消しやすいです。
  • 初回起動は遅い: イメージ取得とビルドで時間がかかるのは初回のみです。

まとめ

Laravel Sail を使えば、PHP やミドルウェアをローカルに直接入れずに、Docker だけで統一された開発環境を立ち上げられます。チーム内の「自分の環境では動く」問題を減らせるのも大きな利点です。内部的には docker compose の薄いラッパーなので、Sail を入り口に Docker そのものの理解を深めていくのがおすすめです。

\ 最新情報をチェック /

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。