Railsプロジェクト新規作成後の各種設定まとめ

railsで新しくプロジェクトを作るときに面倒な設定を毎回調べ調べやるのが面倒だなあと思い、だいたいどんなプロジェクトでも共通でやりそうな設定をまとめてみました。

--
**更新情報（2016/7/22)**　
こちらの記事は元々Rails4.2.6用に書きましたが、githubで公開している下記のプロジェクトをRails5.0に移行しました。

- Rails5の目玉機能の一つのActionCableはすべてのプロジェクトに必要な機能ではないように思えたので下記PJでは追加していません。
- Rails5ではdevelopmentのデフォルトサーバーはデPumaになっていますが、こちらの変更も対応していません。PumaにしたければGemfileに`gem 'puma'`と追加してインストールすれば使えると思います。

--

githubに初期設定完了済みプロジェクトを公開しています。
こちらの記事のgemと設定内容でそのまま使えそうならご自由にお使いください。
https://github.com/hagure-inc/startup-core-auth

DeviseとActiveAdminを含まないバージョンもあります。（こちらはRails4.2のままです）
https://github.com/hagure-inc/startup-core

# 追加したgem
```ruby:
# Administration Framework
gem 'activeadmin', github: 'activeadmin'

# Authorization
gem 'devise'

# Configuration
gem 'settingslogic'

# Use slim for templates
gem 'slim-rails'

# Decorator
gem 'active_decorator'

# User-friendly URL
gem 'friendly_id'

# I18n
gem 'i18n_generators'

# Paginate
gem 'kaminari'

# SEO
gem 'meta-tags', :require => 'meta_tags'
gem 'sitemap_generator'

# Load jquery from CDN
gem 'jquery-rails-cdn'

# Test tools
group :development, :test do
  gem 'rspec-rails', '~> 3.4'
  gem 'factory_girl_rails'
end
```

# .gitignoreの変更
RubyMineを使っているので、IDEの設定関連のファイルを含めないように.gitignoreを書き換えました。
JetBrain製のIDE用の.gitignoreはこちらにありました。
https://github.com/github/gitignore/blob/master/Global/JetBrains.gitignore


# DBの設定：Postgresql
DBはHerokuと同じPostgresqlに変更しました。
### 1. DBのユーザー名とパスワードを環境変数に設定
developmentのusernameは環境変数で設定しています。

- ENV['RAILS_DATABASE_USERNAME']に自身のDBのユーザー名を設定する必要があります。
- passwordは設定していませんので必要な場合は追加します。  

環境変数の設定の仕方はこちらをご参考に：
http://qiita.com/tomomomo1217/items/77c9b64266daf6315abe

### 2. DBを作成
コンソールで以下を実行

```zsh:
$ rake db:migrate	# db/schema.rbを作成
$ rake db:setup		# developmentとtestのデータベースを作成
```

# scaffoldの変更
scaffoldの際に生成されるファイルを以下のように変更しました。

```ruby:config/application.rb
config.generators do |g|
  g.template_engine :slim		# テンプレートエンジンをslimに変更
  g.assets false				# css,jsを生成しない
  g.helper false				# ヘルパーファイルを生成しない
  g.test_framework :rspec,		# テストフレームワークをrspecに変更
        fixtures: true,
        view_specs: false,
        request_specs: false,
        routing_specs: false,
        helper_specs: false
  g.fixture_replacement :factory_girl, dir: 'spec/factories'		# フィクスチャーをfactory_girlに変更
end
```

# localeの設定
日本語のロケールファイルを作るにはi18n_generatorsのgemを使うのが便利です。
https://github.com/amatsuda/i18n_generators

### 1.日本語のロケールファイルを作る
コンソールで以下のコマンドを実行

```zsh:
$ rails g i18n_locale ja
```
これでconfig/locales/ja.ymlができました。

### 2.config/application.rbを設定
config/application.rbに以下の２行を追加
config/locales以下の*.ymlファイルが読み込まれるようになります。

```ruby:config/application.rb
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]
config.i18n.default_locale = :ja
```

※i18n_generatorsには存在するすべてのモデルの属性の日本語（多言語）ファイルを作る機能もありますが、ここではまだ何もモデルが存在しないので後で適宜やります

# Settingslogicの設定
SettingslogicはRailsの定数管理gemです。
https://github.com/binarylogic/settingslogic

以下の２ファイルをSettingslogicのgitの説明のとおりに作成しました。

- model/settings.rb
- config/application.yml

# jquery-cdnの設定
jqueryをgoogle等のCDNから読み込むことにより、ユーザーキャッシュが使える可能性が高まり読み込み速度の向上に寄与します。
jquery-cdn-railsのgemを使うことにより、簡単に最新バージョンのjqueryをCDNから読むことができます。
https://github.com/kenn/jquery-rails-cdn

以下のコードをそれぞれ指定ファイルに追加します。
※ここではjquery2で対応しますが、1.x系も利用できます

```config/initializers/assets.rb
# Rails5の場合この設定は不要
# 代わりに必要な内容は次のasset pipelineの設定のところに書きました
Rails.application.config.assets.precompile += ['jquery2.js']
```
```config/initializers/jquery_cdn.rb
# このファイルを新規作成
Jquery::Rails::Cdn.major_version = 2
```

```layouts/application.html.slim
= jquery_include_tag :google, force: true # javascript_include_tagより前に追加
```

application.jsから以下の行を削除します。

```assets/javascripts/application.js
//= require jquery
```

# asset pipelineの設定
## Rails5への移行
Rails5ではasset pipelineの設定が大きく変わりましたのでRails4で設定していたinitializers/assets.rb、development.rb、production.rbの内容は`config.assets.css_compressor`以外は不要になりました。

assetの設定はapp/assets/config/manifest.jsに配置されます。

```app/assets/config/manifest.js
//= link_tree ../images
//= link_directory ../javascripts .js
//= link_directory ../stylesheets .css
//= link jquery2.js
```
最後のjquery2.jsはjquery-cdnでjquery2を利用するための設定です。それ以外はデフォルトの記述のままです。

参考：http://eileencodes.com/posts/the-sprockets-4-manifest/

## Rails4の場合
ミスって泣きがちなasset pipelineの設定…。とりあえず初期段階としては最低限の変更のみ行いました。

各ファイルそれぞれ以下のコードを追加。

```config/initializers/assets.rb
# Enable the asset pipeline
Rails.application.config.assets.enabled = true
```

```config/environments/development.rb
# Enable the asset pipeline
config.assets.enabled = true

# Do not compress assets
config.assets.compress = false

# Expands the lines which load the assets
config.assets.debug = true
```

```config/environments/production.rb
# Enable the asset pipeline
config.assets.enabled = true

# Compress JavaScripts and CSS.
config.assets.css_compressor = :yui
config.assets.compress = true
```

config.assetの各項目についての詳しい説明はこちらの記事を参照してください。
[Rails4 asset pipeline関連設定まとめ（Heroku対応込）](http://qiita.com/tomomomo1217/items/fa8dfa094cc4c0e4e350)

# SEO対策用の設定
説明が長くなったので別記事に分けました。
[SEO対策！meta-tagsのマイベスト設定](http://qiita.com/tomomomo1217/items/912afba852dc524d748e)
sitemap-generatorはgemだけ入れて設定はしてません。

以上です。