Railsを勉強していて「Pagy」というGemを知った話
はじめに
勉強会に参加させていただき、 Pagy(ペイジー)というGemを教えてもらいました。
最初は「kaminari」は、なんとなく知っていましたが、このGemは初めてでした。
この記事では、Rails初学者がPagyを知って学んだことをまとめてみます。
Pagyってなに
Pagyは、Ruby on Rails でページネーション(ページ分け)を実現するためのGemです。
ページネーションというのは、たとえば「投稿一覧を1ページ10件ずつ表示」みたいな仕組みのこと。
他のGemと違うのは、とにかく軽くてシンプルなところだそうです。
- kaminariの10分の1くらいの軽さで動く
- 設定が少なく、導入が簡単
- Bootstrapなどのデザインにも対応
Railsの公式に含まれているわけではないけれど、とても人気が高く、世界中のRails開発者に使われているそうです。
使い方
たとえば、ProductsController の一覧ページにPagyを使いたいとき
# app/controllers/products_controller.rb
include Pagy::Backend
def index
@pagy, @products = pagy(Product.all)
end
そしてビューでページリンクを出すには以下
<!-- app/views/products/index.html.erb -->
<%= pagy_nav(@pagy) %>
これだけで、ページネーションが完成するようです。
「こんなに簡単にできるのか〜」と思いました。
バージョン43で大きく変わったらしい
調べてみると、Pagyは最近 「43.0.0」 という大きなバージョンアップをしたばかりだそうでした。
GitHubの説明には、こう書かれています
"Pagy version 43 is a complete redesign of the legacy code."
(Pagy 43は完全な再設計です)
中身がほぼ全部作り直されたようですが、「コードは変わっても使いやすさはそのまま」だそうです。
アップグレードガイドを読んでみて思ったこと
公式サイトには、ちゃんと「アップグレードガイド」が用意されていて、古い書き方から新しい書き方への変更例がずらっと載っていました。
たとえば:
| 旧 | 新 |
|---|---|
pagy_nav(@pagy) |
@pagy.series_nav |
Pagy::DEFAULT[:size] |
Pagy.options[:slots] |
include Pagy::Backend |
include Pagy::Method |
こうやって「何をどう書き換えればいいか」が一覧になっていて、初心者でも迷わずアップデートできるように作られていました。
これを見て、「ドキュメントがわかりやすいGemっていいな」と思いました。
Pagyから学んだこと
1. 軽くてシンプルでも十分
最初は「Gemっていろんな機能があるほうがすごい」と思っていました。でもPagyを見て、"必要なものだけある設計" も大事なんだと気づきました。
2. 名前のつけ方やコードの統一感
@pagy.series_nav とか @pagy.info_tag みたいに、どんな機能か名前からわかるのが気持ちいい。Railsの「わかりやすさ」を大切にしている感じがしました。
3. 開発者がユーザーのことを考えている
アップグレードガイドの中に
"You can safely skip all the rest."(あなたのアプリに関係ない部分はスキップしてOK)
という一文があって、「ちゃんと使う人の立場で書かれてるんだな」と感じました。
まとめ
Pagyを知って、ただ「ページネーションができるGem」というだけじゃなくRailsらしい設計や考え方に触れられた気がします。
- シンプルであることの強さ
- 名前や設計のわかりやすさ
- ドキュメントの丁寧さ
Gemを通して、コード以外の部分(設計や思想)からも学べることがあるとわかりました。
これからもこういうGemを読んで、Railsの世界をもっと理解していきたいです。