【125naroom】人気ランキングを「週間・月間・全期間」で見られるようにしました



125naroomの人気の記事ランキングを作り直しました。これまでは「今までの合計アクセス数」で並べていたので、昔から読まれている記事がずっと上位に居座っていました。今回から、週間・月間・全期間の3つで切り替えて見られます。
何が変わったか
- ランキングページに「週間」「月間」「全期間」のタブが付きました。最初に開くのは「月間」です。
- 表示件数は上位30件です。
- 記事ページの下と右カラムにある「人気記事」も月間の人気になりました。今月よく読まれている記事が並びます。
タブは普通のリンクなので、JavaScriptがなくても切り替わります。
しばらくは「累計」で埋まります
週間・月間のデータは、この仕組みを入れた日(2026年9月24日)から溜まり始めました。なので、週間は7日後、月間は30日後に本来の姿になります。それまでは、足りない分を累計のランキングで埋めて、30件が常に並ぶようにしています。
しくみ(ちょっとだけ技術の話)
姉妹サイトの「デザインのこと」で先に作った方式を、125naroom用に移しました。3つの層に分けています。
1. 記録 記事を開くたびに、記事ごとのカスタムフィールドに「その日の閲覧数」を足します。直近31日分だけ持って、古い日は書き込みのたびに捨てます。ログイン中の人とボットは数えません。
// array( '20260924' => 12, '20260925' => 8, ... ) の形で持つ
$daily[ $today ] = isset( $daily[ $today ] ) ? (int) $daily[ $today ] + 1 : 1;
update_post_meta( $post_id, 'd125_views_daily', $daily );
2. 集計 毎日午前4時に、週間(7日)・月間(30日)・全期間の上位30件の記事IDを作って、まとめて1か所に保存します。
3. 表示 ページを開いたときは、保存してあるIDを読むだけです。並べ替えの計算は表示のたびにはやりません。
new WP_Query( array(
'post__in' => $ids, // 保存済みの記事ID
'orderby' => 'post__in', // その順番のまま
'post_type' => 'web',
) );
保存済みのIDがまだ無いときは、これまでと同じ累計のクエリに自動で戻るので、万一集計が止まってもランキングが空になることはありません。
速くなった?
正直に言うと、125naroomでは速さの差はほとんどありません。計ってみたら、旧方式も新方式も1ミリ秒以下でした。記事が約190本と少ないので、並べ替えの負担が小さかったのです。記事が約2,000件ある「デザインのこと」では、ランキングの表示が速くなりました。今回の一番の狙いは速さではなく、「今読まれている記事」が見えるようになることです。
さいごに
これから、125naroomの最適化や改良、作ったサイトのことも、この「125naroom」のタグで書いていきます。まずは週間ランキングに、どんな記事が上がってくるか楽しみです。





