なるべくWindows環境は汚さないで開発環境を作りたいのでWSLを使った Laravel の開発環境を作りたかった。Laravel のインストールでスターターキットも利用したかった。公式ドキュメントやネットで検索して調べたけれど、しっくりいく記事がなかなか見つからなかったです。調べた情報をもとにいろいろ考察して自分で納得行く方法を見つけたのでご紹介します。
最初に結論
前提としてWSLとDockerはインストール済みとしてます。WSLについては過去記事も参考にしてください。
docker run --rm \
--pull=always \
-v "$(pwd)":/opt \
-w /opt \
-it \
laravelsail/php84-composer:latest \
/bin/bash
これを実行すると必要最低限のphpとcomposerが使えるコンテナでbashが使える状態になりました。
# laravel new example-app
Laravelのインストールコマンドを実行し、スターターキットの選択肢が表示されます。あとは望むスターターキットを選択します。最後に下記コマンドでインストールします。
# cd example-app && php ./artisan sail:install
exitとタイプするとコンテナからubuntuの端末に戻ってきます。最後に権限を変更します。
$ cd example-app
$ sudo chown -R $USER: .
結論に至った経緯
結論に至った経緯を参考までに残しておきます。
公式ドキュメントを確認
公式ドキュメントに従うと、sailをインストーする環境がローカル環境にある前提でlaravelをインストールする説明でした。私はWindows環境でsailをインストーする環境がローカルにありませんでしたし、なるべくWindows環境は汚さないで利用したい。
その他の情報を検索
ネットでlaravel、sail、wsl、dockerなどのキーワードを組み合わせて調べてみると別のインストール方法がありました。
wslでubuntuなどのLinux端末を開いて任意のディレクトリで下記コマンドを実行します。
$ curl -s "https://laravel.build/example-app" | bash
そうすると数分後にexample-appディレクトリが作成されて配下にdockerのlaravel環境が出来上がっていました。
Laravelの環境は簡単に出来上がったのですが、スターターキットを利用したいのでその方法はどうすればよいか謎でした。
上記のコマンドが何を行っているかを説明する記事があり下記コマンドを実行すると中身がわかるようです。末尾のbashをcatに変更するだけです。
$ curl -s "https://laravel.build/example-app" | cat
ずらりとbashで実行するスクリプトが表示されました。
中身はdockerが起動していて、dockerのコマンドを実施し、root権限で任意のディレクトリ配下の権限を再帰的に変更するもののようです。
Dockerのコマンドが何をしているか調査
docker run --rm \
--pull=always \
-v "$(pwd)":/opt \
-w /opt \
laravelsail/php84-composer:latest \
bash -c "laravel new example-app --no-interaction && cd example-app && php ./artisan sail:install --with=mysql,redis,meilisearch,mailpit,selenium "
上記のコマンドは主にlaravelsail/php84-composer:latestをコンテナとして起動して、そのコンテナでbash -c "laravel new example-app --no-interaction && cd example-app && php ./artisan sail:install --with=mysql,redis,meilisearch,mailpit,selenium "を実行するもののようです。dockerはイメージをダウロードしてそこからコンテナを起動するという理解でしたが、ネットからイメージを参照してコンテナが起動出来るんですね。
コンテナとして指定しているのは必要最低限のphpとcomposerが使えるイメージとのこと。
コンテナで実行されるコマンドは公式ドキュメントに記載されているインストールコマンドのようです。--no-interactionというオプションを外したらいいのかなとも思ったのですが結果は変わらずスターターキットの選択肢は現れません
Dockerのコマンドオプションを調べる
-itオプションを使用するとインタティクモードで起動出来るようです。
docker run --rm \
--pull=always \
-v "$(pwd)":/opt \
-w /opt \
-it \
laravelsail/php84-composer:latest \
/bin/bash
これを実行すると指定したコンテナのbashが使える状態になりました。
Laravelをインストール
あとは最初のLaravelのインストールコマンドを実行して
# laravel new example-app
見事、スターターキットの選択肢が表示されました。あとは望むスターターキットを選択して最後に下記コマンドでインストールするだけです。
# cd example-app && php ./artisan sail:install
exitとタイプするとコンテナからubuntuの端末に戻ってきます。最後に権限を変更します。
$ cd example-app
$ sudo chown -R $USER: .
これでネットで調べたスクリプトを手動で実行出来ました。