Laravelの既存プロジェクトにSailを導入する方法

# 背景
現在の開発環境の都合上、Laravel 9を想定しています。

https://laravel.com/docs/9.x/sail#installing-composer-dependencies-for-existing-projects

公式には
```
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のトップページが表示された。