モダンなWeb開発において、ローカルPCの開発環境をいかに素早く、かつチーム全員で差異なく構築できるかは非常に重要なポイントです。
PHPフレームワークのLaravelでは、公式が提供するDockerベースの軽量開発環境「Laravel Sail(セイル)」が事実上のデファクトスタンダード(標準ツール)となっています。
Laravel Sailを使えば、ホストPCにPHPやComposer、Node.js、MySQL、Redisなどを個別にインストールして設定する煩わしい手間が一切不要になり、「Docker Desktopをインストールしてコマンドを1回実行するだけ」で完璧な開発環境が数分で立ち上がります。
- Laravel Sailの仕組みとDocker / Docker Composeとの関係性
- 【新規作成】コマンド一発でPHP・MySQL・Redis・Mailpit環境を構築・起動する手順
- 【既存プロジェクト】既存のLaravelアプリにSailを後から導入する方法
- 開発効率を10倍にする「sail」コマンドのエイリアス設定手順
- 日常開発で必ず使う必須コマンド完全リファレンス(Artisan / Composer / NPM / MySQL)
- Mailpit(メール確認UI)やMySQL(GUIクライアント)への接続・デバッグ手法
- ポート衝突やパーミッション問題など初心者がハマりやすいエラーの完全トラブルシューティング
本ガイドに沿って進めるだけで、Docker初心者の方でも迷わず最新のLaravel開発環境を構築し、日々の開発ワークフローを快適にスタートできます。
1. Laravel Sailとは?Dockerとの関係と仕組み
Laravel Sailは、Laravel公式が開発・保守している「Docker Composeの軽量コマンドラインインターフェース(CLI)」です。
従来のローカル開発では、OSごとに異なるPHPのバージョン管理(HomebrewやXAMPP、MAMP等)や、MySQLのインストール、拡張モジュールの設定などで多くの環境構築トラブル(「自分のPCでは動くが同僚のPCでは動かない」等)が発生していました。
💡 Laravel Sailが選ばれる3大メリット
- ホストPCを汚さない: PHPやデータベースをPC本体に直接インストールする必要がなく、すべてDockerコンテナ内で完結します。
- チーム全員で完全同一の環境:
docker-compose.ymlでインフラ構成がコード管理(IaC)されるため、Mac・Windows・Linux問わず同じ環境が再現されます。 - ワンストップで周辺サービスが揃う: MySQLだけでなく、Redisキャッシュ、メールテスト用Mailpit、全文検索Meilisearch、E2Eテスト用Seleniumなど、必要なコンテナがあらかじめ最適化されて同梱されています。
Sailの実体はプロジェクト内の vendor/bin/sail にあるシェルスクリプトです。このスクリプトが docker compose コマンドを背後で適切に呼び出すため、複雑なDockerコマンドを覚えることなく、直感的な短いコマンドでコンテナを操作できます。
| サービス種別 | デフォルト技術 | 主な役割・ポート |
|---|---|---|
| Web / App | PHP 8.x + Nginx/Built-in | Laravel本体実行環境(ポート: 80) |
| Database | MySQL(またはPostgreSQL / MariaDB) | リレーショナルDB(ポート: 3306) |
| Cache / Queue | Redis | 高速インメモリストレージ(ポート: 6379) |
| Mail Testing | Mailpit | 送信メールのWeb確認UI(SMTP: 1025, Web: 8025) |
2. 事前準備:Docker Desktopのインストール
Laravel Sailを利用するための唯一の前提条件は、PCに Docker がインストールされ起動していることです。
Windows環境の場合(WSL2の利用)
WindowsでSailを最も高速かつ安定して動作させるには、WSL2(Windows Subsystem for Linux 2) と Docker Desktop を連携させます。
- PowerShell(管理者)で
wsl --installを実行し、UbuntuなどのLinuxディストリビューションを導入します。 - Docker公式サイトから Docker Desktop for Windows をダウンロードしてインストールします。
- Docker Desktopの設定画面(Settings → General)で「Use the WSL 2 based engine」にチェックが入っていることを確認します。
- Settings → Resources → WSL Integration で、使用するLinuxディストリビューション(Ubuntu等)のトグルをONにします。
プロジェクトファイルはWindows側のCドライブ(
/mnt/c/...)ではなく、必ず WSL2内のホームディレクトリ(~/projects/...) に作成・配置してください。Windows側のファイルシステムをマウントすると、DockerのI/Oパフォーマンスが極端に低下し、ページ表示が非常に重くなります。
macOS環境の場合
Macをご利用の場合は、お使いのCPU(Apple Silicon M1/M2/M3/M4 または Intel)に対応した Docker Desktop for Mac を公式サイトからダウンロードし、Applicationsフォルダにドラッグ&ドロップして起動するだけで準備完了です。
Dockerの動作確認
ターミナル(WindowsはWSL2のUbuntuターミナル)を開き、以下のコマンドでDockerが正常に応答することを確認します。
# Dockerのバージョン確認
docker --version
# Docker Composeのバージョン確認
docker compose version
3. 【新規作成】コマンド一発でLaravel Sail環境を構築する手順
Dockerが起動していれば、ホストPCにPHPやComposerが入っていなくても、以下のワンライナーコマンドを実行するだけでLaravelの最新プロジェクトが作成されます。
基本の構築コマンド(デフォルト構成)
# example-app というディレクトリ名でLaravelプロジェクトを構築
curl -s "https://laravel.build/example-app" | bash
このコマンドを実行すると、Dockerコンテナ内でLaravelのダウンローダーが実行され、必要なファイル群と docker-compose.yml が自動生成されます。
構成サービスをカスタマイズして作成する(with パラメータ)
with クエリパラメータを指定することで、構築時に含めたいサービス(DBやキャッシュ、メールサーバー等)を自由にカスタマイズできます。
# MySQL、Redis、Mailpit のみを構成に含める例
curl -s "https://laravel.build/my-project?with=mysql,redis,mailpit" | bash
# PostgreSQL と Redis、Mailpit を含める例
curl -s "https://laravel.build/my-project?with=pgsql,redis,mailpit" | bash
mysql, pgsql, mariadb, redis, memcached, meilisearch, typesense, minio, mailpit, selenium, soketi
コンテナの初回起動とブラウザ確認
プロジェクトのダウンロードが完了したら、作成されたディレクトリに移動してSailを起動します。
# 作成したプロジェクトディレクトリへ移動
cd example-app
# Sailコンテナをバックグラウンド(デタッチモード)で起動
./vendor/bin/sail up -d
初回起動時はDockerイメージのダウンロードとビルドが行われるため数分かかりますが、完了後にブラウザで http://localhost にアクセスすると、見慣れたLaravelのウェルカム画面が表示されます!
4. 【既存プロジェクト】既存のLaravelアプリにSailを導入する方法
すでに手元にあるLaravelプロジェクトや、Gitリポジトリからクローンしてきたプロジェクトに後からSailを導入する手順も非常にシンプルです。
ステップ1:laravel/sail パッケージのインストール
プロジェクト直下でComposerを使って laravel/sail を開発環境用パッケージとして追加します。
composer require laravel/sail --dev
ステップ2:sail:install コマンドで構成を生成
Artisanコマンドを実行して、プロジェクト用の docker-compose.yml を生成します。
php artisan sail:install
コマンドを実行すると、ターミナルに対話式の選択メニューが表示されます。
Which services would you like to install? [mysql]:
[0] mysql
[1] pgsql
[2] mariadb
[3] redis
[4] memcached
[5] meilisearch
[6] typesense
[7] minio
[8] mailpit
[9] selenium
[10] soketi
> 0,3,8
カンマ区切りで使用したい番号(例: 0,3,8 でMySQL, Redis, Mailpit)を入力してEnterキーを押すと、最適な docker-compose.yml が自動生成され、.env のDB接続設定等もSail用に書き換えられます。
ステップ3:コンテナの起動
./vendor/bin/sail up -d
5. 【最重要】作業効率が10倍になる「sail」エイリアス設定
Laravel Sailの唯一の弱点は、すべてのコマンドの前に ./vendor/bin/sail と長く入力しなければならない点です。
シェル(Bash / Zsh)にエイリアス(短縮コマンド)を登録することで、sail と打つだけで実行できるように設定しましょう。
設定手順(macOS / Linux / WSL2共通)
お使いのシェル設定ファイル(~/.zshrc または ~/.bashrc)に以下の1行を追記します。
# 設定ファイルを開いて追記(Zshの場合)
echo "alias sail='[ -f sail ] && sh sail || sh vendor/bin/sail'" >> ~/.zshrc
# 設定を現在のシェルに反映
source ~/.zshrc
※ Bashをお使いの場合は ~/.zshrc を ~/.bashrc に読み替えて実行してください。
このエイリアスを設定することで、今後はどのディレクトリにいても、プロジェクト直下にいれば sail up -d や sail artisan migrate のように快適にコマンドを実行できるようになります。
6. 日常開発で必ず使う!Laravel Sail必須コマンド完全リファレンス
開発中に頻繁に使用するSailの主要コマンドをカテゴリ別にまとめました。
① コンテナの起動・停止・ステータス管理
| コマンド | 機能・用途 |
|---|---|
sail up |
コンテナをフォアグラウンドで起動(ログがリアルタイム表示される) |
sail up -d |
【常用】コンテナをバックグラウンドで起動 |
sail down |
【常用】すべてのコンテナを安全に停止・削除(DBデータは保持) |
sail down -v |
【注意】コンテナを停止し、DBボリュームも完全削除して初期化 |
sail ps |
起動中の全コンテナの稼働状態とポートマッピングを確認 |
sail restart |
すべてのコンテナを再起動 |
sail build --no-cache |
Dockerfileの変更後などにイメージをキャッシュなしで再ビルド |
② Artisanコマンドの実行(sail artisan)
ホスト側のPHPではなく、コンテナ内のPHP環境でArtisanコマンドが実行されます。
# マイグレーションの実行
sail artisan migrate
# マイグレーションのリフレッシュ(初期化&シーディング)
sail artisan migrate:fresh --seed
# モデル・マイグレーション・コントローラの一括生成
sail artisan make:model Post -mc
# 対話型シェル(Tinker)の起動
sail artisan tinker
# 設定・ルート・ビューの全キャッシュクリア
sail artisan optimize:clear
# ルート一覧の表示
sail artisan route:list
③ Composer & NPM / Vite(フロントエンドビルド)
ホストPCにNode.jsやComposerが入っていなくても、コンテナ内でパッケージ追加やフロントエンドのホットリロード(Vite)が動作します。
# Composerパッケージの追加
sail composer require laravel/breeze --dev
# npmパッケージのインストール
sail npm install
# フロントエンド開発サーバーの起動(Viteホットリロード)
sail npm run dev
# 本番用アセットのビルド
sail npm run build
④ テスト・コード静的解析
# PHPUnit / Pest によるテスト実行
sail test
# 並列テストの実行
sail test --parallel
# Laravel Pint によるコード整形
sail pint
⑤ コンテナ内へのログイン(シェル・MySQL直接接続)
# 一般ユーザー(sail)としてコンテナのbashに入る
sail shell
# rootユーザーとしてコンテナに入る(パッケージ追加の検証等)
sail root-shell
# MySQL CLIクライアントを起動してDBに直接接続
sail mysql
7. Mailpit & MySQL & Redisの活用とGUI接続方法
Sailで立ち上げた周辺サービスは、ブラウザやGUIクライアントから簡単に接続・確認できます。
Mailpitによるメール送信テスト(Web UI)
Sailには標準でローカルSMTPサーバーおよびWeb画面を提供する Mailpit が含まれています。
Laravelアプリから送信されたメールは外部に送信されずすべてMailpitに捕捉されるため、誤送信の心配なくテストできます。
- Mailpit Web画面URL: http://localhost:8025
- .envの設定確認:
MAIL_MAILER=smtp MAIL_HOST=mailpit MAIL_PORT=1025 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null
メール送信処理を実行後、ブラウザで http://localhost:8025 を開くと、送信されたメールの件名・本文・HTMLプレビュー・添付ファイルが即座に確認できます。
外部GUIツール(TablePlus / DBeaver / Sequel Ace等)からMySQLへの接続
ホストPCにインストールしたお好みのDBクライアントからSailのMySQLに接続する際の設定値は以下の通りです。
| 設定項目 | 接続設定値 | 補足 |
|---|---|---|
| Host | 127.0.0.1(または localhost) |
※コンテナ内からは mysql だがホストからは 127.0.0.1 |
| Port | 3306(デフォルト) |
FORWARD_DB_PORT で変更可能 |
| User | sail(または root) |
.envの DB_USERNAME |
| Password | password |
.envの DB_PASSWORD |
| Database | laravel(プロジェクト名等) |
.envの DB_DATABASE |
8. Laravel Sailのカスタマイズと高度な活用法
サービスの追加(sail:add)
既存のSail環境に新しいコンテナサービス(例: RedisやMeilisearchなど)を追加したい場合は、専用のArtisanコマンドを使用します。
sail artisan sail:add
追加したいサービスを選択すると、docker-compose.yml に必要な定義が追記されます。追記後は sail up -d を実行して反映します。
Dockerfileのカスタマイズ(sail:publish)
PHPの独自拡張モジュールをインストールしたい場合や、php.ini の設定(メモリ上限、アップロードサイズ等)を微調整したい場合は、SailのDocker設定ファイルをプロジェクト直下に書き出します。
# Dockerfileと設定ファイルをプロジェクト直下に展開
sail artisan sail:publish
コマンドを実行すると、docker/ ディレクトリが作成され、使用中のPHPバージョンの Dockerfile や php.ini が展開されます。編集後は以下のコマンドでイメージを再ビルドします。
sail build --no-cache
sail up -d
Xdebugによるステップ実行デバッグの有効化
VSCode等でブレークポイントを張ってステップ実行デバッグを行いたい場合は、.env に以下の環境変数を設定します。
# Xdebugを有効化
SAIL_XDEBUG_MODE=develop,debug
設定後、sail restart を実行すれば、コンテナ側のXdebug(ポート9003)が起動し、VSCodeのPHP Debug拡張機能と連携可能になります。
9. 初心者が必ずハマるトラブルと解決策(FAQ)
【原因】: ホストPCで起動している他のWebサーバー(Apache/Nginx)やMySQLがポート80または3306を既に使用しています。
【解決策】: プロジェクトの .env ファイルに別のポート番号を指定して競合を回避します。
# .envに追記してポートを変更
APP_PORT=8080
FORWARD_DB_PORT=3307
設定変更後、sail up -d を実行すると http://localhost:8080 でアクセスできるようになります。
【原因】: ホスト側のユーザーID(UID)とコンテナ内の実行ユーザーのIDが不一致を起こしています。
【解決策】: .env に現在のユーザーIDとグループIDを指定して再ビルドします。
# Linux/Macで現在のUID/GIDを確認
id -u # 例: 1000
id -g # 例: 1000
# .env に設定
# WWWUSER=1000
# WWWGROUP=1000
# 再ビルドして起動
sail build --no-cache && sail up -d
【原因】: Dockerコンテナ外のブラウザとViteのHMR(Hot Module Replacement)サーバー間の通信が遮断されています。
【解決策】: vite.config.js に server.hmr.host の明示設定を追加します。
export default defineConfig({
plugins: [laravel({ input: ['resources/css/app.css', 'resources/js/app.js'], refresh: true })],
server: {
hmr: {
host: 'localhost',
},
},
});
【原因】: Docker Desktopアプリケーションが起動していません。
【解決策】: OSのアプリケーション一覧から「Docker Desktop」を起動し、クジラのアイコンが緑色(Engine running)になるのを待ってから再度コマンドを実行してください。
10. まとめと次のステップ
Laravel Sailは、Dockerの強力な分離性と再現性を保ちながら、複雑なコマンドを意識させない極めて洗練された開発環境ツールです。
Sailを活用することで、環境構築のトラブルに悩まされる時間をゼロにし、Laravelアプリケーション本来の機能開発に集中することができます。
📋 Laravel Sail 導入・運用のチェックリスト
- ✅ Docker Desktopをインストールし、正常稼働を確認した
- ✅ Windowsの場合はWSL2内のホームディレクトリにプロジェクトを作成した
- ✅
alias sail='./vendor/bin/sail'をシェル設定ファイル(~/.zshrc/~/.bashrc)に登録した - ✅
sail up -dで起動し、http://localhostで画面が表示されることを確認した - ✅
sail artisan migrateやsail npm run devなどの日常コマンドを把握した - ✅
http://localhost:8025でMailpitのメール受信UIが確認できることを確かめた - ✅ ポート衝突時は
APP_PORTやFORWARD_DB_PORTを.envで変更する方法を理解した
あわせて読みたいLaravel関連記事
Sail環境が整ったら、以下の記事を参考にLaravelの最新機能や実践的な開発テクニックを学んでいきましょう!
- Laravel 11の変更点総まとめ|スリム化されたディレクトリ構造・Kernel廃止とbootstrap/app.phpの設定・移行ポイントを徹底解説
- Laravel 12の新機能・変更点総まとめ|公式AI SDK統合・最新スターターキットとLaravel 11からのアップグレード手順
- Laravelメール送信完全ガイド|Mailableの使い方とBladeテンプレート・Mailpit/Mailtrapでの検証手順を徹底解説
- Laravel キュー(Queue)と非同期処理の実装完全ガイド|database設定・Job作成・dispatchからワーカー常駐まで徹底解説
- Laravel Breezeとは?インストールからログイン・登録機能の構築・日本語化まで徹底解説
- Laravelの.envが反映されない原因4つと解決策|まずconfig:clearを試す
- 【Laravel】php artisan key:generateコマンドの使い方と構文|APP_KEY生成・オプション・本番の注意点
- Laravel開発をスムーズに!VSCodeおすすめ拡張機能ベスト10選と導入方法

コメント