気に入ってもらえた記事の最後に「こんな記事もあります」とランダムに1本を薦めたい。これまでは専用プラグインを入れるしかなかった。WordPress 7.2からは /random/ というURLにアクセスするだけで、プラグインなしにこれができるようになる。
7.2は2026年12月8日に公開予定で、現在はベータ版の検証段階にある。WordPressの開発記録(Trac)を読むと、この機能は出る直前まで「遅い実装」のまま出荷されかけ、ベンチマークで実測して直されたという経緯があった。何ができるようになり、なぜ危うく遅くなりかけたのか。
どうやってランダム表示するのか
サイトの /random/ というURLを開くと、公開済みの記事の中から1件がランダムに選ばれ、その記事のURLへリダイレクトされる。WordPressは、パーマリンク設定で決めたURLの形を「リライトルール」という一覧としてデータベースに保存している。/random/ も、この一覧に新しく加わる1行になる。ベースパス(既定は「random」)は、パーマリンク設定の画面で好きな文字列に変えられる(Trac #64498 コメント#37)。
対象は記事全体だけではない。カテゴリや著者、カスタム投稿タイプのアーカイブ単位でも使え、次のようなURLが用意される。
/random/— サイト全体からランダムに1件/random/category/{カテゴリ名}/— 例:/random/category/release//random/author/{ユーザー名}/— 例:/random/author/jorbin//random/{カスタム投稿タイプのアーカイブ}/
選ばれる対象は randomable という新しい投稿タイプの引数で決まる。既定では通常の「投稿」だけが対象で、固定ページや添付ファイルは対象外になる。カスタム投稿タイプを対象に加えたい場合は、テーマやプラグイン側で randomable を指定すればよい。
なぜ一度作り直されたのか
この機能は、最初から今の形だったわけではない。2026年9月に一度コミットされた最初の実装は、テーマやプラグインが明示的に有効化しない限り動かない「既定で無効」な作りだった。
これに対しコア開発者から指摘が入った。大半の利用者が有効化しないまま埋もれる機能は、WordPressがコアに入れる基準として掲げる「80%ルール」に合わない、というものだ。2日後にこの実装はリバートされた。1か月後に設定なしで最初から動く形へ作り直されたものが、今のマイルストーン7.2として残っている(Trac #64498 コメント#9、#13、#37)。
プラグインなしで、設定もいらない。ここまでは単純な話に見える。だが「公開済みの記事からランダムに1件選ぶ」という処理そのものに、見過ごせない落とし穴があった。
処理は重くならないのか
ランダムに1件選ぶとき、データベースには ORDER BY RAND() という並べ替え方法を使うのが定番になる。全部の候補行にランダムな値を振ってから並べ替え、先頭の1件を取る方法だ。
この並べ替えの対象を「記事の中身を含む全部の列」にするか、「記事を識別するID1列だけ」にするかで、処理時間はどれだけ変わるのか。コミュニティのテスターがMySQL 8.0.46で実測している。投稿1,000件では4ミリ秒(全列)対1ミリ秒(IDのみ)で、大差はなかった(Trac #64498 コメント#58)。
ところが、別のテスターが異なる環境(MySQL 8.4.5、WordPress 7.2-beta2)で件数を増やして検証すると、様子が変わった。
投稿1万件のとき、全列を並べ替える方式は663.4ミリ秒、IDだけを並べ替える方式は17.8ミリ秒。差は約37倍にふくらんだ(Trac #64498 コメント#59)。1,000件での「大差ない」結果を先に見ていた分、この跳ね上がり方には自分も意表を突かれた。1,000件と1万件で、なぜここまで差の出方が変わるのか。
なぜそれほど差が出るのか
答えは、並べ替えの作業をどこでやっているかにある。ORDER BY RAND() でデータベースが行を並べ替えるとき、対象の行はいったん「一時テーブル」という作業用の置き場にコピーされてから並べ替えられる。
たとえるなら、本棚から1冊を適当に選ぶのに、本棚ごと丸ごと作業台に運んで並べ替えるか、背表紙の番号札だけを集めて番号札を並べ替えるかの違いに近い。本の中身(記事の本文)まで含めて運べば、運ぶ量も並べ替える量もそのぶん増える。番号札(投稿のID)だけなら、運ぶ量はずっと軽い。
選ぶのは最終的に1件でも、並べ替えの土俵に本文まで乗せるか、ID1列だけを乗せるかで、一時テーブルに積む量がまるで違ってくる。件数が少ないうちは差が見えにくく、ある件数を境に遅れとして表に出てくる。
最終的にWordPressが採用したのは、IDだけを並べ替えて1件を選び、そのIDをもとに記事を取得する方式だった。全列を並べ替えていた旧方式の関数は、正式版に出る前の段階で削除されている(Trac #64498 コメント#65)。出荷される7.2には、最初から軽いほうの実装が入る。
使い始める前に確認すること
7.2の正式リリースは2026年12月8日の予定で、2026年11月10日にベータ5が公開される見込みだ(WordPress 7.2 公式リリーススケジュール)。アップデートを待てば、特別な設定なしに /random/ が使えるようになる。
1つだけ、既存サイトをその場でアップグレードする場合の注意点がある。7.1.4などの旧バージョンから wp core update-db でデータベースだけを更新しても、/random/ 用のリライトルールはまだ反映されないことがある。この状態で /random/ にアクセスすると404になる場合があるとTracで報告されている。
この状態は、管理画面(/wp-admin/)に一度でもアクセスすると解消する。アップデート直後にリライトルールが自動で更新される仕組みに乗って直るためだ。2026年11月8日の時点では、この挙動そのものを直すかどうかはまだ決着していない(Trac #64498 コメント#67、#73)。アップデート後に /random/ を試して404が出たら、まず管理画面を一度開いてから試すとよい。
固定ページを含めたくない、対象をもっと絞りたいという場合もある。パーマリンク設定の画面でベースパス自体を変更できるほか、テーマやプラグイン側で randomable 引数を使って対象の投稿タイプを調整できる。
まとめ
WordPress 7.2(2026年12月8日公開予定)から、/random/ にアクセスするだけで公開済みの記事がランダムに1件選ばれる機能が標準搭載される。そのままその記事のURLへリダイレクトされる。カテゴリや著者、カスタム投稿タイプのアーカイブ単位でも使え、ベースパスはパーマリンク設定の画面で変更できる。
この機能は、開発の過程で一度「全列を並べ替えてから選ぶ」という遅い実装のまま出荷されかけた。コミュニティのベンチマークで、投稿1万件のとき37倍の処理時間差があると実測され、IDだけを並べ替える軽い方式に直されたうえで7.2に収まっている。アップグレード直後に /random/ が404になったら、管理画面を一度開いてから試すとよい。
コメント
気づきや感想をどうぞ記事への補足や、読んで考えたことをお寄せください。個人情報や、他の人を傷つける内容の投稿はお控えください。
投稿にはGoogleログインが必要です。
Googleでログイン投稿にはGoogleアカウントの表示名が公開されます。メールアドレスは取得・公開しません。
コメントを読み込んでいます…