クロス投稿になります。開発している時、ページネーションで困ったことを記事にしました。この記事についてページネーションとは、内容の多いページを複数に分割して表示する手法のことです。検索などにも用いられており、一度に読み込むデータ量を減らし、ページを早く表示できるメリットがあります。このページネーション、非常に有用であり普遍的であるものなのですが、後から追加実装するのは大変です。最初からページネーションを意識して開発していれば、そう難しいことではありません。ページネーションは普遍的なものですし、サポートしてくれるプラグインもたくさんあります。後から使う可能性があるのに、つい先延ばしにしてしまうことってありますよね。本記事では、どのような経緯があって後からページネーションを追加しないといけなくなったのか。どのようにして後から追加したのか、詳しく記載していきます。アプリケーションを開発している時のことです。設定はいじらず、デフォルトのままで使い始めました。これが悪夢の始まりだったのです。新規機能でページネーションする必要が出てきた開発初期から作っていた機能は、画面に表示するデータの件数は少なく、ページネーション機能は不要だろうと考えられていました。開発後期になり、ページネーションする必要のある追加機能が出てきたのです。その追加機能は表示するデータ量が多く、通年でデータが溜まり続けるもので、ページネーションしないと将来的に画面表示が重くなりすぎる恐れがありました。ページネーションできるようにしよう。簡単に考えて実装を始めて、すぐに問題にぶち当たりました。後からページネーションできるようにしようとすると、その対応が及ぼす影響範囲が広すぎたのです。そもそもページネーションするためには少し掘り下げて説明します。ページネーションするためには、それに関する情報をレスポンスに含める必要があります。ページネーションに関する情報です。}}上記の例では、現在3ページ目であり、前後のページ番号が分かり、合計ページ数も分かります。これらの情報がレスポンスに含まれることによって、フロントエンドでリクエストするべき値を判断できるようになり、ページネーションすることができるのです。デフォルト設定のままだとページネーションできないそういうことであれば、上記のようにページネーションの情報をレスポンスに付与すれば良いのですが、これがうまくいかない。形式でレスポンスを整形します。1件のデータの場合は、以下のイメージ。"fuga"}n件(複数件)のデータの場合は、以下のイメージ。データ本体を最上位で扱っています。このままでは、ページネーションの情報を載せることができないのです。後から追加するページネーションは単純ではないページネーションするためには、それに関する情報をレスポンスに載せる必要がある。それを載せることができない。設定を変えれば良いのですが、これも単純ではありません。設定は、そのシステムに対する共通的な設定となっています。そのため、ひとたび設定を変えると、全てのエンドポイントに影響を及ぼすことになるのです。全てのエンドポイントに影響があるということは、利用しているフロントサイドの全機能を修正しなければならない、ということ。開発はだいぶ進んでしまっていたため、今さらそんな影響を与えることはできません。取り返しがつかない状況だったのです。変更できないか考えました。他のエンドポイントに影響を与えないようにしなければならない。新規機能で追加する特定のエンドポイントだけに適用する方法を探せば良いのです。やり方は公式ガイドにあったで、結論です。https://github.com/rails-api/active_model_serializers/blob/v0.10.6/docs/general/rendering.md#overriding-the-root-key上記の公式ガイドより転記。オプションを渡すことができました。変更することができるのです。変更することができました。これで問題解決です!でもちょっと待ってしかし、これで本当に良かったのでしょうか。実はバッドノウハウ?この対応によって「特定のエンドポイントだけページネーションすることができるようになった」と言えます。言い換えれば「特定のエンドポイントだけ、レスポンスのフォーマットが異なる状態にしてしまった」とも言え、今後はその遺産を背負っていかなければならないのです。このやり方は載っていません。そのことを考えれば、本来は推奨されていないことやっている、と分かっていただけますでしょうか。おわりにやり方を紹介する記事を書いておいてこう書くのも忍びないのですが、できるだけ本記事のやり方は真似しないでください。「特定のエンドポイントだけ」という対応はナンセンスです。本来であれば、最初からページネーションを使うことを考えて設定しておくべきでしょう。なければ、きちんとページネーションを使うようシステム全体を修正するべきです。いざという時は、この記事の内容に従えば解決することはできます。現実にはそういうこともあり、それを解決することも大事です。良いエンジニアさんはちゃんと考えて、最初からページネーションできる設計しておきましょう。なければ、未来のあなたが苦労することになるかもしません。本当にどうしようもなくなった時だけ、本記事を参考にしてください。Qrunch.netサーバー提供フィードバックを送信する。