エンジニア初心者がLinuxを学ぶ エンジニア初心者がPHP/Laravelを学ぶ 仕事

「重い…」を解決!Laravel + Vue.js + Inertia + Dockerを72倍速くできた方法


SPAで個人開発してたんだけど、WEBアプリが超遅くてユーザエクスペリエンスが悪すぎだったので調べてみた。
まずは結果を見てほしい。

BEFORE


・8.71s

・8.42s

AFTER


・116ms

・121ms

70倍以上速くなった。

なぜ遅かったのか

遅かった主な原因はWindows ⇔ WSL2 間のファイルアクセスが遅かったからだと思う。

dockerを使って開発する場合、Windows側のファイルシステムにプロジェクトを作成してたが、そうするとwsl2側にマウント(共有)され、Laravel フレームワークは大量にファイル扱うためめっちゃ遅くなってたんだと思う。

例えば:
Windows側でcalendarプロジェクトを以下の場所に作成した場合、
c:\projects\projects\calendar

エクスプローラーから以下にアクセスすると同じcalendarフォルダがある
\\wsl.localhost\Ubuntu-20.04\home\sneakyblog\projects\calendar
これをマウントといって、dockerは裏ではwsl2の中で実行されてるためWindows側に作成したファイルがWSL2に共有される仕組みになってる。

しかもLaravelフレームワークは、以下のような場所に大量のファイルがある。

vendor/(依存パッケージ)
app/(アプリケーションコード)
resources/(ビューファイル)
storage/(ログやキャッシュ)

水タイプのポケモンに炎タイプで挑むと同じ笑。

なぜ72倍速くなったのか?


じゃあなんで速くなったのかというと、Windows側のc:\projects\projects\calendarのプロジェクトフォルダを \\wsl$\Ubuntu\home\projects\calendar に移動したからだと思う。
これは他の人も同じことをやってたからそうしたんだけど、結構前にいた現場でこのようにやってたおっさんがいた。
理由は聞きそびれてしまったんだけど、おそらくファイルアクセス速度を上げるためだったんだと今に思う。

手順

GitHubにアップ

/home/sneakyblog/projectsに移動

cd projects
pwd

以下が表示されればOK。projectsフォルダは無い場合は作成。mkdir projectsで作成。
/home/sneakyblog/projects

プロジェクトのクローン

git clone <リポジトリURL>
cd calendar

sudo chown -R sneakyblog:sneakyblog ~/projects

権限の変更

sudo chown -R sneakyblog:sneakyblog ~/projects

 

Dockerコンテナのビルドと起動/h3>

docker-compose build
docker-compose up -d

 

コンテナ内に入る

docker-compose exec app bash
cd calendar

 

必要な設定

cd calendar
chmod 777 -R storage/
composer install
cp .env.example .env
php artisan storage:link
php artisan key:generate
npm install
npm run dev

 

補足になるが、appコンテナにnode.jsとnpmをインストールするようにDockerfileに書いたからappコンテナ内でnpmコマンドが実行できてる。
それとinertiaを使う場合は、以下を追加しないと動かなかった。

-エンジニア初心者がLinuxを学ぶ, エンジニア初心者がPHP/Laravelを学ぶ, 仕事