Laravel Sailの使い方とDocker環境構築入門|初心者向け導入手順・日常コマンド・カスタマイズまで徹底解説

Laravel入門基本文法・構文ガイド実装・応用テクニック運用・保守・セキュリティ

モダンな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. 1. Laravel Sailとは?Dockerとの関係と仕組み
      1. 💡 Laravel Sailが選ばれる3大メリット
  2. 2. 事前準備:Docker Desktopのインストール
    1. Windows環境の場合(WSL2の利用)
    2. macOS環境の場合
    3. Dockerの動作確認
  3. 3. 【新規作成】コマンド一発でLaravel Sail環境を構築する手順
    1. 基本の構築コマンド(デフォルト構成)
    2. 構成サービスをカスタマイズして作成する(with パラメータ)
    3. コンテナの初回起動とブラウザ確認
  4. 4. 【既存プロジェクト】既存のLaravelアプリにSailを導入する方法
    1. ステップ1:laravel/sail パッケージのインストール
    2. ステップ2:sail:install コマンドで構成を生成
    3. ステップ3:コンテナの起動
  5. 5. 【最重要】作業効率が10倍になる「sail」エイリアス設定
    1. 設定手順(macOS / Linux / WSL2共通)
  6. 6. 日常開発で必ず使う!Laravel Sail必須コマンド完全リファレンス
    1. ① コンテナの起動・停止・ステータス管理
    2. ② Artisanコマンドの実行(sail artisan)
    3. ③ Composer & NPM / Vite(フロントエンドビルド)
    4. ④ テスト・コード静的解析
    5. ⑤ コンテナ内へのログイン(シェル・MySQL直接接続)
  7. 7. Mailpit & MySQL & Redisの活用とGUI接続方法
    1. Mailpitによるメール送信テスト(Web UI)
    2. 外部GUIツール(TablePlus / DBeaver / Sequel Ace等)からMySQLへの接続
  8. 8. Laravel Sailのカスタマイズと高度な活用法
    1. サービスの追加(sail:add)
    2. Dockerfileのカスタマイズ(sail:publish)
    3. Xdebugによるステップ実行デバッグの有効化
  9. 9. 初心者が必ずハマるトラブルと解決策(FAQ)
  10. 10. まとめと次のステップ
      1. 📋 Laravel Sail 導入・運用のチェックリスト
    1. あわせて読みたいLaravel関連記事
  11. 関連記事

1. Laravel Sailとは?Dockerとの関係と仕組み

Laravel Sailは、Laravel公式が開発・保守している「Docker Composeの軽量コマンドラインインターフェース(CLI)」です。

従来のローカル開発では、OSごとに異なるPHPのバージョン管理(HomebrewやXAMPP、MAMP等)や、MySQLのインストール、拡張モジュールの設定などで多くの環境構築トラブル(「自分のPCでは動くが同僚のPCでは動かない」等)が発生していました。

💡 Laravel Sailが選ばれる3大メリット

  1. ホストPCを汚さない: PHPやデータベースをPC本体に直接インストールする必要がなく、すべてDockerコンテナ内で完結します。
  2. チーム全員で完全同一の環境: docker-compose.yml でインフラ構成がコード管理(IaC)されるため、Mac・Windows・Linux問わず同じ環境が再現されます。
  3. ワンストップで周辺サービスが揃う: 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 を連携させます。

  1. PowerShell(管理者)で wsl --install を実行し、UbuntuなどのLinuxディストリビューションを導入します。
  2. Docker公式サイトから Docker Desktop for Windows をダウンロードしてインストールします。
  3. Docker Desktopの設定画面(Settings → General)で「Use the WSL 2 based engine」にチェックが入っていることを確認します。
  4. Settings → Resources → WSL Integration で、使用するLinuxディストリビューション(Ubuntu等)のトグルをONにします。
⚠️ Windowsユーザーの重要注意点:
プロジェクトファイルは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 -dsail 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バージョンの Dockerfilephp.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)

Q1. 「port is already allocated」と出て起動に失敗する

【原因】: ホストPCで起動している他のWebサーバー(Apache/Nginx)やMySQLがポート80または3306を既に使用しています。
【解決策】: プロジェクトの .env ファイルに別のポート番号を指定して競合を回避します。

# .envに追記してポートを変更
APP_PORT=8080
FORWARD_DB_PORT=3307

設定変更後、sail up -d を実行すると http://localhost:8080 でアクセスできるようになります。

Q2. ファイルの書き込み権限エラー(Permission denied)が発生する

【原因】: ホスト側のユーザー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
Q3. Vite(npm run dev)で画面のホットリロードが効かない

【原因】: Dockerコンテナ外のブラウザとViteのHMR(Hot Module Replacement)サーバー間の通信が遮断されています。
【解決策】: vite.config.jsserver.hmr.host の明示設定を追加します。

export default defineConfig({
    plugins: [laravel({ input: ['resources/css/app.css', 'resources/js/app.js'], refresh: true })],
    server: {
        hmr: {
            host: 'localhost',
        },
    },
});
Q4. 「docker daemon is not running」と表示される

【原因】: 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 migratesail npm run dev などの日常コマンドを把握した
  • http://localhost:8025 でMailpitのメール受信UIが確認できることを確かめた
  • ✅ ポート衝突時は APP_PORTFORWARD_DB_PORT.env で変更する方法を理解した

あわせて読みたいLaravel関連記事

Sail環境が整ったら、以下の記事を参考にLaravelの最新機能や実践的な開発テクニックを学んでいきましょう!

レン (Wren)

こんにちは。レンです。

Laravelのコードの森に住んでいる、小さな案内役です。
ルーティングの枝やクラスの影を歩きながら、コードの流れや仕組みを眺めています。

このサイトでは、Laravelの基本から実装のコツまで、開発で役立つポイントを静かに整理しています。
難しいことを増やすのではなく、コードの見通しが少し良くなるヒントを届けるのが役目です。

「この処理はどこに書くのがいいのか」
「Laravelではどう考えると整理できるのか」

そんな疑問に、小さなメモを残すような気持ちで記事を書いています。

コードを書いている途中で迷ったとき、
このサイトが少し立ち止まって整理できる場所になればうれしいです。

レン (Wren)をフォローする

コメント