CS-Cartの速度最適化のためのサーバ調整と推奨事項

スポンサードサーチ

パフォーマンス向上と CS-Cart の速度最適化について話を始める前に、何をどのように改善したいのか、そしてその理由を明確にすることが重要です。あらゆる最適化はプロジェクトのコードを修正・最適化するか、サーバの容量を増やすことを意味し、これは財務面にも影響します。

この記事で紹介するプロジェクト最適化のためのすべての推奨と行動は、ECサイトの運営に影響を与える可能性があります。したがって、作業はできるだけ慎重に進めてください。何か問題が起こった場合は、以前の操作を取り消し、問題の原因を説明をして CS-Cart の専門家やホスティング・プロバイダーに助けを求めてください。

今回は、CS-Cartの公式ブログの記事から Several Server Tweaks and Recommendations for CS-Cart Speed Optimization(CS-Cartの速度最適化のためのサーバ調整と推奨事項)をご紹介します。

CS-Cart Store Builder や Multi-Vendor、テーマとアドオンを更新

CS-Cart のコア、テーマ、アドオンを更新することは重要です。なぜなら、新バージョンにはパフォーマンス向上のパッチ、ワークフローを改善・最適化するパッチ、バグや脆弱性の修正が含まれています。 CS-CartCS-Cart Multi-Vendor の新バージョンへ移行を計画している場合は、コアやテーマ、アドオンを最新に保つことで移行がスムーズになります。

PHPバージョンを更新し、潜在力を最大限活用する

現在の CS-Cart Store BuilderCS-Cart Multi-Vendor のバージョンでサポートされている最大のPHPバージョンを確認してください。

私たちはサードパーティ製のアドオンを使用しないデフォルトの CS-Cart テーマで負荷テストを実施しました。このテストでは、PHPバージョンを更新することでプロジェクトのパフォーマンスが向上することが示されています。

ただし、すべてのアドオンや CS-Cart のバージョンが最新のPHPバージョンをサポートしているわけではないため、更新によってプロジェクトが利用できなくなる可能性があります。動いているECサイトを更新する前に、ローカルのコンピューターやステージング・サーバでチェックしてください。または、開発者に相談してください。

OPcacheを利用する

PHPアプリケーションはどう動作するのでしょうか。PHPはコードが書かれたファイルを開き、それらを結合して解析し、トークンを割り当て、コンパイルした後に実行します。このようなファイルが数百に及ぶ場合、開いて読み込み、コンパイルするプロセスはかなりのリソースを消費します。しかし、ファイルは頻繁には変わらないため、毎回コンパイルするのは非効率です。

そこでOPcacheの出番です。コンパイル結果をメモリに保存し、再利用することで、すべてのリクエストで再コンパイルする必要をなくします。コードが変更されると、OPcacheは自動的に変更されたファイルのキャッシュを無効にして再コンパイルします。

ほとんどのPHPビルドではOPcacheがデフォルトで有効になっており、多くの場合追加の設定は不要です。しかし、すべてのホスティング・プロバイダーに当てはまるわけではありません。ファイルの変更チェックを無効にしている場合があり、更新時に問題を引き起こすことがあります。

ヒント:本番環境で opcache.validate_timestamps=0 を設定すると、各リクエストでのタイムスタンプ・チェックを省略するため余計な負荷を減らすことができますが、この方法はおすすめしません。古いドライブではパフォーマンスがわずかに向上するかもしれませんが、現代のSSDやNVMeではタイムスタンプ・チェックの影響はほとんどありません。

さらに重要なのは、更新後に古いキャッシュ・ファイルを使用すると、特にデータベース構造が変わった場合に重大なエラーにつながることです。この設定はデバッグを困難にし、サポートに連絡した際の問題解決を遅らせます。

よりバランスの取れた方法は opcache.revalidate_freq を使うことで、信頼性を損なうことなくチェックの頻度を下げられます。

FastCGI (PHP-FPM) + nginx を使用する

FastCGIはPHPとWebサーバを接続する非常に効率的な方法です。PHP-FPM(FastCGI Process Manager)はnginx とシームレスに動作し、この組合せはパフォーマンスに最適化されています。余計な層は不要です。

