結論: どうやって実現するか
※ docker は事前にインストール・起動済みとします。(コダワリがなければ Docker Desktop https://www.docker.com/products/docker-desktop や WSL2 上に Docker をインストールして使えるようにしとけば OK です。)
例えば、 ~/Documents/tmp/laravel-project-via-composer
という laravel プロジェクトを作るなら以下。
% cd ~/Documents/tmp
% docker run --rm -i -t -v $PWD:/app composer create-project --prefer-dist laravel/laravel laravel-project-via-composer
- laravel プロジェクトを配置したいディレクトリに移動して
- そのディレクトリで
composer
のオフィシャルイメージを使って、 laravel プロジェクトを準備する
これだけ。
(なんなら、 -i -t
も不要だが、出力が見やすくなるので入れてる。)
これで ~/Documents/tmp/laravel-project-via-composer
に用意される。
$PWD
を任意のディレクトリすれば、コマンドの発行元ディレクトリはどこでも良いので、 % cd ~/Documents/tmp
も要らない。(が、うっかりミスとか怖いから、個人的には cd
してからコマンド実行したい派。)
念の為に書くと $PWD:/app
の右辺が /app
となっているのは https://github.com/composer/docker/blob/fbef2df32932859094b4cd3fb072f1e93a7fa1f8/2.0/Dockerfile#L60 にて、 WORKDIR /app
となっているから。
※つまり、もし、何らかの理由で将来 composer の Docker image の WORKDIR の位置が変わったら同様にコマンド発行時のパスも変更することになる。(使う image の Dockerfile を読むの大切。)
なぜこの方法を使うのか
- ローカルの環境の PHP や Composer のバージョンとか気にしたくない
- anyenv とかでも管理できるけど、 OpenSSL のバージョン齟齬とかで面倒…
- build するより docker image 使ったほうが早い
- 多くの場合、本来的目的は、 build をしたいのではなく、 laravel プロジェクトを用意したいだけ
- laravel プロジェクト用意した後に、 WEB App 実行用の Dockerfile や docker-compose 用ファイルは別途用意したら良い
たぶん、他のある程度有名な FW やパッケージマネージャーがあるなら同様の考え方で WEB App の下準備ができるはず。(ハードウェアとの通信が必要とか、そういうのは別のお話。)
ハードウェアトラブルや、ハードウェアの乗り換えとかで、いちいちローカル環境を整備するコストを考えると馬鹿らしいので、使えるものは使うと便利かも知れませんよ?というお話でした。
ちなみに laravel/installer
をインストールして laravel new hoge
という選択肢も当然にあるのですが、 docker 使って開発環境用意するだけなら composer の image 使って実行した方が楽やん?って思ってます。知らんけど。