OSS探訪

RailsのActiveRecordに検索・絞り込み・ソートを追加し、追加検索基盤なしでフォームを構築する

スコアの見方

OSS規模スコアはStars・Watchers・Forks・Contributorsを対数圧縮して重み付けした現在の規模指標(上限なし)です。発掘スコアは現在のOSS規模スコアから発掘時点のOSS規模スコアを引いた値、更新ペースは直近30日Commit数、成長モメンタムは直近の観測期間におけるOSS規模スコア差、OSS健全度は取得できた更新状況・Community Health・Releaseの0〜100評価です。

Stars
5,858
主要言語
Ruby
ライセンス
MIT
リポジトリ最終更新
2026/10/01
ページ内ナビ

概要

Ransackは、RailsのActiveRecordへobject-basedな検索・絞り込み・ソートを追加するRuby gemです。controllerでsearch objectを作り、viewではsearch_form_forやsort_linkを使って、columnやassociationを条件にした検索UIを構築できます。Elasticsearch等の別serviceを用意せず、既存database queryとして実行できます。

特徴と向いている用途

公式資料に基づく紹介・実機未検証 · 内容確認日:

主な特徴

ActiveRecordのcolumnとassociationを検索条件にする

simple modeではattribute名とpredicateを組み合わせたquery parameterからActiveRecord relationを生成し、associationをまたいだ検索や複数attributeのOR条件にも対応します。

出典:[1][4]

search_form_forとsort_linkで検索・並び替えUIを作る

専用form helperで検索fieldを作成し、sort_linkでtable headingなどにsort URLを生成できます。Turbo対応form helperも用意されています。

出典:[4]

複雑なpredicateやcustom ransackerへ拡張する

標準predicateに加え、advanced mode、custom predicate、ransacker、i18nなどを使い、SQLで表現できる検索ロジックをRails側へ組み込めます。

出典:[1]

向いている用途

既存databaseで完結する管理画面・一覧検索に向く

大規模full-text search engineを追加するほどではない、back-office一覧、顧客検索、絞り込み付きcatalogなどをRails内で実装したい場合に適しています。

出典:[1]

導入前の確認

v5.0.2未満のcrafted search keyによるDoSを残さない

v5.0.2は非常に長いq condition keyやsort valueをquadratic timeで解析するDoSを修正したsecurity releaseです。この問題はattribute allowlistだけでは緩和されないため、該当versionを利用している場合はupgradeします。

出典:[2]

検索・sort可能なcolumnとassociationを明示的に許可する

v4.0以降はmodelのcolumnが既定で検索・sort許可されません。ransackable_attributesやransackable_associations等、または対応するStrong Parameters設計で外部入力から到達可能なfieldを限定します。

出典:[4][5]

v5.0.2はActiveRecord 7.2+とRuby 3.1+を前提にする

v5.0.2 tagのgemspecはActiveRecord/ActiveSupport 7.2以上、Ruby 3.1以上を要求し、READMEはRails 7.2、8.0、8.1をsupport対象として記載しています。

出典:[3][1]

参考にした公式資料

  1. [1]Ransack v5.0.2 README(2026-10-03)
  2. [2]Ransack v5.0.2 security release(2026-10-03)
  3. [3]Ransack v5.0.2 gemspec(2026-10-03)
  4. [4]Ransack simple mode documentation(2026-10-03)
  5. [5]Ransack authorization documentation(2026-10-03)
  6. [6]Ransack MIT license(2026-10-03)
編集部からの補足

Elasticsearch等を別途運用するほどではない検索画面を、RailsのmodelとSQLの範囲で組み立てたい場合に有効です。ただし検索可能な属性・associationを明示的に制限し、v5.0.2より前のcrafted query keyによるDoS問題を残さないことが重要です。

3ステップで試す

  1. 1

    security fix済みRansackを追加

    v5.0.2はcrafted search keyによるDoSを修正したsecurity releaseです。Rails 7.2+とRuby 3.1+を確認します。

    Add gem 'ransack', '5.0.2' to Gemfile, then run bundle install
  2. 2

    検索可能なattributeをmodelで許可

    v4以降はcolumnが既定で検索許可されません。必要なfieldだけを明示的にallowlistします。

    Define self.ransackable_attributes in the target ActiveRecord model
  3. 3

    controllerとviewへ検索を追加

    controllerでsearch objectを作り、viewではsearch_form_for @qを使って検索fieldを配置します。

    @q = Person.ransack(params[:q]); @people = @q.result(distinct: true)
公式READMEで確認

成長

成長の推移 · 直近30日

5,858 Stars

推移データを蓄積中です。

開発アクティビティ

直近90日・週次

Commit(直近30日)
55
Open PR
1

開発アクティビティを蓄積中です。

Built with

カテゴリとタグ

GitHubデータ

GitHubのデータGitHubの詳細データを見る

GitHub Topics

  • search
  • search-interface
  • ruby
  • ruby-gem
  • ruby-library
  • ruby-on-rails
  • activerecord
  • sql
  • rails
Stars
5,858
Forks
817
Watchers
78
Open Issues
1
Contributors
217
所有者種別
Organization
主要言語
Ruby
ライセンス
MIT
リポジトリ最終更新
2026/10/01

このOSSの使い方や活用事例をMarkdownで投稿できます。管理者が承認した後に公開されます。

情報の誤りを報告

掲載内容に誤りや古い情報があればお知らせください。

このページを読んで、次に何をすればよいか分かりましたか?