古い設定では、Apache の mod_php を使用したり、さらに悪い場合には nginx → Apache(mod_php) → PHP といった構成が残っています。Apache は .htaccess ファイルをサポートしており、初心者の管理者には便利ですが、この柔軟性には代償があります。通常、nginx+PHP-FPMよりも3〜7%のパフォーマンス低下を招きます。

さらに Apache を使用する場合は、デフォルト設定の脆弱性に注意する必要があります。.htaccessへの過度な依存、不要なモジュールの有効化、不適切なディレクトリリスト設定などがセキュリティリスクを引き起こします。例えば CVE-2021-41773 は、Apache の設定不備によりアクセス制限を回避できる脆弱性です。

最善のプラクティス:mod_php は完全に避けましょう。Apache を使わざるを得ない場合は、php-fpm や mod_proxy_fcgi を介してPHPを接続してください。この方法はパフォーマンスとセキュリティが向上し、モダンなPHPデプロイ基準に合致します。

PHPのリソース制限と実行時パラメータの調整

直感に反して、PHPに多くのリソースを割り当てても必ずしも高速化するわけではありません。過剰な割り当てはリソース競合を引き起こし、OOM Killerがプロセスを終了して予期しないクラッシュを招くことがあります。

推奨デフォルト設定

max_execution_time = 60

デフォルトでは長時間のスクリプトを実行しないようにします。インポート/エクスポートなどは高い制限が必要な場合もありますが、大きなタスクを小さな単位に分割するほうが信頼性が高くなります。

memory_limit = 512M

多くのECサイトにとって安全な上限です。MySQL、Redis、OSもメモリを必要とすることを忘れないでください。

注記:商品が多いECサイトやサードパーティ製アドオンが多い場合は、memory_limit = 768M または 1024M が適切かもしれません。実際の使用状況を監視してから増やしてください。

データベース(MySQL)の更新と最適化

すべてのテーブルをMyISAMからInnoDBに変換する

最新の CS-Cart では、すべての新機能や再設計されたモジュール・テーブルはInnoDBを使用して作成されています。これにより、長時間の重いクエリの際にデータベースは必要な行だけをロックし、テーブル全体をロックするのを避けられます。トランザクションや外部キーをサポートしているためデータ整合性も向上します。

以下はInnoDBとMyISAMの主な違いです。

  • InnoDBは行レベルロックをサポートしますが、MyISAMはテーブル・レベルロックのみです。
  • InnoDBは外部キー制約を含む参照整合性(RDBMS)をサポートしますが、MyISAMはサポートしません(DBMS)。
  • MyISAMと比べて、InnoDBは自動回復のためのトランザクションログを使用し、高負荷に効果的に対応します。

MySQL設定の最適化

具体的な値はRAMや負荷に依存しますが、以下が一般的な方向性です。

wait_timeout = 60

長時間のクエリは設計の悪さの兆候です。タイムアウトを延長するのではなく、クエリを見直したり最適化しましょう。

ヒント:MySQLTunerを使用して現在の設定を確認し、実際の使用状況に基づいた提案を得てください。MySQLのチューニングにとても役立ちます。

MariaDBを検討する

2025年現在、MariaDB 10.11 LTS は成熟したMySQL互換の代替であり、仮想カラムの処理や高度なストレージエンジン、Aria形式のシステムテーブルなど独自の機能が豊富です。

ただし、ベンチマークによっては特定のシナリオで MySQL 8 の方が良い性能を示すことがあります。例えばJSONを含む複雑なクエリではMySQL 8が優れている場合があります。

最適な選択はワークロードによります。もし、インサート性能、レプリケーション、CPU負荷が重要であれば MariaDB が適しているかもしれません。他の用途では、注意深いチューニングと最適化により MySQL の方が良い場合もあります。

サーバ容量の増加

PHPやMySQLの設定値を上げたりサーバソフトウェアを更新したりするだけでは解決できないパフォーマンス問題もあります。ある時点で、サーバリソースをアップグレードするか、上位のホスティング・プランに変更することを検討する必要があります。これは、追加アドオンのインストール、商品の増加、単純にサイト・トラフィックが増えたことなどが理由で必要になることが多いです。

また、トラフィックの急増を効果的に処理するために、セール期間やマーケティング・キャンペーンではサーバ容量の拡張を推奨します。

