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 そのものの理解を深めていくのがおすすめです。
