Laravel

Laravel Sailとは|sail up・sail downなど基本コマンドの使い方と導入手順

Laravel Sailは、PHP・MySQL・Redisを含むLaravel公式のDocker開発環境を、Dockerの知識がなくても扱えるようにするコマンドラインツールです。実体はプロジェクト直下のcompose.yamlsailスクリプトだけで、複雑なdocker-compose定義を自分で書く必要がありません。検索で多いのは「sail up」「sail down」の意味と使い分けです。まず結論から示し、続いて導入手順・コマンド一覧・カスタマイズ・Podman対応・起動トラブルの対処までを、公式ドキュメント(Laravel 13.x)に沿って整理します。

まとめ:Laravel Sailの要点

  • Sailの正体compose.yamlsailスクリプトの2つ。デフォルトはPHP・MySQL・Redisの3サービス構成。
  • 起動と停止の使い分けsail up=起動、sail up -d=バックグラウンド起動、sail stop=コンテナを残したまま停止、sail down=コンテナとネットワークを削除して停止(データはボリュームに残る)。
  • 導入:新規Laravelは同梱済み。既存アプリはcomposer require laravel/sail --devphp artisan sail:install
  • コマンドはsail経由でphp artisancomposernpmはコンテナ内で動かすためsail artisanのようにsailを前置する。
  • Podman:公式SailはDocker前提。Podman利用はコミュニティ製フォークが必要で公式サポート外。

Laravel Sailとは|公式のDocker開発環境

Laravel Sailは、Laravelアプリをローカルで動かすためのDockerコンテナ群を、簡単なCLIで操作できるようにするツールです。XAMPPやローカルへの直接インストールと違い、PHP・データベース・キャッシュを含む環境一式をコンテナとして立ち上げるため、チームで環境差異が出にくく、「自分の端末では動くのに」を減らせます。デフォルトのサービスはPHP・MySQL・Redisで、必要に応じてMongoDBやMeilisearchなどを後から追加できます。

compose.yamlとsailスクリプトの役割

Sailの中身はプロジェクト直下の2ファイルだけです。compose.yamlが起動するコンテナ(services)を定義し、sailスクリプトがそれらを操作するCLIを提供します。アプリ本体を動かすのはlaravel.testという名前のコンテナです。以前のバージョンで使われていたdocker-compose.ymlという名前は、現在はcompose.yamlに統一されているため、古い記事のファイル名とは異なる点に注意してください。

対応OS(macOS・Linux・Windows WSL2)

SailはmacOS・Linux・Windowsで動作します。WindowsではWSL2上での利用が前提で、Docker DesktopのWSL2連携を有効にした上で、WSL2のLinux側にプロジェクトを置いて操作します。Docker Desktop for Linuxを使う場合はdocker context use defaultでdefaultコンテキストに切り替えます。加えて、コンテナ内でファイル権限エラーが出る場合は、環境変数SUPERVISOR_PHP_USERrootに設定します。

Laravel Sailの導入手順

導入経路は「新規Laravelプロジェクト」と「既存アプリへの追加」の2通りです。新規なら追加作業はほぼ不要で、既存アプリはComposer経由でSailを入れてから設定を発行します。

新規プロジェクトでの利用

Laravelの新規プロジェクトにはSailが最初から同梱されています。プロジェクトのルートで次を実行すれば、compose.yamlに定義されたコンテナがすべて起動し、http://localhostでアプリにアクセスできます。

./vendor/bin/sail up

既存アプリへのSail追加(composer require・sail:install)

すでにあるLaravelアプリにSailを後から追加する場合は、開発依存としてSailを入れ、sail:installcompose.yaml.envを発行します。sail:installは使いたいサービスを対話的に選ばせ、接続用の環境変数を.envに書き込みます。

composer require laravel/sail --dev
php artisan sail:install

後からサービスを増やしたいときはphp artisan sail:addを使います。「docker nginx php mysql laravel」のような自前のDocker構成を組む代わりに、Sailなら必要なサービスをコマンドで足せるのが利点です。

