Rails 5 セットアップメモ2(完全に個人的)

## config
https://github.com/railsconfig/config
の通りにいれる。

```rb
# Gemfile
gem 'config'
```

```bash
$ bundle install
$ rails g config:install
```

config/database.ymlを修正する。こんな感じに。

```yaml
default: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  username: <%= Settings.db.default.username %>
  password: <%= Settings.db.default.password %>

development:
  <<: *default
  database: abc_development

test:
  <<: *default
  database: abc_test

staging:
  <<: *default
  database: abc_staging
  host: <%= Settings.db.default.host %>
  port: <%= Settings.db.default.port %>
  password: <%= Settings.db.default.password %>

production:
  <<: *default
  database: abc_production
  host: <%= Settings.db.default.host %>
  port: <%= Settings.db.default.port %>
  password: <%= Settings.db.default.password %>

```

そしたら、とりあえずdevelopment.ymlとdevelopment.local.ymlつくる。

config/settings/development.yml

```yaml
db:
  default:
    username: 'local.yml'
    password: 'local.yml'
    host: 127.0.0.1
    port: 3306
```

config/settings/development.local.yml
(差分だけ書くのがよいかと)

```yaml
db:
  default:
    username: actual_username
    password: actual_password
```

同じように
config/settings/test.yml
config/settings/test.local.yml
も書く。 (この段階だとそれぞれcpでよさそう)

## JSON Schema
prmd, committeeを導入

```rb
# Gemfile
gem 'committee'
group :development do
  gem 'prmd'
end
```

```bash
$ bundle install
```

## RSpec 3
rails g modelとかに関わるので、早めにセットアップ。

```rb
# Gemfile
group :development, :test do # 多分このブロックすでにある。あるときはその中に追記する。
  gem 'rspec-rails'
end
```

```bash
$ bundle install
$ bundle exec rails g rspec:install
```

焦らず1個ずついれてcommitしてこ。

## Factory Girl
これもrails g modelとかに関わるので、早めにセットアップ。

```rb
# Gemfile
group :development, :test do # 多分このブロックすでにある。あるときはその中に追記する。
  gem 'factory_girl_rails'
end
```

```bash
$ bundle install
```

これで `bundle exec rails g model abc`すると、以下が生成される

- app/models/abc.rb
- db/migrate/20160819182859_create_abcs.rb
- spec/models/abc_spec.rb
- spec/factories/abcs.rb

これで十分であれば、そろそろ開発開始できる :muscle: 

spec/rails_helper.rb に以下を追記しておく。

```rb
# RSpec.configure do |config| の中
  config.include FactoryGirl::Syntax::Methods
```

## database_cleaner (database_rewinder)
テストのお供にdatabase_cleaner
https://github.com/DatabaseCleaner/database_cleaner

database_cleanerのstrategyを :transaction で動くようにちゃんとすすめたい、とかいう理由があり (truncationだとおそいので) 早めにセットアップしておきたかった。

しかし今回はdatabase_rewinderの方を使ってみることにする。
https://github.com/amatsuda/database_rewinder

> Why is it fast?
> database_rewinder memorizes every table name into which INSERT SQL was performed during each test case. Then it executes DELETE SQL only against these tables when cleaning. So, the more number of tables you have in your database, the more benefit you will get.

セットアップは以下.

```rb
# Gemfile
group :development, :test do # 多分このブロックすでにある。あるときはその中に追記する。
  gem 'database_rewinder'
end
```

```bash
$ bundle install
```

公式ドキュメント通りの追記をする。
spec/rails_helper.rb に追記。

```rb
# RSpec.configure do |config| のブロックの中に書く。

  config.before(:suite) do
    DatabaseRewinder.clean_all
  end

  config.after(:each) do
    DatabaseRewinder.clean
  end
```

## Services の追加

`mkdir app/services` する

config/application.rbの中に追加。

`config.autoload_paths << %W(#{config.root}/services)`