deviseやcarrierwaveなど機能拡張として役立つgemはたくさんありますが、今回は、エンジニアが開発する時に様々なサポートをしてくれるgemを解説付きで10個ご紹介したいと思います。
デバッグが楽になったり、セキュリティ強化できたり、と使ってみるだけで大きく作業効率が変わってくるので、もしまだ使っていないgemがあれば是非導入してみてください。
1. rubocop
https://github.com/rubocop-hq/rubocop
rubocopはコーディング規約に則っているかをチェックしてくれるgemです。規約に反している箇所は、その理由とともにエディタ内で表示してくれます。インデントや空行などコーディングルールがあっても守られなければ意味がないので、チーム開発では欠かせないgemです。
2. pry-rails
https://github.com/rweng/pry-rails
これも使っている人は多いと思いますが、pryをrailsで使うためのgemです。pry-doc、pry-byebug、pry-stack_explorerなどと一緒に使います。
コード中にbinding.pryと書くことでデバッグのステップ実行が可能になったり、show-routesはrake routesの何倍も高速だったりと、使わない手はないgemです。
3. rufo
https://github.com/ruby-formatter/rufo
rufoは高速コードフォーマッターです。IDEやatomなどで書いているとそれほど崩れませんが、追加追加で書いたコードやチームメンバーが書いたコードでのインデントのズレなどをすぐ直したいときに役立ちます。
4. rack-mini-profiler
https://github.com/MiniProfiler/rack-mini-profiler
画面の処理時間やSQLの実行時間などを表示してくれるパフォーマンス計測のgemです。表示が遅くなっている原因の特定、ボトルネックの発見に役立ちます。アプリケーションが複雑になってきたときに、キャッシュを検討したり、クエリを改善したり、といったときに便利です。
5. better_errors
https://github.com/BetterErrors/better_errors
エラー画面に、デフォルトのエラー画面より詳しい情報を表示してくれるgemです。画面中でコマンドを実行したり、リクエスト内容、ローカル変数の値などを表示してくれるので、デバッグがかなり捗ります。
6. brakeman
https://github.com/presidentbeef/brakeman
brakemanはコードのセキュリティチェックを行ってくれるgemです。CSRFやMass Assignment、XSS(クロスサイトスクリプティング)などの脆弱性があるコード箇所を指摘してくれます。動くこと優先で書いたコードは、思わぬ危険性が潜んでいるものなので定期的にチェックするかCIと合わせて利用するほうがいいでしょう。
Confidence: High Category: Mass Assignment Check: PermitAttributes Message: Potentially dangerous key allowed for mass assignment Code: params.fetch(:user, {}).permit(:name, :email, :password, :admin) File: app/controllers/admin/users_controller.rb Line: 73 Confidence: Weak Category: Cross-Site Scripting Check: CrossSiteScripting Message: Unescaped model attribute Code: ((((" <div class=\"text-grey-500\"" + (" style=\"color:red;\"" or "")) + ">\u671F\u9650:") + current_user.user_courses.map do [c.course_id, c.limit_date] end.to_h[course.id].strftime("%Y/%m/%d %H:%M")) + "</div> ") File: app/views/courses/index.html.erb Line: 32
7. bundler-audit
https://github.com/rubysec/bundler-audit
使っているgemに脆弱性がないかチェックしてくれるツールです。ライブラリには依存関係があるので、1つのgemをインストールすることで様々なgemが同時にインストールされます。bundler-auditでは、そのなかに脆弱性が存在しないかをチェックしてくれます。CIと組み合わせて使うと便利です。
脆弱性が存在しない場合は、「No vulnerabilities found」と表示されますが、存在する場合には、該当のgemと対策が表示されます。
Name: nokogiri Version: 1.8.2 Advisory: CVE-2018-8048 Criticality: Unknown URL: https://github.com/sparklemotion/nokogiri/pull/1746 Title: Revert libxml2 behavior in Nokogiri gem that could cause XSS Solution: upgrade to >= 1.8.3 Vulnerabilities found!
8. bullet
https://github.com/flyerhzm/bullet
N+1問題を発見してくれるgemです。N+1問題はデータ量(N+1)回のクエリを実行してしまうことで、アプリケーションのレスポンスが悪くなってしまう問題です。
railsでActiveRecordを使っていると発生しがちなN+1ですが、このgemを入れておけばすぐに分かります。発生したら、Javascriptのアラート、コンソールログなどで確認できます。
user: xxx GET / USE eager loading detected Item => [:category] Add to your finder: :includes => [:category] Call stack /my_app/app/views/items/index.html.erb:20:in `block in _app_views_items_index_html_erb__4011569299845956187_70225558816360' /my_app/app/views/items/index.html.erb:18:in `_app_views_items_index_html_erb__4011569299845956187_70225558816360'
9. annotate
https://github.com/ctran/annotate_models
データベーステーブルのスキーマ情報をモデルにコメントとして書き込んでくれるgemです。リアルタイムでカラム情報が同期されてないと返って混乱する可能性はあるので使う、使わないが分かれますが、開発の初期段階でvalidation張ったり、アソシエーションを確認したりといった際に、Sequel Proに行ったり来たりしないで済むので便利です。
10. rails_best_practices
https://github.com/flyerhzm/rails_best_practices
railsのベストプラクティスに則っているかをチェックしてくれるツールです。https://rails-bestpractices.com/ で挙げられているコーディングのベストプラクティスと自分のコードを比較して修正点を指摘してくれるため、この指摘に則ってリファクタリングすることで、ruby on railsのスキルアップにとても役立ち、バグを未然に防ぐことができます。
$ bundle exec rails_best_practices Source Code: |====================================================================================================================================================================================================================| /my_app/app/views/items/index.html.erb:20 - law of demeter /my_app/app/helpers/categories_helper.rb:1 - remove empty helpers /my_app/app/helpers/items_helper.rb:1 - remove empty helpers Please go to https://rails-bestpractices.com to see more useful Rails Best Practices. Found 3 warnings.
law of demeterと空のヘルパーは削除しろ、という警告が出ていますね。https://rails-bestpractices.com でlaw of demeterを見てみると、アソシエーションのモデルの値はdelegateでアクセスしろとなっています。
以上、開発をサポートするgem 10選でした。
特に最後のrails_best_practicesは良いコードを書いてスキルアップにつながるのでかなりおすすめです。