Laravel Sailとは?初心者向け導入・起動停止・よく使うコマンド・Dockerとの関係を徹底解説

Laravel入門

「Laravel Sail(セイル)」は、Laravel公式が提供するDockerベースの軽量なローカル開発環境です。PCにPHPやMySQL、Node.jsなどを個別にインストールしなくても、Dockerさえあればコマンド1つですぐにLaravelの開発環境を立ち上げることができます。

この記事では、Laravel Sailの概要やDockerとの関係性、新規・既存プロジェクトへの導入手順、起動・停止方法、日常開発でよく使うSailコマンド一覧、カスタマイズ方法、そして初心者がつまずきやすいトラブルと対処法まで、実機検証をもとにわかりやすく徹底解説します。

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

Laravel Sailは、LaravelアプリケーションをDockerコンテナ上で動作させるための公式CLI(コマンドラインインターフェース)ツールです。Composerパッケージ(laravel/sail)として提供されており、実体はdocker composeコマンドを扱いやすくラップしたシェルスクリプトです。

Sailと素のDocker Composeの違い

素のDocker Composeを使ってLaravel環境を構築する場合、Dockerfilecompose.yamldocker-compose.yml)を自分で記述し、Artisanコマンドを実行するたびに長いDockerコマンドを打つ必要があります。

Laravel Sailを使うと、Laravel開発に必要な各種設定があらかじめ最適化されており、専用のシンプルなコマンドでコンテナを操作できます。

操作内容 素のDocker Composeコマンド Laravel Sailコマンド
コンテナの一括起動 docker compose up -d sail up -d
Artisanコマンド実行 docker compose exec laravel.test php artisan migrate sail artisan migrate
Composerコマンド実行 docker compose exec laravel.test composer require ... sail composer require ...
Node/NPMコマンド実行 docker compose exec laravel.test npm run dev sail npm run dev
MySQL CLI接続 docker compose exec mysql mysql -u sail -p sail mysql
コンテナの停止 docker compose down sail down

このように、コンテナ名(laravel.testなど)を意識することなく、あたかもローカルにPHPやComposerがインストールされているかのような感覚で開発を進められるのがSail最大のメリットです。

Sailのファイル構成(compose.yaml)

Sailを導入すると、プロジェクト直下にcompose.yaml(旧バージョンのLaravelではdocker-compose.yml)が生成されます。このファイル内でPHP(Laravel本体)、MySQL、Redis、Mailpitなどのコンテナ設定が定義されています。

Laravel 11 / 12 / 13等の最新環境では、標準のファイル名としてcompose.yamlが生成されます(既存のdocker-compose.ymlが存在する場合はそちらが優先されます)。

本番環境での利用について

Laravel Sailが提供するコンテナ構成はローカル開発環境専用です。ボリュームマウント(ホストとコンテナのファイル共有)や開発用ポートの公開など、ローカルでの作業効率を最優先した設計になっています。本番環境にそのままデプロイする用途には設計されていないため、本番環境には別途最適化したDockerイメージやサーバー環境を用意しましょう。

なお、Dockerを使わずにMacやWindowsのネイティブ環境で直接PHPを動かしたい場合は、Laravel Sailを使わずに開発環境を構築する方法も参考にしてください。

Laravel Sailを導入する事前準備

Laravel Sailを利用するには、ホストマシンにDocker環境が必要です。

  • macOS / Windows: Docker Desktop をインストールして起動しておく
  • Linux: Docker Engine および Docker Compose プラグインをインストールしておく

Windowsユーザーへの重要ポイント(WSL2の利用)
WindowsでSailを使用する場合は、WSL2(Windows Subsystem for Linux 2)のUbuntuなどのLinux環境内でプロジェクトを作成・実行してください。WindowsのCドライブ側(/mnt/c/...)にファイルを置くと、DockerのファイルI/Oが極端に遅くなります。必ずWSL2内のホームディレクトリ(/home/username/...)配下に配置しましょう。

ターミナルで以下のコマンドを実行し、Dockerデーモンが正常に起動しているか確認しておきます。

docker info

Laravel Sailのインストール手順

Sailの導入には「新規Laravelプロジェクトを作成する場合」と「既存のLaravelプロジェクトに追加する場合」の2通りの方法があります。

パターン1:新規プロジェクトを作成する場合(推奨)

ローカルにPHPやComposerがインストールされていなくても、curlコマンド1つでSail込みの新しいLaravelプロジェクトを生成できます。

# example-app という名前でプロジェクトを作成
curl -s "https://laravel.build/example-app" | bash

