WindowsにLaravel Sailの開発環境を作ると、Windows全体が固まったりすることがあります。これはLaravel Sailのせいというより、「WSL2のせい」だと考えられます。
このあたり、少し深堀していきますね。
Laravel Sailでトラブルになっている方の参考になればと思います。
なお、今回の現象が起こったのはWindows10環境です。
わたし自身、Laravel Sailを使おうとしましたが、マシンによってはうまくいかず悩んで調べました。
WindowsでLaravel Sailを使ったら画面が固まる現象
Laravel Sailは、Dockerを使った開発環境です。
Windows環境でDockerを使うには、先にWSL2を入れておきます。
WSL2は、Windows Subsystem for Linux の略です。これによって、仮想マシンを使い、Linux環境を実現できます。
この部分の手順は別の記事にまとめています。
このような形でWSL2とDockerをいれてLaravel Sail環境を構築すると、フリーズしてしまったりする場合があります。
最初のうちは問題ないものの、途中からトラブルが頻発したりします。
同じ状況になったときには、タスクマネージャー/プロセス をチェックしてみてください。パフォーマンスを見てみると【vmmem】という項目がすごい容量を取っている可能性があります。vmmemは、WSL2のプロセスとなります。
上記は問題ない時のプロセスをキャプチャしたものですが、すでに4GBもメモリが取られています。なお、メモリだけではなくCPUの処理負荷もすごいことになったりする場合もあります。
WindowsでLaravel Sailを使ったら画面が固まる原因
なぜこのようなことになってしまうのか。
どうやら、WSL2がLinuxを基準にメモリサイズをどんどん増やし、Linuxはどんどんキャッシュを増やすという悪循環が発生するようです*。
*参考:WSL2によるホストのメモリ枯渇を防ぐための暫定対処
少し昔のものになりますが、WSL2のスレッドでも、この件で物議を醸しだしていました。スレッド名は次のとおりです。
(WSL 2は大量のRAMを消費して、それを返さない)」
WindowsでLaravel Sailを使ったら画面が固まるときの対策?
ではどうしたらよいのか??
とりあえずWSL2を再起動すると、しばらくは改善するかと思います。
ですがまた発生した場合には、どうしたら良いのか。
サイト上でよく見かける回答は、「メモリに制限を加えればよい」というものです。WSL2が暴走しないように、あらかじめ制限を加えてしまえばよいわけです。
先程も言及した参考記事に、この部分の解説もあります。
ただLaravel Sail環境でこれを行うと、途中で止まってしまったりと開発に支障がでることがあります。
制限をかけたことでWindows自体は無事に稼働しますが、開発中のプロジェクトには、問題が出てきてしまう可能性があるのです。
他の解決方法としては、試していませんが、WSL2を使わずVirtual Boxを使ってDockerを入れる手もあります。
さいごに
ということで、もやもやっとした感じで終わりますが^^;
なんとなく原因が分かってスッキリはした、と思っていただけたら嬉しいです。
なおわたしは現在、Laravel Sailは実際の開発には使っていません。Xampp(ザンプ)をメインに使って、開発を進めています。
こちらについては、下記で分かりやすく解説してます。ご興味あれば併せてご覧ください。
Linux環境を使いたい場合は、以前から使っているHomesteadを使用したりします。Homesteadは、Virtual Boxを使うので、今回のような問題は起こりません。
Homesteadの解説記事は、下記のとおり。
併せて参考にしてください。
結局のところ、現時点ではWindows環境ならXAMPP(ザンプ)が一番使いやすいと思います。