Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 5 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とか

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

wantedly
「シゴトでココロオドル」ためのビジネスSNS「Wantedly」の開発・運営をしています。
https://wantedlyinc.com/ja/presentations
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away