ヒント: AWS、DigitalOcean、Docker、Kubernetesなどのクラウドやコンテナ化されたソリューションを検討してください。プロジェクトの成長に合わせて必要な柔軟性とスケーラビリティを提供します。

HTTP/2(とTLS 1.3)とHTTP/3の導入検討

この場合、パフォーマンスとセキュリティは密接に関連していますHTTP/2 はほとんどの最新ブラウザとWebサーバでサポートされており、HTTP/1.1 と比較してリクエストの多重化、ヘッダー圧縮、効率的な接続利用など大幅な改善をもたらします。多くのホスティングプロバイダーとサーバ(nginxApache の適切なモジュール)は、HTTPS使用時にHTTP/2をデフォルトで有効にしています。

実践的な設定

  • nginx:設定に ssl http2 ディレクティブが含まれていることを確認します。
listen 443 ssl http2;
  • Apachemod_http2mod_ssl が有効になっていることを確認します。設定には以下を含めます。
Protocols h2 http/1.1

HTTP/3(QUICベース)の導入検討

QUICベースの HTTP/3 はさらにパフォーマンスを向上させることができます。特に高遅延環境やモバイルネットワークで効果的です。Cloudflare や Fastly など多くのCDNと最新ブラウザでは既にサポートされています。nginx(quicheライブラリを使用)や Caddy などのWebサーバもHTTP/3をサポートしていますが、追加の設定が必要です。

TLS 1.3を有効にしてセキュリティと速度を向上

TLS 1.3 は強く推奨されます。セキュリティを強化するとともに、ハンドシェイクプロセスが短縮されるため接続設定が高速化されます。

TLS 1.3の有効化方法

  • nginx:OpenSSL 1.1.1以上を使用し、設定に次を含めます。
ssl_protocols TLSv1.3 TLSv1.2;
  • Apache:Apache 2.4.38以上とOpenSSL 1.1.1以上で、次を設定します。
SSLProtocol -all +TLSv1.2 +TLSv1.3

SSL Labs Testなどのツールでサポート状況を確認できます。

ヒント: QUICベースの HTTP/3 は、特にモバイルユーザーや高遅延接続でさらに大きな性能向上をもたらす可能性があります。ほとんどの最新ブラウザとCDNは既に対応しています。また、TLS 1.3 を必ず有効にしてください。ハンドシェイクの余分な処理や負荷が減り、セキュリティとデータ交換が高速化されます。

CS-Cartの調整とオプション

変更後にプロジェクトが利用できなくなった場合は、変更を取り消し、CS-Cart テクニカルサポートやホスティング・プロバイダーに連絡してください。設定を手伝ってくれます。

Imagickを使用する

GD と Imagick は画像処理用の異なるPHP拡張です。両モジュールは似ていますが、サムネイル画像の生成では Imagick の方がより良い結果を出し、メモリ使用量も少なくて済みます。

Imagick を有効にするには、config.local.phpファイルの $config['tweaks'] 配列で調整値を imagick に変更します。

Imagickを有効にする設定例

'image_resize_lib' => 'imagick',

注意: Imagick がサーバにインストールされていない場合、強制的に使用しようとするとエラーが発生する可能性があります。コンポーネントが利用可能かどうかを確認するチェックを実装してください。

また、config.local.phpでimage_resize_libの横に auto が設定されている場合、Imagick がインストールされるとデフォルトで使用されます。

キャッシュにAPCu、セッション保存に Redis を使用する

CS-Cart でのキャッシュには APCu を、ユーザーセッション保存には Redis を使用することを推奨します。この分離によりデータベースやファイルシステムへの負荷が減り、リクエスト処理が高速化され、アプリケーション全体の応答性が向上します。

ただし、Redis のような追加サービスを導入するとインフラの複雑さが増します。新たな故障ポイントが追加されるので、systemd や supervisord などを使った監視と自動再起動が必要です。

さらに、APCuにキャッシュを保存する場合、各PHPプロセスのメモリ内に保持されます。そのため全体のRAM使用量が増え、リソースが限られたシステムではパフォーマンスに影響することがあります。APCuはmod_phpまたはphp-fpmでのみ動作し、共有キャッシュが必要なマルチサーバ構成には適していません

