Railsプロジェクトによく導入するgemのセットアップコマンド

gemのセットアップ

新しくRailsプロジェクトを作った時、Gemfileに必要なgemの設定を行い、
Bundlerでgemをインストールします。

しかし、gemをインストールしただけでは、プラグインとして有効にならないものもあり、
generateコマンドなどを実行して、設定ファイルの生成が必要になることがあります。

今回は、そういったありがちなgemの設定作業をまとめておきます。

対象のgemファイルとバージョン

Ruby界隈ではライブラリの開発スピードがかなり速く、Rails本体、Railsのプラグインとして利用されるgemも頻繁にアップデートされます。今回の記事の内容は2013年1月時点のgemのバージョンで調査したものなので、利用される場合はバージョンを確認してください。

  • rails (v3.2.13)
  • simple_form (v2.0.3)
  • kaminari (v0.14.1)
  • twitter-bootstrap-rails (v2.2.7)
  • zurb-foundation (v4.1.6)
  • mongoid (v3.1.3)
  • devise (v2.2.3)
  • omniauth-twitter (v0.0.14)
  • omniauth-facebook (v1.4.1)
  • rails_config (v0.3.3)
  • i18n_generator (v1.2.1)
  • rspec-rails (v2.13.1)
  • cucumber-rails (v1.13.1)
  • fuubar (v1.1.0)
  • email_spec (v1.4.0)
  • database_cleaner (v0.9.1)
  • capybara (v2.1.0)
  • poltergeist (v1.3.0)
  • spork-rails (v3.2.1)
  • guard (v1.8.0)
  • guard-rails (v0.4.0)
  • guard-rspec (v3.0.0)
  • guard-spork (v1.5.0)

セットアップコマンド

View用のプラグイン

simple_form

FormHelperを拡張して入力フォームを簡単に作成することができるgemです。

rails g simple_form:install
kaminari

Railsのページネーターの定番です。

rails g kaminari:config

Frontendフレームワーク用のプラグイン

twitter-bootstrap-rails

FrontendフレームワークのTwitter-BootstrapをRailsのプラグインとして導入できるgemです。

rails g bootstrap:install
rails g bootstrap:layout [LAYOUT_NAME] [*fixed or fluid]

Twitter-Bootstrap自体はcssとjavasrciptのライブラリであるため、gemとして導入しなくても利用することができます。必要なファイルをダウンロードしてassets以下のディレクトリに配置し、レイアウトファイルで読み込む設定をすることで利用可能です。

zurb-foundation

Zurb社が提供するFrontendフレームワークのRailsのプラグインです。

rails g foundation:install
  --haml hamlフォーマット
  --slim slimフォーマット
rails g foundation:layout  [Foundation 4系は不要]

データストアのプラグイン

mongoid

ドキュメント指向データベースであるMongoDBのODM(Object-Document-Mapper)です。

rails g mongoid:config

認証系のプラグイン

devise

Webシステムに必要な認証機能が一式備わったプラグインです。ログイン/ログアウト、アクティベーションメールなどの機能を簡単に追加することができます。

  rails g devise:install
   => rails g devise MODEL (deviseでモデルを作るとき)
omniauth-twitter

TwitterのOmniauth認証を利用するためのプラグインです。

config/initializers/omniauth.rbに以下を記述

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :developer unless Rails.env.production?
  provider :twitter, ENV['TWITTER_KEY'], ENV['TWITTER_SECRET']
end
omniauth-facebook

FacebookのOmniauth認証を利用するためのプラグインです。

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :facebook, ENV['FACEBOOK_KEY'], ENV['FACEBOOK_SECRET']
end

設定関連のプラグイン

rails_config

development、test、production環境、各環境共通の設定ファイルをYAMLで定義できるプラグインです。シンプルでわかりやすいので重宝します。

rails g rails_config:install
i18n_generator

localeファイルを生成するためのジェネレータです。

rails g i18n_locale ja
#=> config/locale/ja.yml

rails g i18n_translation ja   #ある程度modelを作ってからのほうがいい
#=> config/locale/translation_ja.yml

rails g i18n ja
#=> config/locale/ja.ymlとtranslation_ja.yml

テスト用のプラグイン

TDDという言葉とともに、テストコードを書くことが一般的になってきていると思います。Railsはテストをしやすくするためのライブラリがとても充実しています。

rspec-rails

Rubyでプログラムの振る舞いを記述し、テスト実行するDSLで最もポピュラーなRspecをRaisに組み込むためのプラグインです。

rails g rspec:install
cucumber-rails

