Help us understand the problem. What is going on with this article?

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