第47回: Opcacheとキャッシュ戦略 — PHPの実行速度を「メモリキャッシュ」で底上げする

章: 第6章: パフォーマンスとインフラ

リクエストのたびに同じPHPファイルを再解析して、速度が出ていませんか?

PHPはデフォルトでリクエストごとにスクリプトを解析・コンパイルします。Opcacheを使えば、コンパイル済みのスクリプトをメモリにキャッシュして再利用でき、実行速度を大幅に改善できます。

Opcacheなしで本番運用を続けると何が起きるか

リクエストのたびにCPUがファイル解析を繰り返し、高トラフィック時にボトルネックになります。Opcacheを有効にするだけで、多くのケースでレスポンスタイムが2〜5倍改善されます。

キャッシュ戦略の比較

キャッシュ種別 対象 効果
Opcache PHPバイトコード 解析コスト削減・実行速度向上
アプリケーションキャッシュ DBクエリ結果・計算結果 DB負荷削減・応答速度向上
HTTPキャッシュ レスポンス全体 サーバー処理をスキップ
CDN 静的ファイル エッジサーバーから配信

チェックポイント: 本番環境では opcache.validate_timestamps=0 を設定してファイル変更チェックを無効化しましょう。デプロイ後は opcache_reset() または Webサーバー再起動でキャッシュをクリアしてください。設定変更後は opcache_get_status() で適用状態を確認します。

コードサンプル


# php.ini の設定
# [opcache]
# opcache.enable=1
# opcache.memory_consumption=128
# opcache.max_accelerated_files=10000
# opcache.revalidate_freq=60
# opcache.validate_timestamps=0  ; 本番は0で固定

<?php
// 現在の状態確認
$status = opcache_get_status();
echo '使用メモリ: ' . $status['memory_usage']['used_memory'] . ' bytes';

まとめ & 次のステップ

  • Opcacheを有効にするだけで、PHP実行速度を大幅に改善できます
  • 本番では validate_timestamps=0 でファイル変更チェックをオフにしましょう
  • デプロイ後は必ずキャッシュクリアを忘れずに行いましょう
  • アプリレベルのキャッシュ(Redis)と組み合わせることでさらなる速度向上が図れます
  • opcache_get_status() で現在のキャッシュ状態を監視する習慣をつけましょう

次回は Redisを使ったセッション管理 を学びます。高速で信頼性の高いセッション管理の実現方法を整理しましょう。

Related Articles