こんにちは、株式会社スマレジのエンジニアのyushiです。
アクタージュの最新刊が発売されていたので早速読みました。
2020/07/15まで1巻の丸々試し読みができるようなので、未読の方はぜひに。
さて、今回は技術系記事です。
課題
Composerが遅い!
Composer(https://getcomposer.org/)といえばPHPのパッケージマネージャーで、Laravelを使った開発においても必須の仕組みとなります。
しかし、Laravelのプロジェクト生成コマンドを実行しても、10分経っても終わらないわけです。
composer create-project --prefer-dist laravel/laravel [ProjectName]
Dockerを利用している影響も大きそうです。正確なコマンドはこれ。
docker run --rm \ --volume $(PWD):/app \ composer:latest create-project --prefer-dist laravel/laravel [ProjectName]
composer:latestイメージの/appにCurrent Directoryをマウントしてcreate-projectを実行することで、 Docker上のComposerを利用してホストPCにLaravelプロジェクトを生成しています。
本記事では、この改善に取り組みます。
本当は別の内容の記事を書こうとしてたけど、プロジェクト生成が遅すぎて挫折した。
改善策1 cached configuration
DockerのVolumesを使っていると速度に影響が出るようです。しかし、これを改善する設定があります。cached
です。
ホスト->コンテナ内の更新の反映を遅延させる(即時に反映させない)ことによって高速化するようです。 その分発生する非一貫性は、composerの用途を考えると影響は少なそうです。
docker run --rm \ --volume $(PWD):/app:cached \ composer:latest create-project --prefer-dist laravel/laravel [ProjectName]
しかし思ったより速くならず...。
改善策2 packagist.jpの利用
-vvv
オプションで様子を見てみます。
docker run --rm \ --volume $(PWD):/app:cached \ composer:latest create-project --prefer-dist laravel/laravel [ProjectName] -vvv
どうも依存ライブラリのダウンロードに時間がかかっているようです。
調べてみると、個人的に日本にミラーサイトを作ってくださっている方がいるそうです。
こちらを利用してみます。個人管理とのことですが、Dockerなら簡単にオリジナルのサイトへの参照に戻せるし、大丈夫かな。
docker run --rm \ --volume $(PWD):/app:cached \ composer:latest sh -c "composer config -g repos.packagist composer https://packagist.jp \ && composer create-project --prefer-dist laravel/laravel=6.x backend -vvv"
これで、数倍速くなりました! 僕の環境だと5分かからずに終わります。
コマンドはちょっと汚いけど、もう少し綺麗に書けないかな...。
composer create-project
の--repository
オプションでミラーサイトのURLを指定する方法も試したんですが、
続いて実行されるcomposer isntall
では本家サイト(packagist.org)が利用されてしまったので、composer config
を利用しています。
まとめ
初めてブログ記事にソースコードを埋め込みましたが、「見たまま」モードではできないんですね...。 エンジニア的にはMarkdownは慣れているのでこちらを使いました。
あと、プレビューへの切り替えが遅いのが少し難点。Qiitaみたいに同時表示してくれないかな?