MySQLやRedis、Mailpitなどの構成サービスを指定したい場合は、URLの末尾にクエリパラメータを付与できます。

# MySQL、Redis、Mailpitを含めて作成する例
curl -s "https://laravel.build/example-app?with=mysql,redis,mailpit" | bash

プロジェクトの作成が完了したら、ディレクトリに移動して起動します。

cd example-app
./vendor/bin/sail up -d

パターン2:既存のLaravelプロジェクトにSailを追加する場合

すでに作成済みのLaravelプロジェクトにSailを追加する場合は、Composerでパッケージをインストールし、インストールコマンドを実行します。

# 1. Sailパッケージを開発依存としてインストール
composer require laravel/sail --dev

# 2. compose.yamlと設定を生成
php artisan sail:install

サービスをあらかじめ指定して対話プロンプトをスキップすることも可能です。

php artisan sail:install --with=mysql,redis,mailpit

sail:installコマンドの詳しいオプションや挙動については、sail:install — Sailをインストールするコマンドで詳しく解説しています。

Sailの起動・停止・基本操作

Sailのコンテナ操作は、プロジェクトルートにある./vendor/bin/sailコマンドで行います。

エイリアス(短縮コマンド)の設定

毎回./vendor/bin/sailと入力するのは大変なため、シェルの設定ファイル(~/.bashrc~/.zshrc)に以下のエイリアスを追加しておくことを強くおすすめします。

alias sail='[ -f sail ] && sh sail || sh vendor/bin/sail'

設定を反映(source ~/.zshrcなど)させると、以降はsail upのように短縮して実行できます。

コンテナの起動(up)

# フォアグラウンドで起動(ログがリアルタイム表示される)
sail up

# バックグラウンド(デーモン)で起動(通常はこちらを使用)
sail up -d

起動後、ブラウザで http://localhost にアクセスし、Laravelの初期画面が表示されれば環境構築完了です。

コンテナの停止(stop / down)

コンテナの停止方法にはstopdownの2種類があります。

# コンテナを一時停止(コンテナ自体は残る)
sail stop

# コンテナを停止してコンテナを削除(データボリュームは保持)
sail down

# コンテナとボリュームを完全に削除(データベースのデータも初期化)
sail down -v

コンテナの状態・ログ確認(ps / logs)

# 起動中のコンテナ一覧とポート状態を確認
sail ps

# すべてのコンテナのログを表示
sail logs

# アプリケーションコンテナのログをリアルタイムで追跡
sail logs -f laravel.test

日常開発でよく使うSailコマンド全集

Sailを起動した後は、ローカルのPHPコマンドの代わりにsailプレフィックスを付けて実行します。

1. Artisanコマンドの実行

Laravelの全Artisanコマンドをコンテナ内で実行できます。

# マイグレーションの実行
sail artisan migrate

# モデルとマイグレーションの作成
sail artisan make:model Post -m

# コントローラーの作成
sail artisan make:controller PostController --resource

# キャッシュのクリア
sail artisan optimize:clear

# ルーティング一覧の確認
sail artisan route:list

2. Composerコマンドの実行

パッケージの追加や更新もコンテナ内のPHP環境で行われます。

# パッケージのインストール
sail composer require laravel/breeze --dev

# パッケージの更新
sail composer update

# オートロードの再生成
sail composer dump-autoload

3. フロントエンド開発とVite(NPM)

Node.jsやNPMもSailコンテナに含まれているため、ホストにNode.jsをインストールしていなくてもビルドやHMR(ホットモジュールリプレイスメント)が使えます。

# NPMパッケージのインストール
sail npm install

# Vite開発サーバーの起動(ホットリロード有効)
sail npm run dev

# 本番用アセットのビルド
sail npm run build

4. テストの実行(PHPUnit / Pest)

# すべてのテストを実行
sail test

# Pestでのテスト実行
sail pest

# 特定のテストクラスのみ実行
sail test --filter=UserTest

5. データベース接続(MySQL / PostgreSQL / Redis)

コンテナ内のデータベースCLIへワンコマンドで接続できます。

# MySQLクライアントに接続
sail mysql

# PostgreSQLクライアントに接続(PostgreSQL使用時)
sail psql

# Redis CLIに接続
sail redis

6. コンテナ内シェルとTinkerの起動

# 一般ユーザー(sail)としてコンテナ内のbashを起動
sail shell

# rootユーザーとしてコンテナ内のbashを起動(権限変更やパッケージ追加時に便利)
sail root-shell

