PHP/Composerなしで始めるLaravel/Sail入門
Laravel特化のDocker環境
Laravelは、Dockerの経験がない方でもDocker環境をすぐ構築できるようにLaravel/Sail
というパッケージを提供しています。
Laravel/Sailはとても便利です。
最新Laravel8.x, 9.xであればデフォルトでインストールされます。
既存のプロジェクトにも導入可能
このパッケージを使うと、Dockerで開発していない既存のプロジェクトも簡単にDocker化することができます。
しかし、php
とcomposer
がローカル環境にインストールされていないといけません。
では、ローカル環境にphp
とcomposer
がない場合は、どうすれば良いのでしょうか?
- Laravel/Sailの利用を諦める?
- Laravel/Sailのために自前のDocker環境を自分で作成する?
正解は、laravelsail/php*.*-composerイメージを使用するです。
※[*.*]には[8.2, 8.1, 8.0, 7.4]のいずれかの数字が入ります。
このイメージは必要最低限のphp
とcomposer
のみ用意してくれている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公式ドキュメントをご覧ください。
利用例
前提条件
- 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
終わりに
以上が、php
とcomposer
なしでLaravel/Sail
を使う方法でした。
この方法を用いれば、ローカル環境を必要以上に汚す必要なく、Docker環境が構築できます。
もし、docker化されていない既存アプリケーションがある場合はお試しあれ。
参考資料
Discussion
既存PJにLaravel Sailを入れようと頑張っていましたが、結局ローカルにPHPやComposer... と悩んでいたところ、この記事を見つけました!
ありがとうございます。