Rails開発におけるgemまとめ
この記事の目的
Railsには多種多様なgemが存在します。もちろんその中には開発効率を高める素晴らしgemもあれば、しばらくメンテされておらず運用が面倒なgemも存在します。
今回は現役Railsエンジニアの観点から
- 必須
- 要検討
- 不要
の3つに分けて紹介します。
必須
rspec & factory_bot
この2つを使わないのであればRails開発の魅力は半減すると言っても過言ではないでしょう。
他のフレームワークでの開発を経験されたことがある方ならばわかると思いますが、rspecとfactory_botによるテストの書きやすさ・ダミーデータの生成のしやすさは群を抜いています。
ほとんどの企業において、テストに時間をかけることに理解を示してくれる経営層は皆無です。彼らはいかに早くPDCAを回しユーザーに価値を提供するかが最優先事項なので、開発の保守運用のしやすさという観点はほとんど持っていませんし、サービスは障害なく動いて当然とさえ思っています。
そんな彼らを黙らせることができるのはrspecとfactory_botをおいて他にないでしょう。
Railsの魅力はActiveRecordの操作性の良さや開発速度などたくさんありますが、その中でもテスト面におけるライブラリの充実度はこの上ない武器となっています。
rubocop
チームで開発をしていくと、必ずメンバー間の好みや経験によってコードの書き方にバラツキが出ます。
また、パフォーマンスの悪い書き方をしてしまう場合や、知らず知らずのうちに不要なスペースが入り込んでしまうこともあります。
rubocopはcommitやCIに仕込むことでメンバー間での書き方の差異を少なくし、無駄なコードを簡潔にしてくれます。
kaminari
言わずと知れたページネーションのgemです。REST APIで開発していくならページネーションは必ずと言っていいほど出てきます。導入も非常に簡単なのでおすすめのgemです。
annotate
annotateはスキーマ情報をモデルにコメントとして書き出してくれるgemです。
そのモデルにどんなカラムがどんなデータ型で入っているのかをさっと確認できるのでとても便利です。
active_hash
ほとんど変更することのない少量のデータを使いたい場面ってありますよね。例えば都道府県の情報だったり、プロ野球の球団名だったり。。それらのデータってわざわざテーブルを作るまでもないけどモデルっぽく扱いたいなーって場面が結構あると思います。そんな時に重宝するgemです。ただ使い方に多少のクセはあるので複雑なことをするのであればテーブルを作るのも検討に入れましょう。
active_model_serializers
JSONレスポンスの整形をする際にとても重宝します。
以前はしばらくメンテされていなかったため、公式ドキュメントでも代替のgemを利用することが推奨されていましたが、最近になってメンテが再開されたようなのでこれからサービスを作る人にはおすすめのgemです。
要検討
carrierwave
画像投稿系のgemになります。
Rails5.2からActiveStorageが導入されたためそちらを利用するチームが増えてきた印象です。とはいえ、それまでRailsの画像投稿といえばcarrierwave一択でしたし、機能面でも充実しているのでこちらを選択するのもアリだと思っています。ActiveStorageと比較検討した上でメリットがあるなら導入を検討しても良さそうです。
graphql-ruby
ここ数年何かと話題になりがちなgraphqlですが、サービス要件によっては適さない場合もあります。
cacheがしにくいなどのデメリットもありますが、それを上回るメリットがあれば導入しましょう。
ほとんどのケースにおいて、十分に考慮されたREST APIがあればgraphqlは不要です。
不要
devise
初心者はみんな通る認証系のgemです。
ほとんどのサービスにおいて、認証時はいろんな処理を追加していくので自前で作った方が後々カスタマイズしやすいです。開発初期の少しの時短のためにdeviseを導入するのは悪手です。
acts_as_list
オブジェクトの並び順を画面側で任意に変更できるgemです。
他のライブラリやテストに悪影響を与える場合もあるので取り扱いは慎重に。
bootstrap
bootstrapは素晴らしいgemですが、デザインが画一的になりやすく、ページの読み込みも遅くなります。
また基本的なデザインしか対応していないので、少し複雑なことをしようとすると、結局自前実装することになります。導入しても開発速度はそこまで上がらないイメージです。
最後に
いかがでしたでしょうか?
私個人の開発経験からRails開発におけるgemをまとめてみました。
もしよろしければXのフォローもお願いします!
Discussion