Help us understand the problem. What is going on with this article?

[Rails5]kaminariってなんぞ?

More than 1 year has passed since last update.

はじめに

Railsの勉強としてgem周りを触ってみる企画です。
今回は・・・

kaminari

を試してみようかと思います。

どういうgemなの?

簡単にいうとページネーション機能を簡単に追加できるgemとのこと。
有名どころなのでしっかり使い方を覚えていきます。

検証環境

以下の環境で実施しました。

[client]
・MacOS Mojave(10.14.2)
・Vagrant 2.2.2
・VBoxManage 6.0.0

[virtual]
・CentOS 7.6
・Rails 5.2.2
・ruby 2.3.1

ご参考までに。

kaminari導入

1.gemのインストール

事前にRails勉強用に作成したプロジェクトで進めます。
各MVCは適当に掲示板アプリを想定してPostsコントローラーなどを生成済みです。
(index,show,editの空ページが見れる程度)

$ rails g model post
$ rails g controller posts index show edit

その前提のもと、Gemfileに以下を追記。

Gemfile
# kaminari
gem 'kaminari'

追記したらインストール。

$ bundle install

-----------
Fetching kaminari-core 1.1.1
Installing kaminari-core 1.1.1
Fetching kaminari-actionview 1.1.1
Installing kaminari-actionview 1.1.1
Fetching kaminari-activerecord 1.1.1
Installing kaminari-activerecord 1.1.1
Fetching kaminari 1.1.1
Installing kaminari 1.1.1
-----------
→無事に完了。

2.kaminariを使ってみる

これでkaminariが使えるようになったようなので、
早速コントローラーやビューを調整してみます。
(※DBには事前にダミーデータを適当に複数件突っ込んでます。)

posts_controller.rb
def index
  # とりあえず基本形で表示してみる
  @posts = Post.page(params[:page])
end
index.html.erb
<h1>Posts#index</h1>
<p>Find me in app/views/posts/index.html.erb</p>

<table>
  <thead>
    <tr>
      <th>name</th>
      <th>content</th>
    </tr>
  </thead>
  <tbody>
    <% @posts.each do |post| %>
    <tr>
      <td><%= post.name -%></td>
      <td><%= post.content -%></td>
    </tr>
    <% end %>
  </tbody>
</table>

<%= paginate @posts -%>

3.動作確認

ではサーバーを立ち上げてページを見てみましょう。

cap1.png

表示されました!めっちゃお手軽。
ダミーデータは30件突っ込んでおいたのですが、
上記処理だとデフォルトは1ページあたり25件になるようです。

4.もう少し掘り下げてみる

これで所感に入るのも味気ないのでもう少し触ってみます。

早速1ページあたりの表示件数を10件に変更してみます。

posts_controller.rb
def index
  # 1ページの表示を10件に絞る
  @posts = Post.page(params[:page])
end

あるいは

post.rb
class Post < ApplicationRecord
  # この方法でも1ページあたりの表示件数の調整が可能
  paginates_per 10
end

そうすると、このように表示件数が制限出来ました。

cap2.png

また、そもそもとしてkaminari自体の設定を調整して、
表示件数のデフォルト値を変更することも可能。

$ rails g kaminari:config
    create  config/initializers/kaminari_config.rb

上記コマンドにて設定ファイルが生成されました。

kaminari_config.rb
# frozen_string_literal: true
Kaminari.configure do |config|
  # config.default_per_page = 25
  # config.max_per_page = nil
  # config.window = 4
  # config.outer_window = 0
  # config.left = 0
  # config.right = 0
  # config.page_method_name = :page
  # config.param_name = :page
  # config.params_on_first_page = false
end

ケースバイケースで使い分けすると良さそうですね。

また今回は手を出しませんが、

$ rails g kaminari:views default

のコマンドにて、kaminariのテンプレートが生成され、
見た目を調整するのに使えるようです。
さらに

$ rails g kaminari:views bootstrap

とした場合は、Bootstrapで適用が可能。
さらにさらに、i18nにも別途対応することも可能とのこと。
奥が深い。

所感

手軽にページングが追加出来るのは良いですね。
一覧画面を表示するシステムを作る機会もなかなか多いので、
是非活用していきましょう。

おわりに

何かお気づきの点がありましたら、
ご指摘やアドバイス等頂けると大変助かります!

betti
元プログラマーの現ディレクターです。 日々学んだことの備忘録などを書き綴っていきます。 ご指摘やアドバイス等頂けると大変助かります。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away