draperとは
draperはdecoratorを導入するためのgemとなります。
decoratorの役割やdraperの使い方などはここでは解説しないのでdraper知らないよって人は↓の記事などを見てみるといいかもです。
rails g controllerでdecoratorファイルが生成される
draperを導入した後に新しくコントローラーを追加するとdecoratorのファイルも自動で生成されると思います。
$ rails g controller tasks
create app/controllers/tasks_controller.rb
invoke erb
create app/views/tasks
invoke rspec
create spec/requests/tasks_spec.rb
invoke helper
create app/helpers/tasks_helper.rb
invoke rspec
invoke decorator
create app/decorators/task_decorator.rb
invoke rspec
create spec/decorators/task_decorator_spec.rb
ただ、このコントローラーのdecoratorは使う予定がないなどdecoratorを自動で生成したくない場合もあると思います。
そういった場合はgeneratorsの設定を変更することで自動生成させなくすることができます。
decoratorファイルを生成しない方法
config/application.rb
にg.decorator false
を追記します。
config.generators do |g|
g.test_framework :rspec,
fixtures: false,
view_specs: false,
helper_specs: false,
routing_specs: false
g.factory_bot false
g.decorator false # 追加
end
設定変更後にコントローラを生成してみると今度はdecoratorファイルが生成されなくなっていることが分かると思います。
$ rails g controller posts
create app/controllers/posts_controller.rb
invoke erb
create app/views/posts
invoke rspec
create spec/requests/posts_spec.rb
invoke helper
create app/helpers/posts_helper.rb
invoke rspec
設定変更後ももちろんrails g decorator
コマンドではdecoratorファイルを生成することができます。
$ rails g decorator post
create app/decorators/post_decorator.rb
invoke rspec
create spec/decorators/post_decorator_spec.rb
さらに詳しい説明
draperのソースコードを見てみるとControllerGenerator
にhook_for :decorator
という記載があります。
これはrails g controller
した時にDecoratorGenerator
を呼び出すということを意味するので
generatorsの設定にg.decorator false
を設定することでdecoratorファイルの生成を止めることができるのでした。
require "rails/generators"
require "rails/generators/rails/controller/controller_generator"
require "rails/generators/rails/scaffold_controller/scaffold_controller_generator"
module Rails
module Generators
class ControllerGenerator
hook_for :decorator, type: :boolean, default: true do |generator|
invoke generator, [name.singularize]
end
end
class ScaffoldControllerGenerator
hook_for :decorator, type: :boolean, default: true
end
end
end
draper以外でももし他のgemを導入した時に自動で生成されるファイルがあってそれを無効にしたいときは
generatorsの設定にそのgemでフックしている名前を書くことで設定を変更できると思います。
ジェネレーターについてもっと詳しく知りたいって人はRailsガイドをみるといいかもです。