このアプローチを採用する前に、インフラがこれらの特性に対応できること、すべてのコンポーネントが確実に動作できることを確認してください。

$config['cache_backend'] = 'apcu';
$config['session_backend'] = 'redis';

これらの設定を構成ファイルで有効にするには、APCu(PHP 7.0以上)Redis がサーバに正しくインストール・設定されている必要があります。設定を編集する前に、APCu と Redis が利用可能か確認してください。不明な場合や支援が必要な場合は、システム管理者やホスティング・プロバイダーに相談してください。

バックアップにはmysqldumpを使う

mysqldump は多くの現代的なホスティング環境で利用できるサーバ側ユーティリティで、データベースのバックアップ作成に広く推奨されています。信頼性の高いバックアップには mysqldump を使用するのが最適です。

CS-Cart では mysqldump のサポートがありますが、デフォルトでは無効になっています。これは、一部のホスティング・プラットフォームで mysqldump が利用できなかったり、不安定だったり、高い権限が必要な場合があるためです。その結果、CS-Cart はデフォルトでPHPベースのバックアップ方法を使用しており、互換性は広いですが大きなデータベースでは効率が低下する可能性があります。

バックアップに mysqldump を有効にするには、config.local.phpファイルの $config['tweaks'] 配列に次のパラメータを追加します。

 $config['tweaks']['backup_db_mysqldump'] = true;

有効化すると、CS-Cart は mysqldump を使用してデータベース・バックアップを作成します。この方法は高速でリソース効率が高く、特に大規模プロジェクトに有益です。バックアップ中のPHPプロセスの負荷を軽減できます。

キャッシュ生成プロセスにおけるバックエンド・ロックの実装

最近の CS-Cart では、複数ユーザーによる同時キャッシュ生成を防ぐための新機能が導入されました。これはキャッシュクリア後やデプロイ後の最初の実行など、高負荷時に特に役立ちます。

この保護を有効にするには、config.local.phpファイルに次の行を追加します。

$config['lock_backend'] = 'database';

この設定により、CS-Cart はロック情報をデータベースに保存し、リソースを大量に消費する操作の同時実行を防止します。

Redis もロックストレージのバックエンドとしてサポートされており、特に分散環境の高負荷プロジェクトでは推奨されます。Redisロックを有効にするには次を使用します。

$config['lock_backend'] = 'redis';

重要: Redis が利用可能で正しく構成されていることを確認してください。Redis を使用するとロック処理のパフォーマンスが向上し、データベースの負荷が軽減されます。

この仕組みはキャッシュ生成時のサーバ過負荷防止に役立つだけでなく、注文処理の正確さも保証します。最近の CS-Cart では、StripePayPal などの決済システムとの連携時にもロックシステムが使用されています。ロックが有効でないと、注文ステータスが正しく更新されず、在庫不一致やビジネスロジックの重大な問題につながる可能性があります。

プログラミングスキルがなくても CS-Cart のパフォーマンス問題を見つけて修正する方法

コーディング・スキルがなくても、CS-CartCS-Cart Multi-Vendorボトルネックを特定して修正することができます。以下は基本的な診断に役立つ実用的なヒントと指標です。

CS-Cart の組込みデバッガを使用する

CS-Cart には、組込みのデバッグモードがあり、URLに ?debug を追加することで有効にできます。有効にすると右上に「虫」アイコンが表示され、クリックすると詳細情報が表示されます。

  • SQL — データベースクエリの数と実行時間
  • Blocks — ブロックの読み込み速度とメモリ使用量
  • Page generation time — ページを生成する総時間

監視すべき主要指標

指標推奨値
ページ生成時間≤1秒 — 優れたパフォーマンス
1〜2秒 — 多くのプロジェクトでは標準
2秒 — 見直しと最適化が必要
データベース問い合わせ時間≤0.1秒 — 良好
0.1秒 — クエリをチェックしインデックスを最適化
キャッシュからのブロック数20個中5個以上 — 許容。キャッシュから提供されるブロックが多いほどパフォーマンスが向上。
ブロック描画時間≤0.1秒 — 速い
1〜2秒 — 許容だが監視が必要
2秒 — 詳細な調査が必要

ヒント: デバッガを有効にしてページをクリックしていくと、どのブロックやモジュールが遅いか、どこにボトルネックがあるかが分かります。

