Scaffold作成時にJSON関連のコードを生成しないようにする


## 問題

Railsでscaffoldを作成すると、デフォルトで`app/views/user_infos/index.json.jbuilder`のようなJSON API用のコードが生成される。

JSONのAPIを必要としないRailsアプリケーションであれば、こういったコードは不要。

むしろ、悪意のあるユーザーによってAPI経由で機密情報を取得される恐れがある。
（開発者がAPIの出力内容を気をつけて確認していない場合）

参考: [Rails Scaffold's Dangerous Defaults](http://rubyjunky.com/rails-scaffold-dangerous-defaults.html)

### 対象バージョン

- Rails 4.2.0

## 解決策その1

jbuilder gemをGemfileから削除する。（jbuilderを全く必要としない場合）

参考: [Skip JSON format in rails generate scaffold](http://stackoverflow.com/a/24104811/1058763)

```ruby
# gem 'jbuilder'
````

scaffoldを作成しても、`xxx.json.jbuilder`は生成されない。

```
bundle install
rails g scaffold blog title content:text
      invoke  active_record
      create    db/migrate/20150220000736_create_blogs.rb
      create    app/models/blog.rb
      invoke    test_unit
      create      test/models/blog_test.rb
      create      test/fixtures/blogs.yml
      invoke  resource_route
       route    resources :blogs
      invoke  scaffold_controller
      create    app/controllers/blogs_controller.rb
      invoke    erb
      create      app/views/blogs
      create      app/views/blogs/index.html.erb
      create      app/views/blogs/edit.html.erb
      create      app/views/blogs/show.html.erb
      create      app/views/blogs/new.html.erb
      create      app/views/blogs/_form.html.erb
      invoke    test_unit
      create      test/controllers/blogs_controller_test.rb
      invoke    helper
      create      app/helpers/blogs_helper.rb
      invoke      test_unit
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/blogs.coffee
      invoke    scss
      create      app/assets/stylesheets/blogs.scss
      invoke  scss
      create    app/assets/stylesheets/scaffolds.scss
```

Controllerにも`format.json { ... }`のようなコードが生成されない。

```ruby
# Controller
class BlogsController < ApplicationController
  before_action :set_blog, only: [:show, :edit, :update, :destroy]
 
  # GET /blogs
  def index
    @blogs = Blog.all
  end
 
  # GET /blogs/1
  def show
  end
 
  # GET /blogs/new
  def new
    @blog = Blog.new
  end
 
  # GET /blogs/1/edit
  def edit
  end
 
  # POST /blogs
  def create
    @blog = Blog.new(blog_params)
 
    if @blog.save
      redirect_to @blog, notice: 'Blog was successfully created.'
    else
      render :new
    end
  end
 
  # PATCH/PUT /blogs/1
  def update
    if @blog.update(blog_params)
      redirect_to @blog, notice: 'Blog was successfully updated.'
    else
      render :edit
    end
  end
 
  # DELETE /blogs/1
  def destroy
    @blog.destroy
    redirect_to blogs_url, notice: 'Blog was successfully destroyed.'
  end
 
  private
    # Use callbacks to share common setup or constraints between actions.
    def set_blog
      @blog = Blog.find(params[:id])
    end
 
    # Only allow a trusted parameter "white list" through.
    def blog_params
      params.require(:blog).permit(:title, :content)
    end
end
```

### JSON API関連のコードが生成されなくなる理由

JSON API関連のコードが生成されるのは、jbuilder gemがtemplateをオーバーライドしているため。
よってjbuilder gemを削除すると、JSON API関連のコードも生成されなくなる。

参考: https://github.com/rails/jbuilder/tree/master/lib/generators/rails/templates

## 解決策その2

`application.rb`でgeneratorの設定を変更する。

```ruby
config.generators do |g|
  # ...
  g.jbuilder false
end
```

ただし、この場合は`xxx.json.jbuilder`が生成されなくなるだけなので、`blogs/1.json`のようなURLにアクセスすると Missing Template エラーが発生する。

このエラーも防ぎたい場合はcontrollerから`format.json { ... }`のような行を削除する。