Windows 11 で Laravel × Docker のパフォーマンス改善術!重い環境を快適にする方法
1. はじめに
Windows 11 × Docker で Laravel を動かしていると、ページの表示が遅い、レスポンスが重い と感じることはありませんか? 特に開発環境では、ファイルの同期やデータベースの処理がボトルネックになり、快適に開発できないことがあります。
なぜ、Docker 上の Laravel は遅くなるのか?
主な原因として、以下のような問題が考えられます。
- WSL2 のリソース設定不足(メモリや CPU の割り当てが最適化されていない)
- Docker のファイル共有の遅延(Laravel のファイルがホスト側と同期されているため)
- MySQL や PostgreSQL のパフォーマンス低下(データベースのストレージ設定が非効率)
- Laravel 側の設定が適切でない(キャッシュ未使用、不要なログ出力など)
本記事では、Windows 11 環境で Laravel の表示を高速化する具体的な方法 を解説します。
✅ WSL2 の最適化(メモリ・CPU 割り当て調整、キャッシュ削除)
✅ Docker の設定変更(ファイル同期の改善、MySQL のパフォーマンス向上)
✅ Laravel 側のチューニング(キャッシュの活用、設定の見直し)
この記事の手順を実践すれば、Laravel の表示速度を大幅に向上 させることができます! ぜひ試してみてください!
2. Laravel が遅くなる主な原因
Windows 11 × Docker 環境で Laravel の表示が遅くなる原因は 複数の要素が絡み合って発生 します。以下の主な原因をチェックし、自分の環境に当てはまりそうなものを確認してみましょう。
① WSL2 のリソース設定不足
Windows の Docker は WSL2(Windows Subsystem for Linux 2) の上で動作しています。デフォルト設定のままだと、WSL2 に割り当てられる CPU やメモリのリソースが不足 し、Laravel の処理が遅くなることがあります。
影響する要素
- WSL2 に メモリ・CPU の割り当てが少ない(デフォルトでは動的割り当てのため最適化が必要)
- スワップ領域が有効 でディスクアクセスが頻発し、速度低下を招く
② Docker のファイル共有の遅延
Laravel のプロジェクトフォルダを Windows 側に置いたまま docker-compose.yml
でマウントしている場合、ファイルの読み書きが遅延 してしまいます。特に、開発中はファイルの変更が頻繁に発生するため、シンボリックリンクの処理やキャッシュの影響で Laravel のレスポンスが遅くなる ことがあります。
影響する要素
bind mount
での ファイル同期が遅い(特にstorage
やvendor
ディレクトリ)- Laravel の 自動リロード(auto reload) が遅延を引き起こす
③ データベースの処理が遅い
Laravel は MySQL や PostgreSQL などのデータベースを使用しますが、Docker コンテナ上のデータベースは ストレージ I/O の影響を受けやすい ため、遅くなることがあります。
影響する要素
- Docker のボリューム管理が非効率(デフォルト設定のままだとパフォーマンスが低下)
- MySQL の設定が適切でない(キャッシュ未設定、バッファサイズが小さい)
- データベースコンテナとアプリコンテナの 通信オーバーヘッド が発生
④ Laravel の設定が最適化されていない
Laravel 自体の設定が適切でないと、リクエストの処理速度が大幅に低下します。特に キャッシュの未使用 や ログ出力の負荷 などが影響することがあります。
影響する要素
- キャッシュが無効(
config:cache
やroute:cache
が未使用) - 不要なログ出力(開発環境で
debug
モードのまま動かしている) - セッションやファイルの書き込み処理が遅い(特に
storage
ディレクトリの遅延)
これらの問題を解決することで、Laravel の表示速度を大幅に向上 させることができます。次のセクションでは、具体的な パフォーマンス改善策 を紹介していきます!
3. Laravel のパフォーマンス改善策
ここからは、Windows 11 × Docker 環境で Laravel の表示速度を改善するための具体的な方法 を紹介します。以下の対策を実践すれば、ページの読み込みが早くなり、開発がスムーズになります!
3.1 WSL2 の最適化
Docker は WSL2(Windows Subsystem for Linux 2) 上で動作するため、WSL2 のリソース設定を最適化することでパフォーマンスが向上します。
① WSL2 のリソース割り当てを増やす
デフォルトの WSL2 はメモリや CPU を動的に割り当てますが、明示的に設定することで安定したパフォーマンスを確保 できます。
設定手順
- WSL2 の設定ファイル(
~/.wslconfig
)を作成・編集する
Windows のエクスプローラーでC:\Users\{ユーザー名}
フォルダを開き、~/.wslconfig
を作成して、以下の内容を記述してください。
[wsl2]
memory=8GB # メモリ 8GB 割り当て(必要に応じて調整)
processors=4 # CPU を 4 コア使用(CPU に応じて変更)
swap=0 # スワップ領域を無効化(ディスク負荷軽減)
- WSL2 を再起動する
設定を反映するために、以下のコマンドを実行します。
wsl --shutdown
- リソースが正しく割り当てられているか確認する
WSL2 の Ubuntu ターミナルで、次のコマンドを実行して CPU・メモリの情報をチェックできます。
free -h # メモリ使用状況を確認
nproc # CPU コア数を確認
② WSL2 のディスクを最適化する
WSL2 では、不要なキャッシュやディスクの断片化が発生し、パフォーマンス低下を引き起こすことがあります。定期的に最適化を行いましょう。
最適化手順
- WSL2 を完全に停止
wsl --shutdown
- WSL2 のディスクを最適化(PowerShell で実行)
optimize-vhd -Path C:\Users\{ユーザー名}\AppData\Local\Docker\wsl\data\ext4.vhdx
3.2 Docker Desktop の設定変更
Docker の設定を見直すことで、ファイル同期の遅延を減らし、Laravel のパフォーマンスを改善できます。
① Docker のリソース割り当てを増やす
Docker のリソース設定を変更し、Laravel の処理がスムーズに動作するように最適化 します。
- Docker Desktop を開く
- 「Settings」 → 「Resources」 を開く
- 以下の設定を調整する
- CPU: 4 コア以上(推奨)
- Memory: 6GB 以上(推奨)
- Swap: 0(ディスク負荷を軽減)
② gRPC FUSE を無効化する(ファイル共有の改善)
Docker Desktop のファイル共有の方式を変更し、ファイルアクセスの遅延を減らします。
- Docker Desktop の設定を開く
- 「Settings」 → 「Advanced」 へ移動
- 「gRPC FUSE for File Sharing」 のチェックを外す
- Docker を再起動する
3.3 Laravel の設定最適化
Laravel 自体の設定を見直すことで、レスポンス速度を改善できます。
① Laravel のキャッシュを有効化する
開発環境でもキャッシュを有効にすることで、ファイルの読み込みを最適化できます。
php artisan config:cache
php artisan route:cache
php artisan view:cache
② Laravel のログ出力を最適化
デバッグ時の log
が遅延の原因になることがあります。ログレベルを下げて負荷を軽減しましょう。
.env
の設定変更
LOG_CHANNEL=single
3.4 データベース(MySQL・PostgreSQL)の最適化
Laravel の表示が遅くなる原因の一つに データベースのパフォーマンス低下 があります。Docker 上で MySQL や PostgreSQL を使用すると、ストレージ I/O の影響 や メモリ設定の不足 によって、クエリ実行が遅くなることがあります。ここでは、データベースの最適化方法を解説します!
① データベースのコンテナ設定を最適化する
1. データの永続化を最適化する(ボリュームの変更)
Docker のデフォルト設定では、データベースのデータが コンテナの仮想ストレージ上に保存 されますが、これが I/O の遅延を引き起こす原因 になります。そこで、データベースのデータを 専用のボリューム に保存し、パフォーマンスを向上させましょう。
docker-compose.yml
の設定例(MySQL)
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: mysql
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: laravel
MYSQL_USER: laravel
MYSQL_PASSWORD: secret
command: --innodb-buffer-pool-size=512M --max_connections=200
volumes:
- db_data:/var/lib/mysql
ports:
- "3306:3306"
volumes:
db_data:
✅ ポイント
volumes
を使ってデータを永続化し、ストレージの最適化を行うinnodb-buffer-pool-size
を適切に調整(メモリ 512MB に増加)max_connections
を増やして接続数のボトルネックを減らす
② MySQL のパフォーマンスを向上させる
1. クエリキャッシュを有効にする
MySQL のデフォルト設定ではクエリキャッシュが無効になっているため、キャッシュを有効にすることで 同じクエリの実行速度を向上 できます。
設定方法
my.cnf
(MySQL の設定ファイル)を編集し、以下の設定を追加
[mysqld] query_cache_type = 1 query_cache_size = 64M
- MySQL コンテナを再起動
docker-compose down docker-compose up -d
2. スロークエリを調査する
MySQL のスロークエリログを有効にし、遅いクエリを特定して最適化 しましょう。
my.cnf
の設定
[mysqld]
slow_query_log = 1
long_query_time = 2
log_output = FILE
✅ 2秒以上かかるクエリをログに記録し、ボトルネックを特定
ログの確認方法
docker exec -it mysql bash
cat /var/lib/mysql/slow-query.log
③ PostgreSQL のパフォーマンスを向上させる
1. メモリ設定を変更する
PostgreSQL では shared_buffers
の値を増やすことでパフォーマンスを向上させられます。
postgresql.conf
の設定
shared_buffers = 256MB
work_mem = 16MB
effective_cache_size = 512MB
✅ shared_buffers
をサーバーメモリの 1/4 程度 に設定
✅ effective_cache_size
は shared_buffers
の 2倍程度 に設定
2. クエリ実行計画を分析する
PostgreSQL には EXPLAIN ANALYZE
というコマンドがあり、クエリの処理速度を詳細に分析 できます。
例: 遅いクエリの分析
EXPLAIN ANALYZE SELECT * FROM users WHERE email = 'example@example.com';
✅ Seq Scan
(シーケンシャルスキャン)になっている場合は インデックスを追加 して改善
インデックスの追加
CREATE INDEX idx_users_email ON users(email);
✅ インデックスを追加することで、検索クエリの速度を大幅に向上
④ Laravel のデータベース設定を最適化する
Laravel 側の設定も最適化することで、データベースの負荷を軽減できます。
1. Eloquent の N+1 問題を回避する
Eloquent ではリレーションを持つデータを取得すると、N+1 問題 が発生することがあります。これを回避するには、with()
を使用して 事前に関連データをロード しましょう。
改善前(N+1 問題が発生)
$users = User::all();
foreach ($users as $user) {
echo $user->posts->count();
}
✅ ユーザーごとに posts
を取得するため、SQL クエリが大量に発生 する
改善後(with()
を使用)
$users = User::with('posts')->get();
foreach ($users as $user) {
echo $user->posts->count();
}
✅ 1回のクエリで全ての関連データを取得 できるため、高速化
2. キャッシュを活用する
Laravel ではデータベースのクエリ結果をキャッシュすることで、同じクエリの実行回数を減らし、高速化 できます。
キャッシュの利用例
$users = Cache::remember('users_list', 3600, function () {
return User::all();
});
✅ Cache::remember()
を使うことで、1時間(3600秒)データをキャッシュ
まとめ
ここまでの設定を適用することで、Laravel のデータベースパフォーマンスを大幅に向上させることができます!
✅ MySQL/PostgreSQL の設定を最適化(メモリ調整・キャッシュ活用)
✅ スロークエリを特定し、インデックスを追加
✅ Eloquent の with()
を活用して N+1 問題を回避
✅ クエリ結果をキャッシュして負荷を軽減
3.5 フロントエンドの最適化(CSS/JS の高速化)
Laravel のバックエンドを最適化しても、フロントエンドの CSS/JavaScript の処理が遅いと、ページの表示速度が向上しない ことがあります。特に、開発環境では npm run dev
や vite
の設定が適切でないと、ブラウザの読み込みが遅くなることもあります。
ここでは、CSS/JS の最適化による Laravel のフロントエンド高速化 の方法を解説します!
① Laravel Mix / Vite の最適化
Laravel では Laravel Mix または Vite を使って CSS/JS を管理します。これらのビルドツールの設定を見直すことで、開発環境の速度を向上させることができます。
1. Vite の開発サーバーを最適化する
Vite はデフォルトで ホットリロード(HMR) を行いますが、Docker 環境では遅くなることがあります。vite.config.js
に以下の設定を追加すると、リロードの遅延を解消 できます。
vite.config.js
の最適化
export default defineConfig({
server: {
watch: {
usePolling: true, // ファイル変更の検知を最適化
},
hmr: {
host: 'localhost', // Docker 環境で正しくホットリロード
port: 5173,
},
},
});
✅ Polling を有効化 することで、ファイル変更の検知がスムーズになる
✅ HMR のホスト設定 を localhost
にすることで、Docker 環境でリロードエラーを防ぐ
2. Laravel Mix のビルドを最適化する
Laravel Mix を使っている場合、開発中のビルドが遅くなることがあります。以下のように設定を変更すると、ビルド速度が改善 されます。
webpack.mix.js
の最適化
mix.options({
hmrOptions: {
host: 'localhost',
port: 8080
},
processCssUrls: false // URL の処理をスキップしてビルド高速化
});
✅ processCssUrls: false
にすることで、不要な URL 解決をスキップ
✅ HMR のホストを localhost
にすることで、Docker 環境でエラーを防ぐ
② CSS/JS の読み込み最適化
1. 不要なライブラリを削減する
開発時に jQuery や Bootstrap の全ファイルを読み込んでいると、不要なリソースが増えてページ表示が遅くなる ことがあります。app.js
や app.css
に不要なものが含まれていないか確認し、最小限のものだけを読み込むようにしましょう。
// 不要なライブラリの削減
import 'bootstrap'; // すべてをインポートすると重くなる
✅ Bootstrap の JS は import 'bootstrap/js/dist/alert'
のように 個別インポート すると軽量化できる
2. CSS/JS のミニファイ(圧縮)を有効化する
本番環境では、CSS/JS をミニファイ(圧縮)することで ページの読み込みを高速化 できます。
npm run build
または Laravel Mix を使っている場合は、production
モードでビルドするようにしましょう。
mix.js('resources/js/app.js', 'public/js').version();
mix.sass('resources/sass/app.scss', 'public/css').version();
✅ .version()
をつけることで、キャッシュバスティング(キャッシュの無効化)もできる
③ ブラウザキャッシュを活用する
CSS/JS ファイルの読み込みを高速化するには、ブラウザキャッシュ を適切に設定することが重要です。
1. .htaccess
でキャッシュ設定を追加する
Apache を使用している場合は、.htaccess
に以下の設定を追加すると CSS/JS のキャッシュを適切に管理 できます。
.htaccess
の設定
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
</IfModule>
✅ CSS や JavaScript のキャッシュを 1ヶ月間有効 にすることで、ロード時間を短縮
2. Laravel でキャッシュをクリアする
開発中にキャッシュが悪影響を与えることもあるので、変更後は適宜キャッシュをクリアしましょう。
php artisan cache:clear
php artisan config:clear
php artisan view:clear
php artisan route:clear
✅ キャッシュをクリアすることで、古い設定が影響するのを防ぐ
まとめ
ここまでの設定を適用することで、Laravel のフロントエンドのパフォーマンスが向上し、ページの表示速度が大幅に改善 されます!
✅ Vite や Laravel Mix の設定を最適化し、ビルド時間を短縮
✅ 不要なライブラリを削減し、ファイルサイズを最小化
✅ CSS/JS を圧縮してページのロード時間を短縮
✅ ブラウザキャッシュを適切に設定して、無駄なリソース読み込みを防ぐ
4. まとめ & 追加の改善ポイント
Windows 11 × Docker 環境で Laravel の表示が遅い原因と、その対策について詳しく解説してきました。設定を適用することで、ページの読み込みが速くなり、開発環境が快適になる はずです!
📌 この記事で解説した改善ポイントまとめ
✅ WSL2 の最適化(CPU・メモリの割り当て調整、ディスクの最適化)
✅ Docker の設定変更(リソース配分、ファイル共有の改善、gRPC FUSE の無効化)
✅ データベースのパフォーマンス向上(MySQL/PostgreSQL の設定最適化、スロークエリ対策、Eloquent の最適化)
✅ Laravel のチューニング(キャッシュ活用、ログ出力の最適化)
✅ フロントエンドの最適化(Vite/Laravel Mix の設定変更、不要ライブラリ削減、CSS/JS の圧縮、キャッシュ活用)
🚀 さらに快適な開発環境を作るための追加改善ポイント
① Redis を導入してキャッシュを強化する
Laravel のキャッシュやセッション管理を file
ではなく Redis に変更 すると、データの読み書きが高速になります。docker-compose.yml
に Redis を追加 し、.env
の設定を変更しましょう。
Redis を有効にする
CACHE_DRIVER=redis
SESSION_DRIVER=redis
QUEUE_CONNECTION=redis
✅ データのキャッシュが効率化され、DB クエリの回数が減るため高速化
② Laravel Octane を導入してアプリケーションのレスポンスを高速化する
Laravel Octane を使うと、リクエストごとのフルブートを回避 し、アプリのレスポンス速度が劇的に向上します。
Octane のインストール
composer require laravel/octane
php artisan octane:install
php artisan octane:start
✅ サーバーの起動が最適化され、リクエスト処理が爆速に!
③ Nginx + PHP-FPM を導入して Docker 環境を最適化する
Apache よりも軽量な Nginx + PHP-FPM を使用 することで、リクエスト処理の速度が向上します。
Docker で Laravel を動かす場合、デフォルトの PHP ビルトインサーバーではなく、Nginx + PHP-FPM に切り替える のもオススメです!
✅ 負荷分散やキャッシュ機能を活用できるため、大規模プロジェクトにも最適
🎯 まとめ:設定を見直して快適な Laravel 開発環境を!
Windows 11 で Docker × Laravel を使っていると、環境によってはパフォーマンスが悪くなることがあります。しかし、WSL2 の調整や Docker の設定変更、Laravel のチューニングを適用することで、表示速度を大幅に改善することが可能です!
📌 今回紹介した方法を試して、快適な Laravel 開発を楽しんでください! 🚀