キャッシュ設定の確認

管理画面の「ウェブサイト > テーマ」で「キャッシュの自動リビルド」がオフになっているか確認します。ECサイトがリアルタイムでテンプレートを頻繁に編集していない場合、このオプションは無効にしておくべきです。

config.local.phpでは、次の設定を確認してください。

$config['tweaks']['disable_block_cache'] = false;

開発者が誤ってキャッシュを無効にしたままにしておくことがあり、これが大幅なパフォーマンス低下につながる場合があります。

画像の最適化

  • Google PageSpeed でECサイトをテストして、大きな画像を特定します。
  • 画像を右クリックして実サイズと表示サイズを確認します。
  • tinypng.com や imagecompressor.com などのロスレス画像圧縮ツールを使用します。

アドオンの見直し

一部のサードパーティ製アドオンは、商品やブランドなどの固有要素が多いページで数百のSQLクエリを生成することがあります。

実施すること

  1. デバッガを有効にして遅いページに移動します。
  2. SQLタブでどのブロックやアドオンが長いクエリや過剰なクエリを生成しているかを確認します。
  3. Blocksタブでどのブロックが最も時間を要するかを特定します。
  4. 管理画面の「アドオン > アドオン」で疑わしいものを無効にし、パフォーマンスを再テストします。
  5. 多数のサードパーティ製アドオンがある場合は、一旦すべて無効にし、一つずつ再有効化して原因を特定します。

Cronジョブと外部同期の見直し

バックアップ、サードパーティとの同期、メールキャンペーンなどのタスクがピーク時に実行されると、サーバに負担をかけることがあります。

ヒント: トラフィック分析に基づいて、cronジョブは夜間などのオフピーク時にスケジュールしてください。

指標に集中し、スコアだけにこだわらない

Google PageSpeed のようなツールは特にモバイルテスト条件下で誤解を招く結果を示すことがあります。大規模なECサイトでも低いスコアになることがあり、それが実際のユーザー体験を必ずしも反映しているわけではありません。

ヒント

  • 指標を定期的に監視する。
  • 変更前と変更後の結果を比較する。
  • テストスコアだけに頼らず、実際の動作を観察する。

まとめとベストプラクティス

  • 開発中でない限り「キャッシュの自動リビルド」を無効にする。
  • disable_block_cache間違ってtrueになっていないか確認する。
  • 特にホームページや商品ページの画像を圧縮する。
  • SQLやブロックレンダリングを遅くする重いアドオンを見直し、必要なら無効にする。
  • 組込みのデバッガを使用し、パフォーマンス指標を批判的に考える。

CS-Cart CTOのAndrey Myagkovからのアドバイス

「テストスコアにこだわりすぎず、実世界の指標とユーザー体験に注目してください。PageSpeed スコアが低いからといって、ECサイトが遅いとは限りません。サーバが物理的にどこにあるか、ユーザーがどこにいるかを考慮してください。もしECサイトがオーストラリアのサーバにあっても、お客様がヨーロッパにいるなら、遅延は距離によるものであり、最適化の不備ではありません。多くの場合、サイトのコピーをユーザーに近い場所にホスティングするだけで大きな違いが生まれます。テストはあくまで指針であり、最終判定ではないことを忘れないでください。」

プログラミング・スキルなしでCS-Cart Store BuilderCS-Cart Multi-Vendor の迅速な最適化とパフォーマンス問題の発見に役立つヒントは、How to Fix Performance Issues with CS-Cart and Multi-Vendor On Your Own?(英語)でご覧いただけます。

ITを使った経営課題の解決でお困りではありませんか?

DXを始めとするITを使った経営課題の解決が上手くいっていない企業は数多くあります。

それは、単なるソリューションの導入や、社内人材への丸投げとなっており、課題解決がゴールになっていないからです。

そのためには、経営とITを理解した人材が、経営者層と共に取り組み、経営者の頭の中を可視化することが必須要件です。

現在、1時間の無料オンライン・コンサルティングを実施しております。

是非この機会にご相談ください。

構築予算が10分の1に

経営課題を解決するECサイト、越境ECサイト、BtoB ECサイト、マーケットプレイスを構築するならCS-Cartをご検討ください。

スポンサードサーチ