Rubyを始めてまだ1ヶ月にも満たないので、RailsはおろかRubyもよくわかっていません。Railsのプロジェクトも今回が始めてで勉強しながら取り組んでいます。
Rails環境を作るにあたってGemfileを頂いたのですが、いかんせんRails歴がほぼゼロなので、どのgemが何をしてくれるのかよくわかっていません。名前と機能の対応も知らずに開発に入るのも気持ちが悪いので自分の勉強がてら、46個のgemをひとことで紹介していきたいと思います。
早速ですが、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を晒してしまいますが、その点もどうかご容赦ください
本稿で紹介されていないがオススメしたい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-rails
・uglifier
・coffee-rails
・jquery-rails
などはアセット系のgemなんだろうと名前から想像がつきますが、turbolinks
・jbuilder
・sdoc
など名前からは分からないものがあったので調べてみました。
turbolinks
pjaxができるようになるライブラリ。ただ、クセのあるライブラリらしく、直ぐにオフにする派とうまく付き合う派に別れるようです。
- Rails 4のturbolinksについて最低でも知っておきたい事 | KRAY Inc
- Turbolinksさんと上手く付き合う10の方法 - Qiita
- Turbolinksをオフしないためにやった事 - Qiita
- Rails 4 で turbolinks をオフにする方法 - Qiita
jbuilder
jsonフォーマットをDSLで定義できるようになる。
- Rails4でJSONを作るならto_jsonよりjbuilder - しめ鯖日記
- jbuilderで良い感じのハッシュ形式のJSONを返したいならこれだけ押さえておけば大丈夫かも - (゚∀゚)o彡 sasata299's blog
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版。
- twbs/bootstrap-sass: Official Sass port of Bootstrap 2 and 3.
- 全部はいらないよね?bootstrap-sassをカスタマイズして使う方法 - Qiita
font-awesome-rails
Font-AwesomeのウェブフォントとスタイルシートをRailsのアセットパイプラインに追加してくれます。
- bokmann/font-awesome-rails: the font-awesome font bundled as an asset for the rails asset pipeline
- RailsにFont Awesomeを導入するGem - Qiita
- Rails 4 で Twitter Bootstrap と Font Awesome を利用する手順 - Qiita
- font-awesome-rails は本当に Awesome - Ruby and Rails
devise
Railsに認証機能をつけられるようになる。Railsで認証と言ったらdeviseということらしいです。
- plataformatec/devise: Flexible authentication solution for Rails with Warden.
- Railsのログイン認証gemのDeviseのインストール方法 - Rails Webook
- [Rails] deviseの使い方 - Qiita
- Rails 4.2 で ユーザー管理・認証 (devise) - Qiita
devise_invitable
Emailを使った招待機能を実現するgem。
- scambra/devise_invitable: An invitation strategy for devise
- 【ちょー簡単】Devise_Invitableを使ってユーザー招待のフローを作ってみた part.1 基本編 - Qiita
- Railsで、deviseとdevise_invitableをつかって招待機能を実装する - Qiita
devise-bootstrap-views
deviseのログイン画面などのビューをBootstrap3にしてくれます。
cancancan
deviseが提供するのは認証のみなので、権限管理(認可)をやる場合はcancancanを使うということらしいです。
- CanCanCommunity/cancancan: Continuation of CanCan, the authorization Gem for Ruby on Rails.
- How to use CanCan / CanCanCan - Qiita
- Rails4でCanCanCanによる権限管理 [俺の備忘録]
- devise/cancancanを使ってログイン機能を実装する [Rails 4.1] - 酒と泪とRubyとRailsと
dotenv-rails
.env
ファイルに環境依存の変数や非公開情報(外部APIのシークレットキーなど)を定義しておくと、Railsから環境変数として読み込めるようになります。
- bkeepers/dotenv: Loads environment variables from
.env
. - 環境によって変わる設定値はdotenvを使うと便利 - Qiita
- Dotenvはproductionで使わないほうがよいのではという話 - なんかかきたい
- Rails4の非公開情報をdotenvで管理する -- blog.10rane.com
sidekiq
メール送信やバッチ処理といった非同期処理を実現するキューライブラリ。RailsではActiveJobのインフラとして使う模様。
- Sidekiq
- sidekiqの使い方 - Qiita
- Railsで非同期処理:キュー。Sidekiq(+ActiveJob)がResqueよりも、とても簡単便利。 - Qiita
- Sidekiq について基本と1年半運用してのあれこれ - まっしろけっけ
- sidekiqを使用する際に注意したい覚え書き - アトラシエの開発ブログ
sidekiq-unique-jobs
同じ内容のsidekiq非同期処理を1つしか同時に走らせないようにします。
- mhenrixon/sidekiq-unique-jobs: The missing unique jobs in sidekiq
- Ruby で非同期処理をするライブラリ Sidekiq についてのメモ - Kōenji
- 「Sidekiq + SidekiqUniqueJobs で前回の試作コードの sync_cache! を非同期にまとめて実行するようにしてみよう」の続編:ADWAYS ENGINEERS BLOG
sidekiq-failures
実行が失敗に終わったsidekiqの非同期処理をトラッキングできるようになります。
sinatra
Rubyのマイクロフレームワークですが、これはsidekiqのダッシュボードを表示するために入れてあるようです。
heroku-api
HerokuのAPIをRubyで扱うためのクライアントライブラリ。
- heroku/heroku.rb: Official Heroku Ruby Legacy API wrapper
- Heroku の API を使って Ruby コードで Heroku を管理 - 君の瞳はまるでルビー - Ruby 関連まとめサイト
puma
並行性が高くスレッドベースの高速なHTTPサーバ。
- puma/puma: A ruby web server built for concurrency
- pumaを使ってみた - Qiita
- RackサーバーのPumaについて調べてみる - arakaji's diary
開発系の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
と書くことで、そのコンテキストでシェルを起動できデバッグがしやすくなります。
- deivid-rodriguez/byebug: Debugging in Ruby 2
- Rails アプリケーションのデバッグ | Rails ガイド
- byebugでRubyスクリプトをコマンドラインデバッグする - Qiita
pry-rails
rails console
コマンドで起動するデフォルトのREPLであるirbの代わってpryを起動してくれます。
- rweng/pry-rails: Rails >= 3 pry initializer
- Rails4でのデバッガーの使い方 - Qiita
- Happy Elements Labs: Rubyist必携 pry-railsを使いこなせば幸せになれる
pry-byebug
byebug
のようにステップ実行できるライブラリですが、irbではなくpryを起動してくれるようです。byebug
とpry-byebug
両方入っている必要があるかは不明。
- deivid-rodriguez/pry-byebug: Step-by-step debugging and stack navigation in Pry
- pry-byebug を使ってRailsアプリをステップ実行する - Hack Your Design!
- pry-byebugでrubyをデバッグする - Qiita
pry-doc
pry単体では見れなかったCで実装されたコードのドキュメントまで見れるようpryを拡張してくれるプラグイン。
- pry/pry-doc: Provide MRI Core documentation and source code for the Pry REPL
- pry-docでカジュアルにRubyのソースコードを読む - Qiita
bullet
N+1問題(非効率的な問合せSQLが乱発する問題)を検知して知らせてくれるライブラリ。
- flyerhzm/bullet: help to kill N+1 queries and unused eager loading
- » Railsライブラリ紹介: N+1問題を検出する「bullet」 TECHSCORE BLOG
- [Rails 高速化] ページキャッシュ、N+1対策、SQLチューニング - 酒と泪とRubyとRailsと
rspec
Rubyのテストフレームワーク。
rspec-rails
RailsのModelやControllerのテストを書くためのライブラリ。
- rspec/rspec-rails: RSpec for Rails-3+
- Rails RSpecの基本 ~導入編~ - Qiita
- Read Everyday Rails - RSpecによるRailsテスト入門 | Leanpub
factory_girl_rails
DBとの結合テストをするとき、テスト用データ(Fixture)を生成してくれるライブラリです。
- thoughtbot/factory_girl_rails: Factory Girl ♥ Rails
- いまさら聞けないfactory_girl入門 - Grooves開発ブログ
- RailsでFactoryGirlを使ってみるメモ [俺の備忘録]
faker
名前や住所といったダミーデータをDB初期化時につっこんでくれます。
- stympy/faker: A library for generating fake data such as names, addresses, and phone numbers.
- Rubyのダミーデータ生成gem - PILOG
- Fakerでダミーデータを作成 - Qiita
faker改良版にffakerというものもあるようです。
rubocop
Rubyコードを静的解析して、コーディング規約に沿っているかチェックするツール。
- bbatsov/rubocop: A Ruby static code analyzer, based on the community Ruby style guide.
- Rubocopを使ってコーディングルールへの準拠チェックを自動化 - Qiita
- rubocop のしつけ方 - onk.ninja
onkcop
onk氏がしつけたrubocopの設定ファイルをgem化したもの。
- onk/onkcop: OnkCop is a RuboCop configration gem.
- onkcop/rubocop.yml at master · onk/onkcop
- rubocop のしつけ方 - onk.ninja
web-console
ウェブビューからrails consoleにアクセスできるgemでエラー箇所のデバッグがしやすくなります。
- rails/web-console: Rails Console on the Browser.
- Railsのweb-consoleについて | 日々雑記
- web-console を使えば Rails App のデバックが楽になる - Qiita
better_errors
Railsのデフォルトエラー画面をより使い勝手の良いものにするライブラリ。
- charliesome/better_errors: Better error page for Rack apps
- Railsのデバックが捗るエラー画面 Better Errors 使ってみた! - 酒と泪とRubyとRailsと
- Railsならbetter_errorsを入れるとデバッグがはかどるなぁ - (゚∀゚)o彡 sasata299's blog
- Railsの開発効率をあげる - Better_Errorsを使ってdevelopment環境のエラー画面をリッチにする - Rails Webook
binding_of_caller
better_errors
でコンソールを使えるようにするために使っているようです。
- banister/binding_of_caller: Retrieve the binding of a method's caller in MRI 1.9.2+
- RailsでBetter Errorsを試してみる - yk5656 diary
letter_opener
Railsから送信するメールをブラウザで確認できるようにして、開発環境にメールサーバのセットアップをしなくても良くなるツール。
- ryanb/letter_opener: Preview mail in the browser instead of sending.
- 開発中にrailsから送信したメールを確認する | dev.wan.co
- 開発中にいちいちメールが飛ぶのがウザいとお思いのあなたへーletter_opener - リア充爆発日記
xray-rails
ブラウザ上の表示にどのビューが表示されているかを分かりやすく囲って表示してくれる開発ツール。
- brentd/xray-rails: A development tool that reveals your UI's bones
- xray-rails Railsのviewがどこに表示されているかをわかりやすくする - 酒と泪とRubyとRailsと
spring
Railsのアプリケーションプリローダで、テストやrakeタスクの起動を高速化してくれるそうです。
- rails/spring: Rails application preloader
- Railsの開発効率をあげる - Springを使ってRailsのコンソールコマンドの実行を早くする - Rails Webook
- Spring無しでRailsを使おうだなんて正気ですかッ!? - (゚∀゚)o彡 sasata299's blog
spring-commands-rspec
spring
にrspec
コマンドを追加して、RSpecを高速化するgem。
listen
ファイルの変更を検知してそれをフックに何か処理ができるgemとのこと。
spring-watcher-listen
spring
のファイルシステムの変更検知方法をpollingからlistenに変更してくれるgem。
annotate
テーブルのスキーマをModelのファイルにコメントを書いてくれるので、開発者がスキーマの確認をしやすくなります。
- ctran/annotate_models: Annotate Rails classes with schema and routes info
- schemaをmodelに書き出してくれるgem annotate
- gem:annotate - Qiita
timecop
テスト実施時の現在時刻を任意の日時にしたり、テスト中の時刻を止めたりできるライブラリです。
- travisjeffery/timecop: A gem providing "time travel", "time freezing", and "time acceleration" capabilities, making it simple to test time-dependent code. It provides a unified method to mock Time.now, Date.today, and DateTime.now in a single call.
- RailsでTimecopを使って日付/時間のテストをする - Rails Webook
- timecop 使ってみた - Qiita
- timecop のちょっと便利な書き方について - おもしろwebサービス開発日記
- RSpec Tips -- Timecopで時間を自由に指定してテストしよう -- | Tech-Sketch
プロダクション用のgem
最後にプロダクション用のgemです。
group :production, :staging do
gem 'rails_12factor'
end
rails_12factor
12 Factor Appに基づきログを標準出力に出したり、静的アセットの提供をしてくれるとのこと。Herokuで動かつすときに使うgemのようです。
- heroku/rails_12factor
- RailsアプリをHerokuへデプロイするとき - 珈琲駆動開発
- 12 Factor App - モダンなサービス運営に必要な12のインフラ的要素 - Qiita
おわり
頂いたGemfileを元に46個のgemをひとことで紹介してみました。調べてみて、Railsってほんと便利なツールやライブラリがたくさんあるんですね。