Edited at

【Rails】ぼくのかんがえたさいきょうの設定(rails newそのあとに)

More than 3 years have passed since last update.

タイトルの通り,新プロジェクトはじめるときにやらなきゃいけないことリスト.

毎回なんかしら忘れてぬとねの区別がつかなそうな顔になる.

つよくいきよう.

2014/12/1:

did_you_meanのリンクを修正していただきました.

@yuki24 さん,ありがとうございます(作者様自ら…申し訳ございません…).



rails new前に

Test::Unitbundle 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_practicerack-mini-profilerQuiet Assetsdid_you_meanはこれから積極的に使っていきたい.


Gemfie

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にしてるけど正直よくわかってない(誰か教えてください).


config/application.rb

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


config/application.rb

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.rbspec_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



spec/rails_helper.rb

RSpec.configure do |config|

config.before :suite do
DatabaseRewinder.clean_all
end

config.after :each do
DatabaseRewinder.clean
end
end



factory_girlの設定

factory_girlはテストデータをいい感じに作れるやつ.


spec/rails_helper.rb

RSpec.configure do |config|

config.before :all do
FactoryGirl.reload
end
end


RequestDescriber, autodoc, json_specの設定

APIまわりのテスト3種の神器(?).


spec/rails_helper.rb

RSpec.configure do |config|

config.include JsonSpec::Helpers
config.include RSpec::RequestDescriber, type: :request
Autodoc.configuration.toc = true
end


seedでfactory_girlつかう

こっちのがすっきりするやん?


db/seeds.rb

require 'factory_girl'

Dir[Rails.root.join('spec/factories/**/*.rb')].each { |f| require f }

# 略



その他べんりな設定


自動annotateの設定

annotateは↓こんなやつ↓をmodelstestspec),fixturesfactories)の先頭につけてくれる.


app/models/user.rb

# == 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のログにも出力


config/environments/development.rb

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-rspecguard-springじゃなくてguard-railsでも良かったりします?(誰か教えてください)

$ bundle exec guard init

$ bundle binstub guard


Guardfile

guard :rspec, cmd: 'bin/rspec -f doc' do

# 中略
end


参考文献


お世話になった本


参考になった記事


使ったgemとか


お世話になってるコミュニティ