【入門編】カスタム投稿タイプとタクソノミーのキャッシュ:Redisを活用した高速な階層構造の取得 – WordPress 内部コア・データベース構造とパフォーマンス最適化解析バイブル

やあ。WordPressの深淵へようこそ。

多くの開発者がWordPressを「ただのブログツール」だと思っている間に、我々エンジニアは、その下で脈動するデータベースの鼓動と、クエリが走る瞬間のミリ秒単位の攻防に心血を注いでいる。

今日は、多くのエンジニアが躓く「タクソノミーの再帰的クエリ」という鬼門を、Redisを用いていかにして「一瞬」で終わらせるか。その極意を伝授しよう。

—

なぜ、タクソノミーの取得は「重い」のか?

WordPressのタクソノミー(カテゴリやカスタム分類)は、デフォルトでは `wp_term_taxonomy` テーブルに階層構造として保存されている。

もし、あなたが「親カテゴリから子、孫までを再帰的に取得してメニューを作りたい」と考えたとき、WordPressは毎回データベースに対して以下のような処理を行っているんだ。

1. SQLを発行して全タームを取得。
2. PHP側でループを回し、親子関係を照合してツリー構造を再構築する。

これが1000件のタームがあったらどうなる?
ページを表示するたびに、PHPのメモリを消費し、CPUを回し続けることになる。ユーザーは白い画面を見つめ、Googleのランキング評価は下がる。これが「技術的負債」の正体だ。

—

Redisによる「フラット化」という発想

ここでの解決策はシンプルだ。「再帰的な計算を、一度だけ行って結果をRedisに保存する(キャッシュする)」。

Redis(オブジェクトキャッシュ)を使うことで、DBへのSQL発行をゼロにし、メモリから直接データを引き抜く。これが、WordPressを「爆速」にするための鉄則だよ。

実装:Redisを活用したタクソノミー取得の極意

以下のコードは、タクソノミーの階層構造をJSONとしてRedisに保存し、次回からそれを再利用する仕組みだ。

/

  • 高速化されたタクソノミー取得関数

/
function get_cached_taxonomy_tree($taxonomy = ‘category’) {
$cache_key = ‘my_taxonomy_tree_’ . $taxonomy;

// 1. まずRedis(オブジェクトキャッシュ)から探す
$tree = wp_cache_get($cache_key, ‘my_group’);

if (false === $tree) {
// 2. キャッシュがない場合のみ、重い処理を行う
$terms = get_terms([‘taxonomy’ => $taxonomy, ‘hide_empty’ => false]);
$tree = build_tree($terms); // 再帰的なツリー構築関数

// 3. 次回のためにRedisに保存(有効期限は24時間)
wp_cache_set($cache_key, $tree, ‘my_group’, DAY_IN_SECONDS);
}

return $tree;
}

// タームが更新されたらキャッシュを削除する(ここが重要!)
add_action(‘edited_term_taxonomy’, function() {
wp_cache_delete(‘my_taxonomy_tree_category’, ‘my_group’);
});

—

初学者が陥りやすい「3つの罠」

このコードを書くとき、多くの人が以下の場所でつまづく。君には同じ轍を踏んでほしくない。

1. キャッシュの「削除」を忘れる

「キャッシュをセットしたけど、タームを編集しても反映されない!」と悩むのはあるあるだ。WordPressには `edited_term_taxonomy` のようなフックがある。データが変わった瞬間にキャッシュを `wp_cache_delete` すること。これがデータ整合性の基本だ。

2. オブジェクトキャッシュの「グループ化」の欠如

`wp_cache_set($key, $data, $group)` の第3引数 `$group` を軽視してはいけない。グループを分けることで、特定のキャッシュだけをまとめて削除したり、デバッグ時に管理しやすくなるんだ。

3. シリアライズ可能なデータか確認する

Redisに保存するデータは、最終的に文字列としてシリアライズされる。もし `$tree` の中に `WP_Term` オブジェクトをそのまま突っ込むと、メモリの肥大化や予期せぬ挙動を招くことがある。JSONや配列として「純粋なデータ」にしてから保存するのが、プロの流儀だ。

—

まとめ:WordPressを支配するということ

「WordPressは遅い」と嘆くのは、エンジンを回す方法を知らないからに過ぎない。

  • DBへの問い合わせを最小化する
  • 計算結果は一度だけ行い、キャッシュに焼き付ける
  • 更新フックを駆使して、鮮度を保つ

これらを意識するだけで、君の作るサイトは、世界中のどんな環境でも軽やかに動作するようになる。

WordPressは、奥が深い。だが、内部構造を掌握してしまえば、君はもう単なる「利用者」ではなく、システムの「設計者」だ。

今日のコードを、君のプロジェクトのfunctions.phpに組み込んでみてくれ。レスポンスタイムが劇的に改善されるその瞬間、きっとWordPressの本質が見えてくるはずだよ。

また分からないことがあれば、いつでも聞きに来るといい。頑張れよ!

タイトルとURLをコピーしました