タイトルの通り,新プロジェクトはじめるときにやらなきゃいけないことリスト.
毎回なんかしら忘れてぬとねの区別がつかなそうな顔になる.
つよくいきよう.
2014/12/1:
did_you_meanのリンクを修正していただきました.
@yuki24 さん,ありがとうございます(作者様自ら…申し訳ございません…).
rails new前に
Test::Unit
とbundle install
はいらんでw
$ rails new my_app -B -T
基本設定
.gitignoreの作成
僕はいつもgitignore.ioで生成してます.
だいたいこんな感じ(Rails, Ruby, OSX, Linux, Vim, SublimeText, RubyMine).
Gemfile編集
毎回使うのはこんなもん?
Better Errors/binding_of_callerあたりは無いと拗ねる.
rails_best_practice,rack-mini-profiler,Quiet Assets,did_you_meanはこれから積極的に使っていきたい.
source 'https://rubygems.org'
group :default do
gem 'rails'
gem 'sass-rails'
gem 'uglifier'
gem 'coffee-rails'
gem 'active_model_serializers'
end
group :test, :development do
gem 'sqlite3'
end
group :development do
gem 'spring'
gem 'spring-commands-rspec'
gem 'pry-rails'
gem 'pry-doc'
gem 'pry-stack_explorer'
gem 'pry-byebug'
gem 'guard'
gem 'guard-rspec'
gem 'guard-spring'
gem 'better_errors'
gem 'binding_of_caller'
gem 'rack-mini-profiler'
gem 'bullet'
gem 'quiet_assets'
gem 'rails_best_practices'
gem 'did_you_mean'
gem 'annotate'
end
group :test do
gem 'rspec-rails'
gem 'factory_girl_rails'
gem 'database_rewinder'
gem 'rspec-request_describer'
gem 'autodoc'
gem 'json_spec'
end
group :doc do
# bundle exec rake doc:rails generates the API under doc/api.
gem 'sdoc', '~> 0.4.0'
end
TimeZone,localeの設定
rails-i18nからja.ymlを取ってきて,config/locales
に配置.
日本人だからTokyoにしてるけど正直よくわかってない(誰か教えてください).
module MyApp
class Application < Rails::Application
# 中略...
config.time_zone = 'Tokyo'
# 中略...
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '*.{rb,yml}').to_s]
config.i18n.default_locale = :ja
end
end
generatorの設定
- JS(Coffee)やCSS(Scss)は自分で作るからいらない派
- helperもあまり使わない派
- テストはRSpec派
- fixtureはfactory girl派
- routing specやview spec,helper specはあまり書かない派
- controller specはエラー出てないことだけは確認する派
- request specはAPIについてのみ書く派
-
hamlとかslimを使いたい時もここで(
config.generators.template_engine = :slim
)
module MyApp
class Application < Rails::Application
# 中略...
config.generators do |g|
g.javascripts false
g.stylesheets false
g.helper false
g.test_framework :rspec,
fixture: true,
view_specs: false,
helper_specs: false,
routing_specs: false,
controller_specs: true,
request_specs: true
g.fixture_replacement :factory_girl, dir: 'spec/factories'
end
end
end
binstubの生成(spring)
はやい(よくわかってない).
spring-commands-rspecを入れてるのでbin/rspec
も生成されるぜ.
$ bundle exec spring binstub --all
テスト(RSpec)周り
RSpecの設定
これ毎回忘れて毎回死ぬ.
$ bin/rails g rspec:install
rails_helper.rb
とspec_helper.rb
の違い
spec/rails_helper.rb
に Rails 特有の設定を書き、spec/spec_helper.rb
には RSpec の全体的な設定を書く、というようにお作法が変わるそうです。これによって、Railsを必要としないテストを書きやすくなるんだとか。 RSpec 3 時代の設定ファイル rails_helper.rb について - willnet.in
*/**/*_spec.rb
先頭付近のrequire 'spec_helper'
はrequire 'rails_helper'
に置き換わるっぽい.
DatabaseRewinderの設定
DatabaseRewinderはテストのたびにDBのお掃除するやつ.
曰く,
minimalist's tiny and ultra-fast database cleaner amatsuda/database_rewinder
RSpec.configure do |config|
config.before :suite do
DatabaseRewinder.clean_all
end
config.after :each do
DatabaseRewinder.clean
end
end
factory_girlの設定
factory_girlはテストデータをいい感じに作れるやつ.
RSpec.configure do |config|
config.before :all do
FactoryGirl.reload
end
end
RequestDescriber, autodoc, json_specの設定
APIまわりのテスト3種の神器(?).
RSpec.configure do |config|
config.include JsonSpec::Helpers
config.include RSpec::RequestDescriber, type: :request
Autodoc.configuration.toc = true
end
seedでfactory_girlつかう
こっちのがすっきりするやん?
require 'factory_girl'
Dir[Rails.root.join('spec/factories/**/*.rb')].each { |f| require f }
# 略
その他べんりな設定
自動annotateの設定
annotateは↓こんなやつ↓をmodels
,test
(spec
),fixtures
(factories
)の先頭につけてくれる.
# == Schema Information
#
# Table name: users
#
# id :integer not null, primary key
# email :string(255) default(""), not null
# created_at :datetime
# updated_at :datetime
#
# Indexes
#
# index_users_on_email (email) UNIQUE
#
class User < ActiveRecord::Base
# 中略
end
下のコマンドを実行したらrake db:migrte
時に勝手にannotationつけてくれるようになるんやで(細かい設定はlib/tasks/auto_annotate_models.rake
で変更可能).
$ bin/rails g annotate:install
bullet
N+1 queries(N+1問題)を検出してくれるgem,bullet.SQL力上げていこうな.
- JSでalert出す
- logファイル出力(
"#{Rails.root}/log/bullet.log"
) - ブラウザのconsoleに出力
- Railsのログにも出力
Rails.application.configure do
# 中略
config.after_initialize do
Bullet.enable = true
Bullet.alert = true
Bullet.bullet_logger = true
Bullet.console = true
Bullet.rails_logger = true
end
end
guard
guard-rspecを入れてると変更ファイルを検知してrspecを実行してくれる(なんか2回実行されてる気がしなくもない…).
あと,guard-rspecやguard-springじゃなくてguard-railsでも良かったりします?(誰か教えてください)
$ bundle exec guard init
$ bundle binstub guard
guard :rspec, cmd: 'bin/rspec -f doc' do
# 中略
end
参考文献
お世話になった本
参考になった記事
- debug - Rails4 今のところ最強なデバッグツール達 - Qiita
- RSpec 3 時代の設定ファイル rails_helper.rb について - willnet.in
- File: GETTING_STARTED — Documentation for factory_girl (4.4.0)
使ったgemとか
- charliesome/better_errors
- banister/binding_of_caller
- railsbp/rails_best_practices
- MiniProfiler/rack-mini-profiler
- evrone/quiet_assets
- yuki24/did_you_mean
- jonleighton/spring-commands-rspec
- amatsuda/database_rewinder
- thoughtbot/factory_girl
- ctran/annotate_models
- flyerhzm/bullet