rails管理画面系gem比較してみた

  • 162
    Like
  • 5
    Comment

みなさん。railsで管理画面を作成するときはどうしているでしょうか?
正直な所、ログインや管理者のユーザー管理など、案件をまたいで共通の機能が多いので、便利なgemの力を借りる事が出来るなら、その方が楽ですよね

railsには、管理画面系3大gemとして、次のものが挙げられます

  1. rails_admin
  2. active_admin
  3. typus

これに含めて、最近注目なAdministrateがあって、最後にgemを使わないで自分で一から開発するという選択肢もあるのですが

…だけれども、実際どれを選べばいいのか迷いますよね
なので、どれから試していけばいいのか絞り込むその '入り口' として、それぞれの利点と欠点を紹介させていただきます

先に結論から出させていただくと、こんな感じが分かりやすいです

graph.png

  1. rails_adminは最初から何でもやってくれるけどカスタマイズが辛い(一応できる)。開発者以外に使われようとすると苦労が伴う。
  2. typusはカスタマイズは何でもできるけど、3つのgemの中で一番小難しい
  3. active_adminはその中間、関係者が増えて、複雑な権限管理や細かいviewのカスタマイズが出てくると辛い

簡単に言うとこれだけなのですが、この意味がわかりやすい様に
実際のカスタマイズのポイントの解説も含めてさせていただきます

参考までにGithub上の⭐︎の数(2014年12月17日時点)も出させてもらいます

rails_admin

https://github.com/sferik/rails_admin

星の数:5029

特徴

rails_adminのデモサイトを見ればその魅力は一撃ですが
何より最初の見た目に関しては、rails_adminが一番強力です

http://rails-admin-tb.herokuapp.com/

初期設定の段階で、すべてのモデルを自動認識して、画像のアップロードやhas_manyなどの関連を見ての自動解析もやってくれます。

何もしなくても、基本的なインストール作業だけで綺麗な管理画面が出てくるのであまり解説するところがないのですが

細かいカスタマイズの方法に関しては下の記事がおすすめです

rails_adminをカスタマイズする方法まとめ

欠点

ただ、その逆として初期導入段階ではrails_adminは一番強力なのですが、細かいカスタマイズに一番弱いのがこのツールの欠点です。

「カスタマイズ出来るようで出来ない」という一言がこのツールを表す最も特徴的な言葉でしょう。

なので、開発者がちょっとデータを突っ込むツールとしてはいいが、運用を行うためのツールとしては十分な教育が必要な画面しか基本作れないことを覚悟してカスタマイズするのが基本方針かなというの個人的感想です。

実運用時には必ず細かいカスタマイズ要求が出てきますが、こういう細かいviewの修正をしたいときは、rails_adminには地獄という言葉がついて回ります。

出来ないわけでは無いが細かいカスタマイズはお勧めしないという感じです。

理由は、カスタマイズのための設定ファイルに大きなところがあります。
設定ファイルが
config/initilizers/rails_admin.rb
つまり「config/initilizers/」以下にあるため、何か書き換えるたびにrailsの再起動が必要になります。一行修正してみては、rails再起動の連続は、正直かなり苦痛でした
あと、コントローラー周りのカスタマイズなどが一つのファイルに集まるため、すぐに複雑なコードが出来上がります。

具体的な所をいくつか出すと、最初は綺麗に表示されて感動を誘うダッシュボードの登録件数のバーですが
件数が増えてくると、だんだんと表示を遅くする原因になります。

あと、これは実際に運用していて詰んだので文句しかないですが、has_manyは関連元、親から子供のデータを入力しやすい、使いやすいUIを提供してくれているのですが、has_oneでのデータの追加の面倒をみてくれない(まだ開発中!?)なのでこの編集は辛かったです。

他だと、belongs_toが設定されている場合、そこのカラムはセレクトボックスになるのですが、選択項目を上位30件までしか表示してくれないので、
運用が積み重なってデータが増えてくると、新規に子要素を追加するときに親要素を選択出来ない現象が発生しました。
この点に関してはこの管理画面からだけでは回避策が無いのでなんとかして欲しいところです。

active_admin

http://activeadmin.info/

星の数:5519

特徴

rails_adminとtypusの中間のカスタマイズ性と手軽さを持っているというと、一言で説明の付くgemです

コマンドを打ってやるだけでモデルの編集画面が勝手に生成されます

rails generate active_admin:resource User

これで、app/resource/ 以下に管理画面向けの設定を1ページ1ファイルの設定で作成しますので、必要に応じてそのファイルにカスタマイズを行なっていきます

以下のような書式のDSLで記述しないといけない学習コストがありますが
正直、普通要求される大体のカスタマイズがこのDSLの内部の書式で実現可能です
細やかなカスタマイズを求めなければ、生産性とカスタマイズ性のバランスの取れた非常に使い心地の良いgemです

