Laravel Sailとは?インストールから開発環境構築・便利コマンドまで徹底解説

Laravel入門

「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 runlaravelsail/php-composer系イメージを使い、コンテナ内でlaravel newcomposer require laravel/sail --devphp 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=mysqlREDIS_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のラッパーなので、artisancomposernpmもコンテナ経由でそのまま実行できます。

コマンド 内容
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 shellsail 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がローカルの他サービスと競合する場合は、.envAPP_PORT=8080のように別番号を指定してください。

よくあるトラブルと対処法

症状 主な原因と対処
ポートが競合してSailが起動しない ローカルの80番や3306番を別のMySQL・Apache等が使用している場合に発生します。.envAPP_PORTFORWARD_DB_PORTを別番号に変更してください。
sail up実行時に権限エラーが出る Linux環境ではDockerデーモンの実行にsudo権限が必要な場合があります。ユーザーをdockerグループに追加するか、権限設定を見直してください。
ファイルの変更がコンテナに反映されない プロジェクトディレクトリがボリュームマウントされているか、Docker Desktopの共有フォルダ設定を確認してください。
MySQLコンテナに接続できない .envDB_HOST127.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 --devphp artisan sail:installで導入できます。本番運用向けの構成ではない点だけ押さえておけば、チーム内の環境差異に悩まされることなく開発をスタートできます。

レン (Wren)

こんにちは。レンです。

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

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

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

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

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

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

コメント