LoginSignup
12
18

More than 5 years have passed since last update.

Rails のプロジェクト開始時の gem 選定

Posted at

Rails のプロジェクト開始時の gem 選定

議題としてはプロジェクトを立ち上げる際の gem についてです!

作成するプロジェクトは API モードを使用した人材サービスで 3 つのユーザータイプが存在して、将来的にユーザーごとに role を作っていく可能性がありました。

今回はユーザータイプを横断して使うことがないため求職者 & 求人者 & 管理者 の 3 つのユーザーテーブルを作ることにしました。

目次
  1. Authentication(ログインとか認証周り)
  2. Authorization(権限周り)
  3. Serialization(Json とかのシリアライゼーション)
  4. Admin Page(管理画面)
  5. Pagination(ページネーション)
  6. How To Study

順を追ってなぜ選んでいったかを説明していきます。

軽く自己紹介

Rails に全く触ったことがなかったが、プロジェクトで必要になり一人で奮闘中。。

偶然であった 大倉さん にメンタリングをお願いし、プロジェクトの遂行と自己の成長の両者を得ようとしているしがないエンジニアです。

前回は React を全く触ったこともないくせに開発し、現在は SNS 開発のフロントエンドをしている。

1. Authentication

選定した gem : device
url: https://github.com/plataformatec/devise

検討したリスト

こちらを選択した理由は、僕が使っている学習方法や多くのサンプルがあるということでした。

しかし、最近では多様なログイン方法や登録方法などがあってカスタマイズ性が必要になってくることが多くなり、devise を使ってしまうとカスタマイズするときに苦労をするため避けるような傾向にもあるようです。

また、API モードにすると devise の良さでもあるページが同時に作成されるなどの機能を使うことがないのであまり利用価値が。。。とも思ったのですが、やはり私自身がRails 初心者のため、認証周りをすべて実装するには骨が折れるため利用しました!

2. Authorization

選定した gem : pundit
url: https://github.com/varvet/pundit

検討したリスト

こちらを選択した理由は、メンターより海外では圧倒的に利用されているということで選定しました。

認可周りで検索を行うと結構 cancancan などが多く出てくるのですが、結構古い記事などが多かったりなどもあるようでした。
他にも日本人が作った? banken なども検討には入りましたが、やはりスター数や盛り上がりを考えて, 今後の認可周りの管理は pundit にすることにしました。

3. Serialization

選定した gem : active_mode_serializers
url: https://github.com/rails-api/active_model_serializers

検討したリスト

選択理由は 1 つめと近いのですが学習サンプルが active_model_serializers を使っていたことが理由でした。

しかし、しっかりとメンターから話しを聞いてみると、カスタマイズ性などが fast_jsonapiよりも勝ると言うことが一番の選定理由でした。
ただ、 fast_jsonapi も負けておらず、処理速度の面では圧倒的にactive_model_serializersを凌駕するようです。

$ rspec
Active Model Serializer serialized 250 records in 138.71 ms
Fast JSON API serialized 250 records in 3.01 ms

250 レコードの処理スピードでもこれだけ早いのですが、1000 レコードを処理するのにも最低でも 25 倍以上はactive_model_serializersより早いようです。
もう少しなれたら移行してもいいかもしれない。。。
ちなみに JSON:API とは既に決まっている作りでこちらを参考にしてもらえれば! http://jsonapi.org/

なぜ serializer を入れる必要があるのー?というと、参照データ?子モデルや孫モデルが合ったときにひも付きを簡単にしてくれて、しかも JSON フォーマットに合わせてくれるよーっていうような感じです!
詳細は Rails のすごい人とかに聞いてみてください(´∀ `)

4. Admin Page

選定した gem : administrate
url: https://github.com/thoughtbot/administrate

検討したリスト

こちらを選択した理由はカスタマイズ性に長けていて、一つ一つのコンポーネントが結構細かくなっているという理由からでした。
最初は多くのサンプルがあったり、自己学習で使っていた教材でも activeadmin が使われていたため activeadmin 一本で行こうかと思ったら
結構多くの方がカスタマイズの部分で悩まれているようなことを聞いて、確認したら administrate がいいよとメンターに言われたので選択しました。

5. Pagination

選定した gem : pagy
url: https://github.com/ddnexus/pagy

検討したリスト

こちらを選択した理由は 従来多く使われてきた kaminari より 処理だけで 29 倍も早くなり他にもメモリー消費量が 18 分の 1 になるなどいい事ずくめのため、選定しました。
Go Rails でも評判で、この動画を作っている人は pagy の作者から以下のコメントがでるほどしっかりと説明をしてくれているようなので、もしよかったら見てみてください。

https://gorails.com/episodes/pagination-with-pagy-gem?autoplay=1

I couldn't have explained it better - even being the author of Pagy.
Thank you!
Pagyの作者の私でも、これほど上手に説明できないよ!
ありがとう!
by Domizio Demichelis

6. How To Study

学習リスト

これらを用意しておけば基本的には全てうまくいくだろう!

最後に

今回色々教えていただけたのは メンター 大倉さん https://twitter.com/okuramasafumi で以前、海外コミュニティの勉強会でお会いしてメンタリングを行っているということだったのでお願いしました。

本当にありがとうございます!!






最後に今後もこういった記事を上げていけるようにしていきます。

12
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
18