sailエイリアスの設定

毎回vendor/bin/sailと打つのは冗長なので、シェルにエイリアスを設定してsail upのように短く呼べるようにします。次の行を~/.zshrc~/.bashrcに追記してシェルを再起動してください。以降はどのコマンドもsailだけで実行できます。

alias sail='sh $([ -f sail ] && echo sail || echo vendor/bin/sail)'

sail up・sail down・sail stopの意味と使い分け

検索で最も多いのが、起動・停止系コマンドの「意味」と使い分けです。混同しやすいのはstopdownで、コンテナを残すか削除するかが違います。

  • sail upcompose.yamlのコンテナをすべて起動する。ログがターミナルに出続け、ControlCで停止できる。
  • sail up -d:バックグラウンド(デタッチモード)で起動する。ターミナルを占有せず作業を続けられるため、実務ではこちらを使うことが多い。
  • sail stop:起動中のコンテナを停止するが、コンテナ自体は削除しない。次回はsail upで素早く再開できる。
  • sail down:Sailはdocker composeへコマンドを委譲するため、sail downはコンテナとネットワークを停止・削除する。データベースの中身はDockerボリュームに残るので消えない。環境を作り直したいときに使う。
  • sail restart:起動中コンテナの再起動。設定変更を軽く反映したいときに使う。

「sail upが動かない」「起動が遅い」ときは、いったんsail downしてからsail build --no-cacheでイメージを作り直し、再度sail upすると解決することが多いです。よく使うコマンドを一覧にまとめます。

コマンド 動作 コンテナの扱い
sail up 全コンテナを起動(フォアグラウンド) 作成・起動
sail up -d 全コンテナをバックグラウンド起動 作成・起動
sail stop コンテナを停止 残す
sail down 停止してコンテナ・ネットワークを削除 削除(ボリュームは保持)
sail restart コンテナを再起動 維持
sail build –no-cache イメージを再構築 再ビルド

sail経由でのartisan・composer・npm実行

アプリはコンテナ内で動くため、php artisancomposernpmをローカルに直接打つとコンテナ内の環境とずれます。Sailを使う間は、これらのコマンドの前にsailを付けてコンテナ内で実行します。公式ドキュメントの「php artisan queue:work」といった例は、Sail環境ではsail artisan queue:workに読み替えます。

sail php --version
sail composer require laravel/sanctum
sail artisan migrate
sail npm run dev

コンテナ内でシェルを開いてファイルを確認したいときはsail shell(root権限が必要ならsail root-shell)、対話実行ならsail tinkerを使います。テストはsail testsail artisan testと等価)で実行でき、専用のtestingデータベースが自動で使われるため開発用データを汚しません。ブラウザテストのLaravel Duskによるテスト自動化もSeleniumのローカル導入なしにコンテナ内で動かせます。

データベースとサービスの追加(MySQL・Redis・MongoDB)

デフォルトのMySQLは、初回起動時に開発用(DB_DATABASEの値)とテスト用(testing)の2つのデータベースを自動作成します。アプリからは.envDB_HOSTmysqlにして接続します。ローカルのGUIツール(TablePlus等)からはlocalhostのポート3306で接続でき、認証情報はDB_USERNAMEDB_PASSWORDに対応します。Redisはホスト名redis・ポート6379で利用します。

MongoDBやValkey、Meilisearch、Typesenseを使いたい場合は、導入時に選ぶかphp artisan sail:addで後から追加します。例えばMongoDBを追加すると、.envMONGODB_URImongodb://mongodb:27017に設定して接続します。データベース設計の前提となるLaravelの命名規則もあわせて確認しておくと、テーブル名やモデル名の齟齬を避けられます。

PHPバージョン・Nodeバージョンの変更とカスタマイズ

