[WIP]Rails 新規アプリ作成時初期設定


初期設定の流れをいつも忘れてしまうからメモ。

諸々個人的なものなので、参考にする人は各自調べた上で導入してください。
各環境はインストール・設定済みの想定なので、これも分からないことは各自調べるなりコメントで質問してくださればと思います。

## 環境

Ruby 2.1.3
Rails 4.1.6
PostgreSQL 9.3.5
Heroku


## 下準備

`rails new`時と`gem install`時のオプション指定が毎度面倒くさいので、
それぞれ設定ファイルにデフォルトオプションを記述しておく。（設定ファイルが無い場合は自分で作成）

```bash:~/.railsrc
-d postgresql -T --skip-bundle
```

- `-d postgresql` DBをPostgreSQLにする。MySQLの場合は`-d mysql`にする。  
オプション無しの場合はSQLite3となる。
- `-T` test-unitをインストールしない
- `--skip-bundle` bundle installを行わない

`~/.railsrc`を使わずに`rails new`したくなったら、`--no-rc`オプションを付ければOK


```bash:~/.gemrc
gem: --no-document
```

- `--no-document` ドキュメントを生成しない


## アプリ作成

```bash:
$ rails new <app name>
```

`<app name>`は正確にはアプリ名というよりパスなので、
例えば、カレントディレクトリで新規作成したい場合は`rails new .`でOK


## Gemfile

#### Gemfile修正

バージョンはRuby,Rails以外省略

```ruby:Gemfile
source 'https://rubygems.org'

ruby '2.1.3'

gem 'rails', '4.1.6'
gem 'pg'
gem 'sass-rails'
gem 'uglifier'
gem 'coffee-rails'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder'
gem 'sdoc', group: :doc
gem 'bcrypt'

group :development do
  gem 'spring'
  gem 'better_errors'         # エラー画面がいい感じになる
  gem 'binding_of_caller'     # better_errorsでREPLが使えるようになる
  gem 'rack-mini-profiler'    # Web画面左上にDBアクセスやレンダリングにかかった時間を表示する

  # Rails4.2からは、better_errors, binding_of_callerはやめて、
  # web-consoleに乗り換えるかも
end

group :development, :test do
  gem 'rspec-rails'           # テストフレームワーク。近々test-unitに乗り換えるかも
  gem 'factory_girl_rails'    # テストデータ作成
  gem 'faker'                 # ダミーデータ生成
  
  gem 'hirb'                  # arrayをテーブル形式でコンソールに出力
  gem 'hirb-unicode'          # hirbでunicodeを使う

  gem 'pry-rails'             # REPLをirbからpryにする
  gem 'pry-doc'               # Ruby自身のCソースコードを表示する
  gem 'pry-byebug'            # デバッグツール
  gem 'pry-stack_explorer'    # スタックトレース表示

  gem 'awesome_print'         # REPLでオブジェクトをキレイなフォーマットで表示する
  # Rails4.2からはActiveRecord::Base#pretty_printにより必要なくなるかも

  # gem 'did_you_mean'        # スペルミスエラー時、正しいスペルをサジェストしてくれる。
                              # binding_of_callerと同時に使えないっぽいので、必要に応じて入れる
end

group :test do
  gem 'capybara'              # SeleniumのRuby実装
  gem 'selenium-webdriver'    # ブラウザ操作自動化ツール
  gem 'database_cleaner'      # テストデータ消去
end

group :production do
  gem 'rails_12factor'        # HerokuでRailsアプリを動かす
end
```

#### Gemインストール

```bash:
$ bundle --without production
```

- `bundle install`は`install`を省略していいので、`bundle`だけでOK
- `--without production` 本番(production)環境のGemはインストールしない


## DB

RDBMSはPostgreSQLの想定

#### ユーザー(Role)を作成

PostgreSQLにログインして、以下のコマンドでユーザー（ポスグレ的にはRoleといった方が正しい？）を作成する

```sql:
$ create role <ユーザー(Role)名> with createdb login password '<パスワード>'
```

DBの設定ファイル（config/database.yml）を修正する。


```ruby:config/database.yml
default: &default
  adapter: postgresql
  encoding: unicode
  pool: 5
  
development:
  <<: *default
  database: <開発環境DB名>
  username: <開発環境ユーザー(role)名>
  password: <パスワード>

test:
  <<: *default
  database: <テスト環境DB名>

production:
  <<: *default
  database: <本番環境DB名>
  username: <本番環境ユーザー(role)名>
  password: <%= ENV['SAMPLE_DATABASE_PASSWORD'] %>
```

個人的に、直接ファイルに書き込みたくない情報を環境変数からとるか、secrets.yml(Rails4.1から導入)からとるか悩みどころです。Rails4.2から導入される`config_for`によって、さらに再考が必要かも。
細かいことは別記事にまとめる予定

#### データベース作成

```bash:
$ rake db:create:all
```


## Rspec

以下のコマンドでRspec初期化

```bash:
$ rails generate rspec:install
```

昨今の流れ的にtest-unitに移るかも。両方とも使ってみて考えます


## Git

#### Git初期化

```bash:
$ cd <アプリルート>
$ git init
```
- git-flowを使う場合は`git flow init`で初期化。`git init`をした後にやっても大丈夫

#### .gitignore修正

テンプレート作成は[gitignore.io](https://www.gitignore.io)を利用（Githubの.gitignoreテンプレートをまとめて検索・出力してくれるサービス）
以下、https://www.gitignore.io/docs に書かれた設定をした上でのコマンド

```bash:
$ gi rails >> .gitignore
```

これでテンプレートを作成した上で、適宜追加編集

また、全環境共通の.gitignoreも作成しておくと便利
例えばMac, Emacsでの開発ならば以下の通り

```bash:
$ gi osx,emacs >> ~/.gitignore
$ git config --global core.excludesfile ~/.gitignore
```


#### Initial commit

```bash:
$ git add .
$ git commit -m 'initial commit'
```


## 参考
- [Ruby on Rails チュートリアル](http://railstutorial.jp)
- Github
	- [Ginza.rb 第8回 Gemfileみせっこ！みんなどんなの使ってます？](https://github.com/ginzarb/meetups/issues/6)
- Qiita 
	- [gem install にかかる時間を短縮する](http://qiita.com/ongaeshi/items/5cb2ca411d28fef2b08c)
	- [Railsのデバッグ用途のGem12個の概要](http://qiita.com/succi0303/items/cdd654b3bbf19679d208)
- Heroku
	- [Getting Started with Ruby on Heroku](https://devcenter.heroku.com/articles/getting-started-with-ruby#introduction)
- DigitalOcean
	- [How To Setup Ruby on Rails with Postgres](https://www.digitalocean.com/community/tutorials/how-to-setup-ruby-on-rails-with-postgres)
- [gitignore.io](https://www.gitignore.io)
- ブログ記事
	- willnet.in [rails new のデフォルトオプションを設定しよう ](http://www.willnet.in/130)
	- 惰眠と論理と指揮棒と [Railsでよく使う便利なGem](http://logictkt.hatenablog.com/entry/2014/10/09/210737)

各公式サイトは省略させていただきます