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

  • 253
    Like
  • 1
    Comment
More than 1 year has 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とか

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