【ぺーじねーしょん】

ページネーション とは?

最終更新:
💡 情報を小分けにして、ページをめくる

大量の情報をページ単位に分け、順に取得・表示する仕組み。画面ではページ番号や前後のリンクで移動し、APIでは一度に返す件数と続きを取得する位置を指定する。

📌 このページのポイント
一覧をページに分ける 例:100件を10件ずつ → 全10ページページ 11〜10件目ページ 211〜20件目ページ 321〜30件目現在は2ページ目前へ123…10次へ
同じ100件を10件ずつ表示する例。番号や前後のリンクでページを切り替え、緑で現在のページを示している。
ひよこ ひよこ
ページネーションって、あのページ番号のこと?
ペンギン先生 ペンギン先生
番号や「前へ・次へ」で一覧を切り替える仕組みが代表例だよ。100件を10件ずつ表示するなら10ページになる。番号を全部並べる必要はなく、現在のページの近くと前後のリンクだけを見せる形もあるんだ。
ひよこ ひよこ
無限スクロールとはどう違うの?
ペンギン先生 ペンギン先生
ページネーションはページを切り替え、無限スクロールはスクロールに応じて続きを追加するよ。ページごとのURLを用意すれば共有や再訪に役立つけれど、データが更新されれば同じページの内容も変わり得るんだ。
ひよこ ひよこ
検索エンジンには何を用意すればいいの?
ペンギン先生 ペンギン先生
Google向けにはページごとに別のURLと、次のページへたどれるリンクを用意するよ。各ページのcanonicalもそのページ自身にする。Googleはrel=next/prevをもう利用していないので、それだけで対応したとはいえないんだ。
ひよこ ひよこ
APIでもページに分けるの?
ペンギン先生 ペンギン先生
大量のデータを一度に返さず、何件ずつ、どこから取得するかを指定するよ。オフセット型は先頭から何件飛ばすか、カーソル型は続きの位置を表す値を使う。カーソルは単なるページ番号とは違うんだ。
ひよこ ひよこ
オフセット型には注意点があるの?
ペンギン先生 ペンギン先生
PostgreSQLのLIMIT 10 OFFSET 50は、先頭50件を飛ばして最大10件を返すよ。十分な行があれば51〜60件目だね。順序を一意に決めるORDER BYが必要で、取得の合間に行が増減すればずれも起こり得る。大きなOFFSETは効率が悪くなる場合もあるんだ。
もっと詳しく知りたい人へ

「もっと見る」ボタンと無限スクロールは同じ?

追加表示のきっかけが違うよ。「もっと見る」はボタンを押したとき、無限スクロールはスクロールに応じて続きを読み込む。検索エンジンがボタンを押すとは限らないので、追加データのページへたどれるURLとリンクも考えるんだ。

カーソルは必ずIDで、データ更新にも完全に安定しているの?

APIの仕様によるよ。たとえばStripeの一覧APIは既存オブジェクトのIDをstarting_afterなどに渡し、作成時刻の逆順の一覧をたどる。カーソルがあるだけで一覧全体の状態が固定されるとは考えず、並び順や更新時の扱いをそのAPIの仕様で確認しよう。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ページネーション」って出てきたら「大量の情報をページ単位に分けて取得・表示する仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「Pagination」 = ページ分割
💬 ページに分けることを表す英語だよ。画面のページ切り替えだけでなく、APIで一覧を少しずつ返す仕組みにも使うんだ

参考資料

← 用語集にもどる