Sailが標準で使うPHPは8.5で、8.5・8.4・8.3・8.2・8.1・8.0を選べます。バージョンを変えるにはcompose.yamllaravel.testbuildで参照するランタイムのパス(例:./vendor/laravel/sail/runtimes/8.4)を書き換え、あわせてimage名(例:sail-8.4/app)も対応するバージョンに変更します。Nodeは標準でNode 24が入り、build.argsNODE_VERSIONで変更できます。いずれも変更後はsail build --no-cacheでイメージを作り直します。

sail build --no-cache
sail up

Dockerfile自体をカスタマイズしたいときはsail artisan sail:publishで設定ファイルをdockerディレクトリに書き出せます。1台で複数のLaravelアプリをSailで開発する場合は、アプリごとにimage名を一意にしておくとイメージの取り違えを防げます。

Podman対応の可否とコミュニティフォーク

「laravel sail podman」で調べる人がいますが、結論として公式のLaravel SailはDocker(およびDocker Compose)を前提に作られており、Podmanは公式サポート外です。PodmanでSailを動かしたい場合は、sailスクリプトがDockerではなくPodmanを呼ぶよう手を入れたコミュニティ製フォーク(sail-podman)を使う形になります。ただしフォークは公式より保守体制が小さく、公式の更新(PHPバージョンの追加やサービス構成の変更)への追従が遅れる可能性があります。会社やチームの標準環境として長期運用するなら、素直にDocker(またはDocker Desktopのライセンス条件を満たす代替)を使うほうが、公式ドキュメントとの整合が取れて保守が楽です。Podmanをどうしても使う必要がある特定要件がない限り、公式Dockerでの運用を推奨します。

localhost接続拒否など起動時のトラブルと対処

Sailでよくあるのが、ブラウザでhttp://localhostを開いたときの「このサイトにアクセスできません/ERR_CONNECTION_REFUSED」です。多くは次のいずれかが原因です。

  • コンテナが起動していないsail up -dを実行したか、sail pslaravel.testが起動中か確認する。
  • ポートの競合:ローカルで別のWebサーバやMySQLが同じポート(80・3306等)を使っている。Sail起動前に他のサーバ・DBを停止する。.envAPP_PORTで待ち受けポートを変更することもできる。
  • WSL2側にプロジェクトが無い:WindowsでWindows側ディレクトリに置くと権限・パフォーマンス問題が出る。WSL2のLinuxファイルシステム上にプロジェクトを置く。
  • ビルドの取りこぼしsail downsail build --no-cachesail upでイメージを作り直す。

それでも解決しない場合はsail logsでコンテナのログを確認し、どのサービスが起動に失敗しているかを切り分けます。

よくある質問

sail downとは何ですか?

sail downは起動中のコンテナとネットワークを停止して削除するコマンドです。sail stopがコンテナを残したまま止めるのに対し、downはコンテナを消して環境をリセットします。データベースの中身はDockerボリュームに保存されているため、downだけでは消えません。ボリュームごと消したい場合はdocker compose down -vを使います。

sail upとsail up -dの違いは?

どちらもコンテナを起動しますが、sail upはフォアグラウンドで動きログが流れ続けます。sail up -dはバックグラウンド(デタッチモード)で起動し、ターミナルを占有しません。開発中は-d付きが便利です。

Laravel SailでMySQLを使うには?

デフォルト構成にMySQLが含まれているため、追加設定は基本的に不要です。アプリの.envDB_HOSTmysqlDB_USERNAMEDB_PASSWORDを設定すれば接続できます。ローカルのGUIツールからはポート3306で接続します。

Laravel Sailは本番環境でも使えますか?

Sailはローカル開発環境向けのツールで、本番運用を想定した構成ではありません。本番でコンテナを動かすなら、AWS ECSなどのコンテナオーケストレーションや専用のデプロイ基盤を使い、Sailは開発時のローカル環境に限定するのが一般的です。

Sailのコマンドを短く打つには?

シェルにエイリアスを設定すれば、vendor/bin/sailを省いてsail upのように打てます。設定するエイリアス行は本文「sailエイリアスの設定」を参照し、~/.zshrc等に追記してシェルを再起動してください。

関連記事

資料請求

RELATED POSTS 関連記事