Composer がインストールされていない環境で既存の Laravel プロジェクトに Laravel Sail をインストールする方法
変更履歴
- 2024/1/3: 「Composer を利用せずに Sail をインストールするコマンド」の説明文を修正
こんにちは。 SAW です。
早いもので 2023 年も終わりですね。
2024 年もみなさんにとって良い年になればと思います。
Laravel のパッケージには、 Docker を利用した開発環境を簡単に構築できる Laravel Sail が用意されています。
新規プロジェクトを作成する場合は、公式ドキュメントに従ってインストールスクリプトを実行すると、 Laravel プロジェクトの作成と同時に Docker コンテナが作成されます。
一方、 Git で管理されている既存の Laravel プロジェクトを clone する場合、 vendor
ディレクトリ以下のファイルは管理対象外 のため、 Sail は含まれません。
Sail を利用するためには Composer のパッケージをインストールする必要があります。
しかし、 Composer がインストールされていない環境では Sail がインストールできません。
本記事では、 Composer がインストールされていない環境で既存の Laravel プロジェクトに Laravel Sail をインストールする方法を紹介します。
なお、本記事では Laravel のバージョンが 10.x 系 を前提としています。
対象読者
本記事で想定する読者層は次の通りです。
- Laravel について基本的な知識を有している
- Docker について基本的な知識を有している
Laravel Sail とは
Laravel Sail は、 Laravel が公式で提供している Docker 開発環境です。
PHP や Composer などがインストールされていない環境でも、 Docker さえインストールされていれば、簡単に開発環境を構築できます。
curl -s "https://laravel.build/example-app" | bash
Laravel の Docker 開発環境として Laradock もありますが、 Sail は 起動するコンテナが少なく、軽量です。
また、 Sail は Docker コンテナを起動するだけでなく、 artisan
や MySQL コンテナを操作する CLI も提供しています。
Sail を Composer を利用せずにインストールする方法
公式ドキュメントには、以下のコマンドを利用することで、既存の Laravel プロジェクトに Sail を含む依存パッケージをインストールできる と記載されています。
なお、コマンドを実行する際は、あらかじめプロジェクトのルートディレクトリに移動する必要があります。
docker run --rm \
-u "$(id -u):$(id -g)" \
-v "$(pwd):/var/www/html" \
-w /var/www/html \
laravelsail/php82-composer:latest \
composer install --ignore-platform-reqs
上記のコマンドは、 Composer の Docker イメージ を利用して Sail を含む Composer の依存パッケージをインストール します。
上記のコマンドの場合、 laravelsail/php82-composer
イメージから Composer のコンテナを作成し、そのコンテナ内で composer install --ignore-platform-reqs
を実行しています。
これで Comopser がインストールされていない環境でも既存の Laravel プロジェクトに Sail がインストールできます。
docker run
コマンドのオプション
コンテナ経由で Sail を インストールする docker run
コマンドには、いくつかオプションが指定されています。
それぞれのオプションの意味を以下の表に記載します。
オプション | 意味 |
---|---|
--rm |
コンテナ終了時にコンテナを削除する |
-u |
コマンドを実行する際のユーザーを指定する |
-v |
ホスト側のボリュームをコンテナにマウントする |
-w |
コンテナの作業ディレクトリを指定する |
docker run
の -u
オプションに id
の実行結果を指定することで、ホスト側のログインユーザーの UID, GID を指定してコマンドを実行できます。
ログインユーザーの UID は id -u
, GID は id -g
でそれぞれ取得できます。
docker run
の -u
オプションを指定しない場合、環境によっては root
ユーザーとしてコマンドが実行される場合があります。
コンテナのコマンドによってホストからマウントされたボリュームにファイルが追加される場合、 root
ユーザーでコマンドを実行するとファイルの所有者がホスト側でも root
になることがあります。
今回の場合、 vendor
以下にインストールされるファイルやディレクトリの所有者が root
になりうるため、 docker run
の -u
オプションを指定することをオススメします。
まとめ
本記事のまとめは次の通りです。
- Composer がインストールされていない環境で Sail をインストールする方法を紹介
- Composer の Docker イメージを利用して依存パッケージをインストール
既存の Laravel プロジェクトへの Sail のインストールも、新規プロジェクト生成と同じくらい簡単に実行できるようになったら嬉しいなと思いました。
参考文献
Discussion
「 Composer の Docker イメージ」の部分は「コンテナ内のcomposer」が適切かと思います。
docker runで引数にコマンドを渡した時はコンテナ内のコマンドが実行されるはずで、sailのDockerfileにはcomposerをインストールするスクリプトが書かれているのでコンテナ内にcomposerはインストールされていると思われます。
認識違いなどでしたらすみません🙇♂️
コメントありがとうございます。
私自身、 イメージとコンテナが正しく区別できていなかったので、
docker run
についてドキュメントを確認してみたところ、 Docker イメージと実行するコマンドを引数に受け取ると記載されていました。docker run
の引数に渡すのは Docker イメージで良いのですが、コマンドはコンテナ内で実行されるので、この文章だと混乱を招きますね...混乱がないように文章を修正しておきます。
ありがとうございます🙇♂️🙇♂️
イメージがこれ
laravelsail/php82-composer:latest
で、コマンドが
composer install --ignore-platform-reqs
これかなと思います