Skip to content

Instantly share code, notes, and snippets.

@joker1007
Last active April 14, 2021 06:41
Show Gist options
  • Star 71 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save joker1007/e6f4b2572465b0c74d7e to your computer and use it in GitHub Desktop.
Save joker1007/e6f4b2572465b0c74d7e to your computer and use it in GitHub Desktop.
Ginza.rb 21回の発表資料。rails_adminのつらみとオススメgem達。

rails_adminのつらみとオススメGemについて

rails_adminのつらみ

カスタマイズできるようで出来ない

レコード件数が一定以上になると使えない機能

  • ダッシュボード
    • 何も考えずに各モデルをカウントするのでレコード件数増えるとえらいことになる。
  • 関連を付け替えするフォーム

出したり出さなかったりを一々切り替えるのがめんどい

検索機能がほぼ役に立たない

じゃあどうするか

  • プロジェクト用のscaffoldを作る方が良いのでは?
    • 一つのモデルに対するを管理画面を作って大まかなレイアウトを決める
    • それをテンプレート化してlayoutとscaffoldのテンプレートを上書きする
    • コントローラーの構成もテンプレートで上書きできる
    • それ以上の場合はlib以下にgeneratorを書く
    • RailsのScaffoldテンプレートを上書きするススメ - Qiita

rails_adminが使えるケース

  • モデルがクソ多いがレコード件数は大したことない
  • 単純なCRUDしかしない
  • 権限の分離は無い
  • DB制約やバリデーションが明確であり条件分岐がほとんど無い
  • 主要なモデルの関連が多段にならない
  • つまりほぼ使えないのではw

おすすめgem

  • ctran/annotate_models
    • プロジェクトに途中参加して入ってなければ最初に入れる
    • modelのコードを見るだけでカラムとインデックスがほぼ把握できるようになる
  • voormedia/rails-erd
    • ほぼ上に同じ
    • アプリケーション全体のイメージを把握する
  • mattheworiordan/capybara-screenshot
    • featureスペックが落ちたら落ちた時点でのスクリーンショットを勝手に取って保存してくれる
    • 別gemだがこういうのもある idobata/capybara_screenshot_idobata
  • kainosnoema/rack-lineprof
    • サクっとrblineprofをかける時に便利
    • どの行が何回呼ばれててどれくらい時間かかってるかすぐに分かる
  • railsware/rack_session_access
    • featureスペック中にcapybaraからsessionを弄れる
    • 外部サービスに依存してセッションに情報を保持するようなテストケースに
  • steveklabnik/request_store
    • 1リクエスト間でだけ使えるグローバルなデータストア
    • 複雑なオブジェクトをまとめて利用するリクエストに
    • 無駄なDBクエリを避けるためのデータ保持の場所として
  • httprb/http.rb
    • インターフェースがモダンなHTTPクライアントライブラリ
    • すげーシンプル
    • 簡単なAPIクライアントとか
  • thoughtbot/griddler
    • メールを受け取って行う処理を簡単に実装できる
    • 各種クラウドメール基盤のアダプター有
      • sendgrid
      • mandrill
      • mailgun
      • postmark
  • jalkoby/squasher
    • 特定のポイントまでのmigrationを一つにまとめる
    • schema.rbベース

被りそうなメジャー所

ちゃんと使ったことないけど便利そうに見える

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment