背景
現在の開発環境の都合上、Laravel 9を想定しています。
公式には
composer require laravel/sail --dev
php artisan sail:install
./vendor/bin/sail up
php artisan sail:add
としなさいと書いてあるが、そもそもローカルにcomposerやphpがない環境の中にSailで仮想環境を作ろうとしているのにcomposerやphpがローカルで動くことを前提にするというのはどうよと。
公式には
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なしでSailを導入できると書いてあったが、色々壁にぶつかったのでここにメモ。
手順
まずはgit pullで既存のプロジェクトフォルダに移動して
とりあえず公式の手順通りにする
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
これでsail upをすると
./vendor/bin/sail up
no configuration file provided: not found
no configuration file provided: not found
となる。docker-compose.ymlがない(そもそもこの時点でSailがインストールされていない)かららしい。なので、docker経由でSailをインストールする。
docker run --rm \
-u "$(id -u):$(id -g)" \
-v "$(pwd):/var/www/html" \
-w /var/www/html \
laravelsail/php80-composer:latest \
composer require laravel/sail --dev
そうすると以下のようなエラーが出た。
Your requirements could not be resolved to an installable set of packages.
Problem 1
- spatie/image 2.2.7 requires ext-exif * -> it is missing from your system. Install or enable PHP's exif extension.
- spatie/crawler 7.1.3 requires spatie/browsershot ^3.45 -> satisfiable by spatie/browsershot[3.61.0].
- spatie/laravel-sitemap 6.4.0 requires spatie/crawler ^7.0 -> satisfiable by spatie/crawler[7.1.3].
- spatie/browsershot 3.61.0 requires spatie/image ^1.5.3|^2.0 -> satisfiable by spatie/image[2.2.7].
- spatie/laravel-sitemap is locked to version 6.4.0 and an update of this package was not requested.
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-exif` 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.
Installation failed, reverting ./composer.json and ./composer.lock to their original content.
自分のプロジェクトではexifは使っていないから、ひとまず--ignore-platform-req=ext-exif
としておく。
docker run --rm \
-u "$(id -u):$(id -g)" \
-v "$(pwd):/var/www/html" \
-w /var/www/html \
laravelsail/php80-composer:latest \
composer require laravel/sail --dev --ignore-platform-req=ext-exif
--ignore-platform-req=ext-exif
をつけるとエラーなく進んだ。
.envがないのでコピーしておく。
cp .env.example .env
そしてSailをインストール。
docker run --rm \
-u "$(id -u):$(id -g)" \
-v "$(pwd):/var/www/html" \
-w /var/www/html \
laravelsail/php80-composer:latest \
php artisan sail:install
これでsail up
すると無事起動したが、localhost
にアクセスするとkey:generate
するように求められたので、ターミナルをもう一つ立ち上げて、
sail artisan key:generate
とした。そしてlocalhost
を見に行くと今度はviteが動いてないと言われたので動かそうとしたら
sail npm run dev
> dev
> vite
sh: 1: vite: not found
viteそのものが入ってなかった。
sail npm install
としたら無事Laravelのトップページが表示された。