> For the complete documentation index, see [llms.txt](https://docs.chamilo.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.chamilo.org/3.x/ja/gaido-1/admin-guide/performance-tuning.md).

# パフォーマンスチューニング

パフォーマンス設定は、特に同時ユーザー数が多いプラットフォームにおいて、ページの読み込みを高速化し、リソースの利用効率を向上させるために Chamilo を最適化するのに役立ちます。

> **追加の参考資料**: Chamilo のインストールには、拡張された最適化ガイドが含まれています。ブラウザで `/documentation/optimization.html` を開いてください（例: `https://your-chamilo-site/documentation/optimization.html`）。ご利用のバージョンに固有のサーバーレベルの推奨事項が記載されています。

## Symfony Cache

Chamilo 3.0 は Symfony 上に構築されており、ルーティング、依存性注入、テンプレートにコンパイル済みキャッシュを使用します。このキャッシュの管理はパフォーマンスにとって不可欠です。

### キャッシュのクリア

設定変更、デプロイ、またはアップグレードの後は、Symfony キャッシュをクリアしてください。

```bash
# Clear cache for the current environment
php bin/console cache:clear

# For production environments specifically
php bin/console cache:clear --env=prod
```

本番環境では、常に `.env.local` ファイルで `APP_ENV=prod` が設定されていることを確認してください。開発環境（`APP_ENV=dev`）には大規模なデバッグオーバーヘッドが含まれており、本番では決して使用すべきではありません。

### キャッシュのウォームアップ

キャッシュをクリアした後、テンプレートと設定を事前コンパイルするためにウォームアップします。

```bash
php bin/console cache:warmup --env=prod
```

## キャッシュ戦略

| 戦略                    | 説明                                                                                                                  |
| --------------------- | ------------------------------------------------------------------------------------------------------------------- |
| **OPcache**           | PHP 組み込みのオペコードキャッシュです。`php.ini` で有効にし、十分なメモリ（`opcache.memory_consumption=256`）を確保してください。これが単一で最も効果の大きいパフォーマンス最適化です。 |
| **APCu**              | Symfony がメタデータの保存に使用するインメモリのキー・バリューキャッシュです。APCu PHP 拡張をインストールし、Symfony のキャッシュ設定で構成してください。                           |
| **Redis / Memcached** | 高トラフィックのプラットフォームでは、外部キャッシュバックエンドを構成します。`config/packages/cache.yaml` でキャッシュアダプターを設定してください。                           |

### 推奨 OPcache 設定

```ini
opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=20000
opcache.validate_timestamps=0   ; Set to 0 in production for best performance
opcache.revalidate_freq=0
```

`validate_timestamps` を 0 に設定した場合、新しいコードをデプロイした後は OPcache をクリアする必要があります（PHP-FPM を再起動するか、`opcache_reset()` を呼び出します）。

## 遅延読み込み

| 設定                     | 説明                                                                                 |
| ---------------------- | ---------------------------------------------------------------------------------- |
| **画像の遅延読み込み**          | 画像に `loading="lazy"` 属性を有効にし、画面外の画像はスクロールして表示されるまで読み込まれないようにします。初期ページ読み込み時間を短縮します。 |
| **JavaScript の遅延読み込み** | 重要でない JavaScript ファイルを非同期で読み込み、ページ描画のブロックを避けます。                                    |

## CDN（コンテンツ配信ネットワーク）

複数の地理的地域のユーザーにサービスを提供するプラットフォームでは、CDN により静的アセット（CSS、JavaScript、画像）の読み込み時間を大幅に改善できます。

CDN を構成するには:

1. CDN ディストリビューション（例: CloudFront、Cloudflare、その他のプロバイダー）をセットアップし、Chamilo サーバーを指すようにします。
2. 環境または Symfony 設定でアセットのベース URL を構成し、静的アセットが CDN 経由で配信されるようにします。
3. 静的ファイルに適切なキャッシュヘッダーを設定します（バージョン付きアセットには長い有効期限）。

## データベースの最適化

| 操作                   | 説明                                                                                                     |
| -------------------- | ------------------------------------------------------------------------------------------------------ |
| **データベース接続プーリングの使用** | 高同時実行のプラットフォームでは、接続プーリングを構成し、データベース接続確立のオーバーヘッドを削減します。                                                 |
| **クエリの最適化**          | Chamilo には一般的なクエリ用のデータベースインデックスが含まれています。MySQL/MariaDB では定期的に `ANALYZE TABLE` を実行し、クエリプランナーの統計を最新に保ちます。 |
| **データベースサーバーの分離**    | 大規模インストールでは、Web サーバーとリソースを共有せず、専用サーバーでデータベースを稼働させます。                                                   |

## Web サーバーの構成

| 最適化                    | 説明                                                                                    |
| ---------------------- | ------------------------------------------------------------------------------------- |
| **gzip/brotli 圧縮の有効化** | HTML、CSS、JavaScript のレスポンスを圧縮します。ほとんどの Web サーバーがネイティブにサポートしています。                      |
| **静的ファイルのキャッシュ**       | 静的アセットに長い `Cache-Control` および `Expires` ヘッダーを設定します。                                   |
| **PHP-FPM のチューニング**    | 利用可能な RAM と想定同時実行数に基づき、`pm.max_children`、`pm.start_servers`、`pm.max_requests` を調整します。 |
| **HTTP/2**             | Web サーバーで HTTP/2 を有効にし、多重化接続とヘッダー圧縮を利用します。                                            |

## ヒント

* **OPcache が単一で最大の効果です** -- 他の最適化に進む前に、有効化と適切なサイズ設定を確実に行ってください。
* **本番で `APP_ENV=dev` を絶対に使わない** -- デバッグツールバーとプロファイラーは、すべてのリクエストに大きなオーバーヘッドを加えます。
* **チューニングの前に監視する** -- New Relic、Blackfire、または Symfony 組み込みプロファイラー（dev モード）などのツールを使い、推測ではなく実際のボトルネックを特定してください。
* **デプロイのたびにキャッシュをウォームアップする** ことで、最初のユーザーがキャッシュされていない遅いリクエストに当たるのを避けます。
