Windows 11 で Laravel × Docker のパフォーマンス改善術!重い環境を快適にする方法

1. はじめに

Windows 11 × Docker で Laravel を動かしていると、ページの表示が遅いレスポンスが重い と感じることはありませんか? 特に開発環境では、ファイルの同期やデータベースの処理がボトルネックになり、快適に開発できないことがあります。

なぜ、Docker 上の Laravel は遅くなるのか?
主な原因として、以下のような問題が考えられます。

  1. WSL2 のリソース設定不足(メモリや CPU の割り当てが最適化されていない)
  2. Docker のファイル共有の遅延(Laravel のファイルがホスト側と同期されているため)
  3. MySQL や PostgreSQL のパフォーマンス低下(データベースのストレージ設定が非効率)
  4. 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 での ファイル同期が遅い(特に storagevendor ディレクトリ)
  • Laravel の 自動リロード(auto reload) が遅延を引き起こす

③ データベースの処理が遅い

Laravel は MySQL や PostgreSQL などのデータベースを使用しますが、Docker コンテナ上のデータベースは ストレージ I/O の影響を受けやすい ため、遅くなることがあります。

影響する要素

  • Docker のボリューム管理が非効率(デフォルト設定のままだとパフォーマンスが低下)
  • MySQL の設定が適切でない(キャッシュ未設定、バッファサイズが小さい)
  • データベースコンテナとアプリコンテナの 通信オーバーヘッド が発生

④ Laravel の設定が最適化されていない

Laravel 自体の設定が適切でないと、リクエストの処理速度が大幅に低下します。特に キャッシュの未使用ログ出力の負荷 などが影響することがあります。

影響する要素

  • キャッシュが無効config:cacheroute:cache が未使用)
  • 不要なログ出力(開発環境で debug モードのまま動かしている)
  • セッションやファイルの書き込み処理が遅い(特に storage ディレクトリの遅延)

これらの問題を解決することで、Laravel の表示速度を大幅に向上 させることができます。次のセクションでは、具体的な パフォーマンス改善策 を紹介していきます!

3. Laravel のパフォーマンス改善策

ここからは、Windows 11 × Docker 環境で Laravel の表示速度を改善するための具体的な方法 を紹介します。以下の対策を実践すれば、ページの読み込みが早くなり、開発がスムーズになります!

3.1 WSL2 の最適化

Docker は WSL2(Windows Subsystem for Linux 2) 上で動作するため、WSL2 のリソース設定を最適化することでパフォーマンスが向上します。

① WSL2 のリソース割り当てを増やす

デフォルトの WSL2 はメモリや CPU を動的に割り当てますが、明示的に設定することで安定したパフォーマンスを確保 できます。

設定手順

  1. WSL2 の設定ファイル(~/.wslconfig)を作成・編集する
    Windows のエクスプローラーで C:\Users\{ユーザー名} フォルダを開き、~/.wslconfig を作成して、以下の内容を記述してください。
[wsl2]
memory=8GB   # メモリ 8GB 割り当て(必要に応じて調整)
processors=4 # CPU を 4 コア使用(CPU に応じて変更)
swap=0       # スワップ領域を無効化(ディスク負荷軽減)
  1. WSL2 を再起動する
    設定を反映するために、以下のコマンドを実行します。
wsl --shutdown
  1. リソースが正しく割り当てられているか確認する
    WSL2 の Ubuntu ターミナルで、次のコマンドを実行して CPU・メモリの情報をチェックできます。
free -h # メモリ使用状況を確認
nproc # CPU コア数を確認

② WSL2 のディスクを最適化する

WSL2 では、不要なキャッシュやディスクの断片化が発生し、パフォーマンス低下を引き起こすことがあります。定期的に最適化を行いましょう。

最適化手順

  1. WSL2 を完全に停止
wsl --shutdown
  1. WSL2 のディスクを最適化(PowerShell で実行)
optimize-vhd -Path C:\Users\{ユーザー名}\AppData\Local\Docker\wsl\data\ext4.vhdx

3.2 Docker Desktop の設定変更

Docker の設定を見直すことで、ファイル同期の遅延を減らし、Laravel のパフォーマンスを改善できます。

① Docker のリソース割り当てを増やす

Docker のリソース設定を変更し、Laravel の処理がスムーズに動作するように最適化 します。

  1. Docker Desktop を開く
  2. 「Settings」 → 「Resources」 を開く
  3. 以下の設定を調整する
    • CPU: 4 コア以上(推奨)
    • Memory: 6GB 以上(推奨)
    • Swap: 0(ディスク負荷を軽減)

② gRPC FUSE を無効化する(ファイル共有の改善)

Docker Desktop のファイル共有の方式を変更し、ファイルアクセスの遅延を減らします。

  1. Docker Desktop の設定を開く
  2. 「Settings」 → 「Advanced」 へ移動
  3. 「gRPC FUSE for File Sharing」 のチェックを外す
  4. 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 のデフォルト設定ではクエリキャッシュが無効になっているため、キャッシュを有効にすることで 同じクエリの実行速度を向上 できます。

設定方法

  1. my.cnf(MySQL の設定ファイル)を編集し、以下の設定を追加
[mysqld] query_cache_type = 1 query_cache_size = 64M
  1. 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_sizeshared_buffers2倍程度 に設定

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 devvite の設定が適切でないと、ブラウザの読み込みが遅くなることもあります。

ここでは、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.jsapp.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 開発を楽しんでください! 🚀

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です