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

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

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

## Symfony キャッシュ

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

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

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

```bash
# 現在の環境のキャッシュをクリア
php bin/console cache:clear

# 本番環境向けに特化
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   ; 本番環境では最高のパフォーマンスを得るために 0 に設定
opcache.revalidate_freq=0
```

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

## 遅延読み込み

| 設定                     | 説明                                                                             |
| ---------------------- | ------------------------------------------------------------------------------ |
| **画像の遅延読み込み**          | 画像に `loading="lazy"` 属性を有効にし、画面外の画像が表示領域に入ったときにのみ読み込むようにします。初期ページ読み込み時間を短縮します。 |
| **JavaScript の遅延読み込み** | 重要でない JavaScript ファイルを非同期で読み込み、ページのレンダリングをブロックしないようにします。                       |

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

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

CDN を設定するには：

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

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

| アクション              | 説明                                                                                                      |
| ------------------ | ------------------------------------------------------------------------------------------------------- |
| **データベース接続プールの使用** | 高同時接続のプラットフォームでは、データベース接続の確立に伴うオーバーヘッドを減らすために接続プールを設定します。                                               |
| **クエリの最適化**        | Chamilo には一般的なクエリ用のデータベースインデックスが含まれています。MySQL/MariaDB で定期的に `ANALYZE TABLE` を実行し、クエリプランナーの統計情報を最新に保ちます。 |
| **データベースサーバーの分離**  | 大規模なインストールでは、データベースをウェブサーバーとリソースを共有せず、専用のサーバーで実行します。                                                    |

## ウェブサーバーの設定

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

## ヒント

* **OPcache が最大の効果を発揮** -- 他の最適化を試みる前に、OPcache が有効で適切なサイズに設定されていることを確認してください。
* **本番環境で `APP_ENV=dev` を使用しない** -- デバッグツールバーとプロファイラはすべてのリクエストに大きなオーバーヘッドを追加します。
* **チューニング前にモニタリング** -- New Relic、Blackfire、または Symfony の組み込みプロファイラ（開発モード時）などのツールを使用して、推測ではなく実際のボトルネックを特定します。
* **デプロイごとにキャッシュをウォームアップ** -- 最初のユーザーがキャッシュされていない遅いリクエストに遭遇しないようにします。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.chamilo.org/2.x-ja/gaido-1/admin-guide/performance-tuning.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
