PHP/Composerなしで始めるLaravel/Sail入門

2023/01/17に公開1

Laravel特化のDocker環境

Laravelは、Dockerの経験がない方でもDocker環境をすぐ構築できるようにLaravel/Sailというパッケージを提供しています。

https://laravel.com/docs/9.x/sail

Laravel/Sailはとても便利です。
最新Laravel8.x, 9.xであればデフォルトでインストールされます。

既存のプロジェクトにも導入可能

このパッケージを使うと、Dockerで開発していない既存のプロジェクトも簡単にDocker化することができます。
しかし、phpcomposerがローカル環境にインストールされていないといけません。

では、ローカル環境にphpcomposerがない場合は、どうすれば良いのでしょうか?

  • Laravel/Sailの利用を諦める?
  • Laravel/Sailのために自前のDocker環境を自分で作成する?

正解は、laravelsail/php*.*-composerイメージを使用するです。

※[*.*]には[8.2, 8.1, 8.0, 7.4]のいずれかの数字が入ります。

このイメージは必要最低限のphpcomposerのみ用意してくれているDockerイメージです。
以下のように利用します。

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 #好きなコマンド

詳しい説明はLaravel公式ドキュメントをご覧ください。
https://laravel.com/docs/9.x/sail#installing-composer-dependencies-for-existing-projects

利用例

前提条件

  • dockerが利用可能であること
  • php, composerがローカル環境に入っていない
  • laravel/sailが未インストール

① 既存アプリケーションClone

git clone https://github.com/my-orgs/my-repo.git

② composerパッケージインストール

クローンしたディレクトリに移動

cd my-repo

composer install実行

docker run --rm \
    -u "$(id -u):$(id -g)" \
    -v "$(pwd):/var/www/html" \
    -w /var/www/html \
    laravelsail/php81-composer:latest \
    composer install --ignore-platform-reqs

③ laravel/sailインストール

docker run --rm \
    -u "$(id -u):$(id -g)" \
    -v "$(pwd):/var/www/html" \
    -w /var/www/html \
    laravelsail/php81-composer:latest \
    composer require laravel/sail --dev

gdの拡張機能がない事によるエラーが発生した場合

laravelsail/php81-composerイメージには、gdの拡張機能が入ってません。
そのため、gd拡張機能に依存したパッケージを利用している場合、以下のようなエラーが発生する可能性があります。

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - mews/captcha is locked to version 3.2.7 and an update of this package was not requested.
    - mews/captcha 3.2.7 requires ext-gd * -> it is missing from your system. Install or enable PHP's gd extension.

To enable extensions, verify that they are enabled in your .ini files:
    - /usr/local/etc/php/conf.d/docker-php-ext-bcmath.ini
    - /usr/local/etc/php/conf.d/docker-php-ext-pcntl.ini
    - /usr/local/etc/php/conf.d/docker-php-ext-sodium.ini
    - /usr/local/etc/php/conf.d/docker-php-ext-zip.ini
You can also run `php --ini` in a terminal to see which files are used by PHP in CLI mode.
Alternatively, you can run Composer with `--ignore-platform-req=ext-gd` to temporarily ignore these required extensions.
You can also try re-running composer require with an explicit version constraint, e.g. "composer require laravel/sail:*" to figure out if any version is installable, or "composer require laravel/sail:^2.1" if you know which you need.

gdの拡張機能を入れてから、laravel/sailをインストールしましょう。

docker run --rm \
  -v “$(pwd):/var/www/html” \
  -w /var/www/html \
  laravelsail/php81-composer:latest \
  /bin/bash -c “apt-get update && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev && docker-php-ext-install gd && composer require laravel/sail --dev”

④ laravel/sail設定

laravel/sailをインストールするだけでは、まだdockerは利用できません。
後1つphpコマンドを入力する必要があります。

docker run --rm \
    -u "$(id -u):$(id -g)" \
    -v "$(pwd):/var/www/html" \
    -w /var/www/html \
    laravelsail/php81-composer:latest \
    php artisan sail:install

これにて、Dockerの出番はおしまいです。

⑤ Sail起動

あとは、以下のコマンドを入力すれば、docker環境が立ち上がります。

./vendor/bin/sail up -d

終わりに

以上が、phpcomposerなしでLaravel/Sailを使う方法でした。
この方法を用いれば、ローカル環境を必要以上に汚す必要なく、Docker環境が構築できます。
もし、docker化されていない既存アプリケーションがある場合はお試しあれ。

参考資料

https://stackoverflow.com/questions/71234071/laravel-sail-paradox-there-are-any-way-to-install-without-php-and-composer-ins

Discussion

Sastoru MaruyamaSastoru Maruyama

既存PJにLaravel Sailを入れようと頑張っていましたが、結局ローカルにPHPやComposer... と悩んでいたところ、この記事を見つけました!

ありがとうございます。