Edited at

Railsマスターで定評のある俺のオススメ初期設定を教えてやるぜ

More than 3 years have passed since last update.

Rails開発ではじめにやるおすすめ初期設定や導入するGemを紹介するぜ!


前提条件

テンプレートエンジン
CSSメタ言語
CSS Framework
DB
WEB Font

slim
sass
bootstrap-sass, compass
mysql
font-awesome


アプリケーションの作成

$ rails new YOUR_APP_NAME -B -T -d mysql

生成した後のbundle installtest/の生成をスキップさせています。

DBの設定周りはこことか

http://qiita.com/itkrt2y/items/4ea5bfe90ca65e4a9ebd

作成したらアプリケーションのディレクトリに移動

$ cd YOUR_APP_NAME

$ bundle --path vendor/bundle

これでGemをアプリケーション配下のvendor/bundleにインストールできる。

こうすることで他のプロジェクトで用いているGemとのバージョンの衝突を避けることができる。

ただ、ストレージを圧迫するのでは?という懸念もあるが自分の場合だと小さめなアプリ20個で4GBぐらいだった。


.gitignoreの編集

普段はここで生成する

http://gitignore.io

スクリーンショット 2015-09-18 13.45.56.png

# Created by https://www.gitignore.io/api/rails

### Rails ###
*.rbc
capybara-*.html
.rspec
/log
/tmp
/db/*.sqlite3
/db/*.sqlite3-journal
/public/system
/coverage/
/spec/tmp
**.orig
rerun.txt
pickle-email-*.html

# TODO Comment out these rules if you are OK with secrets being uploaded to the repo
config/initializers/secret_token.rb
config/secrets.yml

## Environment normalisation:
/.bundle
/vendor/bundle

# these should all be checked in to normalise the environment:
# Gemfile.lock, .ruby-version, .ruby-gemset

# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
.rvmrc

# if using bower-rails ignore default bower_components path bower.json files
/vendor/assets/bower_components
*.bowerrc
bower.json

# Ignore pow environment settings
.powenv

他にもエディタやIDEに応じた設定を付属させることができるので要確認


Generatorの設定

必要のないassetsやhelperを生成されないようにgeneratorの設定を変更する


config/application.rb

# 省略

class Application < Rails::Application
# 省略

config.generators do |g|
g.assets false
g.helper false
g.template_engine = :slim
g.test_framework :rspec, view_specs: false, routing_specs: false
end
end



assets周り

app/assets/stylesheets/application.css

app/assets/stylesheets/application.css.scssにリネーム

app/assets/javascripts/application.js

app/assets/javascripts/application.js.coffeeにリネームし、中のコメントアウトを//から#に修正する。

これは、それぞれScss,CoffeeScriptで記述できるようにするため、stylesheetsはscss、javascriptsはcoffeeに統一するためである。


Gemfile


Gemfile

source 'https://rubygems.org'

gem 'rails', '4.2.4'

gem 'mysql2'

gem 'bootstrap-sass', '~> 3.3.5'
gem 'coffee-rails', '~> 4.1.0'
gem 'compass-rails', '~> 2.0.5'
gem 'font-awesome-rails'
gem 'jbuilder', '~> 2.0'
gem 'jquery-rails'
gem 'rails-i18n'
gem 'sass-rails'
gem 'sdoc', '~> 0.4.0', group: :doc
gem 'slim-rails'
gem 'turbolinks'
gem 'uglifier', '>= 1.3.0'

group :development, :test do
gem 'awesome_print'
gem 'bullet'
gem 'byebug'
gem 'database_cleaner'
gem 'factory_girl_rails'
gem 'guard-rspec'
gem 'pry-rails'
gem 'pry-byebug'
gem 'rspec-rails'
gem 'rubocop'
gem 'shoulda-matchers'
gem 'spring'
gem 'spring-commands-rspec'
end

group :development do
gem 'annotate'
gem 'better_errors'
gem 'quiet_assets'
gem 'web-console', '~> 2.0'
gem 'rack-env_ribbon'
end


個人的に、アプリケーションのトップレベルのgemを最上部に書き、それ以降はアルファベット順で整列するようにしている。


Gemの導入

以下、実際にGemを導入していきます。


rspec-rails

rails3以降で動作する。

bundle installを走らせた後、

$ bundle exec rails g rspec:install

これでrspecの設定ファイルが出力される。

rspecでテスト書く前に読んでおきたい記事

http://qiita.com/muran001/items/276b3375e3e37de368e6


shoulda-matchers

モデルでバリデーションやアソシエーションのテストを簡単にかける便利なマッチャー集。

bundle installを実行し、spec/rails_helper.rbを下記のように編集すれば導入できる。


spec/rails_helper.rb

Shoulda::Matchers.configure do |config|

config.integrate do |with|
with.test_framework :rspec
with.library :rails
with.library :action_controller
with.library :active_model
with.library :active_record
end
end

https://github.com/thoughtbot/shoulda-matchers


spring

設定ファイル等をキャッシュしてコマンドを高速化するgem

一応Gemfileに追加してはいますが、

$ gem install spring

でPCにインストールしておくと良いです。

サーバーを起動するとき等

spring rails s

とすると2回目から設定ファイルやライブラリなどをキャッシュしてくれるので高速化される。

config配下のファイルを編集したときは必ずspring stopして一度止める必要が有る。

https://github.com/rails/spring


spring-commands-rspec

springコマンドをrspecでも使えるようにしたgem

$ gem install spring-commands-rspec

https://github.com/jonleighton/spring-commands-rspec


guard-rspec

ファイルの変更を検知して自動でテストを実行してくれる。

まずはrailsアプリにguardを導入する。

$ guard init rspec

$ guard

で実行できる。


FactoryGirl

FactoryGirlでデータを作成するとき

FactoryGirl.create(:user)

という記述を

create(:user)

といった具合にprefixを省略できる設定


spec/rails_helper.rb


RSpec.configure do |config|
# 省略
config.include FactoryGirl::Syntax::Methods
end

https://github.com/thoughtbot/factory_girl_rails


database_cleaner

spec/rails_helper.rbを下記のように編集する。


spec/rails_helper.rb


RSpec.configure do |config|
# 省略
config.before(:suite) do
DatabaseCleaner.strategy = :transaction
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
end

https://github.com/DatabaseCleaner/database_cleaner


rubocop

https://github.com/bbatsov/rubocop

rubocopは美しいコードを保ちつづけるためのコーディングルールに則しているかをチェックするgem

rake taskにrubocopを登録する。

https://github.com/bbatsov/rubocop#rake-integration

Rakefileに下記を追記する。


Rakefile


require 'rubocop/rake_task'

RuboCop::RakeTask.new


rake -T でrake taskに追加されているかどうか確認できる

$ rake rubocop                                  # Run RuboCop

$ rake rubocop:auto_correct # Auto-correct RuboCop offenses

rubocopを走らせたいとき rake rubocop


pry


pry-rails

https://github.com/rweng/pry-rails

rails consoleコマンドで見られるインターフェースをpryに変更する


pry-byebug

https://github.com/deivid-rodriguez/pry-byebug

コントローラ等で現在のインスタンスの状態等、処理を止めて確認したいとき

binding.pry

と記述しておくとそこで処理をとめてrails consoleを立ち上げてくれる。

めちゃくちゃ便利。


awesome_print

https://github.com/michaeldv/awesome_print

console上でインスタンスの中身やハッシュの中身を確認したいときいい感じに整形して表示してくれる。

.pryrcファイルをアプリケーション直下に作成する。

$ touch .pryrc

.pryrcを編集する。


.pryrc


require "awesome_print"
AwesomePrint.pry!


rails cコンソール上でいい感じにしてくれる。

スクリーンショット 2015-09-19 17.58.57.png


annotate

https://github.com/ctran/annotate_models

モデルやfixtureデータにテーブル情報を書き出してくれるgem

わざわざ他のスキーマを開いてテーブル情報を確認する作業をしなくてもよくなるので導入している

bundle exec rails g annotate:install

これでrake db:migrateを走らせたときに自動でテーブル情報を書き出してくれる

こんな感じのschemaだと、

スクリーンショット 2015-09-19 22.32.26.png

こういう風にかき出してくれる

スクリーンショット 2015-09-19 22.32.08.png

ちなみに、RubyMineを使っている場合は必要無さそうです。(使ってみたい)


bullet

https://github.com/flyerhzm/bullet

N+1 query 問題を検出しalertを出してくれるgem

queryの最適化はアプリのパフォーマンスに関わるので、導入している。

config/environments/development.rbを下記のように修正


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

http://ruby-rails.hatenadiary.com/entry/20141109/1415522242


quiet_assets

https://github.com/evrone/quiet_assets

サーバーを起動したときのログにassets周りのログが流れないようにする。

ページをロードするたびにたくさんのassetsをロードしたログが流れてしまい、その他の重要なログを見逃してしまうのを防ぐために導入している。

bundle installのみで導入できる。

http://ruby-rails.hatenadiary.com/entry/20141029/1414584929


better-errors

https://github.com/charliesome/better_errors

railsのエラー画面をリッチにしてくれるgem

これもbundle installのみで導入できる。

https://github.com/charliesome/better_errors


bootstrap-sass

bundle installをしたあと、下記の手順で導入する。

app/assets/stylesheets/application.css.scssに下記を追記する。


app/assets/stylesheets/application.css.scss

@import "bootstrap-sprockets";

@import "bootstrap";

app/assets/javascripts/application.js.coffeeに追記する。


app/assets/javascripts/application.js.coffee

#= require jquery

#= require bootstrap-sprockets


font-awesome-rails

app/assets/stylesheets/application.css.scssに下記を追記する。


app/assets/stylesheets/application.css.scss

@import "font-awesome";



rails-i18n

https://github.com/svenfuchs/rails-i18n

バリデーションエラーメッセージ等、railsアプリを多言語に対応するためにrails-i18nを導入する。

rails-i18nはbundle installで導入できる。

アプリケーションのデフォルトの言語を日本語にするには下記のように修正するとよい。 


config/application.rb

  class Application < Rails::Application

# 省略
config.i18n.default_locale = :ja
end



タイムゾーンの設定

日本時間に設定したい場合の設定


config/application.rb

  class Application < Rails::Application

# 省略
config.time_zone = 'Tokyo'
end