Laravel Sail
はじめに
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(WSL2経由)でサポートされています。
インストールとセットアップ
新しい Laravel アプリケーションには Laravel Sail が自動的にインストールされるため、すぐに使用を開始できます。新しい 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
Docker Desktop for Linux を使用している場合は、次のコマンドを実行して default
Docker コンテキストを使用する必要があります:docker context use default
。
追加のサービスの追加
既存の Sail インストールに追加のサービス を追加したい場合は、sail:add
Artisan コマンドを実行できます:
php artisan sail:add
Devcontainers の使用
Devcontainer内で開発を行いたい場合は、sail:install
コマンドに --devcontainer
オプションを指定できます。--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 コンテナを定義しています。これらのコンテナは、docker-compose.yml
ファイルの services
構成内のエントリです。laravel.test
コンテナは、アプリケーションを提供する主要なアプリケーションコンテナです。
Sail を起動する前に、ローカルコンピュータで他のウェブサーバーやデータベースが実行されていないことを確認してください。アプリケーションの docker-compose.yml
ファイルで定義されているすべての Docker コンテナを起動するには、up
コマンドを実行する必要があります:
sail up
すべての Docker コンテナをバックグラウンドで起動するには、Sail を「デタッチド」モードで起動できます:
sail up -d
アプリケーションのコンテナが起動したら、ウェブブラウザでプロジェクトにアクセスできます:http://localhost。
すべてのコンテナを停止するには、単純にコンテナの実行を停止するために Control + C を押すことができます。または、コンテナがバックグラウンドで実行されている場合は、stop
コマンドを使用できます:
sail stop
コマンドの実行
Laravel Sail を使用すると、アプリケーションは Docker コンテナ内で実行され、ローカルコンピュータから分離されます。ただし、Sail は任意の PHP コマンド、Artisan コマンド、Composer コマンド、および Node / NPM コマンドなど、さまざまなコマンドをアプリケーションに対して実行する便利な方法を提供します。
Laravel ドキュメントを読む際に、Composer、Artisan、Node / NPM コマンドについて Sail に言及されていない例がよく見られます。 これらの例は、これらのツールがローカルコンピュータにインストールされていることを前提としています。ローカルの Laravel 開発環境で Sail を使用している場合は、Sail を使用してこれらのコマンドを実行する必要があります:
# Running Artisan commands locally...
php artisan queue:work
# Running Artisan commands within Laravel Sail...
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 アプリケーションを作成したのが自分ではないかもしれません。そのため、アプリケーションのリポジトリをローカルコンピュータにクローンした後、Sail を含むアプリケーションの Composer 依存関係はインストールされていない可能性があります。
アプリケーションの依存関係をインストールするには、アプリケーションのディレクトリに移動し、次のコマンドを実行します。このコマンドは、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つのデータベースが作成されます。1つ目のデータベースは、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 データに格納されたデータがコンテナを停止して再起動しても永続化されるようになっています。コンテナを起動した後は、アプリケーションの .env
ファイル内の REDIS_HOST
環境変数を redis
に設定することで、アプリケーション内の Redis インスタンスに接続できます。
ローカルマシンからアプリケーションの Redis データベースに接続するには、TablePlus のようなグラフィカルデータベース管理アプリケーションを使用できます。デフォルトでは、Redis データベースは localhost
ポート 6379 でアクセス可能です。
Meilisearch
Sail をインストールする際に Meilisearch サービスをインストールすることを選択した場合、アプリケーションの docker-compose.yml
ファイルには、この強力な検索エンジンが Laravel Scout と統合されているエントリが含まれています。コンテナを起動した後は、アプリケーション内の Meilisearch インスタンスに接続するために、MEILISEARCH_HOST
環境変数を http://meilisearch:7700
に設定します。
ローカルマシンからは、Meilisearch の Web ベースの管理パネルには、Web ブラウザで http://localhost:7700
にアクセスすることでアクセスできます。
Typesense
Sail をインストールする際に Typesense サービスをインストールすることを選択した場合、アプリケーションの docker-compose.yml
ファイルには、この高速でオープンソースの検索エンジンが Laravel Scout とネイティブに統合されているエントリが含まれています。コンテナを起動した後は、以下の環境変数を設定することで、アプリケーション内の Typesense インスタンスに接続できます:
TYPESENSE_HOST=typesense
TYPESENSE_PORT=8108
TYPESENSE_PROTOCOL=http
TYPESENSE_API_KEY=xyz
ローカルマシンからは、Typesense の API に http://localhost:8108
でアクセスできます。