LoginSignup
257
255

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-10-02

タイトルの通り,新プロジェクトはじめるときにやらなきゃいけないことリスト.
毎回なんかしら忘れてぬとねの区別がつかなそうな顔になる.

つよくいきよう.

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とか

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

257
255
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
257
255