はじめに
本書の目的
この文書は「cdn to php」に関する基礎的な案内です。CDNとは何か、PHPとどう連携するのかを分かりやすく示し、PHPでCDN用URLを生成する具体的な方法や、よくある設定手順の流れを説明します。最後に、実際の環境に合わせた調整例にも触れます。
読者像
主に次のような方を想定しています。
– PHPでウェブサイトやAPIを運用している方
– 静的ファイル(画像・CSS・JS)の配信を高速化したい方
– CDN導入を検討しているが具体的な実装方法が分からない方
専門的な理論は最小限にして、実務で使える知識を優先します。基本的なPHPの文法やウェブの仕組み(URLやHTTP)に慣れていると読みやすいです。
本書の構成と読み方
全5章で構成します。第2章でCDNとPHPの関係を整理し、第3章でURL生成の基本パターンを示します。第4章は典型的な設定手順をフレームワーク共通の視点で説明します。第5章では、もし具体的な環境がある場合にどうカスタマイズするかの指針を示します。
各章は独立して読めますが、順に追うと理解が深まります。コード例は実務で使えるよう簡潔に示します。
CDNとPHPの基本的な関係
CDNとは
CDN(コンテンツ・デリバリ・ネットワーク)は、画像やCSS、JavaScriptなどの静的ファイルを利用者に近いサーバーから配信する仕組みです。これにより読み込み速度が改善し、オリジンサーバーの負荷を下げます。
PHPとの基本的な関係
PHP自体はサーバーサイド言語であり、CDNになるわけではありません。PHPアプリでは、静的ファイルのURLをCDNのドメインに切り替えることで利用します。具体的には「/assets/logo.png」を「https://cdn.example.com/assets/logo.png」に変える形です。
実務での扱い方(具体例)
- 設定:環境変数や設定ファイルにCDNのベースURLを持たせます。
- 出力:ビューやテンプレートでベースURLを付与して出力します。例:
$cdn = 'https://cdn.example.com'; echo $cdn . '/images/logo.png'; - ビルド:アセットバンドラーやパイプラインでURLを書き換える方法も便利です。
注意点と運用上のポイント
- キャッシュ制御:有効期限やバージョニングで古いファイル対策を行ってください。
- HTTPSとCORS:CDN側で証明書やヘッダを適切に設定します。
- クッキー:静的配信はクッキーを送らないドメインを使うと効率的です。
これらを踏まえ、まずは設定でCDNのベースURLを切り替えることから始めると分かりやすいです。
PHPでCDN用URLを生成する基本パターン
CDNに切り替える基本は「生成するアセットURLのドメインだけ変える」ことです。短く分かりやすい関数を用意すると、アプリ内のどこでも統一して使えます。
function cdn_url(string $path): string {
$cdnBase = 'https://cdn.example.com';
// 絶対URLはそのまま返す
if (preg_match('#^https?://#i', $path)) {
return $path;
}
// 先頭のスラッシュ処理と余分なスラッシュ除去
$path = '/' . ltrim($path, '/');
return rtrim($cdnBase, '/') . $path;
}
// 使用例
echo '<img src="' . cdn_url('images/logo.png') . '" alt="logo">';
この関数のポイントは次の通りです。
– 絶対URLを受け取ったら変換しないため、外部リソースを壊しません。
– cdnBaseは設定ファイルに置くと環境ごとに切替しやすくなります。
– クエリ文字列やバージョン(例: images/logo.png?v=2)はそのまま通ります。
複数ドメインで負荷分散したい場合は、ランダムやハッシュでcdnBaseを切り替える実装にすると効果的です。フレームワークでは、この関数をアセット生成のフックやヘルパーに登録するだけで同じ仕組みが使えます。
典型的な設定手順(フレームワーク共通イメージ)
1. CDN側でオリジンを登録
CDN管理画面でオリジンサーバー(PHPアプリの公開ディレクトリ)を登録します。オリジンはIPやFQDNで指定します。SSLを使う場合はオリジンのHTTPSを有効にします。キャッシュの挙動やTTLを初期設定します。
2. カスタムドメインの設定
例: cdn.example.com をCDNに割り当て、CNAMEでCDNのホストへ向けます。カスタム証明書をアップロードするかCDNの自動証明書機能を使います。フォントなどではCORS設定を確認してください。
3. PHPアプリ側の準備
- 設定: 環境変数や設定ファイルにCDNのベースURLを追加(例: CDN_URL=https://cdn.example.com)。
- ヘルパ: テンプレートで asset_url(‘/css/app.css’) のような関数を作り、ベースURLとバージョンを付与します(クエリやファイル名にハッシュ)。
- 開発モード: 環境ごとにCDNを無効化してローカル資産を使えるようにします。
4. サーバー側キャッシュ制御
.htaccessやフレームワークのレスポンス設定で Cache-Control, Expires, ETag を適切に設定します。静的資産は長めのTTL(例: 1年)にして、バージョニングで更新を反映します。
5. 運用上の注意
- キャッシュ削除(パージ)やInvalidate APIを用意します。
- 404やオリジンフェイル時のフォールバックを確認します。
- パフォーマンスと費用のバランスを監視します。
もし具体的な環境があるなら
生のPHP(フレームワークなし)
設定はシンプルにファイルや環境変数で持ちます。例:config.phpや.envにCDNのベースURLを置き、ヘルパーを使います。
// config.php
return ['cdn_base'=>'https://cdn.example.com'];
// helper.php
function asset_url($path){ $cfg = include __DIR__.'/config.php'; return rtrim($cfg['cdn_base'],'/').'/'.ltrim($path,'/'); }
テンプレートではのように呼びます。
Laravel
.envにASSET_URLを入れ、Laravelのassetヘルパーが自動で使えます。変更後は設定キャッシュを更新します。
ASSET_URL=https://cdn.example.com
Bladeでは{{ asset(‘css/app.css’) }}をそのまま使います。mixを使う場合はmix()のままです。
WordPress
簡単な方法はwp-config.phpでURLを上書きするか、functions.phpでフィルターを追加します。
// wp-config.php
define('WP_CONTENT_URL','https://cdn.example.com/wp-content');
プラグインで配信を管理する方法もあります。
Symfony
config/packages/framework.yamlでassets.base_urlsを設定するとTwigのasset()がCDNを返します。
framework:
assets:
base_urls: 'https://cdn.example.com'
Twigでは{{ asset(‘images/logo.png’) }}と書きます。












