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プロジェクトでは、テスト実行の流れは簡単にいうと以下のようになります。
- テスト環境のセットアップ(アプリケーションのロードなど)
- テストの実行
このうち、テスト環境のセットアップに一番時間がかかります。アプリケーションコードを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