はじめに
この記事の概要
こんにちは、Rubyをメインで書いている株式会社TOKOSのツキヤです!
今回は、僕がよく使うgemを「メイン機能」「開発が便利になる」「デバッグ」の3種類に分けて紹介しようと思います!
競合のgemがある場合は比較ポイントも盛り込むので、gem選びの参考にしていただけると幸いです💪
gem選びのポイント
簡単にではありますが、僕がgemを選ぶ際に確認するポイントを解説します!
ざっくり、下記の3つです!
- ダウンロード数
- 開発が最近されているか
- gemに関する検索をした際の検索ボリューム
①, ②のダウンロード数、開発が最近されているかどうかはRubyGemsというサイトで調べることができます!
RubyGems内で、調べたいgemを検索窓に打ち込んで、詳細ページを確認できます!
注目していただきたいポイントは下の2つです!(キャプチャ画像はdeviseです)
「バージョン履歴」を見ることで、開発が活発かどうかや最近更新をしているかが分かります!
最後のバージョン更新が1年以内だと現在も更新していることが分かるので良さそうですね⭐️
deviseの場合、最後のバージョン更新が2021年12月16日なので、やや更新頻度が悪い可能性がありますね🤔
また、「累計ダウンロード数」を見ることで、他の開発者がどれくらい使用しているかが分かります!
ここが多ければ多いほど一定の信頼感があることになりますね😎
deviseの場合、141,569,295と圧巻です、、
最後に③の説明です!
これは、google検索で「gem [gem名]」と検索した際に検索結果が何ページあるかということです!
ここの検索結果が多いと、開発で詰まった時に参考にできる記事数が多くなることになるし、そのgemに関わるコミュニティが活発ということになるので参考にしてみても良いと思います!
当たり前ですが、欲しい機能要件を満たせるかどうか等はもちろん先に調べておきましょう!
それでは紹介の方に移ります!!
(各gemのGithubのリンクも入れておきます)
メイン機能系gem
「メイン機能系gem」とは、ログイン機能やページネーション機能といった、アプリの使用ユーザーに対しての機能を提供してくれるgemと定義しておきます!
kaminari
Github: https://github.com/kaminari/kaminari
言わずと知れたページネーション機能実装のためのgemです!
ページネーションが無いサービスはあまり見かけないので、良くお世話になるかとおもいます🙏
ダウンロード数や検索ボリュームも申し分無いので機能開発のための調査も簡単です!
ISSENブログ内でもkaminariに関する記事を執筆しています、よければ参考にして下さい🙇♂️
ただ実は、pagyという競合gemがあります。
Githubページ内にも書いてあるのですが、「実行速度」「メモリ使用量」「オブジェクト作成数」全てにおいて30倍以上kaminariより優秀というgemになっています✨
今回なぜkaminariを推したかと言うと、僕が使い慣れているというだけの理由です。。。
正確には、pagyを1度も使ったことがないです💦
なので、実際の使用感が分からなかったため一旦ここでの紹介にとどめておきます🙏
次ページネーションを新規で実装する場合はpagyを使ってみて使用感の感想を記事にしようかと思いますのでお待ち下さい🙇♂️
acts_as_list
Github: https://github.com/brendon/acts_as_list
並び順を変えることができるgemです!
並び順とは、例えばusers.allを取得したときにデフォルトは作成順に並ぶはずです。
これを画面側で任意の順番に並べ替えて取得できる機能です!
並び替えを任意にしたいという要望はそれなりに出ると思うので、その際はこのgemを検討してみてもいいかも知れません!
内部的には、並び替えたいテーブルにpositionカラムを追加することで実現しています。
逆に言うと、positionカラムを必ず追加する必要があるので、名前の競合等に注意を払う必要があるかもしれません
activestorage
Github: https://github.com/rails/activestorage
画像を扱えるようになる、Railsにデフォルトで導入されているgemです
使用する時はrails active_storage:installコマンドを打ち、リレーションを追加するだけなので簡単ですね!
Rails5まではデフォルトで導入されておらず、それまではcarrierwaveというgemがよく使用されていました
こちらのgemもかなり人気があり、画像を扱う上でどちらを使用するかは悩ましいです🧐
僕の決め手としては「Railsにデフォルトで導入されている」ということです。
デフォルトということは、サポート体制も万全なハズですし、メンテナンスが急に止まると言った心配もかなり少なくなるはずなので、今回activestorageをオススメしました!
そんなactivestorageですが、1つ懸念点があります。
それはバリデーションエラーの際に画像の情報を保持できないという点です。
これに対応させるような追加のgemも出ているようなので(自分は使用したことがありません)、そこまで問題ではないかと思いますが、できればデフォルトで対応指定ほしいと感じました、、
meta-tags
Github: https://github.com/kpumuk/meta-tags
toC向けのWEBアプリの開発の際に忘れがちなmetaタグ系の設定をページ毎に、簡単に行えるようにしてくれるgemです!
metaタグを設定しておかないとSEO的に良くないので、googleの検索結果に露出させたい場合はマストで使用するgemかと思います✨
OGPの設定もできるので、twitter等でシェアされやすくすることもできます😎
OGPとは、リンクを貼った時に画像等も載せ込めるような仕組みのことだね!(下記画像はtwitter)
開発が便利になる系gem
「開発が便利になる系gem」とは、開発者体験(DX)を上げるgemと定義しておきます!
読んで字の如くですが、開発がより便利になり生産性が上がるようなgemをここで紹介します!
dotenv-rails
Github: https://github.com/kaminari/kaminari
環境変数を管理してくれるgemです!
環境変数を簡単に説明すると、開発する際と本番環境で変えたい値で、セキュリティの観点からGithub等にアップロードさせたくないような値のことです!
dotenv-railsでは、これらの値を.envファイル内に書いた上でENV[“hogehoge”]のような形式で簡単に呼び出せるようにしてくれます✨
僕はどんなプロジェクトでも基本入れているほぼ必須のgemですね💪
config
Github: https://github.com/rubyconfig/config
先程のdotenv-railsとは逆に、定数を管理してくれるgemです
ここで言う定数とは、例えば管理者のメールアドレスやドメイン名など複数の場所で使われ、ひとまとめに管理しておきたいようなもののことを指します!
ひとまとめにしておけば、もしメールアドレスが変更になったときでも1箇所の修正だけで済むので便利ですね💪
また、開発環境と本番環境で別々の値を設定することもできるのでこれもかなり便利です
例えば、開発環境では送信用メールアドレスはdevelopment@example.comを使いたいが、本番環境ではproduction@example.comを使いたいといった出し分けが簡単にできるようになります!
rubocop
Github: https://github.com/bkeepers/dotenv
コードを解析した上で良くない点を指摘してくれるgemです!
バグの混入を防いだり、読みやすいコードに直せたりします。
チーム開発する際にもコードの書き方をある程度統一できるという点も良いですね✨
このgemもマストで入れます😎
具体的なインストール ~ 使用手順については別途記事を執筆しました、是非読んで見て下さい🙏
【Rails】RuboCopの導入 ~ おすすめルールの設定方法annotate
Github: https://github.com/ctran/annotate_models
モデルファイルに自動でテーブルの説明をコメントで入れてくれるgemです!
下記のような感じです
# == Schema Information
#
# Table name: users
#
# id :string(30) not null, primary key
# name :string(255) not null
# birthday :date
# tel_number :string(255)
# email :string(255)
# gender :integer
#
class User < ApplicationRecord
# ....
end
これがあるとモデルファイルを見るだけでテーブルのカラム情報が分かるので、かなりスムーズに開発が進むかと思います!
ただ要らない人は要らないと思うので、使ってみて必要か確認してみて下さい🙏
デバッグ系gem
「デバッグ系gem」とは、バグを解消しやすくしたり、問題の発見をしやすくするgemと定義しておきます!
letter_openner_web
Github: https://github.com/fgrehm/letter_opener_web
メール受信を下記のようにブラウザで確認することができるgemです!
このgemを使うことでいちいち本当のメールアドレスを入力しての受信確認等をする手間がなくなります✨
メールの送信がある場合にはマストで入れるgemですね
config/development.rbにconfig.action_mailer.delivery_method = :letter_opener_webを追記するだけなので導入も簡単です😎
letter_openerというgemもありますが、こちらは入れなくて問題無いので導入する時に間違えないようにして下さい!
僕的にはletter_openerの上位互換がletter_opener_webという認識です。
better_errors(, binding_of_caller)
Github: https://github.com/BetterErrors/better_errors
元々のエラー画面を見やすくしてくれるgemです!
エラーが出た状態で変数の中身の確認もできるのでかなり便利です✨
ドキュメントにももちろんかいてありますが、導入時にはbinding_of_callerというgemも一緒に入れる必要があるので注意して下さい!
また、Dockerで開発している場合は追加の設定が必要になります
require "active_support/core_ext/integer/time"
Rails.application.configure do
# 中略
# ~~~
# better_errorsのdocker用の設定(下記を追加)
BetterErrors::Middleware.allow_ip! "0.0.0.0/0"
end
上記のように設定をすれば使えるかと思いますので参考にして下さい🙏
bullet
Github: https://github.com/flyerhzm/bullet
N+1問題を発見しやすくしてくれるgemです!
N+1問題の説明に関しては、分かりやすい記事がありましたのでそちらを確認してみて下さい🙇♂️
ブラウザのwindow.alertや、ログに出力など様々な方法でN+1問題を知らせてくれます!
やや精度が荒いのか、完全にN+1問題を検出してくれる訳ではなさそうです、、
また、実際にデータが入っていないと検出されないのでそこも少し不便ですね、、
@user.allが0件の時 :検出されない
@user.allが1件以上の時:N+1があれば検出される
みたいな感じです!
ただ、無いよりは良いと思いますのでよくN+1問題を忘れてしまう人は導入してみましょう!
終わりに
今回はよく使うgemを紹介しました!
聞いたことが無いgemを知れて、読者さんの頭の中に新しい選択肢を作るということを目的にしているので、詳しい解説は別のサイトにお任せします🙇♂️
もし需要がありそうなら個別の解説もします!
Railsの勉強をしたい方はこの本が参考になるかと思いますので興味がある方は是非読んで見て下さい!