# app/admin/posts.rb
ActiveAdmin.register Product do

  # Create sections on the index screen
  scope :all, :default => true
  scope :available
  scope :drafts

  # Filterable attributes on the index screen
  filter :title
  filter :author, :as => :select, :collection => lambda{ Product.authors }
  filter :price
  filter :created_at

  # Customize columns displayed on the index screen in the table
  index do
    column :title
    column "Price", :sortable => :price do |product|
      number_to_currency product.price
    end
    default_actions
  end

end

欠点:

個人的に、非常にバランスが良いので、最初に触る管理画面拡張としてはこれを一番お勧めしたいですが
管理画面の仕様として、権限管理やデザインなどに細かい変更を求められる様になると限界が出てくるようになります

typus

https://github.com/typus/typus

星の数:967

特徴

コマンドで1テーブルが1ファイルの形式で、YAMLファイルを生成するので
初歩的な修正に関してはだいたいこれで対処可能です

下のものはデフォルトで吐き出されたYAMLファイルの一例です


User:
  fields:
    default: email, status, last_sign_in_at
  relationships:
  application: Application

必要に応じて、YAMLファイルに追記を行なっていくことで、カスタマイズを行います

User:
  fields:
    default: email, status, last_sign_in_at
    # 一覧画面で表示するカラム
    list: id, email, status, last_sign_in_at
    # editアクションで編集できるカラムを指定
    edit: status
    options:
      # editアクション中で、セレクトタグで選択できるものを指定
      selectors: status
  relationships:
  application: Application
  # メールアドレスで、ユーザー検索を行う
  search: email
  # 絞り込みのためのセレクトタグを画面に出す
  filters: status

この様に、生成されたYAMLファイルの編集でほとんど必要なことは出来るのですが
さらにコントローラーやビューをカスタマイズするには
所定の位置に、コントローラーやviewを配置して、既存の機能を上書きしていきます。

例えばusersモデルのindexアクションのcontrollerやviewを編集したいときはそれぞれ次の作業を行えば良いです

  • /app/controllers/admin/users_controller.rb を編集
  • /app/views/admin/users/index.html.erb を作 成してきて編集

こういう、機能を何でも上書き可能なカスタマイズ性がtypus最大の強みでしょう

さらに、部品化された機能を呼び出して組み合わせる事を徹底して作られているので
後で企画から此処にアレを追加してくださいと言われても
拡張、拡張を続けてもどこかで設計の破綻がおきずらいです。

ちなみにもっとカスタマイズ法を知りたい場合は、以下のリンクをどうぞ
自分の記事ですが

rails管理画面作成gem:typusカスタマイズ方法まとめ

欠点:

この3つの中では、インストール時の機能の見た目が一番イマイチ、というところですね、よく部品化されているということは、逆に上手なカスタマイズのためには、何処をカスタマイズすればいいのかを解析、学習するコストが一番かかります。
typusの利点は社外に公開をすることを想定しても耐えられる柔軟性なので、企画からあれやらこれやら拡張を求められる嫌な予感がしたら、こちらを選択して、逐次拡張を加えていくのが良いと思いますよ。
とは言っても、外部のユーザーに使ってもらうために、typus標準のtwitter-bootstrapoっぽいデザインを脱出して、1からデザイン起こしてください、とかになってくると、そろそろtypusを使っているメリットは薄くなっては来ますけどね。

まとめ

実際にそれぞれのgemを使っている他の人に、聞いてみたのですが
どのgemを使うということに関しては、意見の一致を見ることはできませんでした。
gem毎に、便利な範囲がきちんと棲み分けられているので、管理画面として、どの範囲の人がどこまでのカスタマイズを行いたいかというのを調べた上で、適切なシナリオを立てるのが良いと思います

  • rails_adminはノンカスタマイズで使って問題ない開発者向け
  • active_adminは表示項目と権限管理だけきちんと行えれば問題なく運用できる、社内ツール向け
  • typusは社外への公開を行ったり、高い要求が後々出る恐れがある場合向けの土台と思って使う

そう考えて導入してみてから、問題が発生したら他に持ち変える。慣れてきたらどれも一通り触ってみて考え直す、というのが良い使い方ではないでしょうか?

個人的に、他の人にたった一つだけお勧めを出すなら、今はactive_adminと答えています。

ちなみにactive_adminをオススメしておきながら、私の場合はメインにtypusを使って、補助的にrails_adminをノーカスタマイズでインストールして開発側でだけそれを使う構成にしています。どうせ最後は企画側のカスタマイズ要件がいろいろ入って複雑になるものだという経験論からなんでもカスタマイズ要件に答えられる事を一番重要なポイントにしていますが、実際は仕様と自分の経験値を加味して選択するのが重要ということですね。