人間にわかりやすいフォーマットで記述したアプリケーションの振る舞い、テストシナリオを自動テストとして実行できるCucumberをRailsに組み込むためのプラグインです。

rails g cucumber:install
fuubar

Rspecの実行結果をプログレスバー形式で表示するためのgem。導入するかどうかは好みです。

.rspecに追記

--format Fuubar
--color
email_spec

メールの件名、本文、リンクからの遷移などのテストを記述することができます。

  • cucumberで使うとき
    env.rbにrequireを追加
require 'email_spec'
require 'email_spec/cucumber'

この設定をした後に、
rails g email_spec:steps

  • rspecで使うとき
    spec_helper.rbに追記
require 'email_spec'

RSpec.configure do |config|
  config.include(EmailSpec::Helpers)
  config.include(EmailSpec::Matchers)
end
database_cleaner

テストコードの中でデータベースにデータストアを行うと、明示的に削除しない限り、test環境にデータが残ってしまい、後続のテストに影響を与えることがあります。
DatabaseCleanerを利用すると、モデル名の指定無しでデータベースからデータを削除してくれます。地味ですが、テストコードを書くときには必須のプラグインです。

  • rspecで使うとき
RSpec.configure do |config|
  config.before(:suite) do
    DatabaseCleaner.strategy = :transaction
    DatabaseCleaner.clean_with(:truncation)
  end
  config.before(:each) do
    DatabaseCleaner.start
  end
  config.after(:each) do
    DatabaseCleaner.clean
  end
end
  • cucumberで使うとき
    cucumber-railsに統合されているため初期設定不要。
    必要に応じてカスタマイズすればOK。
capybara

実際のユーザはブラウザでURLにアクセスして、フォーム入力したり、ボタンをクリックしたりします。
個々のモデルなどに対するユニットテストだけでは、アプリケーションの機能の確認までできているとはいえません。

Capybaraはブラウザに対する操作・表示の検証をテストコードとして記述することができます。ユニットテストより上位のEnd-to-Endのテストにおいては、Railsのスタンダードになっているgemです。

Capybara自体は直接ブラウザを操作せず、ドライバを通して、Selenium、Webkit、PhantomJSなどのブラウザ操作をシミュレーションするツールにアクセスしています。

  • rspecで使う場合
    spec_helperに追記
require 'capybara/rails'
  • cucumberで使う場合
    cucumber-railsに統合されているため初期設定不要。
    必要に応じてカスタマイズすればOK。
poltergeist

Capybaraで利用するヘッドレスブラウザであるPhantomJSのためのドライバーです。

まずはphantomjsをインストールする
http://phantomjs.org/download.html

  • rspecで使う場合
RSpec.configure do |config|

  config.before(:all, :js => true) do
    Capybara.current_driver = :poltergeist
  end
  config.after(:all, :js => true) do
   Capybara.use_default_driver
  end

end

もしくはCapybara.javascript_driver = :poltergeistと設定

  • cucumberで使う場合
    features/support/env.rbに追記
Capybara.default_selector = :css
Capybara.javascript_driver = :poltergeist
spork-rails

Railsプロジェクトでは、テスト実行の流れは簡単にいうと以下のようになります。

  1. テスト環境のセットアップ(アプリケーションのロードなど)
  2. テストの実行

このうち、テスト環境のセットアップに一番時間がかかります。アプリケーションコードを2〜3行修正して、テスト実行をするたびに、上記1, 2の処理が実行されると開発作業全体にかかる時間が増えてしまいます。
Sporkはあらかじめテスト環境をセットアップしたプロセスを別に起動して、テストの実行ではセットアップ済みのテスト環境を利用することで、テスト時間の短縮を行うことができます。

  • rspecで使う場合
spork rspec --bootstrap
  • cucumberで使う場合
spork cucumber --bootstrap

spec/spec_helper.rbとfeatures/support/env.rbに以下のコードが追加される

require 'rubygems'
require 'spork'
#uncomment the following line to use spork with the debugger
#require 'spork/ext/ruby-debug'

Spork.prefork do
  # Loading more in this block will cause your tests to run faster. However,
  # if you change any configuration or code from libraries loaded here, you'll
  # need to restart spork for it take effect.

end

Spork.each_run do
  # This code will be run each time you run your specs.

end
guard

Guardは指定されたファイルを監視して、ファイルに変更があった場合、特定のスクリプトを実行することができます。

guard init
guard-rails

Rails用にカスタマイズされたguardです。

guard init rails
guard-rspec

指定されたファイルに変更があった場合、RSpecを実行します。

guard init rspec
guard-spork

Sporkを利用したテスト環境でGuardを利用するためのプラグインです。

guard init spork