Litmus — 話題のニュースを、深く読み解く。 RSS
ソフトウェア

WordPress 7.2、プラグインなしで記事をランダム表示できるように

WordPress 7.2(12月8日公開予定)に、/random/ というURLだけで公開済み記事へランダムに飛ばす機能が標準搭載される。開発中に一度「遅い実装」のまま出荷されかけた経緯をTracの記録から確認した。

白いテーブルの上に置かれた白黒のサイコロと、周りに置かれたガラス容器

イメージ写真 記事の内容を撮影したものではありません。Photo by Phuc Tran on Pexels

この記事には Amazon アソシエイトのリンクを含みます。

気に入ってもらえた記事の最後に「こんな記事もあります」とランダムに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)で件数を増やして検証すると、様子が変わった。

0100200300400500600ミリ秒全列を並べ替えてから選ぶ: 663.4IDだけ並べ替えてから選ぶ: 17.8663.417.8全列を並べ替えてから選ぶIDだけ並べ替えてから選ぶ

投稿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になったら、管理画面を一度開いてから試すとよい。

この記事の先を読む本を探す

特定の本を勧めるものではありません。検索結果から、いまの版と目次を確かめて選んでください。

コメント

気づきや感想をどうぞ

記事への補足や、読んで考えたことをお寄せください。個人情報や、他の人を傷つける内容の投稿はお控えください。

コメントを読み込んでいます…

    ほかの記事

    最新の記事 →