suin.io

頂いたRails用Gemfileに46個gemがあって何がなんだか不明なのでまとめてみた

suin2016年7月28日

Rubyを始めてまだ1ヶ月にも満たないので、RailsはおろかRubyもよくわかっていません。Railsのプロジェクトも今回が始めてで勉強しながら取り組んでいます。

Rails環境を作るにあたってGemfileを頂いたのですが、いかんせんRails歴がほぼゼロなので、どのgemが何をしてくれるのかよくわかっていません。名前と機能の対応も知らずに開発に入るのも気持ちが悪いので自分の勉強がてら、46個のgemをひとことで紹介していきたいと思います。

早速ですが、Gemfileの中身は次のようになっています。

Gemfile
source 'https://rubygems.org'

# gems by default
gem 'rails', '4.2.6'
gem 'pg', '~> 0.15'
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.1.0'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 2.0'
gem 'sdoc', '~> 0.4.0', group: :doc

# project gems
gem 'slim-rails'
gem 'bootstrap-sass'
gem 'font-awesome-rails'
gem 'devise'
gem 'devise_invitable'
gem 'devise-bootstrap-views'
gem 'cancancan'
gem 'dotenv-rails'
gem 'sidekiq'
gem 'sidekiq-unique-jobs'
gem 'sidekiq-failures'
gem 'sinatra', require: nil # For sidekiq Web UI
gem 'heroku-api'
gem 'puma'

group :development, :test do
  gem 'byebug'
  gem 'pry-rails'
  gem 'pry-byebug'
  gem 'pry-doc'
  gem 'bullet'
  gem 'rspec'
  gem 'rspec-rails'
  gem 'factory_girl_rails', '~> 4.0'
  gem 'faker'
  gem 'rubocop', '0.35.1', require: false
  gem 'onkcop'
end

group :development do
  gem 'web-console', '~> 2.0'
  gem 'better_errors'
  gem 'binding_of_caller'
  gem 'letter_opener'
  gem 'xray-rails'
  gem 'spring'
  gem 'spring-commands-rspec'
  gem 'listen', '~> 3.0.5'
  gem 'spring-watcher-listen', '~> 2.0.0'
  gem 'annotate'
end

group :test do
  gem 'timecop'
end

group :production, :staging do
  gem 'rails_12factor'
end

Rails経験者でしたら、おなじみのものばかりかもしれません。「今更、何を言っているんだ」というのもあると思いますが、ご容赦頂ければと思います。

Rails 5.0.0が先々週リリースされたというのに、Rails 4.2.6向けのGemfileを晒してしまいますが、その点もどうかご容赦ください :bow:

本稿で紹介されていないがオススメしたいgem、間違いなどがあったら教えて頂けると嬉しいです。

Railsのデフォルトで入ったと思われるgem

このへんはRailsのデフォルトで入るgemかと思います。

gem 'rails', '4.2.6'
gem 'pg', '~> 0.15'
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.1.0'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 2.0'
gem 'sdoc', '~> 0.4.0', group: :doc

railsはRuby on Railsそのもので、pgはPostgreSQLのドライバで、sass-railsuglifiercoffee-railsjquery-railsなどはアセット系のgemなんだろうと名前から想像がつきますが、turbolinksjbuildersdocなど名前からは分からないものがあったので調べてみました。

turbolinks

pjaxができるようになるライブラリ。ただ、クセのあるライブラリらしく、直ぐにオフにする派とうまく付き合う派に別れるようです。

jbuilder

jsonフォーマットをDSLで定義できるようになる。

sdoc

Rubyのソースコード内のRDocコメントから、HTML形式のAPIドキュメントを生成する。

プロジェクトで追加されたと思われるgem

次にプロジェクト用に追加されたと思われるgemを見ていきます。

gem 'slim-rails'
gem 'bootstrap-sass'
gem 'font-awesome-rails'
gem 'devise'
gem 'devise_invitable'
gem 'devise-bootstrap-views'
gem 'cancancan'
gem 'dotenv-rails'
gem 'sidekiq'
gem 'sidekiq-unique-jobs'
gem 'sidekiq-failures'
gem 'sinatra', require: nil # For sidekiq Web UI
gem 'heroku-api'
gem 'puma'

slim-rails

SlimはRubyのテンプレートエンジンで、Jade風のインデントでHTMLテンプレートを作れるライブラリです。

bootstrap-sass

CSSフレームワークBootstrapのSASS版。

font-awesome-rails

Font-AwesomeのウェブフォントとスタイルシートをRailsのアセットパイプラインに追加してくれます。

devise

Railsに認証機能をつけられるようになる。Railsで認証と言ったらdeviseということらしいです。

devise_invitable

Emailを使った招待機能を実現するgem。

devise-bootstrap-views

deviseのログイン画面などのビューをBootstrap3にしてくれます。

