「Laravel Sail」は、Laravel公式が提供するDockerベースの開発環境で、Docker DesktopさえあればPHPやMySQLを個別にインストールせずにLaravelの開発を始められます。この記事では、Laravel Sailの概要から、既存プロジェクトへの追加・新規プロジェクトでの導入方法、起動後によく使うコマンド、Viteとの連携、つまずきやすいポイントまで、実際にコマンドを実行して確認した内容をもとに解説します。
Laravel Sailとは
Laravel Sailは、LaravelアプリケーションをDocker上で動かすための軽量なコマンドラインインターフェースです。実体はdocker composeコマンドを扱いやすくラップしたシェルスクリプトで、laravel/sailというComposerパッケージとして配布されています。Sailを使うと、PHP・MySQL・Redisなどをローカルマシンに個別インストールしなくても、compose.yamlで定義されたコンテナ群だけでLaravelの開発環境が揃います。
なお、以前のLaravel Sailはdocker-compose.ymlという名前でファイルを生成していましたが、Laravel 13.x環境で実際にsail:installを実行して確認したところ、現在はcompose.yamlという名前で生成されます(既存プロジェクトにdocker-compose.ymlがすでにある場合は、そちらがそのまま使われます)。ネット上の記事や書籍で「docker-compose.yml」と書かれていても、最近作成したプロジェクトでは「compose.yaml」を探すようにしてください。
Laravel Sail自体のシェルスクリプトには、対応OSとして次のように明記されています。
Laravel Sail supports macOS, Linux, and Windows (WSL2).
Windowsで利用する場合はWSL2(Windows Subsystem for Linux 2)が前提になる点に注意してください。
Laravel Sailのメリットと向いていないケース
- 環境構築が速い:Docker Desktopと数回のコマンド実行だけでPHP・DB・Redisなどが一括で立ち上がります。
- チーム内で環境差異が出にくい:
compose.yamlを共有すれば、OSが違っても同じバージョンのPHP・MySQLで開発できます。 - 不要になれば環境ごと破棄できる:ローカルにPHPやMySQLを直接インストールしないため、他プロジェクトへの影響がありません。
一方で、Sailが生成するcompose.yamlは本番環境向けの構成ではありません。開発を快適にするための設定(ボリュームマウントやデバッグ用ポート公開など)が含まれており、本番デプロイにはPHPやWebサーバーのイメージを別途最適化して用意するのが一般的です。「SailでそのまますぐVPSにデプロイする」という使い方は想定されていない点は誤解しやすいので覚えておきましょう。
また、Dockerを使わずに直接PHPやMySQLをインストールして開発したい場合は、Laravel Sailを使わずに開発環境を構築する方法も参考にしてください。
Laravel Sailを始める前に必要なもの
- Docker Desktop(macOS / Windows)またはDocker Engine(Linux)
- Windowsの場合はWSL2が有効になっていること
- Dockerデーモンが起動していること(
docker infoでエラーが出ないか確認)
Laravel Sailのインストール方法
Sailの導入方法は、新規にプロジェクトを作る場合と既存のLaravelプロジェクトに追加する場合で異なります。
方法1:新規プロジェクトを作成する場合
ターミナルで以下を実行すると、Sail入りの新規Laravelプロジェクトが作成されます。
curl -s "https://laravel.build/example-app" | bash
このコマンドの中身を確認すると、内部ではdocker runでlaravelsail/php-composer系イメージを使い、コンテナ内でlaravel newとcomposer require laravel/sail --dev、php artisan sail:installを自動実行しています。実行後にファイルの所有者をホスト側のユーザーに揃えるため、途中でsudoのパスワード入力を求められる場合があります。
cd example-app
./vendor/bin/sail up
laravel.build/以降の部分にプロジェクト名(この例ではexample-app)を指定できます。MySQLやRedis以外のサービスを含めたい場合は、後述のsail:installのオプションが利用可能です。
方法2:既存のLaravelプロジェクトにSailを追加する場合
composer create-project laravel/laravelで作成した通常のLaravelプロジェクトには、Sailは標準では含まれていません(Laravel 13.xの新規プロジェクトで実際に確認済み)。既存プロジェクトに追加する場合は、次の手順を実行します。
# Sailパッケージを追加
composer require laravel/sail --dev
# compose.yamlと.envを生成
php artisan sail:install --with=mysql,redis
sail:installコマンドの主なオプションは以下のとおりです(Laravel Sail 1.63系のソースで確認)。
| オプション | 内容 |
|---|---|
--with=mysql,redis,... |
含めるサービスをカンマ区切りで指定(未指定時は選択プロンプトが表示される) |
--devcontainer |
VS Code等向けの.devcontainer設定を追加生成する |
--php=8.5 |
PHPのバージョンを指定(デフォルトは8.5) |
--withに指定できる主なサービス名はmysql pgsql mariadb redis memcached meilisearch typesense minio mailpit selenium soketiなどです。インストール後、.envの接続先ホスト名がコンテナ名(DB_HOST=mysql、REDIS_HOST=redis)に自動で書き換わっていることを確認しておきましょう。
Sailの起動・停止
# バックグラウンドで起動
./vendor/bin/sail up -d
# 起動状況の確認
./vendor/bin/sail ps
# 停止(コンテナは削除される)
./vendor/bin/sail down
起動後、ブラウザでhttp://localhostを開いてLaravelのウェルカム画面が表示されれば成功です。毎回./vendor/bin/sailと打つのが面倒な場合は、シェルの設定ファイル(.bashrcや.zshrc)に以下のエイリアスを追加するとsailだけで実行できます。
alias sail='[ -f sail ] && sh sail || sh vendor/bin/sail'
よく使うSailコマンド
Sailはdocker composeのラッパーなので、artisanやcomposer、npmもコンテナ経由でそのまま実行できます。
| コマンド | 内容 |
|---|---|
sail artisan migrate |
マイグレーションの実行(artisan以下は任意のArtisanコマンドをそのまま指定可能) |
sail composer require ... |
コンテナ内でComposerパッケージを追加 |
sail npm install / sail npm run dev |
フロントエンド依存関係のインストール・Vite開発サーバーの起動 |
sail test |
Artisanのtestコマンド経由でPHPUnit/Pestのテストを実行 |
sail mysql |
mysqlコンテナへCLI接続(PostgreSQLならsail psql、Redisならsail redis) |
sail tinker |
Tinkerセッションを起動 |
sail shell(sail bashも同義) |
アプリケーションコンテナ内でシェルを起動 |
sail share |
一時的な公開URLを発行してアプリを外部共有 |
サービスを増やしたい場合はsail:addコマンドでcompose.yamlに追記できます。手順やオプションはsail:add — Sailにコンテナを追加するコマンドで解説しています。Sail自体のインストールオプションをさらに詳しく知りたい場合はsail:install — Sailをインストールするコマンドもあわせて確認してください。
Viteとの連携で気をつけること
フロントエンドの開発サーバー(Vite)もコンテナ内で動かす場合はsail npm run devを使います。Sailが生成するcompose.yamlには、あらかじめ次のポート設定が入っています(laravel/sailのcomposeテンプレートで確認済み)。
ports:
- '${APP_PORT:-80}:80'
- '${VITE_PORT:-5173}:${VITE_PORT:-5173}'
アプリ本体はAPP_PORT(既定80番)、Viteの開発サーバーはVITE_PORT(既定5173番)でホストに公開されるため、基本的には追加設定なしでホスト側のブラウザからHMR(ホットリロード)が機能します。ポート80がローカルの他サービスと競合する場合は、.envにAPP_PORT=8080のように別番号を指定してください。
よくあるトラブルと対処法
| 症状 | 主な原因と対処 |
|---|---|
| ポートが競合してSailが起動しない | ローカルの80番や3306番を別のMySQL・Apache等が使用している場合に発生します。.envのAPP_PORTやFORWARD_DB_PORTを別番号に変更してください。 |
sail up実行時に権限エラーが出る |
Linux環境ではDockerデーモンの実行にsudo権限が必要な場合があります。ユーザーをdockerグループに追加するか、権限設定を見直してください。 |
| ファイルの変更がコンテナに反映されない | プロジェクトディレクトリがボリュームマウントされているか、Docker Desktopの共有フォルダ設定を確認してください。 |
| MySQLコンテナに接続できない | .envのDB_HOSTが127.0.0.1のままになっていないか確認してください。Sail環境ではコンテナ名のmysqlを指定します。 |
Docker Composeを自前でカスタマイズしたい場合や、Sailと素のDocker Composeで迷っている場合は、実機検証を交えた比較記事DockerでLaravel開発環境を構築する方法|SailとカスタムComposeを比較検証も参考にしてください。GitHubでチーム開発する際の設定はLaravel Sailを使ってGitHubリポジトリを簡単にセットアップする方法で解説しています。
まとめ
Laravel Sailは、Docker DesktopさえあればPHP・MySQL・Redisなどをまとめて用意できる公式の開発環境です。新規プロジェクトならlaravel.build経由のワンライナー、既存プロジェクトならcomposer require laravel/sail --devとphp artisan sail:installで導入できます。本番運用向けの構成ではない点だけ押さえておけば、チーム内の環境差異に悩まされることなく開発をスタートできます。

コメント