最近のRuby(Rails)開発でこれいれとくと幸せになれるGem
ここ1年くらいRubyメインで開発することが多いのですが、ここいらでこれいれとくと開発が捗るGemを紹介したいと思います。
Gemfile
まずはよく使うGemを記述したGemfileを紹介します。
group :development, :test do gem 'byebug', platform: :mri gem 'rspec', '~> 3.5' gem 'rspec-rails', '~> 3.5', '>= 3.5.1' gem 'simplecov', '~> 0.12' gem 'test-queue', '~> 0.2' gem 'database_cleaner', '~> 1.5', '>= 1.5.3' gem 'factory_girl', '~> 4.7' end group :development do gem 'pry' gem 'pry-rails' gem 'pry-doc' gem 'pry-byebug' gem 'pry-stack_explorer' gem 'yard', '~> 0.8.1' gem 'rubocop', '~> 0.42.0' gem 'guard', '~> 2.14' gem 'guard-rspec', '~> 4.7', '>= 4.7.2' gem 'guard-yard', '~> 2.1', '>= 2.1.4' gem 'guard-rubocop', '~> 1.2' gem 'guard-bundler', '~> 2.1' gem 'guard-spring', '~> 1.1', '>= 1.1.1' gem 'guard-shell', '~> 0.7.1' gem 'capistrano', '~> 3.5' gem 'capistrano3-unicorn', '~> 0.2.1' gem 'capistrano-rbenv', '~> 2.0', '>= 2.0.4' gem 'capistrano-rails', '~> 1.1', '>= 1.1.7' gem 'capistrano-bundler', '~> 1.1', '>= 1.1.4' gem 'spring' gem 'spring-watcher-listen', '~> 2.0.0' gem 'spring-commands-rspec', '~> 1.0', '>= 1.0.4' end
Rspec関連
RSpec自体の説明は、情報がありふれているのでココでは省きます。
rspec-rails
rails用のテストで便利メソッドが含まれているGem
主にcontrollerやrouting等のテストも可能になるようになってます
simplecov
テスト結果に基づいてカバレッジレポートを出力してくれます
spec_helper(rails_helper)に以下を追加するだけ
require 'simplecov' SimpleCov.start 'rails'
test-queue
テストを並列実行してテスト実行速度を早めます。
Rspecの場合は以下のコマンドで実行(この時、ディレクトリを指定する必要がある)
$ bundle exec rspec-queue spec
database_cleaner
テストデータをきれいスッキリ、削除します
# coding: utf-8 require "database_cleaner" # User DB cleaner RSpec.configure do |config| config.before(:suite) do ActiveRecord::Base.establish_connection(:db1) # `truncation`で`TRUNCATE`指定可能 DatabaseCleaner.strategy = :deletion DatabaseCleaner.start end config.after(:suite) do ActiveRecord::Base.establish_connection(:db1) # exceptで除外テーブルを指定 DatabaseCleaner.clean_with :deletion, { except: %w(schema_migrations) } end end
factory_girl
テストデータをyml
形式でなく、Rubyで作成できます。難易度高め。。。
使い方等は下記とか詳しいかも
また、以前Qiitaにも投稿させてもらいましたが、strategyについては独自に作成できるようです。
pry
irbより断然よいです。補完もききます。Rails標準のConsoleもpry-rails
で簡単にpryに変更できます。
こちらが詳しいです
gem開発だと、bin/console
に以下のように設定することで使えるようになります
require 'pry' Pry.start
$ bundle exec console
yard
YARD - A Ruby Documentation Tool
Ruby用のドキュメント生成ツールです。PHPDocやJavaDocの様なアノテーション記法(タグとも言う)で記述できます。
↓タグ一覧です
File: Tags Overview — Documentation for yard (0.9.5)
rubocop
静的コード解析をしてくれます。
.rubocop.yml
にルールを記述していく形になります。思いついたときにチューニングしてあげると良いです。
こちらも以前ざっくりと調べた物をQiitaにあげてます。
spring
Javaのフレームワークではないほうですw Railsで事前にPreloadをしておいて、開発効率を上げていくスタイルです。
setup
$ bundle exec spring binstub --all
start
$ bundle exec spring server $ bundle exec spring status $ bundle exec spring stop
rspec
$ bundle exec spring rspec
capistrano
こちらは開発ツールというよりはデプロイツールなので、説明は省きます。 2系と3系で大きく記述が違うので注意
guard
ファイルの変更を監視して、自動実行タスクを走らせるツールです。 ソース変更と同時に走らせたいツールを特に入れてます。 Guardfileに設定を記述していきます。
guard
にタスクを記述し、watch
で監視するファイルの設定を記述する。
以下よく使用する設定例です
# coding : utf-8 # -*- mode: ruby -*- # vi: set ft=ruby : group :red_green_refactor, halt_on_fail: true do # rspecの設定 guard :rspec, cmd: "bundle exec spring rspec" do # 監視ファイルの設定 watch(%r{^app/controllers/(.+)_(controller)\.rb$}) do |m| [ "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/routing/#{m[1]}_routing_spec.rb", "spec/requests/#{m[1]}_spec.rb" ] end watch(%r{lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" } watch(%r{spec/.+_spec\.rb$}) end # yardの設定 docディレクトリに出力する形式 guard :yard, server: false, stdout: '/dev/null' do watch("README.md") watch(%r{app/(.+)\.rb$}) watch(%r{lib/(.+)\.rb$}) watch(%r{lib/(.+)\.rake$}) end # rubocopの設定 guard :rubocop, all_on_start: false, keep_failed: false, cli: ["--format", "clang", "-l"] do watch(%r{app/(.+)\.rb$}) watch(%r{lib/(.+)\.rb$}) watch(%r{spec/.+_spec\.rb$}) watch(%r{spec/.+\.rb$}) watch(%r{lib/(.+)\.rake$}) watch(%r{config/(.+)\.rb$}) watch(%r{(?:.+/)?\.rubocop\.yml$}) { |m| File.dirname(m[0]) } end end # bundlerの設定 guard :bundler, cmd: "bundle" do watch("Gemfile") end # 指定shellの実行 guard :shell do # routes.rbが変更された時点で、ルーティングの一覧を出力する watch("config/routes.rb") { |m| `rake routes` } end # springの設定 guard 'spring', bundler: true, environments: %w[test] do watch('Gemfile.lock') watch(%r{^config/}) watch(%r{^spec/(support|factories)/}) watch(%r{^spec/factory.rb}) end
実行
$ bundle exec guard
これでソース更新時に、コード解析、テスト実行、ドキュメント生成等を自動で行ってくれるようになります。 便利!
Guardは他にもpluginがいくつかあるので、使用してみるといいかもしれません。
その他
他にもcapybara
やselenium
等E2テスト用のGemもあります。
まだまだ他にもあると思うので、またいろいろ探してアップデートします。