cancancan

deviseが提供するのは認証のみなので、権限管理(認可)をやる場合はcancancanを使うということらしいです。

dotenv-rails

.envファイルに環境依存の変数や非公開情報(外部APIのシークレットキーなど)を定義しておくと、Railsから環境変数として読み込めるようになります。

sidekiq

メール送信やバッチ処理といった非同期処理を実現するキューライブラリ。RailsではActiveJobのインフラとして使う模様。

sidekiq-unique-jobs

同じ内容のsidekiq非同期処理を1つしか同時に走らせないようにします。

sidekiq-failures

実行が失敗に終わったsidekiqの非同期処理をトラッキングできるようになります。

sinatra

Rubyのマイクロフレームワークですが、これはsidekiqのダッシュボードを表示するために入れてあるようです。

heroku-api

HerokuのAPIをRubyで扱うためのクライアントライブラリ。

puma

並行性が高くスレッドベースの高速なHTTPサーバ。

開発系のgem

開発・テスト向けのgemも見てみます。

group :development, :test do
  gem 'byebug'
  gem 'pry-rails'
  gem 'pry-byebug'
  gem 'pry-doc'
  gem 'bullet'
  gem 'rspec'
  gem 'rspec-rails'
  gem 'factory_girl_rails', '~> 4.0'
  gem 'faker'
  gem 'rubocop', '0.35.1', require: false
  gem 'onkcop'
end

group :development do
  gem 'web-console', '~> 2.0'
  gem 'better_errors'
  gem 'binding_of_caller'
  gem 'letter_opener'
  gem 'xray-rails'
  gem 'spring'
  gem 'spring-commands-rspec'
  gem 'listen', '~> 3.0.5'
  gem 'spring-watcher-listen', '~> 2.0.0'
  gem 'annotate'
end

group :test do
  gem 'timecop'
end

byebug

Controllerなどのソースコードにbyebugと書くことで、そのコンテキストでシェルを起動できデバッグがしやすくなります。

pry-rails

rails consoleコマンドで起動するデフォルトのREPLであるirbの代わってpryを起動してくれます。

pry-byebug

byebugのようにステップ実行できるライブラリですが、irbではなくpryを起動してくれるようです。byebugpry-byebug両方入っている必要があるかは不明。

pry-doc

pry単体では見れなかったCで実装されたコードのドキュメントまで見れるようpryを拡張してくれるプラグイン。

bullet

N+1問題(非効率的な問合せSQLが乱発する問題)を検知して知らせてくれるライブラリ。

rspec

Rubyのテストフレームワーク。

rspec-rails

RailsのModelやControllerのテストを書くためのライブラリ。

factory_girl_rails

DBとの結合テストをするとき、テスト用データ(Fixture)を生成してくれるライブラリです。

faker

名前や住所といったダミーデータをDB初期化時につっこんでくれます。

faker改良版にffakerというものもあるようです。

rubocop

Rubyコードを静的解析して、コーディング規約に沿っているかチェックするツール。

onkcop

onk氏がしつけたrubocopの設定ファイルをgem化したもの。

web-console

ウェブビューからrails consoleにアクセスできるgemでエラー箇所のデバッグがしやすくなります。

better_errors

Railsのデフォルトエラー画面をより使い勝手の良いものにするライブラリ。

binding_of_caller

better_errorsでコンソールを使えるようにするために使っているようです。

letter_opener

Railsから送信するメールをブラウザで確認できるようにして、開発環境にメールサーバのセットアップをしなくても良くなるツール。

xray-rails

ブラウザ上の表示にどのビューが表示されているかを分かりやすく囲って表示してくれる開発ツール。

spring

Railsのアプリケーションプリローダで、テストやrakeタスクの起動を高速化してくれるそうです。

spring-commands-rspec

springrspecコマンドを追加して、RSpecを高速化するgem。

listen

ファイルの変更を検知してそれをフックに何か処理ができるgemとのこと。

spring-watcher-listen

springのファイルシステムの変更検知方法をpollingからlistenに変更してくれるgem。

annotate

テーブルのスキーマをModelのファイルにコメントを書いてくれるので、開発者がスキーマの確認をしやすくなります。

timecop

テスト実施時の現在時刻を任意の日時にしたり、テスト中の時刻を止めたりできるライブラリです。

プロダクション用のgem

最後にプロダクション用のgemです。

group :production, :staging do
  gem 'rails_12factor'
end

rails_12factor

12 Factor Appに基づきログを標準出力に出したり、静的アセットの提供をしてくれるとのこと。Herokuで動かつすときに使うgemのようです。

おわり

頂いたGemfileを元に46個のgemをひとことで紹介してみました。調べてみて、Railsってほんと便利なツールやライブラリがたくさんあるんですね。

RELATED POSTS