# Laravel Tinker(対話型実行環境)を起動
sail tinker

Tinkerの詳しい使い方やモデル操作、終了方法についてはLaravel Tinkerとは?使い方から終了方法・活用テクニックまで徹底解説をご参照ください。

7. メール送信テスト(Mailpit)

Sail標準のメールテストツール「Mailpit」が含まれている場合、Laravelから送信されたメールはすべてMailpitにキャッチされます。ブラウザで http://localhost:8025 を開くと、送信されたメールの件名や本文、HTMLプレビューを即座に確認できます。

8. アプリケーションの外部共有(sail share)

sail share

ローカル環境で動作しているLaravelアプリに対して、インターネットからアクセス可能な一時URLを発行できます。チームメンバーへの進捗確認やWebhookの疎通テストに便利です。

設定のカスタマイズとコンテナ追加

ポート番号の変更(.env)

ローカルのWebサーバー(Apache/Nginx)や別のMySQLがすでにポート80や3306を使っている場合、.envファイルに変数を追加・編集するだけでポート番号を変更できます。

# アプリケーションのポートを8080に変更(http://localhost:8080)
APP_PORT=8080

# MySQLのホスト側公開ポートを33060に変更
FORWARD_DB_PORT=33060

# Redisのホスト側公開ポートを63790に変更
FORWARD_REDIS_PORT=63790

# MailpitのWebUIポートを8026に変更
FORWARD_MAILPIT_DASHBOARD_PORT=8026

変更後は sail down && sail up -d でコンテナを再起動して反映させます。

サービスの追加(sail:add)

開発の途中でRedisやMeilisearchなどを追加したくなった場合は、sail:addコマンドを使用します。

sail artisan sail:add

対話形式で追加したいサービスを選択すると、compose.yaml.envに必要な設定が自動追記されます。詳しい手順はsail:add — Sailにコンテナを追加するコマンドを参照してください。

Dockerfileのカスタマイズ(sail:publish)

PHPの拡張モジュール(拡張機能)を追加したい場合や、PHPの設定(php.ini)を変更したい場合は、Sailの設定ファイルをプロジェクト内に書き出します。

sail artisan sail:publish

実行すると docker/ ディレクトリが作成され、PHPのバージョンごとのDockerfileや設定ファイルが配置されます。編集した後は、以下のコマンドでイメージを再ビルドします。

sail build --no-cache
sail up -d

初心者がつまずきやすいトラブルと解決策

症状・エラー 主な原因 解決策
ポート競合エラー
bind: address already in use
ホストマシンのポート80や3306が既存のWebサーバーやDBで占有されている .envAPP_PORT=8080FORWARD_DB_PORT=33060 を指定して再起動する
データベース接続エラー
SQLSTATE[HY000] [2002] Connection refused
.envDB_HOST127.0.0.1localhostのままになっている .envDB_HOST=mysql(コンテナ名)に変更する
Dockerデーモン未起動エラー
Cannot connect to the Docker daemon
Docker Desktopが起動していない、またはWSL2連携が無効 Docker Desktopを起動し、Settings > Resources > WSL Integrationで該当ディストリビューションを有効化する
Windows (WSL2) で動作が異常に重い プロジェクトがWindows側のCドライブ(/mnt/c/...)に配置されている プロジェクトをWSL2内のLinux領域(/home/ユーザー名/...)に移動する
ファイル書き込み権限エラー
Permission denied(Linux環境)
コンテナ内ユーザーとホストのユーザーID(UID)が不一致 .envWWWUSER=1000WWWGROUP=1000 を設定して sail build --no-cache を実行する
Viteのホットリロード(HMR)が効かない Viteポート(5173)への通信遮断、またはvite.config.jsの設定不足 compose.yaml5173:5173 がマッピングされているか確認し、sail npm run dev で起動する

まとめと関連記事

Laravel Sailは、Dockerの専門知識がなくても、チーム全体で統一された高品質なLaravel開発環境を数分で構築できる非常に優れた公式ツールです。

  • 新規作成curl -s "https://laravel.build/app-name" | bash で一発構築
  • 既存追加composer require laravel/sail --devphp artisan sail:install
  • 日常開発:すべてのコマンド(Artisan、Composer、NPM)を sail 経由で実行
  • ポート問題.envAPP_PORTFORWARD_DB_PORT で簡単に競合回避

Sailを使いこなすことで、ローカルマシンの環境を汚すことなく、快適で安全なLaravel開発ライフをスタートさせましょう。

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

レン (Wren)

こんにちは。レンです。

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

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

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

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

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

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

コメント