はじめに
Laravel Sail は、Laravel のデフォルトの Docker 開発環境と対話するための軽量なコマンドラインインターフェースです。Sail は、事前に Docker の経験がなくても、PHP、MySQL、Redis を使用して Laravel アプリケーションを構築するための素晴らしい出発点を提供します。
Sail の中心には、プロジェクトのルートに保存されている docker-compose.yml
ファイルと sail
スクリプトがあります。sail
スクリプトは、docker-compose.yml
ファイルによって定義された Docker コンテナと対話するための便利なメソッドを持つ CLI を提供します。
Laravel Sail は、macOS、Linux、および Windows ([https://docs.microsoft.com/en-us/windows/wsl/about] を介して) でサポートされています。
インストールとセットアップ
Laravel Sail は、新しい Laravel アプリケーションとともに自動的にインストールされるため、すぐに使用を開始できます。新しい Laravel アプリケーションを作成する方法については、オペレーティングシステムに応じた Laravel の インストールドキュメント を参照してください。インストール中に、アプリケーションがどの Sail サポートサービスと対話するかを選択するよう求められます。
既存アプリケーションへの Sail のインストール
既存の Laravel アプリケーションで Sail を使用したい場合は、Composer パッケージマネージャーを使用して Sail をインストールするだけです。もちろん、これらの手順は、既存のローカル開発環境が Composer 依存関係をインストールできることを前提としています:
composer require laravel/sail --dev
Sail がインストールされた後、sail:install
Artisan コマンドを実行できます。このコマンドは、Sail の docker-compose.yml
ファイルをアプリケーションのルートに公開し、Docker サービスに接続するために必要な環境変数で .env
ファイルを修正します:
php artisan sail:install
最後に、Sail を開始できます。Sail の使用方法を学び続けるには、このドキュメントの残りを読み続けてください:
./vendor/bin/sail up
Linux 用の Docker Desktop を使用している場合は、次のコマンドを実行して default
Docker コンテキストを使用する必要があります: docker context use default
。
追加サービスの追加
既存の Sail インストールに追加サービスを追加したい場合は、sail:add
Artisan コマンドを実行できます:
php artisan sail:add
Devcontainers の使用
Devcontainer](https://code.visualstudio.com/docs/remote/containers) 内で開発したい場合は、--devcontainer
オプションを sail:install
コマンドに提供できます。--devcontainer
オプションは、sail:install
コマンドにデフォルトの .devcontainer/devcontainer.json
ファイルをアプリケーションのルートに公開するよう指示します:
php artisan sail:install --devcontainer
Sail イメージの再構築
時々、すべてのイメージのパッケージとソフトウェアが最新であることを確認するために、Sail イメージを完全に再構築したい場合があります。これを build
コマンドを使用して実行できます:
docker compose down -v
sail build --no-cache
sail up
シェルエイリアスの設定
デフォルトでは、Sail コマンドはすべての新しい Laravel アプリケーションに含まれる vendor/bin/sail
スクリプトを使用して呼び出されます:
./vendor/bin/sail up
ただし、Sail コマンドを実行するために vendor/bin/sail
を繰り返し入力する代わりに、Sail のコマンドをより簡単に実行できるシェルエイリアスを設定したい場合があります:
alias sail='sh $([ -f sail ] && echo sail || echo vendor/bin/sail)'
これが常に利用可能であることを確認するために、~/.zshrc
や ~/.bashrc
などのホームディレクトリ内のシェル構成ファイルにこれを追加し、その後シェルを再起動できます。
シェルエイリアスが設定されると、sail
を入力するだけで Sail コマンドを実行できます。このドキュメントの残りの例では、このエイリアスが設定されていると仮定します:
sail up
Sail の開始と停止
Laravel Sail の docker-compose.yml
ファイルは、Laravel アプリケーションを構築するのに役立つさまざまな Docker コンテナを定義しています。これらのコンテナのそれぞれは、services
設定の docker-compose.yml
ファイル内のエントリです。laravel.test
コンテナは、アプリケーションを提供する主要なアプリケーションコンテナです。
Sail を開始する前に、ローカルコンピュータ上で他の Web サーバーやデータベースが実行されていないことを確認する必要があります。アプリケーションの docker-compose.yml
ファイルで定義されたすべての Docker コンテナを開始するには、up
コマンドを実行する必要があります:
sail up
バックグラウンドですべての Docker コンテナを開始するには、Sail を「デタッチ」モードで開始できます:
sail up -d
アプリケーションのコンテナが開始されたら、Web ブラウザでプロジェクトにアクセスできます: http://localhost。
すべてのコンテナを停止するには、Control + C を押してコンテナの実行を停止するだけです。また、コンテナがバックグラウンドで実行されている場合は、stop
コマンドを使用できます:
sail stop
コマンドの実行
Laravel Sail を使用しているとき、アプリケーションは Docker コンテナ内で実行されており、ローカルコンピュータから隔離されています。ただし、Sail は、任意の PHP コマンド、Artisan コマンド、Composer コマンド、Node / NPM コマンドなど、アプリケーションに対してさまざまなコマンドを実行する便利な方法を提供します。
Laravel ドキュメントを読むと、Sail に言及しない Composer、Artisan、および Node / NPM コマンドへの参照がよく見られます。 これらの例は、これらのツールがローカルコンピュータにインストールされていることを前提としています。ローカルの Laravel 開発環境で Sail を使用している場合は、これらのコマンドを Sail を使用して実行する必要があります:
# ローカルで Artisan コマンドを実行...
php artisan queue:work
# Laravel Sail 内で Artisan コマンドを実行...
sail artisan queue:work
PHP コマンドの実行
PHP コマンドは php
コマンドを使用して実行できます。もちろん、これらのコマンドは、アプリケーションに設定されている PHP バージョンを使用して実行されます。Laravel Sail で利用可能な PHP バージョンについて詳しくは、PHP バージョンのドキュメント を参照してください:
sail php --version
sail php script.php
Composer コマンドの実行
Composer コマンドは composer
コマンドを使用して実行できます。Laravel Sail のアプリケーションコンテナには Composer のインストールが含まれています:
sail composer require laravel/sanctum
既存アプリケーションの Composer 依存関係のインストール
チームでアプリケーションを開発している場合、Laravel アプリケーションを最初に作成したのはあなたではないかもしれません。したがって、アプリケーションの Composer 依存関係、Sail を含む、は、アプリケーションのリポジトリをローカルコンピュータにクローンした後にインストールされません。
アプリケーションのディレクトリに移動し、次のコマンドを実行することで、アプリケーションの依存関係をインストールできます。このコマンドは、PHP と Composer を含む小さな Docker コンテナを使用してアプリケーションの依存関係をインストールします:
docker run --rm \
-u "$(id -u):$(id -g)" \
-v "$(pwd):/var/www/html" \
-w /var/www/html \
laravelsail/php83-composer:latest \
composer install --ignore-platform-reqs
laravelsail/phpXX-composer
イメージを使用する場合、アプリケーションで使用する予定の PHP バージョン (80
、81
、82
、または 83
) を使用する必要があります。
Artisan コマンドの実行
Laravel Artisan コマンドは artisan
コマンドを使用して実行できます:
sail artisan queue:work
Node / NPM コマンドの実行
Node コマンドは node
コマンドを使用して実行でき、NPM コマンドは npm
コマンドを使用して実行できます:
sail node --version
sail npm run dev
必要に応じて、NPM の代わりに Yarn を使用することもできます:
sail yarn
データベースとの対話
MySQL
アプリケーションの docker-compose.yml
ファイルには MySQL コンテナのエントリが含まれていることに気付いたかもしれません。このコンテナは、データベースに保存されたデータがコンテナを停止および再起動しても持続するように、Docker ボリューム を使用します。
さらに、MySQL コンテナが最初に起動すると、2 つのデータベースが作成されます。最初のデータベースは、DB_DATABASE
環境変数の値を使用して名付けられ、ローカル開発用です。2 番目は、testing
という名前の専用のテストデータベースで、テストが開発データに干渉しないようにします。
コンテナを起動したら、アプリケーションの DB_HOST
環境変数を mysql
に設定することで、アプリケーション内の MySQL インスタンスに接続できます。
ローカルマシンからアプリケーションの MySQL データベースに接続するには、TablePlus のようなグラフィカルなデータベース管理アプリケーションを使用できます。デフォルトでは、MySQL データベースは localhost
ポート 3306 でアクセス可能で、アクセス資格情報は DB_USERNAME
および DB_PASSWORD
環境変数の値に対応します。また、root
ユーザーとして接続することもでき、DB_PASSWORD
環境変数の値をパスワードとして使用します。
Redis
アプリケーションの docker-compose.yml
ファイルには、Redis コンテナのエントリも含まれています。このコンテナは、データベースに保存されたデータがコンテナを停止および再起動しても持続するように、Docker ボリューム を使用します。コンテナを起動したら、アプリケーションの REDIS_HOST
環境変数を redis
に設定することで、アプリケーション内の Redis インスタンスに接続できます。
ローカルマシンからアプリケーションの Redis データベースに接続するには、TablePlus のようなグラフィカルなデータベース管理アプリケーションを使用できます。デフォルトでは、Redis データベースは localhost
ポート 6379 でアクセス可能です。
Meilisearch
Sail をインストールする際に Meilisearch サービスをインストールすることを選択した場合、アプリケーションの docker-compose.yml
ファイルには、この強力な検索エンジンのエントリが含まれ、Laravel Scout と統合されています。コンテナを起動したら、アプリケーション内の Meilisearch インスタンスに接続するには、MEILISEARCH_HOST
環境変数を http://meilisearch:7700
に設定します。
ローカルマシンから、Web ブラウザで http://localhost:7700
に移動することで Meilisearch の Web ベースの管理パネルにアクセスできます。
Typesense
Sail をインストールする際に Typesense サービスをインストールすることを選択した場合、アプリケーションの docker-compose.yml
ファイルには、この超高速のオープンソース検索エンジンのエントリが含まれ、Laravel Scout とネイティブに統合されています。コンテナを起動したら、アプリケーション内の Typesense インスタンスに接続するには、次の環境変数を設定します:
TYPESENSE_HOST=typesense
TYPESENSE_PORT=8108
TYPESENSE_PROTOCOL=http
TYPESENSE_API_KEY=xyz
ローカルマシンから、http://localhost:8108
経由で Typesense の API にアクセスできます。
ファイルストレージ
アプリケーションを本番環境で実行する際に Amazon S3 を使用してファイルを保存する予定がある場合、Sail をインストールする際に MinIO サービスをインストールすることをお勧めします。MinIO は、Laravel の s3
ファイルストレージドライバーを使用してローカルで開発するために使用できる S3 互換の API を提供し、本番の S3 環境に「テスト」ストレージバケットを作成することなく使用できます。Sail をインストールする際に MinIO をインストールすることを選択した場合、アプリケーションの docker-compose.yml
ファイルに MinIO 設定セクションが追加されます。
デフォルトでは、アプリケーションの filesystems
設定ファイルには、s3
ディスクのディスク設定がすでに含まれています。このディスクを使用して Amazon S3 と対話するだけでなく、関連する環境変数を変更することで、MinIO のような S3 互換のファイルストレージサービスと対話することもできます。たとえば、MinIO を使用する場合、ファイルシステム環境変数の設定は次のように定義する必要があります:
FILESYSTEM_DISK=s3
AWS_ACCESS_KEY_ID=sail
AWS_SECRET_ACCESS_KEY=password
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=local
AWS_ENDPOINT=http://minio:9000
AWS_USE_PATH_STYLE_ENDPOINT=true
Laravel の Flysystem 統合が MinIO を使用する際に適切な URL を生成するためには、AWS_URL
環境変数を定義して、アプリケーションのローカル URL と一致し、URL パスにバケット名を含める必要があります:
AWS_URL=http://localhost:9000/local
MinIO コンソールを介してバケットを作成できます。MinIO コンソールは http://localhost:8900
で利用可能です。MinIO コンソールのデフォルトのユーザー名は sail
で、デフォルトのパスワードは password
です。
MinIO を使用する際に temporaryUrl
メソッドを介して一時的なストレージ URL を生成することはサポートされていません。
テストの実行
Laravel は、すぐに使用できる素晴らしいテストサポートを提供しており、Sail の test
コマンドを使用してアプリケーションの 機能およびユニットテスト を実行できます。Pest / PHPUnit によって受け入れられる CLI オプションは、test
コマンドにも渡すことができます:
sail test
sail test --group orders
Sail test
コマンドは、test
Artisan コマンドを実行するのと同等です:
sail artisan test
デフォルトでは、Sail は専用の testing
データベースを作成し、テストが現在のデータベースの状態に干渉しないようにします。デフォルトの Laravel インストールでは、Sail はテストを実行する際にこのデータベースを使用するように phpunit.xml
ファイルを構成します:
<env name="DB_DATABASE" value="testing"/>
Laravel Dusk
Laravel Dusk は、表現力豊かで使いやすいブラウザ自動化およびテスト API を提供します。Sail のおかげで、ローカルコンピュータに Selenium や他のツールをインストールすることなく、これらのテストを実行できます。始めるには、アプリケーションの docker-compose.yml
ファイルで Selenium サービスのコメントを外します:
selenium:
image: 'selenium/standalone-chrome'
extra_hosts:
- 'host.docker.internal:host-gateway'
volumes:
- '/dev/shm:/dev/shm'
networks:
- sail
次に、アプリケーションの docker-compose.yml
ファイル内の laravel.test
サービスに depends_on
エントリがあることを確認します:
depends_on:
- mysql
- redis
- selenium
最後に、Sail を起動し、dusk
コマンドを実行することで Dusk テストスイートを実行できます:
sail dusk
Apple Silicon での Selenium
ローカルマシンに Apple Silicon チップが含まれている場合、selenium
サービスは selenium/standalone-chromium
イメージを使用する必要があります:
selenium:
image: 'selenium/standalone-chromium'
extra_hosts:
- 'host.docker.internal:host-gateway'
volumes:
- '/dev/shm:/dev/shm'
networks:
- sail
メールのプレビュー
Laravel Sail のデフォルト docker-compose.yml
ファイルには、Mailpit のサービスエントリが含まれています。Mailpit は、ローカル開発中にアプリケーションによって送信されたメールを傍受し、ブラウザでメールメッセージをプレビューできる便利な Web インターフェースを提供します。Sail を使用している場合、Mailpit のデフォルトホストは mailpit
で、ポート 1025 で利用可能です:
MAIL_HOST=mailpit
MAIL_PORT=1025
MAIL_ENCRYPTION=null
Sail が実行されているとき、Mailpit Web インターフェースには http://localhost:8025 でアクセスできます。
コンテナ CLI
時々、アプリケーションのコンテナ内で Bash セッションを開始したい場合があります。shell
コマンドを使用してアプリケーションのコンテナに接続し、そのファイルやインストールされたサービスを検査したり、コンテナ内で任意のシェルコマンドを実行したりできます:
sail shell
sail root-shell
新しい Laravel Tinker セッションを開始するには、tinker
コマンドを実行できます:
sail tinker
PHP バージョン
Sail は現在、PHP 8.3、8.2、8.1、または PHP 8.0 を介してアプリケーションを提供することをサポートしています。Sail で使用されるデフォルトの PHP バージョンは現在 PHP 8.3 です。アプリケーションを提供するために使用される PHP バージョンを変更するには、アプリケーションの build
定義を laravel.test
コンテナの docker-compose.yml
ファイルで更新する必要があります:
# PHP 8.3
context: ./vendor/laravel/sail/runtimes/8.3
# PHP 8.2
context: ./vendor/laravel/sail/runtimes/8.2
# PHP 8.1
context: ./vendor/laravel/sail/runtimes/8.1
# PHP 8.0
context: ./vendor/laravel/sail/runtimes/8.0
さらに、アプリケーションで使用されている PHP のバージョンを反映するように image
名を更新することをお勧めします。このオプションは、アプリケーションの docker-compose.yml
ファイルでも定義されています:
image: sail-8.2/app
アプリケーションの docker-compose.yml
ファイルを更新した後、コンテナイメージを再構築する必要があります:
sail build --no-cache
sail up
Node バージョン
Sail はデフォルトで Node 20 をインストールします。イメージをビルドする際にインストールされる Node バージョンを変更するには、アプリケーションの build.args
定義を laravel.test
サービスの docker-compose.yml
ファイルで更新する必要があります:
build:
args:
WWWGROUP: '${WWWGROUP}'
NODE_VERSION: '18'
アプリケーションの docker-compose.yml
ファイルを更新した後、コンテナイメージを再構築する必要があります:
sail build --no-cache
sail up
サイトの共有
時々、同僚のためにサイトをプレビューしたり、アプリケーションとの Webhook 統合をテストしたりするために、サイトを公開する必要があります。サイトを共有するには、share
コマンドを使用できます。このコマンドを実行すると、アプリケーションにアクセスするために使用できるランダムな laravel-sail.site
URL が発行されます:
sail share
share
コマンドを介してサイトを共有する際は、アプリケーションの bootstrap/app.php
ファイル内で trustProxies
ミドルウェアメソッドを使用してアプリケーションの信頼できるプロキシを構成する必要があります。そうしないと、url
や route
などの URL 生成ヘルパーは、URL 生成中に使用すべき正しい HTTP ホストを特定できなくなります:
->withMiddleware(function (Middleware $middleware) {
$middleware->trustProxies(at: '*');
})
共有サイトのサブドメインを選択したい場合は、share
コマンドを実行する際に subdomain
オプションを提供できます:
sail share --subdomain=my-sail-site
share
コマンドは、Expose によって提供される、BeyondCode のオープンソーストンネリングサービスです。
Xdebug を使用したデバッグ
Laravel Sail の Docker 構成には、PHP 用の人気で強力なデバッガである Xdebug のサポートが含まれています。Xdebug を有効にするには、アプリケーションの .env
ファイルにいくつかの変数を追加して Xdebug を構成する 必要があります。Xdebug を有効にするには、Sail を開始する前に適切なモードを設定する必要があります:
SAIL_XDEBUG_MODE=develop,debug,coverage
Linux ホスト IP 構成
内部的に、XDEBUG_CONFIG
環境変数は client_host=host.docker.internal
として定義されており、Xdebug が Mac および Windows (WSL2) 用に適切に構成されるようにします。ローカルマシンが Linux を実行していて、Docker 20.10+ を使用している場合、host.docker.internal
が利用可能で、手動構成は必要ありません。
Docker バージョンが 20.10 より古い場合、host.docker.internal
は Linux でサポートされておらず、ホスト IP を手動で定義する必要があります。これを行うには、docker-compose.yml
ファイルでカスタムネットワークを定義して、コンテナに静的 IP を構成します:
networks:
custom_network:
ipam:
config:
- subnet: 172.20.0.0/16
services:
laravel.test:
networks:
custom_network:
ipv4_address: 172.20.0.2
静的 IP を設定したら、アプリケーションの .env ファイル内で SAIL_XDEBUG_CONFIG 変数を定義します:
SAIL_XDEBUG_CONFIG="client_host=172.20.0.2"
Xdebug CLI の使用
sail debug
コマンドを使用して Artisan コマンドを実行するときにデバッグセッションを開始できます:
# Xdebug なしで Artisan コマンドを実行...
sail artisan migrate
# Xdebug ありで Artisan コマンドを実行...
sail debug migrate
Xdebug ブラウザの使用
Web ブラウザを介してアプリケーションと対話しながらデバッグするには、Web ブラウザから Xdebug セッションを開始するための Xdebug による指示 に従ってください。
PhpStorm を使用している場合は、ゼロ構成デバッグ に関する JetBrains のドキュメントを確認してください。
Laravel Sail は artisan serve
に依存してアプリケーションを提供します。 artisan serve
コマンドは、Laravel バージョン 8.53.0 以降、XDEBUG_CONFIG
および XDEBUG_MODE
変数のみを受け入れます。Laravel の古いバージョン (8.52.0 およびそれ以前) はこれらの変数をサポートしておらず、デバッグ接続を受け入れません。
カスタマイズ
Sail は単なる Docker なので、ほぼすべてをカスタマイズする自由があります。Sail の独自の Dockerfile を公開するには、sail:publish
コマンドを実行します:
sail artisan sail:publish
このコマンドを実行すると、Laravel Sail で使用される Dockerfile やその他の設定ファイルが、アプリケーションのルートディレクトリ内の docker
ディレクトリに配置されます。Sail インストールをカスタマイズした後、アプリケーションの docker-compose.yml
ファイル内でアプリケーションコンテナのイメージ名を変更したい場合があります。そうしたら、build
コマンドを使用してアプリケーションのコンテナを再構築します。複数の Laravel アプリケーションを単一のマシンで開発するために Sail を使用している場合、アプリケーションイメージに一意の名前を付けることが特に重要です:
sail build --no-cache