[Rails 5] rails newするときに入れておきたい定番gemリスト(2017年版)

こんにちは、hachi8833です。

主にRails 5を念頭に、BPSのWeb開発で厳選された定番gemリストをまとめました。この記事は今後も随時更新しますのでよろしくお願いします。

概要

Rails でrails newした後、rails generateする前に「そうだ、あのgemとあのgemも追加しなきゃ」となることはよくあります。

gemをあれもこれも追加すると余分な問題を抱えることになりがちなので、gemリストはrails newするときからスリムに保っておきたいものです。Railsを始めて間もない人には特にgemを厳選することをおすすめします。

なお、以前は定番gem追加済みのGemfileやアプリケーションテンプレートを作ってみたこともありましたが、rails newを頻繁に行うのでなければメンテナンスの手間に引き合わないのでやめました。

環境

  • Rails: 5.0.1
  • Ruby: 2.4.0
  • Bundler: 1.14.4(gem update bundlerで最新にアップデートできます)

TechRacho記事『[Rails 5] rbenvでRubyをインストールして新規Rails開発環境を準備する』の方法でRuby/Rails環境を構築する前提です。

定番gemリスト(プロジェクト非依存)

案件や開発環境にかかわらず、常に追加・変更しておきたい厳選gemです。

  • gem名のリンクをクリックすると記事後半の詳細に移動します。
  • ファイル保存時のRSpec自動実行など、IDEでカバーできるgemは含めていません。
  • RDBMSはデフォルトのSQLiteのままにしてあります。MySQLにするかPostgreSQLにするかについては別途設定してください。
gem 機能 development test production
rubocop コーディングルールのチェック
brakeman 開発中の静的セキュリティチェック
bundler-audit gemのセキュリティ情報のチェック
RSpec一式 テスティングフレームワーク
rack-mini-profiler パフォーマンスをブラウザに表示
better_errorsとbinding_of_caller エラー時に表示される使いやすいデバッグ画面
bullet n+1問題を検出

Gemfile

Rails 5.0.1の新品Gemfileに厳選gemのみを追加したものを参考までに貼ります。

  • 元のコメント行は削除してあります。
  • rails newで使うのが前提なので、既存プロジェクトでは状況に合わせてGemfileに追記してください。
source 'https://rubygems.org'

git_source(:github) do |repo_name|
  repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
  "https://github.com/#{repo_name}.git"
end

gem 'rails', '~> 5.0.1'
gem 'sqlite3'
gem 'puma', '~> 3.0'
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.2'

gem 'jquery-rails'
gem 'turbolinks', '~> 5'
gem 'jbuilder', '~> 2.5'

# Use Capistrano for deployment
# gem 'capistrano-rails', group: :development

group :development, :test do
  gem 'byebug', platform: :mri
  gem 'rspec-rails'
  gem 'factory_girl_rails'
end

group :development do
  gem 'web-console', '>= 3.3.0'
  gem 'listen', '~> 3.0.5'
  gem 'spring'
  gem 'spring-watcher-listen', '~> 2.0.0'
  gem 'rubocop'
  gem 'brakeman'
  gem 'bundler-audit'
  gem 'rack-mini-profiler'
  gem 'better_errors'
  gem 'binding_of_caller'
  gem 'bullet'
end

gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

上のGemfileを反映してからプロジェクトのルートディレクトリでbundle installを実行すれば、厳選gemのインストールが完了します。

追伸

gem名のハイフンやアンダースコアが違っているとインストールできません。rubygems.orgで検索できる名前にする必要があります。

  • ◯: better_errors
  • ☓: better-errors、bettererrors、BetterErrors

地味ですが割りと間違えやすいんですよね(間違えました)。

各gemの概要

概要にとどめていますので、詳細についてはリンク先をご覧ください。

RuboCop

http://rubocop.readthedocs.io/en/latest/のスタイルにもとづいてコードのスタイルをチェックします。

デフォルトのままだとうんざりするほどエラーが出力されるので、プロジェクトの状態やスタイルに合わせて.rubocop.ymlの設定をカスタマイズするのが普通です。手動でカスタマイズするのはかなり大変なので、後述の「急ぎの場合に使える設定方法」を使うとよいでしょう。

  • リポジトリ: https://github.com/bbatsov/rubocop
  • 初期設定: 後述の「急ぎの場合に使える設定方法」などで.rubocop.ymlを設定する
  • 実行方法: プロジェクトのルートディレクトリでbundle exec rubocopを実行

(↑bundle execは非常によく使うので、私はbashでalias be='bundle exec'を設定しています: 以下同様)

http://rubocop.readthedocs.io/en/latest/の解説についてはTechRachoの連載『Rubyスタイルガイドを読む』シリーズもどうぞ。

急ぎの場合に使える設定方法

プロジェクトによっては以下の方法で余分なエラーを効果的に抑制できます。

  • プロジェクトのルートディレクトリでbundle exec rubocop --auto-gen-configを実行して.rubocop-todo.ymlを生成する
  • .rubocop-todo.ymlを複製して.rubocop.ymlという名前にする

この方法で現在のプロジェクトのスタイルをすべて容認する.rubocop.ymlを作れます。その後で、検査したい項目を.rubocop.ymlから順次外すことで、1項目ずつチェックできます。

brakeman

コードに潜むセキュリティ問題をチェックします。

bundler-audit

Gemfile.lockのgemバージョンを調べてセキュリティ問題をチェックします。

コマンドはbundler-auditではなくbundle-auditです。

RSpec一式

Railsで広く使われているテスティングフレームワークです。
factory_girl_railsはテストデータをfactory_girlで準備するのに使われます。RSpecとfactory_girlは案件を問わず使うことになると思います。

実行前に、RSpecやfactory_girlの設定が必要です。

参考: RSpecと一緒に使うことの多いgem

以下は主なものです。

rack-mini-profiler

開発中にリクエストの所要時間などをブラウザ画面の隅に表示できます。クリックすると詳細が表示されます。

better_errorsとbinding_of_caller

better_errorsはエラー時にリッチなデバッグ画面を表示します。binding_of_callerもインストールするとデバッグ画面でコードや変数の値を変更することもできます。

bullet

n+1問題を検出できます。

おまけ: rails generateが動かないとき

bundle exec rails startコマンドを実行した後、bundle exec rails generateコマンドを実行しても先に進まなくなってしまうことがあります。

その場合、Rails 5で標準になったspringというプリローダーgemが動いたままになっている可能性があります。

bundle exec spring stopを実行してspringを止めるとgenerateできるようになります。

関連記事

Ruby on RailsによるWEBシステム開発、Android/iPhoneアプリ開発、電子書籍配信のことならお任せください この記事を書いた人と働こう! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

hachi8833

Twitter: @hachi8833 コボラー、ITコンサル、ローカライズ業界を経てなぜかWeb開発者志願。 これまでにRuby on Rails チュートリアルの大半、Railsガイドのほぼすべてを翻訳。 かと思うと、正規表現の粋を尽くした日本語エラーチェックサービス enno.jpを運営。 仕事に関係ないすっとこブログ「あけてくれ」は2000年頃から多少の中断をはさんで継続、現在はnote.muに移転。

hachi8833の書いた記事

BPSアドベントカレンダー

人気の記事